1978 年,Dijkstra 写过一篇著名短文:
《论"自然语言编程"的愚蠢》。
他说,自然语言最大的问题,不是不好懂,而是太容易让人以为自己说清楚了。
48 年后,大模型时代来了。
很多人忽然发现:
咦? 怎么 Dijkstra 好像又对了?
AI 写代码时,需求总漏。 上下文一长就跑偏。 "差不多"的描述最后总会变成"差很多"。
于是整个行业又开始疯狂补各种:
spec、test、guardrail、harness、CI/CD、agent protocol……
看起来仿佛绕了一大圈,又重新回到了"形式化"。
但我越来越觉得:
很多人还是没真正看懂大趋势。
因为他们默认:
未来仍然需要人类持续、细粒度地主导整个形式化过程。
而这恰恰可能只是过渡阶段。
真正的变化其实是:
形式化不会消失。 但承担形式化的人,正在从人类变成机器。
过去:
人必须自己把一切写得极其严格。
因为旧计算机太"脆"。
一次执行。 没有反思。 没有回路。 没有动态反馈。 自然语言里的歧义会直接变成灾难。
所以那个时代:
形式化是人类不得不背负的痛苦。
但今天的大模型系统已经不一样了。
它不是:
"自然语言 → 编译器"。
而是:
自然语言 → 推理 → 试错 → 环境反馈 → 自我修正 → 测试 → 再迭代。
这本质上已经不是传统程序执行。
而是一个动态闭环系统。
所以:
歧义对于"一次性执行"是致命的。
但对于: 有反馈、有回路、有迭代、有最终验收的系统,
歧义未必是问题。
人类自己其实一直就是这么工作的。
小孩学语言不是靠 formal grammar。 创业公司也不是靠 type system 开会。 情侣聊天更不是 protocol buffer。
大家靠的是:
说错了以后,世界会给反馈。
所以 AI 时代真正的变化,可能不是:
"自然语言取代形式化"。
而是:
机器开始替人类承担越来越多形式化工作。
未来很多 today's best practice:
复杂 spec、繁琐流程、过度人工 review、甚至某些 ritual 化的软件工程,
都可能像当年的手工汇编一样,
逐渐退化成机器内部自动完成的"编译层细节"。
人类重新回到:
目标、方向、审美、价值判断。
而机器负责:
把模糊意图逐渐压缩成精确执行。
这也许才是 Dijkstra 当年真正没预见到的事。