高德纳是算法和程序设计技术的先驱者,计算机排版系统TEX和METAFONT的发明者,他因这些成就和大量创造性的影响深远的著作而誉满全球。
德纳(Donald Ervin Knuth)——经典巨著《计算机程序设计的艺术》的年轻作者。
洋洋数百万言的多卷本《计算机程序设计的艺术》(The Art of Computer Programming)堪称计算机科学理论与技术的经典巨著,有评论认为其作用与地位可与数学史上欧几里得的《几何学原理》相比。本书作者高德纳(Donald Ervin Knuth)因而荣获1974年度的图灵奖。
排版软件TeX和字型设计系统Metafont发明人,所著描述基本算法与数据结构的巨作《计算机程序设计的艺术》被《美国科学家》杂志列为20世纪最重要的12本物理科学类专著之一,与爱因斯坦《相对论》、狄拉克《量子力学》、理查·费曼《量子电动力学》等经典比肩而立。
高德纳1938年1月10日生于威斯康辛州密歇根湖畔的密尔沃基(Milwaukee)。这是一个山灵水秀、人才辈出的地方,“人工智能之父”、诺贝尔奖获得者西蒙(H.A.Simon)也是在这里出生的,获诺贝尔奖次年获图灵奖。但高德纳比西蒙小整整22岁,是一个“小字辈”。高德纳的父亲是一个多才多艺的人,有研究生学历,当过小学和中学教师,星期天在教堂演奏风琴,还在自家地下室办了一个小印刷厂。受父亲影响,高德纳从小喜欢学习和音乐,并表现出与众不同的才能。高德纳上8年级时,当地的Ziegler糖果厂为了促销其称为Giant Bar的一种棒棒糖,在学校中搞了一个比赛,看谁能用Ziegler’s Giant Bar中的字母排列组合出最多的单词。高德纳假装胃疼,在家里呆了两个星期,利用一部大字典,得出了4500个单词,比裁判掌握的2 000个单词多出一倍多,一举为他所在的班夺得冠军,赢得一台电视机和每人一块Giant Bar,而高德纳本人则赢得一付雪撬。
1956年,高德纳以各科平均97.5的创记录的高分从密尔沃基路德兰高级中学毕业,进入俄亥俄州克利夫兰的开思理工学院(Case Institute of Technology)攻读物理。这一年,他在中学时就创作的一篇出色的科学幻想小说“普茨比度量衡体系”(The Potrzebie System of Weights and Measures)在美国著名的《疯狂》(Mad)杂志上发表,高德纳获得了他的第一笔稿费25美元,并因而获得西屋科学天才的提名奖。在这篇小说中,高德纳风趣而富于幻想地提出了替代公制的一种新的计量制度,比如以一本流行杂志的厚度为长度单位,虽然滑稽可笑,却设计得严密周到,天衣无缝,其中甚至还包括一种新的历法。文章刊出后大受欢迎,多次重印,1991年还重印过一次,其时作者高德纳即将退休。
大学一年级结束以后的暑假,高德纳在学校打工,负责把统计数字画成图表。碰巧他工作室的隔壁就是计算机房,新到了一台IBM650。当时的计算机体积都很庞大,有供输入和调试的控制台,上面排列着一排排的开关和指示灯,计算机工作时指示灯快速闪烁变化出不同的图案,这引起高德纳极大的好奇与兴趣,他接连好几天彻夜不眠地呆在机房,观察它的工作,钻研使用手册,探究计算机的奥秘。一年以后,他终于改学数学,与计算机结缘。这段经历对于高德纳是如此重要和关键,以致他在《计算机程序设计的艺术》第一卷的卷首,不像别的作者那样一般写上“献给自己的父母”或“献给自己的妻子”,而是写着“献给曾经安装在开思理工学院的650型计算机,以纪念那些愉快的夜晚”。他的第一个计算机应用程序也是在650计算机上实现的:他为他所在的校篮球队(高德纳人高马大,也喜爱运动,娱乐)设计了一个复杂的公式,根据球员在每场比赛中的得分、助攻、抢断、篮板球、盖帽等多项统计数字对球员进行综合评估。球队教练根据高德纳的程序挑选和使用球员,使开思理工学院在1960年赢得了联赛冠军,高德纳的“神奇的公式和程序”也被当地报纸和广播传为美谈。
1960年,高德纳在开思理工学院毕业,不但被授予学士学位,还被破例同时授予硕士学位。之后他进入加州理工学院研究生院,1963年获得博士学位,留校工作至1968年,然后转入斯坦福大学任教,其间1972—1973年曾经在奥斯陆大学当客座教授。
高德纳至今进行了两大工程,一个已经完成,一个尚未完成。第一个大工程就是《计算机程序设计的艺术》系列,开始于他念博士期间,计划出七卷,第一卷《基本算法》于1968年出版,第二卷《半数字化算法》于1969年出版,第三卷《排序与搜索》于1973年出版,第四卷A《组合算法》已于2011年出版。这个工程为什么前紧后松,长期停顿呢?
高德纳暂停了写作,理由是现有的计算机排版软件效果太差,破坏了这套书的美。这不免引发作者是否江郎才尽,见好就收的猜测与怀疑——不料辍笔10年的高德纳以三个重量级创造性成果:字体设计系统METAFONT(其价值一言以蔽之:对整个西文印刷行业带来了革命性变革)、文学化编程(充分展示程序设计的艺术性:清晰,美感,诗意),尤其是最具革命性的排版系统TEX(至今仍是全球学术排版的不二之选)给出了强力回应。尽管如此,仍有人说高写完三卷 TAOCP就去研究TeX,其实是害怕写第四卷——不过他对这类风言风语根本不以为意:“一个人要把事情做的完美,只有跟上帝的意图保持和谐,现在上帝要我去写第四卷了。”
搁置手头的重要工作,费时10年专研排版美学打造TEX系统,原因其实很简单:数理图文排版以前一直使用金属活字,70年代以降始有激光照排,然而当时的计算机虽能替代人工排出普通的报纸杂志,但对处理复杂的数理公式却力不从心。高德纳试图为计算机写一个小玩艺儿解决上述问题,TeX的前半部分由此产生。编写过程中,他想参考J·伯克霍夫的Aesthetic Measures(《美学标准》)一书,在哈佛的图书馆几经查阅也未能如愿,之后好不容易在麻省理工学院找到。参考的结果是在TeX里加入一个变量badness,用以衡量一行文字的美感,变量越小文字就越美。
20世纪70年代中期,高德纳和其他一些计算机科学家曾经设想在未来10年中将产生一种比现有程序设计语言更加强大,更加优美的新型语言,并预先命名它为“乌托邦84’’(Utopia 84)语言。
1992年,高为潜心写作TAOCP从斯坦福提前退休,同时停用电子邮箱(他自1975年就开始玩电邮)。2008年,TAOCP前三卷出版30年后,第四卷在高粉的千呼万唤中终于面世,此际的高德纳已然是满头白发。对计算机科学的倾心热爱,使他为这部作品耗费了毕生心血:从及冠之年直至古稀老人。
高德纳获得的荣誉与奖励极多。ACM除了授予他图灵奖和软件系统奖外,还在1971年授予过他以COBOL的发明人、女计算机科学家霍泼(Grace Murray Hopper)命名的奖项,这个奖项是专门奖励30岁以下的优秀青年计算机科学家的。这样,高德纳一人就先后获得ACM的三个奖项,在1999年以前,这是计算机科学家中仅有的一位(1999年,布鲁克斯获得图灵奖,从而也拥有ACM三个奖项,平了高德纳的记录)。无独有偶,美国数学会也先后授予高德纳三个奖项,即Lester R.Ford奖(1975)、J.B.Priestley奖(1981)和Steele奖(1986)。1979年,当时的美国总统卡特向他颁发了全国科学奖章。IEEE授过他两个奖:McDowell奖(1980)和计算机先驱奖(1982)。1994年,瑞典科学院授予高德纳Adelskold奖。1995年他获得冯·诺伊曼奖和Harvey奖。1996年他获得日本INAMORI基金会设立的KYOTO奖,这个奖是专门奖励在高科技领域作出贡献的科学家的。面对这么多荣誉,高德纳都以平常心对待,据说,纪念他获得图灵奖的碗现在只是被他用来盛放水果。
ACM于1974年11月11日在南加利福尼亚濒临太平洋的海港城市圣迭戈举行的年会上向高德纳颁发图灵奖。高德纳发表了题为“作为一种艺术的计算机程序设计”(Computer Programming as an Art)的演说。在演说中,一如我们在阅读他的著作时所感受的那样,高德纳旁征博引,有根有据,人情人理,娓娓道来,把“科学”与“艺术”的不可分割的关系说得清清楚楚,令人心服口服。演说刊于Communications of ACM,1975年12月,667—673页,或见《前20年的ACM图灵奖演说集》(ACM Turing Award Lectures——The First 20Years:1966–1985,ACM h.),33—46页。
《计算机程序设计的艺术》系列,开始于他念博士期间,计划出七卷,第一卷《基本算法》于1968年出版,第二卷《半数字化算法》于1969年出版,第三卷《排序与搜索》于1973年出版,第四卷《组合算法》尚在写作之中。《计算机程序设计的艺术》一书以其内容的丰富和深刻喻为经典,有人甚至称之为“计算机的圣经”,被译为俄、日、西、葡、匈牙利、罗马尼亚等多种文字在世界各国广泛流传,其发行量创造了计算机类图书的最高记录,直至20世纪80年代中期,都一直保持着月销售量每卷达2000册的势头,成为Addison-Wesley出版社成立以来销路最好的图书。我国也由苏运霖翻译并出版了《计算机程序设计艺术》一书。
此外,高德纳还有许多“小创造”。计算机科学技术中两个最基本的概念:“算法”(Algorithm)和“数据结构”(Data Structure)就是高德纳于29岁时提出来的。1973年他首创双向链表。在编译器设计方面,著名的LR(k)文法也是高德纳在对自左至右、自底向上的移进一归约分析进行了深刻剖析的基础上,经过高度概括和集中以后发明的,它表示具有从左(L)到右(R)的分析而向前看k个符号,以确定所要进行的归约和应用何种语法解释。LR(k)文法的识别效率高,在从左至右扫描输入串时,就能发现其中的语法错误,并能准确地指出出错位置,因此被广泛应用。此外,利用LR(众)文法还能正确区分像Flying planes is fun和Flying planes can crash这类句子(前一个句子“开飞机很有趣”中flying是动名词,而后一个句子“飞行中的飞机可能出事”中Flying是现在分词当形容词)。以著名的巴克斯—诺尔范式为基础的“属性文法”(attribute grammar)也是高德纳首先提出来的。属性文法在普通的上下文无关文法(context-free grammar)的基础上,对每一个终结点或非终结点加上一些属性,和对这些属性进行估值的语义规则集,从而形成一种新的、有更强表达与描述能力的文法。其中属性是由的有序偶对组成的。属性的内容则可包括模式标识符表等。
在算法方面,有他和他的学生共同设计的诸如Knuth-Bendix算法和Knuth-Morris-Pratt算法,前者是为了考察数学公理及其推论是否“完全”而构造标准重写规则集(rewriting rule set)的算法,曾成功地用它解决了群论中的等式的证明问题,是定理机器证明的一个范例。后者是在文本中查找字符串的简单而高效的算法。此外,高德纳还设计与实现过最早的随机数发生器(random number generator)。
高德纳的著作很多,除了已由Addison-Wesley出版社出版的三卷The Art of Computer Programming(由管纪文、苏运霖等译成中文,国防工业出版社出版,介绍TEX和METAFONT的五卷《计算机与排版》(Computers and Typesetting)早已流传于世外,还有以下一些主要著作:
《研究之美》(Surreal Numbers,Addison-Wesley,1974)
《具体数学》(Concrete Mathematics,Addison-Wesley,1989)
《数学论著集》(Mathematical Writings,MAA,1989)
《用于算法分析的数学》(Mathematics for the Analysis of Algorithms,Birkhauser,1990,第三版)
《作文式程序设计》(Literate Programming,CSLI,1992)
《公理与外壳》(Axioms and Hulls,Springer,1992)
《斯坦福的GraphBase:组合计算用的平台》(The Stanford Graph Base:a Platform for Combinatorial Computing,ACMh·,1993)
其中,《研究之美》(Surreal Numbers)一书介绍了剑桥大学的康韦(J.H.Conway)所发明的一种新的数制,是高德纳听了康韦向他作的介绍后,用了一周时间写成的小说体裁的作品。有评论家指出,这是历史上第一次一个重大的数学发现以小说的形式向公众进行介绍。由此可见,高德纳的艺术才华同样是非凡的,要不是计算机深深吸引了他,高德纳很可能会成为出色的小说家或音乐家(前面说过他喜欢音乐,会自己制作管风琴,会创作不错的乐曲呢)。
高德纳花了整整9年的时间和精力,完成了对整个西文印刷行业带来了革命性变革的TEX排版软件和METAFONT字型设计软件。这两个软件为高德纳赢得了ACM的另一个奖项:1986年度的软件系统奖(Software System Award)。但是这两个软件并没有为高德纳和斯坦福大学赚过一分钱:高德纳把它们作为*软件无偿提供给用户。这比理查德·斯托尔曼(Richard Stall man,1990年ACM Hopper奖获得者)在1984年发动*软件运动早了约5—6年。高德纳说:“我写这两个程序是出于对书籍的热爱,也想给这个领域以必要的推动。我已经有些名气了,我的书卖得也不错。所以我不需要为我出于热爱而做的事保留专卖权。此外,数学家通常是不为他们发现的定理获取报酬的”。1979年,高德纳还创建了TEX用户集团,这个集团10年前的成员数就超过3000。细心的读者也许会注意到,许多西文书版权页的下部注明“本书用TEX系统排版”。
作为开源代码运动最早的倡导者之一,高德纳将Tex 和Metafont无偿贡献给了世界,自己没有从中获取任何报酬。他的想法是,一个人一旦能够喂饱自己并有个安身之所,剩下的就是为别人做点什么了。“我尝试尽我所能的去熟悉电脑科学里的一些领域,然后把这些知识摘要成大家比较容易了解的方式,让没有那么多时间做这种学习的人也能够吸收它们”。为此他常常需要阅读超过20万页的文献,然后将之浓缩为两千页——他无意追赶最流行的内容,而是希望从日新月异的信息中萃取出能够存活到下个世纪的精华。
TEX的版本号不是自然数列,也不是年份,而是从3开始,不断地逼近圆周率 (3.14,3.141…目前最新版本是3.1415926)。高德纳再一次用行动宣告,我这个东西,不可能再有什么大的改进了,最多只能小修小补,使其 趋近完美。他还专门设立了奖金:[3] 谁发现TEX的一个错误,就付他2.56美元,第二个错误5.12美元,第三个10.24美元…以此类推。我们都知道,传 说某个国王就因为这种指数游戏失去了*,高德纳作为算法大师,更清楚指数增长的可怕性。然而他却敢立此重赏,结果直到今天,他也没有为此付出多少钱,高的另一悬赏是向发现其著作中错误的人发奖,数额依旧是2.56美元始,因为“256美分刚好是十六进制的一美元”。不过寥寥几位获奖者都将有他签名的支票当作文物珍藏,并未打算去银行兑现。可见TEX经过了怎样的千锤百炼。这个耗费十年打造的玩具,让当初质疑图灵奖发错了的人们全部闭嘴了,他们甚至改口说:哦,为了这个TEX,不妨再给高德纳一个图灵碗吧。
20世纪70年代中期,高德纳和其他一些计算机科学家曾经设想在未来10年中将产生一种比现有程序设计语言更加强大,更加优美的新型语言,并预先命名它为“乌托邦84’’(Utopia 84)语言。乌托邦原是托马斯所著Utopia一书中所描述的人间理想王国,高德纳借用过来代表一种未来的理想语言,希望它有更好的数据结构和控制结构,更符合结构化程序设计的思想,等等。高德纳提出Utopia 84已经过去20多年了,虽然程序设计语言在不断地发展与完善之中,但“理想语言”并未出现,可能永远也不会出现。但新一代人会不断进取。高德纳在20世纪80年代所倡导的“作文式程序设计”(literate programming,国内有人将它译为“文化程序设计”)就是这一努力的又一体现和成果。我们从上小学起不就学做作文吗?作文首先要构思好故事,把事情的来龙去脉交代清楚,这相当于编程时先要把程序逻辑弄好。其次要围绕故事情节尽可能把有关的人物、环境等细节描写得清清楚楚,生动活泼,这相当于在程序中加入必要的注释和说明,以便阅读和理解。所谓作文式程序设计就是要像写作文那样进行编程,从完成的“源程序”中既可提炼出可执行的程序代码,又可生成程序文档,“毕其功于一役”。作文还有一个要点是分段,一篇作文要分成若干段落,以便层次分明,铺陈有序。作文式程序设计也是这样,一个复杂的程序是由若干较简单的片段构成的,较大的片段还可分为更简单的一些小片段。1983年,高德纳推出了第一个这样的程序设计系统WEB。WEB包括两个子系统,一个子系统从WEB程序中自动地抽出描述算法的部分,并且加工成PASCAL编译器所能接受的形式,然后据此得到可在计算机上执行的代码。另一个子系统则把WEB程序加工为TEX系统所能接受的形式,并据此得到具有高度可读性的完整的程序文档。显然,WEB就是一个完成”PASCAL作文”的工具。继WEB之后,提姆勃莱比(H.W.Thimbleby)开发出CWEB,和WEB类似,但是是一个完成“C作文”的工具。WEB和CWEB都是*软件,可从因特网上下载。
整个WEB程序还将自动产生目录和索引。大家都知道或有过亲自体验,在软件开发中,文档编写在整个过程中占着相当大的比重,是一种十分重要而又非常烦人的工作。作文式程序设计将大大减轻这方面的负担,并提高文档质量。因此,像我们从小学起就要学习写作文那样,学习并掌握用作文式程序设计进行编程实在是一件非常有意义、非常重要的事。
高德纳曾在自传的开头幽默地发问:“Donald Knuth真的只是一个人么?”作为现代计算机科学的鼻祖,他完成了编译程序、属性文法和运算法则等领域的前沿研究,出版专著17部,发表论文150余篇(涉及巴比伦算法、圣经、字母“s”的历史等诸多内容),写出两个数字排版系统,同时在纯计算数学领域也有独特贡献。他获得的奖项难以胜数,其中包括ACM Turing Award颁发的图灵奖(1974),美国国家科学奖(1979),日本KYOTO奖(1996),瑞典科学院的Adelskold奖及冯诺伊曼奖。而他对荣誉从不经意,据说那只代表至高荣誉的图灵碗被用来盛放水果。——回首过往,几十年时光如白驹过隙,大约是他自己对做出的成果如此之多也感到吃惊,所以才有以上一问。
八岁时的高德纳即显出超凡智力:当时某糖果商以小学生为参与对象举办了一项益智趣味比赛,要求用“Ziegler’s Giant Bar”(分别为糖果厂名和出产的棒棒糖名)里的字母写出尽可能多的单词。高假装胃疼宅家两周,依靠一部大字典列出了4500个单词(超出裁判掌握的2000个单词一倍多),不仅使所在班级夺冠(奖品为一台电视机和每人一块Giant Bar),本人也赢得一付雪撬。其赛后感言曰:我还能写出更多。
在数学上,高德纳也很早就表现出天才。高中一年级时,他发明了一种方法,利用这种方法,对任意画出的2条相交直线,他能立即给出相应的方程。
在高中第一学年,高德纳并未对数学发生太大兴趣,他更喜欢听音乐与作曲,一度考虑过报考音乐专业。这个爱好深度影响到他后来的生活及研究——他将写作喻为演奏管风琴,其书房里的确也摆放有一台特制的84管管风琴,此外他还会萨克斯和大号等乐器。所著《娱乐和游戏论文集》一书有四个章节内容涉及到高的“主要副业”——音乐;进入90年代,当连续工作几天需要放松一下时,他会着手谱写管风琴乐曲。
1956年以科均97.5的分数高中毕业进入凯斯理工学院物理专业后,高德纳中学时创作的科幻小说《普茨比度量衡体系》发表于著名的《疯狂》(Mad)杂志,挣得平生第一笔稿费25美元及西屋“科学天才”提名奖。这个作品曾多次再版,直到作者即将退休的1991年还重印过一次。
大学一年级留校打工,毗邻的计算机房新到了一台IBM650——这个指示灯闪烁不定的庞然大物让高德纳生出莫大兴趣。当获准在晚上操作那台计算机后,他几天不眠不休地观察探究,并且改动了说明手册上的程序使之更加好用。一年后,高改入数学系,自此终生同计算机结缘。当时兼职学校篮球队的他用IBM650写了一个程序,用于对球员在每场比赛中得分、助攻、抢断、篮板球、盖帽等一揽子数据的分析评估,球队教练据此挑选球员,使凯斯理工学院赢得了1960年的联赛冠军。这个“神奇的公式和程序”引来了当地媒体乃至CBS电视台的大肆报道,高所在球队和IBM650的合影被IBM印到了产品宣传册上。这段经历的重要性不言而明,以至高德纳在巨著《计算机程序设计的艺术》第一卷卷首写下“献给曾经安装在开思理工学院的650型计算机,以纪念那些愉快的夜晚”的题辞。
上大二那年,某教授在课堂上给出一个刁钻的题目,宣称谁能破解就可记成绩“A”。高跟大多数同学都以为那是道无解的题,直到某日他未赶上公共汽车,只能步行去看一个演出时,方决定利用路上的闲暇碰下运气。不曾想问题很快便获得解决,成功地得到了“A”。在接下来的那个学年里,他的离散数学成绩又一次被老师评为“A”。
高德纳1960年毕业于开思理工学院,因学业特别出色,被破例同时授予学士和硕士学位。之后在伯克利攻读数学博士期间,ALGOL60经常因为编译器不成熟出现故障,他为此编写了一个简单的测试程序,人称“Man or boy test”(男人或男孩测试),可以译成“是男人就得-67”。高解释,用ALGOL60来编译这段程序,只要运行结果等于-67,就说明这个编译器没有问题了,是纯爷们儿。
习惯用铅笔而非键盘写初稿,高将原因归咎于打字速度远高于思考速度(每分钟 80 个单词以上),而这会导致思考出现太多停顿,用铅笔可以让思考与输入速度保持一致——“我打字的速度比我思考的速度更快,这样当我试图用键盘创作重要内容时,就会产生同步问题。速度通常不会是最重要的标准。科学一般都难以迅速解释或迅速领会……我通常的工作方式是用铅笔和纸先把所有东西都写下来,然后在旁边放一个大废纸篓。然后使用Emacs将所有文本键入到机器中……特定的Emacs快捷键使得写书的过程有点儿像演奏风琴……”
“我戴着一顶计算机科学家的帽子,而不是一顶数学家的帽子。”这似乎暗示了身为加州理工学院数学博士的高对数学家的某种成见——在他看来后者只知道“What is it(这是什么)”,而前者还知道“How to do it(如何做到这一点)”这可能是他心目中的数学与计算机科学的区别。
斯坦福大学曾让高德纳为自己选择一个头衔,他确定的是“计算机程序设计艺术名誉教授”。高认为“计算机科学”不是科学(他很讶异人们为何如此喜欢科学),而是一门艺术。它们的区别在于:艺术是人创造的,而科学不是;艺术是可以无止境提高的,而科学不能;艺术创造需要天赋,而科学不需要。
传闻高改作业通常是随机翻到一页认真批阅,有了一个初步印象后,对剩下的内容就只大概看看了。阅读大致也照此办理:遇上大部头先读第316页,如果书比较薄就看第100页;随后就可以作出判断了,据说准确率还八九不离十。如果追随他的人很多,以后著书就要注意了:写到第316页或100页时一定要停下来多推敲下。这或许是高德纳推崇随机算法的结果。
“文学编程(Literate Programming)”是高写的又一程序,他自称写这个程序的动机有二:A.让一个程序员(或许就是他自己)在某一日拿到普利策奖;B.让那些提出“结构化程序”的家伙在写“非文学程序”时,就像他当年写“非结构化程序”时一样怀有罪恶感——娃哈哈。有关“文学编程”设想的文字最先发表于英国的《计算机学报》,有人问为何不在美国发表,高答曰:美国人没文化,他们理解不了啊。
《美国数学月刊》刊载过高德纳一篇名为“卫生纸问题” 的论文,研究如何合理使用厕纸的算法,小节标题中使用了大量的“粪便学”词汇。编辑警告他,过度调侃的文风在我们这里是危险的,请三思!高替换了小标题里的某些词,但不想动文章标题,遂在给编辑的回信里写道:我用这个题目做过两次演讲,主题早已被广泛采用和讨论……云云。编辑无奈之下只好表示:“你的厕纸被接受了!”(斯坦福大学计算机科学系楼内的厕纸架可并放两筒厕纸,供如厕者取用。卷筒大小不等时,喜欢从大筒拿纸的叫big-chooser【大的选择器】,喜欢从小筒拿纸的则称little-chooser【小的选择器】;若两筒大小接近,一般人的选择可能是离手最近的。厕纸平时由janitor【看门人】负责更换,用完一筒换掉一筒;不过要是同时用完,恐怕就会有人遇上麻烦了……高研究的似是两筒纸同时用完的窘境出现的概率)
在伯克利毕业的前一年,著名的艾迪生-韦斯利出版社约初露头角的高德纳写一本编译器和程序设计方面的书,这件原本寻常的事最终成就了计算机科学史上的一个奇观。出版社1962年约稿,可直到1966年还动静全无,编辑忍不住去电催促,说都过去4年了,书写到啥程度了啊?高答才3000来页。编辑惊呼那干嘛还不交稿?答曰还没进入正题呢。编辑崩溃地说,那只能出多卷本了……
高做过大受欢迎的“信仰与科学的关系”系列讲座,对访者问及的写作和信仰之间的关系,他回答说:“计算机科学是既壮观又优美的,我尝试尽自己所能,以最恰当的方式来解释我所了解的某些片断……我相信,总有一些神秘的东西是超越人类的理解而存在的……我认为,上帝希望我能创造某些成果,而这些东西能够启发其他人去创造别的成果。”
高德纳这个中文名来自姚储枫教授(香港城大计算机科学系主任,华裔图灵奖得主姚期智的夫人)。以“高”为姓,据Knuth自述是因其个头高大,且辅音G和K读音接近;“德纳”则与“Donald”相谐,且在中文里含体面高贵之义。其时(1977年)高德纳携夫人及儿女John和与Jen正准备访问*——姚储枫给孩子也分别起了“高小强”、“高小珍”的名字,他们全家还同中国孩子在公园玩过无须语言交流的游戏。
有人视高为文艺复兴时期式的天才人物,因其不仅博学,更难得的是具超一流的动手能力——在分工日益细化,专业领域愈来愈狭窄的现代社会,这种博而专,基础与应用兼能,理论和操作并行的人才类型尤为罕见。如同一个人独力设计制造一架飞机,除了需要精通空气动力学理论,还须考虑机身上每一颗螺丝钉的固定方式,这确实不免让人想到欧洲文艺复兴时期列奥纳多·达·芬奇那样的全能巨人。
《计算机程序设计艺术》第一卷于1968年推出,可真正能读完读懂的人为数并不多(传比尔·盖茨费时几个月才读完这一卷,然后说,如果你想成为一个优秀的程序员,那就去读这个《基本算法》吧)。高对此解释道:“我知道我的书是不容易读,不过要知道的是,如果不是我精雕细琢地写的话,它们会比现在难读一百倍。”1973年,这部刚出到第三卷的书(计划写七卷)已被计算机界视为“神作”,最初几年就卖出100多万套;译为俄、日、西、葡、匈牙利、罗马尼亚等多种文字后,更创造了计算机类图书的销售纪录。美国计算机协会(ACM)也不淡定了,1974年就将国际计算机界的至高荣誉“图灵奖”授予了他——此时的高德纳年方36岁,他迄今还是这项最年轻图灵奖获得者纪录的保持者。