肯·汤普森:万物的静默架构师
1969 年,当贝尔实验室 (Bell Labs) 退出 Multics 项目时,肯·汤普森 (Ken Thompson) 手头只剩下一台被丢弃在角落里的 PDP-7 小型计算机,且没有任何官方指令。尽管如此,他还是用它构建了一个操作系统。如今,Unix 及其各类衍生版本运行在地球上几乎所有的服务器、手机和嵌入式设备上。汤普森最亲密的合作者、自身也成就斐然的丹尼斯·里奇 (Dennis Ritchie) 曾这样评价最初的版本:“大部分想法,甚至大部分工作,都是他的。”
二进制算术
肯尼斯·莱恩·汤普森 (Kenneth Lane Thompson) 于 1943 年 2 月 4 日出生于路易斯安那州新奥尔良。他对自己童年的描述非常朴实:“我一直对逻辑很着迷,即使在小学时,我也会研究二进制算术题之类的问题。仅仅是因为我着迷。” 后半句就是他本人的写照——一种不带任何功利目的的智力渴求。
1965 年,他获得了加州大学伯克利分校 (University of California, Berkeley) 的学士学位,并于 1966 年获得硕士学位,专业均为电气工程和计算机科学。他的论文导师是编码理论家埃尔温·伯勒坎普 (Elwyn Berlekamp)。1966 年,贝尔实验室聘请他进入位于新泽西州默里山的计算科学研究中心工作。
Unix
1967 年至 1969 年间,汤普森参与了 Multics 项目,这是贝尔实验室、麻省理工学院 (MIT) 和通用电气 (General Electric) 之间一个雄心勃勃的联合分时系统项目。Multics 规模巨大、速度缓慢且进度滞后;最终贝尔实验室退出了该项目。汤普森从中得出的结论是:其想法是正确的,但执行方式有误。
这个起源故事广为人知且略带荒诞。他想继续玩自己编写的游戏《太空旅行》(Space Travel),并需要一个顺手的开发环境。在一台废弃的 PDP-7 上,在资源匮乏且没有机构支持的情况下,他构建了一个操作系统的核心:分层文件系统、进程、作为普通文件处理的设备文件、与内核分离的命令行解释器,以及用于链接程序的管道。这些现在都已成为标准,以至于很难再将它们视为一种当初的选择。
其设计哲学是压缩。Unix 没有预判所有需求,而是提供了少量可组合的原语,让用户自己去拼装。到 1973 年,已经有超过二十个安装实例。为了更轻松地编写非内核部分,汤普森创建了 B 编程语言(源自 BCPL),里奇随后将其发展为 C 语言——至今全球大多数基础设施软件仍使用该语言编写。
小工具,深根基
汤普森的其他工作也带有同样的印记:一种最终被证明承载重任的精简构思。他在 QED 和 ed 编辑器中实现了正则表达式,并设计了“汤普森构造法”(Thompson's construction),即将正则表达式转换为有限自动机的算法。当今几乎所有的正则表达式引擎都是该标记法的后继者。
1971 年,他编写了一个国际象棋程序。随后,他与约瑟夫·康登 (Joseph Condon) 共同打造了 Belle,这是一台专用的国际象棋机器,曾在那个时代统治了计算机博弈领域。此后,他又生成了完整的四子、五子和六子残局数据库——针对整类棋局的穷举式解决方案,这一成果永久性地改变了残局理论。
1992 年,他与罗伯·派克 (Rob Pike) 一起设计了 UTF-8,这是一种字符编码,允许单个字节流承载地球上任何语言的脚本,同时保持与 ASCII 的兼容性。目前,全球超过 90% 的网页使用该编码。他还对 Plan 9 系统的开发起到了核心作用,这是贝尔实验室在 20 世纪 80 年代中期构建的分布式操作系统,旨在将 Unix 的理念推向比 Unix 本身更远的地方。
他在 1983 年发表的图灵讲座《对信任的反思》(Reflections on Trusting Trust) 中描述了一种编译器,它能将后门植入其编译的程序以及未来的自身版本中,使得恶意代码在任何人都能阅读的源代码中完全无法发现。汤普森黑客手段 (Thompson hack) 是计算机安全领域的奠基性文件;其源代码于 2023 年进行了注释并公开发表。
Google 与 Go
汤普森于 2000 年底从贝尔实验室退休,并于 2006 年加入 Google,在那里他与罗伯·派克和罗伯特·格里塞默 (Robert Griesemer) 一起设计了 Go 编程语言。他解释其动机时直言不讳:“我们三人聚在一起,决定我们讨厌 C++”,他曾称 C++ 为“一堆相互排斥的想法组成的垃圾堆”。Go 语言建立在一个规则之上:每增加一个特性,都必须说服这三位设计者,这是一种保持语言简洁的纪律。
荣誉纷至沓来:1980 年当选美国国家工程院院士,1982 年获 IEEE 伊曼纽尔·皮奥尔奖 (IEEE Emanuel R. Piore Award),1983 年与里奇共同获得 ACM 图灵奖,1985 年当选美国国家科学院院士,1990 年获 IEEE 理查德·哈明奖章 (IEEE Richard W. Hamming Medal),1994 年获计算机先驱奖,1997 年成为计算机历史博物馆研究员,1998 年获国家技术奖章,1999 年获首届金筑奖 (Tsutomu Kanai Award),以及 2011 年获日本国际奖 (Japan Prize)。
为什么肯被称为天才
ACM 的图灵奖引文做出了一个异常精确的评价,值得引用,因为它准确地定位了这种特质:“UNIX 系统的成功源于它对几个关键思想的品味选择及其优雅的实现……Unix 系统的天才之处在于它的框架,它使程序员能够站在巨人的肩膀上工作。”
“品味”是其中的关键词。汤普森的天赋在于“减法”——即找出能产生最大有用行为集合的最简概念,并拒绝所有其他多余的东西。管道就是典型的例子:一种连接一个程序输出到另一个程序输入的琐碎机制,却将一堆小工具变成了一个组合系统。正则表达式、UTF-8 和 Go 都展现了同样的最小充足设计模式。他通常被列为有史以来最伟大的程序员之一,而这一评价来自以写代码为生的人,而非奖项评审委员会。
反面观点虽然存在,但比此列表中大多数人都要薄弱。Unix 是合作的产物——里奇、布莱恩·克尼汉 (Brian Kernighan)、提出管道构想的道格拉斯·麦克罗伊 (Douglas McIlroy) 等人对其产生了深远影响,图灵奖也是共同获得的。许多 Unix 的构想是从 Multics 借鉴而非凭空创造的。汤普森在计算机科学领域没有产生理论成果,他的影响力完全体现在制品和设计判断力上。这是否构成“天才”,还是仅仅是一种极其发达的技艺,是一个合理的问题。最诚实的回答是:在软件领域,两者很难区分,而汤普森的技艺已被证明比大多数人的理论更具影响。
遗产
Linux、macOS、Android、iOS 以及运行着几乎所有互联网服务器的软件,都源自汤普森 1969 年在一台废弃机器上独立做出的决定。他的字符编码承载了在线几乎所有的书面文本。他的正则表达式算法嵌入在每一个文本编辑器中。他曾在 2024 年为计算机历史博物馆录制了长篇口述历史,并在晚年放弃了苹果公司的产品,转而使用 Raspberry Pi OS。
.jpg)