微传记【7】——程序员圣经之父:高德纳(Donald Knuth)
他花了60年写一本永远写不完的书,顺便发明了TeX和文学编程
1962年,24岁的高德纳接到加州理工学院出版社的电话:
“年轻人,你愿不愿意给我们写一本《计算机程序设计艺术》?就一本,500页左右,讲讲算法。”
高德纳答应了。
他当时想:两年就能搞定。
62年后的今天,2025年,他87岁,
那套书已经出了五卷(第1、2、3、4A、4B),总厚度超过4000页,
第4卷还有Fascicle 5、6、7……在排队,
第5~7卷还在“未来计划”里。
他给自己定的最终期限是“等我死后由后人整理出版”。
这套被全世界程序员称为“Knuth”或“TAOCP”(The Art of Computer Programming)的书,
不是教科书,是圣经。
每一页都密密麻麻写满数学公式、汇编代码、证明、历史考据、笑话、读者来信回复。
有人统计过,光是索引就超过1万条。
高德纳的规矩是:
每发现自己书里一个错(哪怕是一个标点),就寄25.6美元支票给报错的人。
到2024年,他已经寄出了超过3000张支票,
那张支票现在在极客圈被当“勋章”挂在墙上。
1977年,他45岁,看不惯当时论文排版的丑陋,决定自己动手。
于是花了10年(1977~1987),写出了TeX和METAFONT。
TeX一经发布,立刻统治了全球数学、物理、计算机学术圈,
至今40年无人撼动,连arXiv、IEEE、AMS都在用。
他把TeX的版本号设定为圆周率:3→3.1→3.14→3.14159……
他说:“等它趋向π的时候,就说明软件已经完美,不需要再改了。”
1984年,他又发明了“文学编程”(Literate Programming):
“程序不应该只给机器看,也要给人类读,像散文一样优雅。”
于是写出了WEB系统:一份文件里既有可编译的Pascal代码,也有漂亮的TeX排版解释。
CWEB、noweb、Jupyter Notebook……全在还他这个债。
高德纳一生最著名的事迹有三件:
- 把算法分析变成了一门精确的数学科学(他创造了“大O”记号的现代用法)
- 发明了属性文法、LR解析、Knuth-Morris-Pratt字符串匹配、Knuth-Bendix完备化……随便拎一个都能上教科书封面
- 把“分析算法”这件事做到了极致:他能精确到“一条加法指令平均执行3.14次”这种变态级别
他最经典的金句:
- “过早优化是一切罪恶之源。”(Premature optimization is the root of all evil)
这句话被印在了无数程序员的T恤、鼠标垫、工位墙上。 - “我这辈子只干了两件事:写TAOCP和TeX,其他都是副业。”
- “如果有一天我死了,请在我的墓碑上刻:他把算法变成了艺术。”
他从不碰互联网、不用电子邮箱、不玩智能手机,
所有来往信件都用纸质信,手写回信。
每年收到上千封读者来信,他坚持一封一封回。
有人问他为什么不用email,他说:
“电子邮件会让我把时间浪费在不重要的事情上。”
2025年的今天,87岁的高德纳还在加州家里继续写第4卷后续。
他每周二晚上照例开“Knuth研讨会”,学生必须提前交纸质作业。
他每周六上午照例弹管风琴(他是个狂热的路德宗信徒,每年圣诞节自己编曲弹奏巴赫)。
他曾经算过:如果一切顺利,TAOCP七卷大概要到2040年才能全部出完。
有人问他:“您觉得自己能活到那一天吗?”
高德纳笑着回答:
“不能的话,就留给我的学生吧,反正我已经把索引写到Z了。”
他用一生的时间证明了一件事:
在计算机科学里,最高级的浪漫,
不是写一个跑得最快的程序,
而是写一本永远写不完、却让后人永远读不完的书。
——微传记【7】完——
下一讲:微传记【8】——Unix之父:肯·汤普森(Ken Thompson),那个在废旧PDP-7上敲出第一行Unix代码、顺便发明UTF-8、拿图灵奖时却说“我只是想玩太空旅行”的人