Skip to content

代码世界的隐形巨匠: Ken Thompson

当人们谈论计算机界的传奇人物时,肯·汤普森(Ken Thompson)的名字或许不像乔布斯或盖茨那样频繁出现在聚光灯下,但他对数字世界的塑造力却如空气般无所不在,却又常常被视为理所当然。一张简洁的生平卡片——“图灵奖得主、UNIX系统发明人、B语言发明人、Go语言发明人、UTF-8发明人、DBM发明人”——浓缩了他辉煌的职业生涯。

求知若渴的少年:从伯克利播下的种子

肯·汤普森的传奇并非一蹴而就,其根基深植于他的求学时代。他于1943年2月4日出生,成长于一个鼓励探索的环境。最终,他进入了著名的加州大学伯克利分校,主修电气工程与计算机科学。在那个计算机科学尚处于萌芽阶段的年代,伯克利已是思想碰撞的前沿阵地。可以想见,年轻的汤普森在这里如饥似渴地吸收着新兴的计算理论与实践知识。虽然关于他大学时期的具体趣闻轶事流传不多,但我们可以合理推断,正是这段时间的系统学习和对复杂问题的钻研,培养了他扎实的理论功底、严谨的逻辑思维以及对“如何让机器更好地为人类服务”这一核心问题的早期思考。

对于今天的学生而言,汤普森的求学经历启示着:打下坚实的学科基础至关重要。无论技术如何迭代更新,那些底层的数学原理、逻辑结构、系统思维方式,才是支撑一个人走得更远、看得更深的基石。他并非一开始就瞄准了要发明Unix或Go语言,而是通过对基础知识的掌握,培养了解决未知问题的能力。这种能力,让他在日后面对全新的挑战时,能够游刃有余地创造出前所未有的解决方案。

贝尔实验室的“游戏人生”:Unix的意外诞生

1966年,获得硕士学位的汤普森加入了贝尔实验室,一个被誉为“创新伊甸园”的地方。这里宽松的研究氛围和对“异想天开”的包容,为汤普森的才华提供了绝佳的孵化器。Unix的诞生故事极具戏剧性,也最能体现汤普森“从兴趣出发,解决实际问题”的风格。当时,贝尔实验室参与的Multics操作系统项目因过于复杂而进展缓慢。项目搁浅后,汤普森为了能继续玩他编写的一款名为“太空旅行”(Space Travel)的游戏,并苦于没有合适的平台,他决定利用实验室一台闲置的DEC PDP-7小型机,自己动手写一个精简的操作系统。

汤普森的“太空旅行”游戏是一个典型的“玩”的例子。他的想法是,通过编写一个操作系统,让游戏能够在一台没有图形界面的机器上运行。他的设计理念是:“玩”是学习的起点,通过“玩”来探索未知,然后将所学应用到实际问题中。 这种“玩”的心态,在汤普森的职业生涯中一直体现。

这个看似“不务正业”的举动,却诞生了计算机历史上最具影响力的操作系统之一——Unix。他与挚友丹尼斯·里奇(Dennis Ritchie)并肩作战,用汇编语言迅速搭建了Unix的雏形。Unix的核心设计哲学——“小即是美”、“程序应该只做一件事并把它做好”、“通过管道组合小程序解决复杂问题”、“一切皆文件”——在早期就已显现。这种哲学对后世影响深远,它鼓励创造小而专的工具,然后灵活地将它们组合起来。这对于正在学习编程和系统设计的学生来说,是一个极具启发性的思想:不要试图一开始就构建一个庞大而完美的系统,而是从解决具体的小问题入手,将复杂任务分解,用简洁的工具优雅地组合解决。

为了更方便地开发Unix,汤普森基于BCPL语言开发了B语言,这就是C语言的前身。虽然B语言自身存在局限,但它为里奇后续创造出改变世界的C语言铺平了道路。这个过程也告诉我们,技术的进步往往是迭代和演进的,第一个版本不完美没关系,重要的是迈出第一步,并持续改进。

持续探索:从DBM到UTF-8,再到Go语言

汤普森的创新步伐并未因Unix的成功而停止。他是世上首个键值存储(KVS)DBM的发明人。在那个数据存储和检索远不如今天便捷的时代,DBM提供了一种简单高效的方式来管理键值对数据,这为后来的NoSQL数据库思想埋下了伏笔。这体现了他对基础工具重要性的深刻理解。

