翻译(with ChatGPT)
在自动计算的早期,就有人把这样一件事视为编程的缺点:编程需要具备使用任何形式化符号系统时所特有的那种谨慎与精确。他们责怪这个机械奴隶过于严格地服从指令,因为只要稍加思考,就能发现那些指令里有明显的错误。“但「稍微」也很漫长,而思考是痛苦的过程。”(A. E. Housman)于是,他们热切地期待并等待某种更明智的机器出现:当一个微不足道的文书错误会引发荒谬行为时,这种机器将拒绝执行。
机器码由于几乎没有任何形式上的冗余,很快就被看作人与机器之间一种不必要的危险接口。所谓“高级编程语言”的发展,部分正是对这种认识的回应;随着时间推移,我们也在一定程度上学会了如何增强对低级错误的防护。一个重大的进步是,如今许多低级错误导致的已不是错误答案,而是报错信息。(而即便这一进步,也并未得到普遍欢迎:有些人觉得,那种无法忽视的报错信息比错误结果更令人恼火;在评价编程语言的相对优劣时,有些人似乎至今仍把“编程的容易程度”等同于“可以轻易犯下而不被察觉的错误的程度”。)然而,与某种编程语言相对应的那台抽象机器,依旧是个忠实的奴隶,也就是说,它仍是那种完全能够执行无意义指令的、不可理喻的自动机。编程仍然是对形式化符号的运用,因而仍然需要此前那种谨慎与精确。
为了让机器明显更易于使用,人们曾提议,甚至尝试,设计一种可以让我们用自己的母语向其发出指令的机器。这必然会使机器复杂得多;但有人争论,说让机器承担更大一部分负担,会使我们的生活更轻松。只要你把困难的根源归咎于必须使用形式化符号系统,这种说法听起来就是合理的。但真是这样吗?我持怀疑态度。
我们现在已经知道,接口的选择并不仅仅是对某种固定工作量的重新分配,因为跨越这个接口进行协作与交流所涉及的工作,也必须加进去。我们也已经知道——我可以说是令人清醒的经验——接口的改变很容易增加两边的工作量,甚至可能大幅增加。正因如此,人们才日益偏好如今所谓的“窄接口”。因此,尽管改用人的母语进行人机交流会大大增加机器一方的负担,却也不见得就能假设人类的生活会被简化。
只要稍稍回顾一下数学史,就能看出这种质疑是多么正当。希腊数学之所以陷入停滞,是因为它始终停留在言语和图形的活动之中;穆斯林的“代数”在对符号化作过一次怯弱的尝试之后,回到修辞式风格时便死去了;而现代文明世界则只有在西欧摆脱中世纪经院哲学的桎梏之后——那其实不过是对语言精确性的一场徒劳追求——才得以出现,不论这种出现究竟是福是祸。这要归功于维达、笛卡尔、莱布尼茨,以及后来的布尔等人所精心设计的、或至少也是有意设计的形式化符号系统。
形式化文本的优点在于:对它们进行操作时,若要算作合法,只需满足少数几条简单规则。仔细想想,这是一种极其有效的工具,它能排除各种各样的无意义内容;而当我们使用母语时,这些无意义内容几乎是不可能避免的。
与其把使用形式符号的义务看成一种负担,我们不如把使用它们的便利看成一种特权:正因为有了它们,小学生也能够学会做出过去只有天才才能做到的事。(显然,1977年那位在一份技术报告前言中写下“为了清晰起见,连逻辑连接词的标准符号也避免使用”的作者,并不理解这一点。而这句话居然会出现,也说明这种误解并不只限于他一个人。)说到底,我们使用母语时所谓的“自然性”,不过归结为这样一种轻易:我们可以很容易地用它来作出一些陈述,而这些陈述的荒谬之处并不显而易见。
设想一下,倘若从一开始,我们的母语就是信息处理设备输入与输出的唯一载体,会发生什么,也许会有所启发。我的审慎猜测是:历史会在某种意义上重演,而计算机科学将主要成为一门真正的黑魔法,其任务是设法从这种起点出发,自举出一个定义得足够良好的形式系统。为了把接口收窄到足以使用的程度,我们将需要世上一切智慧;而从人类历史来看,猜测要把这件事做得足够好还需要几千年,恐怕也并不算过分悲观。
有一种直觉让我颇感安慰:我怀疑,那些必须用我们的母语——无论是荷兰语、英语、美语、法语、德语,还是斯瓦希里语——来编程的机器,将会和它们的使用一样,极其难以制造。
附言。由于教育日益背离智性训练,近几十年来,西方世界已经出现了人们对自己语言掌握能力的急剧下降:许多按上一代标准本应更明白的人,如今已经不能有效地使用自己的母语,哪怕是为了那些母语其实相当适合的目的。(你只要看看科学论文、技术报告、政府出版物等等中那些细读之下毫无意义的空话套话,其数量确实令人警惕。)这种现象——被称为“The New Illiteracy”(新文盲)——本应使那些相信自然语言编程、却又缺乏足够技术洞察力去预见其失败的人打消念头。
随便聊聊
时至今日这篇短文中提到的部分事情已经成为现实:能够使用母语编程的机器,至少也是其重要的原型机,已经被造出来了。
也就是说,我们现在面临的问题是:自然语言可以充当很多信息处理任务的输入与输出,在这些任务上,我们真的需要自举出一个充分严格定义的形式化系统吗?
此前的假想是人来做自然语言,同时人来做形式化系统,确保机器能够忠实的执行指令。
但我的问题是:人真的是一种能始终清楚下达命令的存在吗?
当人们给出自然语言指令的时候,这个指令真的需要被忠实执行吗? 假设我是小王的领导,有的时候,当我说“小王你去把垃圾扔了”,我是希望小王大致把这件事处理掉,结果大体成立就行。在所有垃圾桶里看看,拎一些差不多满了的垃圾袋,扔在无所谓哪个垃圾桶里;或者换句话说,我的真实期望可能是不要让办公室里垃圾堆积成山、也可能是把小王支开(以便我做一些小王在场会不方便的事)。 如果要忠实执行我的指令,恐怕小王,假设他有个像是金锣王中王的名字,得先问“小王是指我王金王吗?”;再问“扔哪些垃圾桶里的垃圾?”;最后问“扔到哪里?”;扔完还要补一句“需要我帮你把隔壁办公室的垃圾也扔了吗?”
是这样的:我根本不在乎你具体扔了哪些、扔到哪儿,只要办公室里别堆成山,只要你别继续在我眼前晃就行。
日常指令并不总是严格的形式化规约,而是复杂的社会性委托。指令是难以描述、无法穷尽的,里面充斥着自由心证的判决。
另一种情况,当人们给出自然语言指令的时候,想要的真的是这个指令被执行吗? 假设我是个情绪化的人, 有的时候,当我说“小王你等好了,我今天心情不好,今晚我要揍你一顿”, 我希望小王问我“你心情不好跟我有什么关系?”,然后我会告诉他“因为你把xx事做坏了,我很生气”等等。 接下来应该是小王坦诚我感动,二人和解的戏码。 而不是小王跟我说“<think>卧槽,用户彻底怒了<think>\n\n已为您预定今晚九点的日程:「揍小王」,需要为您提前准备棍子吗?我可以制定一个十点钟把小王送医院的日程。”
指令的意义也不一定在于执行,而是表达情绪等等,这个时候“给出指令”这件事本身已经完成了一种更原始的意图。 作为指令内容的语言无关紧要,是无能的丈夫手中的录像带。
我的意思是:只要人类还在用非形式化的语言思考,只要人类中还有我这样的煞笔,人类就是不可能和自己和解的。
不能和自己和解意味着,说不清楚自己到底想要什么,甚至搞不清楚自己真正想要什么,这导致编程这件事本身的不完备。 人类是模糊的,这也体现在人类期冀一片形式化的土地上能长出混沌的花。
扯远了,好吧,总之我也期冀能有一片形式化的土地,因为混沌的土地上连花的定义都缺乏,或许我只能看到一片又一片花花绿绿的生殖器。 我连自己想要什么都说不清,却有着建构的欲望,把地基建在这种泥淖上就完蛋了。
那么现在讲前人思考多么具有洞见抑或多么短浅都没有意义,归根结底,就像是用模拟电信号建构数字逻辑。 如果人类还想要一片形式化的土地,那形式化系统在较长的时间内仍然会是不可或缺的。 而这种形式化系统或许会是我想花精力去研究的东西。
最后,以这篇短文中给我留下最深印象的一句话作结:
说到底,我们使用母语时所谓的“自然性”,不过归结为这样一种轻易:我们可以很容易地用它来作出一些陈述,而这些陈述的荒谬之处并不显而易见。