On the foolishness of "natural language programming(论“自然语言编程”的荒谬性)
原文链接
https://www.cs.utexas.edu/~EWD/transcriptions/EWD06xx/EWD667.html
论“自然语言编程”的荒谬性
On the Foolishness of “Natural Language Programming”
作者:埃兹赫尔·W·迪杰斯特拉(Edsger W. Dijkstra)
自自动计算技术诞生之初,就一直有人认为,编程必须像使用任何形式化符号系统一样,要求使用者小心谨慎、准确无误,这是一种缺陷。他们责怪计算机这个机械奴仆过于严格地服从指令,即使只需稍加思考,就能发现这些指令中存在明显的错误,它仍然会照章执行。
正如 A. E. 豪斯曼(A. E. Housman)所说:
“然而,片刻也是漫长的,而思考则是痛苦的过程。”
这些人热切地期盼着更加通情达理的机器出现,希望它们能够拒绝执行那些仅仅因为微不足道的笔误而产生的荒谬指令。
机器码几乎不具备任何形式的冗余,因此很快就被人们认识到,它是一种在人与机器之间既没有必要、又充满风险的交互接口。部分正是为了应对这一问题,人们开发出了所谓的“高级编程语言”。随着时间的推移,我们逐渐学会了如何在一定程度上加强对低级错误的防范。
一个显著的进步是,如今许多愚蠢的错误所导致的不再是错误的计算结果,而是一条错误提示。
(然而,即使是这种进步,也并未得到所有人的认可。有些人认为,那些无法置之不理的错误提示,比错误的计算结果更加令人烦恼。而且,在评价不同编程语言的优劣时,有些人似乎仍然把“编程的容易程度”等同于“不被察觉地犯错的容易程度”。)
然而,与某种编程语言相对应的抽象机器,仍然是一个忠实的奴仆。换句话说,它依旧是一台缺乏判断力、却完全有能力执行荒谬指令的自动机器。
编程仍然是在使用一种形式化符号系统。因此,它仍然要求编程者保持与过去一样的谨慎和精确。
为了让机器的使用变得显著更加容易,有人提出,应当尝试设计一种能够直接用人类母语进行指令输入的机器。
诚然,这样做会使机器本身复杂得多,但支持者认为,只要让机器承担更大比例的工作负担,人类的生活就会变得更加轻松。
如果你认为,必须使用形式化符号系统这一要求就是困难的根源,那么这种观点听起来确实合情合理。
但这一论证真的成立吗?我对此表示怀疑。
如今我们已经知道,接口的选择并不仅仅意味着如何在人与机器之间分配某个固定总量的工作,因为我们还必须考虑跨越接口进行协作与沟通所需要付出的额外劳动。
如今我们也已经知道——我还要补充一句,这是从令人清醒的实际经验中得出的结论——改变接口,很容易使接口两侧所需要完成的工作量同时增加,甚至可能急剧增加。
因此,人们越来越倾向于采用如今所谓的“窄接口”(narrow interfaces)。
所以,尽管将人机交互方式改为使用人类的母语,会显著增加机器需要承担的工作量,我们仍然必须质疑这样一种假设:这种改变真的能够让人类的工作变得更加轻松吗?
只要简要回顾一下数学的发展历史,就能发现这种质疑是多么有道理。
古希腊数学之所以陷入停滞,是因为它始终停留在语言描述与图形表达的层面。
穆斯林世界的“代数学”在对符号化进行了一次谨慎而有限的尝试之后,又重新回到了修辞式的文字表达方式,最终走向衰落。
而现代文明世界之所以得以诞生——无论这是好事还是坏事——正是因为西欧最终摆脱了中世纪经院哲学的束缚。
经院哲学试图通过语言实现严格而精确的表达,但这种尝试最终徒劳无功。
西欧能够摆脱这种束缚,要归功于韦达(Viète)、笛卡尔(Descartes)、莱布尼茨(Leibniz),以及后来的布尔(Boole)等人所创造的形式化符号系统。这些符号系统都是经过精心设计,或者至少是经过有意识的设计而形成的。
形式化文本的优点在于:要使对这些文本的操作成为合法操作,只需要满足少数几条简单的规则。
仔细想想就会发现,形式化符号系统是一种效率惊人的工具。它能够有效排除各种各样的荒谬表达,而当我们使用母语时,这些荒谬表达几乎是不可避免的。
因此,我们不应该将使用形式化符号的义务视为一种负担。
相反,我们应该将能够方便地使用形式化符号视为一种特权。
正是得益于这些符号系统,如今的小学生也能够学会完成那些在过去只有天才才能做到的事情。
(显然,1977年某份技术报告的前言作者并没有理解这一点。他在报告中写道:
“为了表达清晰,我们甚至避免使用逻辑连接词的标准符号。”
这句话的出现表明,对形式化符号的这种误解,恐怕并不只存在于这位作者身上。)
归根结底,我们之所以觉得使用母语是一件“自然”的事情,不过是因为:
我们可以轻而易举地使用母语作出各种陈述,而这些陈述所包含的荒谬之处往往并不显而易见。
不妨设想一下这样一种情况:如果从计算技术诞生之初,人类的母语就是信息处理设备唯一能够接受的输入形式,也是其唯一能够提供的输出形式,那么事情将会如何发展?
这样的设想或许能够给我们带来一些启发。
经过认真思考,我的猜测是:历史在某种意义上将会重演。
计算机科学的主要内容,很可能会变成一门真正意义上的“黑魔法”:研究如何从自然语言这一基础出发,逐步建立起一个定义足够严格、足够明确的形式化系统。
为了把人机交互的接口缩小到足够狭窄、从而真正能够使用的程度,我们恐怕需要汇集全世界所有人的智慧。
而且,考虑到人类历史的发展过程,作出以下猜测或许并不算过分悲观:
要把这件事做到足够完善,我们可能还需要花费几千年的时间。
备注
由于教育的发展趋势逐渐偏离了对智力训练和思维纪律的重视,在过去的几十年里,西方世界的人们掌握和运用自身母语的能力出现了急剧下降。
许多人按照上一代人的标准,本应具备更高水平的语言能力,但如今他们却已经无法有效地使用自己的母语,即使是在那些母语本来完全适用的场合也是如此。
(只要看看科学论文、技术报告、政府出版物等材料,就能发现其中充斥着大量令人担忧的冗长空话。这些文字乍看之下似乎言之有物,但经过仔细阅读,就会发现它们实际上毫无意义。)
这种现象被称为“新文盲现象”(The New Illiteracy)。
对于那些缺乏必要技术洞察力、因而无法预见自然语言编程必将失败的支持者来说,这种现象本应足以使他们打消自己的念头。
最后,有一种直觉让我感到莫大的宽慰:
我怀疑,那些试图让我们直接使用母语进行编程的机器——无论使用的是荷兰语、英语、美式英语、法语、德语,还是斯瓦希里语——
它们不仅制造起来会困难得要命,使用起来恐怕也同样困难得要命。

浙公网安备 33010602011771号