计算机科学真的需要计算机吗?
Kristina Armitage/Quanta Magazine
引言

先驱计算机科学家艾兹赫尔·戴克斯特拉(Edsger Dijkstra)是 1972 年图灵奖得主,也是计算领域最具标志性的算法之一的设计者,他从来不乏鲜明观点。例如,某些编程语言曾惹恼他:他曾将 Fortran 斥为“幼稚病”,并称“使用 COBOL 会损害人的心智;因此教授这门语言应被视为犯罪行为”。在为自己在工作中不使用计算机的做法辩护时,他写道:“医学研究人员无需亲身罹患他们所研究的疾病。”
大约四年前,我刚以科学记者身份加入Quanta杂志负责报道计算机科学时,首次接触到戴克斯特拉的这些惊人之语。当时这个领域对我来说还很陌生——我之前是物理学记者,再之前是物理学家——我很快意识到,大多数人并不知道该如何理解“计算机科学作家”这个身份。在更广泛的公众 discourse 中,计算机科学几乎等同于编程或编码,但在Quanta,我们聚焦的是该领域较少为人知的理论一面。后来,我邂逅了戴克斯特拉众多令人难忘的论断中最喜欢的一句:计算机科学之于计算机,正如天文学之于望远镜。
事实证明,这个类比或许并非戴克斯特拉首创,但他大概会认同其中的精神。于我而言,这句话提供了一个简洁而富有挑衅性的方式,用以区分我的报道与科技新闻。而且我无法否认,这话说得颇为讨喜:它所暗示的,是我所报道的领域关乎某种深刻、永恒且超越单纯技术创新的东西。
后来我养成了习惯,经常拿这个类比来说事——包括在一期《The Quanta Podcast》节目中。但与此同时,我心里也渐渐打起了鼓,虽然一时说不清原因。是因为暗中挖苦了那些造望远镜的前同事们而心生愧疚?还是这个类比本身遗漏了什么重要的东西?
我决定把这个问题弄个水落石出:计算机科学到底是不是研究计算机的?如果不是,那它研究的又是什么?

这其实是一场由来已久的争论。20 世纪 30 年代,研究者们开始构建计算的数学理论;40 年代,工程师造出了第一台通用电子计算机。在此后几十年里,数学与工程的研究传统逐渐交汇,计算机科学作为一门独立的学科应运而生,而关于这门学科本质的争论也随之而来。1967 年,著名计算机科学家 Allen Newell、Alan Perlis 和 Herbert Simon 在《Science》杂志上发表了一封言辞激烈的读者来信,亮明了自己的立场。“哪里有现象,哪里就可以有一门科学来描述和解释它,”他们写道,语气里或许还带着几分恼火,“既然有计算机存在,那么计算机科学就是研究计算机的学问。”
Newell、Perlis 和 Simon 这封信在一定程度上是回应那些批评者的——后者认为,任何名副其实的科学都必须研究自然现象。三人则举出反例:化学等成熟学科同样把人造现象当作值得研究的对象。在 1969 年出版的《The Sciences of the Artificial》一书中,Simon 更进一步,干脆拥抱了这种区别:他认为,正是专注于刻意设计的人造系统,才让计算机科学显得与众不同。
1974年,计算机科学家 唐纳德·克努斯 提出了一个独特的学科视角,强调计算的 过程,而非计算机本身。他将计算机科学定义为 对算法的研究,也就是精确的逐步执行过程——计算机正是依靠这些过程来完成任务。算法可以用不同的编程语言来实现,这与想法可以用英语、普通话或阿拉伯语表达类似。人类也在使用算法,这不仅用于解决数学问题,还用于整理物品等任务。从这个角度来看,计算背后的数学才是核心;计算机本身之所以相关,仅仅是因为它们能解决人类既没时间也没耐心亲手处理的问题。
克努斯的定义让我颇为认同,但西蒙及其同事提出的定义那种简洁性却难以否认。然而,无论是这些定义还是其他定义,似乎都未能在研究者中获得普遍认可。为什么会出现这种情况?我问了 威廉·拉帕波特,他是布法罗大学计算机科学和哲学荣休教授,曾 详尽记录过许多关于计算机科学的定义提议。他指出,这种分歧最终源于该学科异常跨学科的起源。
“计算机科学有两位‘家长’,”他告诉我,“一位是数学,一位是工程学,它实际上是这两者的结合。”
拉帕波特依然在该领域看到一种智力上的统一——它不仅仅是在风衣下拼凑的数学和工程学。在他看来,计算机科学是对两个核心问题的研究,每个子领域都以自己的方式回答这些问题:“什么可以被计算,以及如何计算它?”
我觉得这个视角很有帮助。计算机科学中显然有一些分支离不开真实的硬件和软件,比如操作系统设计或内存管理研究。但我最终更关心的是该领域的理论层面——在那里,研究者甚至不需要碰触一台真正的物理计算机。计算机在这个理论工作中是否扮演着本质的角色?要理清我对那几句迪科斯彻引语产生的复杂感受,这就是我必须探究的问题。
更重要的是,计算理论还广泛应用于那些我们通常不会视为“计算机”的事物。研究者常常把自然过程建模为计算,再用数学方法加以分析。借助这把“计算的透镜”,他们揭示了物理系统中不可预测的行为、分析了演化动力学,还攻克了量子引力中的一些难题。颇具讽刺意味的是,Simon 在上世纪 60 年代将其誉为“人工的科学”的这门学科,如今却成了我们理解自然世界的核心。
“你可以透过计算来看待其他科学,”剑桥大学理论计算机科学家 Tom Gur 说,“它是一种底层逻辑模式,几乎无处不在。”
Rapaport 的第一个问题的答案,似乎让 Dijkstra 那句名言依然站得住脚。接着是他的第二个问题:当你决定要计算某个东西之后,究竟该怎么做?对理论计算机科学家来说,答案在于算法的数学。上世纪 60 年代末到 70 年代初,他们开始构建一个框架,在抽象的数学层面上量化算法求解不同问题所需的时间,从而避开计算机硬件的所有细节。
他们很快意识到,实际应用中可能出现的各类问题——比如在网络中规划路线、分解大数——之间存在重要的质的差异。这些问题原则上都能用算法求解,但只有一部分问题存在能快速得出结果的巧妙算法;对另一些问题,已知的算法却慢得令人痛苦。探究这些差异根源的努力,标志着计算复杂性理论的开端——这是理论计算机科学的一个分支,研究不同问题的固有难度,也是现代加密方案的基础。
“数学问题有一种基本结构,这使得它们在定性上更容易或更难求解,”圣塔菲研究所的理论计算机科学家Cristopher Moore说,“这不是你的电脑有多快的问题,也不是你有多聪明的问題。”
如果说数学在某种意义上是描述现实的语言,那么勾勒出这种隐藏的结构就会让人感觉“像是在发现宇宙定律”,加拿大西蒙菲莎大学的复杂性理论家Valentine Kabanets在我几年前为Quanta杂志撰写一篇关于复杂性理论最著名的未解问题的报道时对我这样说。
后来复杂性理论的发展指向了似乎与计算更加无关的方向。例如,Gur提到了1980年代和1990年代从复杂性理论中出现的新数学证明概念。通过将证明重新想象为一种交互式过程,理论计算机科学家发现:可以在不揭示任何关于为何为真的信息的情况下证明一个命题为真,并且只需检查一小段内容就能验证某些证明是正确的。
“我们突然提出了完全类型的问题,”Gur说,“我们说出了一些远远超越计算的东西。”
在我看来,这一切构成了一个引人入胜的“没有计算机的计算机科学”愿景。“这里有一些根本性的问题本可以在几百年前就被提出,”德克萨斯大学奥斯汀分校的理论计算机科学家、Quanta杂志顾问委员会成员Scott Aaronson说,“只是没人想到去问。”
当然,这又引出了另一个问题——为什么没想到?

