肯·汤普森,图源:维基百科
UNIX 之父、图灵奖得主、C 语言的前身 B 语言的开发者、操作系统 Plan 9 的主要作者、Belle(一个国际象棋程序)作者之一,这些成就都出自一人之手,编程史上从来不缺大人物,但是肯·汤普逊(一般称之为 Ken Thompson,肯·汤普森)绝对是一个传奇。
在《编程人生》一书的访谈中,肯·汤普森曾回忆:“小学时受到的教育很烂,但唯独一堂课讲了二进制,从此我便被迷住,因为从小就喜欢逻辑,因此做了很多二进制的运算,甚至还借助一台十进制计算器扩展到各种进制。”
汤普森 1943 年出生在美国新奥尔良。1960 年,就读于加州大学伯克利分校主修电气工程,并取得电子工程硕士学位。当时,他的论文导师是埃尔温·伯利坎普,同样也是一位传奇人物。
埃尔温·伯利坎普的博士导师是香农、Gallager 等大师,他发明了 Berlekamp 、Welch-Berlekamp 和 Berlekamp-Massey 等著名算法,还花了不少时间研究围棋等博弈游戏,他是组合博弈论的创始人之一。
埃尔温·伯利坎普,图源:维基百科
1966 年,毕业后的汤普森被贝尔实验室聘用。他跟丹尼斯·里奇(C语言创始人)在 Multics 操作系统上工作。那时候,计算机还处在批处理的阶段,技术不够发达,程序员的工作效率不高,他们只能在既慢又笨重的大型机器上工作。为了解决一系列问题,Multics 操作系统应运而生,它是由美国高级研究计划局资助、由麻省理工学院、贝尔实验室和通用电气公司的研究人员共同开发的分时操作系统。
可是好景不长,因为开发周期过长、成本过高,1969 年贝尔实验室决定撤出这个项目。令汤普森最不开心的是他曾为 Multics 写过一个游戏《太空旅行》,这下也玩不了了。
为了继续玩游戏,汤普森找到了一台旧的 PDP-7 计算机,他重新编写了这个游戏,还花了一个月的时间开发了全新的操作系统 UNiplexed Information and Computing System(UNICS),后来改称为 UNIX。
UNIX 首次运行在 DEC PDP-7 上,图源:维基百科
在 UNIX 的开发过程中,汤普森决定 UNIX 需要一种系统编程语言。于是他开发了 B 语言,也就是 C 语言的前身。B 语言在进行系统编程时不够强大,所以 1973 年丹尼斯·里奇用 C 语言重写了 UNIX,安装在 PDP-11 计算机上。随着后来 UNIX 的广泛使用,C 语言也成为了当时最受欢迎的编程语言延续至今。
坐着的肯·汤普森与丹尼斯·里奇一起在 PDP-11 旁工作,图源:维基百科
1980 年,汤普森与贝尔实验室的另一位工程师约瑟夫·康登开发了一款硬件辅助程序 Belle,一个会下国际象棋的计算机。同年,汤普森当选为美国国家科学院和美国国家工程院院士。
1990年代带有液晶显示屏的压感国际象棋计算机,图源:维基百科
1983 年,汤普森被贝尔实验室任命为研究员。他还协助丹尼斯·里奇在贝尔实验室创建了 Plan 9 和 Inferno 操作系统。这一年,美国计算机协会将图灵奖授予肯·汤普森和丹尼斯·里奇。
肯·汤普森与丹尼斯·里奇(右),图源:维基百科
2000 年底,汤普森从贝尔实验室退休了,他成为了一名飞行员。在编程的世界里遨游半生,也想去真正的天空看看了。
如果你以为他的传奇生涯就这么结束了,那就太天真了。
2006 年,他又加入了 Google 公司,参与设计 Go 语言。当提到他与其他 Go 语言的原始作者时,他说:“当我们三个人(Thompson,Rob Pike 和 Robert Griesemer )准备开始开发 Go 的时候,纯粹是为了研究。我们一起讨厌 C ++。(笑声)回到 Go,我们开始的想法是,对于语言的每个功能都要碰头交流,因此不管什么原因,我们都不会在语言中添加多余的垃圾。”
罗伯特·格瑞史莫,罗勃·派克和肯·汤普森,图源:谷歌
他认为优秀开发人员的标志是热情,虽然他是编程狂魔,但是他却不建议自己的儿子去读计算机,理由竟然是计算机发展太慢了。大佬果然是大佬。现在已经 77 岁的汤普森依然在编程路上不断探索,我们又怎么能停下脚步呢?