面对全球化带来的多语言文本处理难题,汤普森与罗勃·派克(Rob Pike)共同设计了UTF-8编码。在UTF-8出现之前,不同国家和地区的字符编码混乱不堪,导致信息交换困难重重,俗称“乱码”。UTF-8以其向后兼容ASCII、高效表示多国字符、以及良好的容错性,一举成为互联网上最主流的字符编码方案。这项发明看似“小”,却实实在在地连接了世界。它告诉我们,伟大的创新往往源于对普遍性问题的深刻洞察和优雅解决。

即便在功成名就之后,汤普森依然保持着对技术前沿的敏锐。2006年加入Google后,他再次与老搭档罗勃·派克及罗伯特·格里斯默(Robert Griesemer)合作,针对现代多核处理器、网络化和大规模软件系统开发的挑战,共同设计了Go语言。Go语言以其简洁的语法、高效的并发机制、快速的编译速度,迅速成为云计算和微服务时代的宠儿。这表明,真正的技术大师从不固步自封,而是持续学习,拥抱变化,并用新的工具解决新的问题。

“汤普森式”智慧

肯·汤普森的职业生涯和设计哲学,对在校学生而言,蕴含着诸多宝贵的启示:

  1. 好奇心驱动,从“玩”开始:Unix的诞生源于一个游戏。保持对事物的好奇心,勇于动手实践,即使是看似“玩乐”的项目,也可能孕育出伟大的创新。不要害怕你的兴趣看起来“不务正业”,关键在于你是否在其中学习和创造

  2. 大道至简,实用为王:汤普森的设计哲学核心是简洁和实用。他曾说:“我最有效率的一天,是扔掉了1000行代码。” 这提醒我们,在学习和工作中,要追求问题的本质,避免不必要的复杂性。一个能解决问题的简单方案,远胜于一个复杂却华而不实的方案。他的名言“When in doubt, use brute force.”(当有疑问时,使用暴力破解)并非鼓励蛮干,而是告诫人们在没有充分理解问题前,不要过度设计或过早优化,有时候最直接的方法反而是起点。

  3. 构建工具,赋能他人:无论是Unix、B语言、DBM还是Go,汤普森的许多创造都是强大的“工具”。学会构建和善用工具,不仅能提高自身效率,更能赋能他人,产生更大的价值。思考一下,你所学的知识,能否用来创造一些小工具,解决身边同学或自己遇到的实际问题?

  4. 拥抱合作,持续迭代:汤普森的许多成就都是与人合作的结晶,尤其是与丹尼斯·里奇的珠联璧合。同时,他的作品也并非一蹴而就,而是不断迭代优化的结果。这告诉我们团队合作的重要性,以及接受不完美、持续改进的心态。

  5. 保持谦逊,终身学习:尽管成就卓著,汤普森本人却非常低调。他加入Google后仍能从头开始设计一门新的编程语言,这本身就是终身学习的最佳例证。技术世界日新月异,唯有保持谦逊和持续学习的热情,才能不被时代淘汰。

小结

肯·汤普森的传奇,不仅仅是一串发明列表,更是一部关于如何将深厚的理论知识、对现实问题的敏锐洞察、以及对简洁实用之美的不懈追求相结合的生动教材。他从一个在伯克利校园里探索未知的好奇学生,成长为定义了现代计算基石的巨匠,其历程本身就充满了启发性。对于在校的同学们,理解汤普森,不仅仅是了解一段计算机历史,更是学习一种解决问题的思维方式,一种对待技术和创新的态度。愿他的故事能点燃你心中的那份好奇与热情,去探索、去创造,用代码和智慧书写属于自己的精彩篇章。

参考资料

  • Brian W. Kernighan, "Unix: A History and a Memoir", 2019.
  • Peter Seibel, "Coders at Work: Reflections on the Craft of Programming", 2009. (其中包含对Ken Thompson的访谈)
  • Ken Thompson, Dennis M. Ritchie, "The UNIX Time-Sharing System", Communications of the ACM, Vol. 17, No. 7, July 1974.
  • Rob Pike, "UTF-8 history".
  • The Go Programming Language official website.