E.W.Dijkstra档案:论“自然语言编程”的愚蠢

2020-09-20 05:03:20

从自动计算的早期开始,我们就有人认为编程需要任何正式符号使用所特有的细心和准确性,这是一种缺点。他们指责机械奴隶严格服从执行指令,即使片刻的思考就会揭示出这些指令包含一个明显的错误。但是一瞬间是一段很长的时间,而思考是一个痛苦的过程。(A·E·豪斯曼)。他们热切地希望并等待更明智的机器拒绝从事像当时引起的琐碎文书错误那样的荒谬活动。

机器代码几乎没有任何形式的冗余,很快就被认为是人机之间不必要的危险接口。部分是为了响应这一认识,开发了所谓的高级编程语言,随着时间的推移,我们在一定程度上学会了如何加强对愚蠢错误的保护。现在许多愚蠢的错误确实导致了错误消息,而不是错误的答案,这是一个重大的改进。(即使是这种改进也没有得到普遍的赞赏:一些人发现他们不能忽视的错误信息比错误的结果更令人讨厌,而且,在判断编程语言的相对优点时,一些人似乎仍然将编程的简便性等同于容易犯未被发现的错误。)。然而,与编程语言相对应的(抽象)机器仍然是忠实的奴隶,即完全有能力执行无意义指令的非敏感自动机。编程仍然使用正式的象征主义,因此,继续需要以前所需的谨慎和准确性。

为了使机器更容易使用,有人建议(尝试)设计可以用我们的母语授课的机器。诚然,这将使机器变得更加复杂,但有人认为,通过让机器承担更大份额的负担,我们的生活将变得更容易。如果你责怪使用正式象征主义的义务是你困难的根源,这听起来是明智的。但是这个论点是正确的吗?我对此表示怀疑。

与此同时,我们知道,选择接口不只是分工(固定数量),因为必须增加通过接口进行合作和通信所涉及的工作。与此同时,我们知道-从发人深省的经验来看,我可以补充-在围栏两边,界面的改变很容易增加要做的工作量(即使是急剧增加)。因此,人们越来越喜欢现在所说的窄界面。因此,虽然改用后者的母语进行机器和人之间的交流会大大增加机器的负担,但我们必须挑战这样会简化人类生活的假设。

简单回顾一下数学史,就会发现这一挑战是多么合理。希腊数学停滞不前,因为它仍然是一种口头的、图画的活动。穆斯林代数在进行了一次胆怯的象征主义尝试后,在回到修辞风格时死亡了,现代文明世界只有在西欧能够摆脱中世纪经院主义的束缚时才会出现-无论是好是坏-这是对语言精确度的徒劳尝试!这要归功于我们归功于维达、笛卡尔、莱布尼茨和(后来)布勒等人精心设计的正式象征主义。

正式文本的优点是,为了合法,它们的操纵只需要满足几个简单的规则;仔细想想,它们是一个令人惊讶的有效工具,可以排除各种废话,当我们使用我们的母语时,这些废话几乎是不可能避免的。

我们不应该把使用正式符号的义务视为一种负担,而应该将使用它们的便利视为一种特权:多亏了它们,学校的孩子才能学会做早期只有天才才能做到的事情。(1977年,作者在一份技术报告的序言中写道,为了清楚起见,甚至避免了用于逻辑连接词的标准符号,显然没有理解这一点。这句话的出现表明,提交人的误解并不仅限于他一个人。)。当所有的话都说完了,我们使用母语的自然性归结为我们可以很容易地用它们来陈述那些不明显的无稽之谈。

试着想象一下,如果从一开始,我们的母语就是我们信息处理设备输入和输出的唯一工具,那么会发生什么,这可能是有启发性的。我深思熟虑的猜测是,在某种意义上,历史会重演,而计算机科学

请注意。过去几十年来,西方世界出现了远离知识纪律的教育趋势,导致人们对自己语言的掌握急剧下降:许多按照上一代人的标准应该知道得更清楚的人,不再能够有效地使用他们的母语,即使是在它相当足够的目的上也是如此。(译者注:在过去的几十年里,西方世界的人们对自己的语言的掌握程度急剧下降。按照上一代人的标准,他们应该更了解自己的语言)。(你只需看看科学文章、技术报告、政府出版物等中仔细阅读的毫无意义的行话,数量之多确实令人震惊。)。这种现象--被称为“新文盲”--应该会让那些对自然语言编程缺乏预测失败所需的技术洞察力的人望而却步。(备注结束。)。

从一种直觉中,我得到了很大的安慰:我怀疑用我们的母语编程的机器-无论是荷兰语、英语、美语、法语、德语还是斯瓦希里语-制造起来就像使用它们一样困难。