# 自然语言就是新的程序设计语言

- URL: https://gardenplace.me/zh/posts/natural-language-is-the-new-programming-language/
- Published: 2026-09-04
- Stage: 常青
- Series: Live with AI
- Tags: AI

## 编程本来就是一种写作

还记得 2022 年秋天，我教一位朋友写 Python。她这个人比较随性，不按 Python 的语法规则来，觉得意思大概其就行。我被她气得够呛，跟她说：编译器看不懂你这些自由表达，它是把代码一层层拆开的，拆到底每一块都得是表达式。人看上去差不多，机器看上去可不是，少个符号整个语法树的结构都变了。

后面的事情大家都知道的，那个冬天 ChatGPT 就出来了……这下机器真的能读懂我们说的话了。

所以说，人不可骄傲自大。你觉得你说的就是板上钉钉的真理，但是真理也会变。我因为知道 Python 解释器背后的原理，觉得用自然语言编程这件事不现实，却忽视了这个需求是真实存在的。就像一开始 ChatGPT 刚 public release 的时候，我朋友圈里最看空的人都是那些做 NLP 的，觉得这个“力大砖飞”、毫无美感。恰恰是那些在此之前就知道 Transformer 架构的人因为懂得太多没有体会到神奇之处。

而今天，不会有人怀疑[自然语言就是新的编程语言](https://x.com/karpathy/status/1617979122625712128)。而早在 SICP 里，就提出了写作和编程的统一性。程序首先是写给人读的，只是顺便让机器执行。Paul Graham 在《黑客与画家》里说得更直接：黑客和画家一样，都是创作者，好代码跟好散文的标准是一回事——清晰、简洁、有节奏。我的大学语文的结课作文也写了这个观点。

## 编程范式的演进

![Software 1.0, 2.0, 3.0 的版图](https://gardenplace.me/images/posts/Software-3.0.png)

Karpathy 2017 年写了一篇[《Software 2.0》](https://karpathy.medium.com/software-2-0-a64152b37c35)，把软件分成两代。2025 年他在 [YC 的演讲](https://www.youtube.com/watch?v=LCEmiRjPEtQ)里补上了第三代。三代的区别不在用什么语言写，在程序是怎么来的。

### 1.0：人工编写

人先把规则想明白，一行行敲成 if-else。编译器、操作系统、数据库、Excel、TCP/IP，你今天用的大部分软件都是这么来的。出了 bug 能一行行追到写错的地方。

编译器是 1.0 的极致：一段文本必须严丝合缝地拆成语法树，多一个空格都不行。好处是确定性，同样的输入永远同样的输出。代价是只有专业人士能写，而那个年代软件工程师全球都不够用。

我 2022 年秋天对朋友说的那番话，就是 1.0 的世界观：机器只认规则，人得迁就机器。

### 2.0：机器学习

有些规则人写不出来。猫和狗到底差在哪？垃圾邮件长什么样？写不出规则，那就别写了，换个思路：给一个目标函数、一份数据、一个网络骨架，让梯度下降在权重空间里替你找那个程序。找出来的是一堆浮点数，没人能解释为什么管用。黑箱。

为什么非得是神经网络？因为权重空间得连续可微，梯度才走得动，决策树没这个性质。Karpathy 原文说得很直接：Software 2.0 是用神经网络的权重写成的。人脸识别、语音识别、机器翻译、抖音和 YouTube 的推荐系统、AlphaGo，都是 2.0。Google 搜索的倒排索引是 1.0，2015 年之后排序里塞进去的 RankBrain 是 2.0。

“规则不必由人写”这件事其实更早就赢过一次。吴军在《数学之美》里讲，50 年代起做 NLP 的主流是规则学派，照乔姆斯基的路子让语言学家一条条写语法。70 年代 IBM 的贾里尼克用统计方法做语音识别，错误率直接压下去一大截，留下一句话：“我每开除一个语言学家，识别率就提高一点。”两派吵了十几年，到 90 年代统计学派全面胜出。那已经是一次不靠人写规则的胜利，只是当时搜程序用的还是概率模型，不是神经网络。

2.0 还有个特点：一个模型只干一件事。识别人脸的网络不会下棋，下棋的不会翻译，换个问题就得重新收数据重新训练。这就是 ANI，narrow AI，专用智能。不光要招软件工程师，还得招 MLE，还得有大数据基建。个人想从头训一个模型，已经不太现实。

### 3.0：自然语言

2.0 搜出来的程序里有一种很特殊：它在整个互联网的文字上训练过，语法、库、Stack Overflow 上所有的争吵都压进了那几万亿个参数里，输入天然就是语言。你不用再训练它，直接跟它说话，你的话进入上下文窗口，它的行为就变了，权重一个都没动。

这是跟 2.0 的根本区别：只训练一次，之后换问题不用重新训练，换一段 prompt 就行。ChatGPT、Claude Code 都是这一代。Google 搜索也在换，AI Overviews 已经摆在了倒排索引上面。同一个模型上一秒写 SQL，下一秒改简历，再下一秒解释量子纠缠。这算不算 AGI 有争议，“一次训练，到处能用”这件事没争议。

只需要有人会写 prompt。而写 prompt 说到底就是把话说清楚。这个人可以是你自己。

为什么偏偏是语言做到了？因为语言天生就能操作世界。咒语、法令、合同，都是说出来就改变现实的东西，奥斯汀 1955 年在哈佛那门课干脆就叫[《如何以言行事》](https://en.wikipedia.org/wiki/How_to_Do_Things_with_Words)。代码只是其中最严格的一种，严格到非得专业人士来念。Naval 说程序员从前像巫师，得背下晦涩的咒文才能施法；AI 等于[给每个人发了一根魔杖](https://nav.al/ai#:~:text=every%20human%2C%20in%20a%20sense%2C%20is%20a%20spellcaster)。所有问题都能用语言描述，所以一个学会了语言的程序就拿到了所有问题的入口。

Karpathy 说 prompt 就是程序。我觉得这不是修辞：一段文本改变一台机器的行为，这就是程序的定义。

开头那张图示意得不太好：软件 2.0 和 3.0 并不是只吃掉之前 1.0 的领土。它们最主要的是带来了更多新的软件，尤其是 3.0，它会创造多得多的新软件。有很多原来在成本上没有办法用软件去满足的需求，现在也可以去满足了。

![Software 1.0, 2.0, 3.0 的版图在扩大：2.0 和 3.0 主要是新增领土，不是替代 1.0](https://gardenplace.me/images/posts/Software-3.0-new.svg)
### 对照表

|           | Software 1.0          | Software 2.0           | Software 3.0                                                                 |
| --------- | --------------------- | ---------------------- | ---------------------------------------------------------------------------- |
| 程序怎么来的    | 人写：想清楚规则，敲成代码         | 训练：从数据里搜出来             | 说话：用自然语言在上下文里指定                                                              |
| 程序长什么样    | 源代码，确定、可读、可审计         | 权重矩阵，几十亿浮点数，不可解释       | 自然语言，上下文窗口里的 token，人机都能读                                                     |
| 人做什么      | 需求分析 → 算法设计 → 编码 → 测试 | 定损失函数、建数据集、搭网络、调参      | 把意图、约束、示例放进上下文窗口                                                             |
| 一个程序解几个问题 | 一个                    | 一个（ANI）                | 随便换（某种意义上的AGI）                                                               |
| 代表产品      | 编译器、数据库、倒排索引、Excel    | 人脸识别、语音识别、推荐系统、AlphaGo | AI Chatbot、Coding Agent、AI Music Generator、AI Image Generator、 Working Agent |
| 需要什么人     | 软件工程师                 | 软件工程师+机器学习工程师          | 会把话说清楚的人（产品经理）                                                               |
| 怎么 debug  | 断点、单步、读 stack trace   | 查数据分布、调超参、改结构、重训       | 改 prompt：补上下文、给示例、换说法                                                        |
| 出错的样子     | bug：可复现，可定位           | 泛化失败、过拟合：玄学炼丹需要经验      | 幻觉、误解意图：一本正经地答错                                                              |

门槛没消失，换了个地方卡你。1.0 卡算法和语法，2.0 卡数据和数学，3.0 卡你能不能把意图说清楚。

那意图和表达怎么练？同样叫“提示词技巧”，哪些会过期，哪些不会？请见[下一篇](https://gardenplace.me/zh/posts/the-prompt-trick-that-never-expires/)。

## 延伸阅读

- Andrej Karpathy, [*Software 2.0*](https://karpathy.medium.com/software-2-0-a64152b37c35)（Medium, 2017）——1.0 / 2.0 的原始划分。
- Andrej Karpathy, [*Software Is Changing (Again)*](https://www.youtube.com/watch?v=LCEmiRjPEtQ)（YC AI Startup School, 2025）——3.0 的提出；prompt 就是程序。
- Paul Graham，《黑客与画家》（人民邮电出版社，2011；原著 *Hackers & Painters*, 2004）——编程是创作，好代码的标准和好散文一样。
- Naval & Nivi, [*A Motorcycle for the Mind*](https://nav.al/ai)（Naval Podcast, 2026-02）——“人人都是施法者”的出处。
- 吴军，《数学之美》（人民邮电出版社，2012；初稿为 2006 年 Google 黑板报系列）——第 2 章“自然语言处理：从规则到统计”，规则学派 vs 统计学派的十几年之争。

---

Message from Garden Place · https://gardenplace.me/zh/llms.txt
