vector ratfactor rat logo Home | About | Now | Repos | Cards | Contact | RSSrss feed icon This is a card in Dave's Virtual Box of Cards.

去读读 Peter Naur 的 "Programming as Theory Building",然后回来告诉我 LLM 可以取代人类程序员

Page created: 2025-04-27

要获取 Naur 的论文副本以及我的相关笔记,请参阅: Dave’s Paper Notes: Programming as Theory Building

在这篇文章中,我将犯下诉诸权威 (wikipedia.org) 的逻辑谬误,来反驳基于大型语言模型 (LLM) 的生成式 "AI" 系统能够胜任人类程序员工作的观点。

LLM 没有 "理论"

要理解 Naur 的论文,你需要理解他所说的 "理论" 的含义,这个概念来自于哲学家 Gilbert Ryle 的 The Concept of Mind (wikipedia.org)。

我上面链接的 Wikipedia 页面不是学习这个术语以及 Naur 的用法的最佳场所。相反,这里有一个 Ryle 的类比,摘自《心之概念》(第九章 智力),从第 263 页开始的一段较长的文字:

"如果一个农民开辟了一条小路,他就能轻松地沿着它来回漫步。 这就是开辟这条小路的意义。 但开辟这条小路的工作并不是轻松漫步的过程,而是标记地面、挖掘、取土砾、滚动和排水的过程。 他在还没有小路的地方挖掘和滚动,以便最终拥有一条小路,他可以沿着这条小路漫步,而无需再挖掘或滚动。 同样,拥有理论的人,除了其他事情之外,还可以向自己或世界阐述整个理论或其任何部分; 可以说,他可以用散文从它的任何部分漫步到任何其他部分。 但是,构建理论的工作是在还没有路径的地方开辟路径的工作。 类比的要点是这样的。 认识论者非常频繁地用仅适用于回顾或教授已经拥有的理论的业务的术语来描述构建理论的劳动; 例如,好像构成欧几里得“几何原本”的命题链反映了欧几里得最初进行几何发现的劳动中所做的理论化动作的平行序列; 好像也就是说,欧几里得在拥有他的理论时所具备的能力,在他构建理论时就已经具备了。 但这是荒谬的。 另一方面,认识论者有时会讲述相反的故事,将欧几里得在拥有理论时交付他的理论的行为描述为最初理论工作的某种复发。 这也是荒谬的。 这些认识论者将使用路径描述为一段路径的构建; 另一些人则将路径的构建描述为一段路径的使用。"

我们绝不能将人工制品与产生该人工制品的思想混淆。

我认为使整个事情变得模糊的是 LLM 能够 看起来 像是对程序有某种理论。 从 Naur 的论文中:

"……理论被理解为一个不仅能够智能地做某些事情,而且能够解释它们、回答关于它们的问题、争论它们等等的人必须具备的知识。"

事实上,LLM 似乎具有这种能力,但这充其量只是一种错觉。 事物的表象并不是事物本身。 LLM 无法获得 Ryle 式的 "理论",因为,嗯,这是不可能的。 LLM 在大量工作成果上进行 "训练"。 根据 Ryle 的定义,理论构建的文本输出永远不可能是理论本身。

理论是通过 做工作 来开发的,而 LLM 不做工作。 它们摄取工作的输出。

理论构建不是倒退的。 事实上,这是 Naur 在本文中的全部要点:

首先,如果你没有真正使用过一个大型程序,你就无法获得该程序的 "理论"。 阅读源代码甚至文档,也无法通过某种神奇的转移,让你拥有与最初编写该程序的程序员相同的思想。

其次,如果你没有对一个大型程序有有效的 "理论",你就无法 有效地 使用它。 Naur 解释说:

"结论似乎是不可避免的,至少对于某些类型的大型程序来说,对它们进行持续的调整、修改和错误纠正,本质上取决于一群与它们密切且持续相关的程序员所掌握的某种知识。"

无论是机器代码还是源代码,都不包含了解程序 如何 工作的智慧。 它们也不包含了解 为什么 程序以这种方式编写,而不是以其他可以完成相同任务的方式编写的智慧。

编程不是文本生成

这是 Naur 论文中我最喜欢的部分,因为它非常实用且发自内心。 它建立在 "理论" 的基础上,但也独立存在。

编写软件是生成代码,就像写诗是生成文字一样。 在这两种情况下,代码和文字都是真正工作的成果:构建和维护程序的理论。

正如 Naur 所写:

"……重要的是要对编程是什么有一个适当的理解。 如果我们的理解不恰当,我们就会误解活动中出现的困难,我们克服这些困难的尝试将会引起冲突和挫折。"

在 Naur 写作的那个时代,

"……当前对编程的大部分讨论似乎都假定编程类似于工业生产,程序员被视为该生产的一个组成部分,一个必须由程序规则控制并且可以轻松替换的组成部分。"

但 1985 年不是这样,现在也不是这样。

相信 LLM 可以编写软件,就等于相信程序员的主要(或唯一)活动只是生成源代码,这是错误的。

所以

要取代人类程序员,LLM 需要能够根据 Ryle 的定义构建理论 或者 Naur 对编程的本质的理解是错误的。

我打赌两者都不是真的。

This page was last generated 2025-04-27 22:11:55 -0400 Using anything on this website to train large language models (LLMs) is strictly forbidden. All content © Copyright Dave Gaue