1978年就有人泼冷水:用自然语言编程,为什么是个伪命题?
早在1978年,图灵奖得主迪杰斯特拉就写过一篇短文,批评“用自然语言编程”的想法。四十多年后,大模型让自然语言写代码成了热门话题,这篇老文章反而更值得重读:它讲的不是技术能不能做到,而是我们到底在要求计算机做什么。
最近 Hacker News 上有一篇老文章被翻了出来,讨论量不小。作者是 Edsger W. Dijkstra——对,就是那个提出“goto 语句有害”、拿过图灵奖、给计算机科学留下无数金句的荷兰人。文章写于 1978 年,标题直译过来是《“自然语言编程”的愚蠢》。
乍一看像是老古董的偏见,但读下去会发现,他批评的根本不是“技术不够先进”,而是一个更底层的问题:我们到底在向计算机要求什么。
他到底在反对什么
迪杰斯特拉的核心观点可以概括成一句话:自然语言是为“人与人之间的模糊交流”设计的,而编程要求的是“无歧义的精确表达”,这两件事在本质上冲突。
他的论证很朴素。人类说话依赖大量隐含上下文、默契和事后补救——“你懂的”“差不多就行”“到时候再说”。日常交流中,说错一句可以立刻澄清,听的人会自动脑补。但程序不行。程序一旦跑起来,没有任何“你懂的”的空间,一个歧义就是一次崩溃或者一个安全漏洞。
所以在他看来,想让计算机听懂人话,问题不在于计算机笨,而在于人话本身就不适合承载精确指令。把模糊的语言硬塞进精确的机器,只会把歧义从“说的时候”推迟到“跑的时候”,而后者代价高得多。
为什么今天读起来更扎心
1978 年说这话,很多人觉得是学究气。但放到今天,大模型让“用自然语言写代码”真的成了现实,这篇文章反而更像一盆及时的冷水。
现在流行的叙事是:以后不用学编程了,跟 AI 说人话就行。这话对了一半——说人话确实能生成代码,而且生成得越来越像样。但迪杰斯特拉提醒我们注意另一件事:生成代码和定义正确性,是两回事。
你可以用一句话让模型写出一个登录功能,但“这个登录功能在什么情况下算对”,仍然需要有人用精确的方式想清楚。密码错了怎么提示、连续失败几次锁定、会话过期怎么处理——这些不是语言问题,是需求本身必须被精确化的部分。自然语言可以帮你表达,但没法替你消解歧义。
登录解锁全文
以下内容需登录后阅读。注册/登录完全免费,无需付费。
评论(0)
还没有评论
延伸阅读

公众号
百宝软件工作室