至少还有一人认真思考过这些根本问题。19世纪的博学家查尔斯·巴贝奇构思了一种通用计算机器,称之为“分析机”,并在自传中推测,新机器的出现必将催生与之配套的算法新理论。他写道:“每当借助它的帮助求得某个结果时,随之而来便是这样一个问题:通过何种计算过程,该机器能在最短的时间内得出这些结果?”
巴贝奇生前并未完成分析机,他也未明确说明打算如何解决这一重要问题。或许他认为机器设计中的技术细节会使某些方法比其他方法更快;但目前没有证据表明,他预见到了此后复杂性理论学家所发现的丰富数学结构。
然而在我看来,这正是问题的关键所在。复杂性理论的核心问题——为何某些问题似乎不存在快速算法——初看之下未必显得十分深刻。只有当你着手探索它时,这种深度才会逐渐显现;而在 20 世纪 60 年代研究人员开始摆弄真实计算机之前,这个问题似乎并不值得深入探究。
我认为,在弱化计算机作用的计算机科学图景中,最终缺失的正是这一点:在历史记录中,深刻的理论问题往往与关于制造更优机器的实践问题交织在一起。
马蒂·特德雷是东芬兰大学的一名计算机科学家,也是一本探讨学科身份著作的作者,他不认同人们对迪jkstra 这句引语的惯常理解。即便如此,他与天文学的比较在另一个层面或许依然恰当。
“迪jkstra 的说法完全正确;只是他对望远镜在天文学中的重要性估计不足,”特德雷说,“如果没有望远镜,我们对宇宙将一无所知。”
跳出计算机科学领域,这对我们如何看待科学进步的整体也有借鉴意义。一种常见的观点是,纯科学突破推动技术进步:比如量子物理催生了晶体管,相对论让 GPS 成为可能。而计算机科学的历史则揭示了深刻理论与实际应用之间更微妙的互动,这种互动在其他学科中也有类似体现。Aaronson 提到了热力学第二定律——它指出熵(衡量无序程度的量)会随时间不断增加。
“这可能是关于整个宇宙演化最根本的论断了,”他说,“然而直到人们开始制造蒸汽机时,才有人想到它。”
或者正如麻省理工学院复杂性理论学家 Ryan Williams 所说:“实践中足够有趣的问题,自然会催生出伟大的理论问题。”