主题:[转帖]一代算法大师 Donald E. Knuth
一代算法大师 Donald E. Knuth
Donald E. Knuth,1938年出生于Wisconsin。1960年,当他毕业于Case Institute of Te
chnology数学系时,因为成绩过于出色,被校方打破历史
惯例,同时授予学士和硕士学位。他随即进入大名鼎鼎的加州理工学院
数学系,仅用三年时间便取得博士学位,此时年仅25岁。
毕业后留校任助理教授,28岁时升为副教授。30岁时,加盟斯坦福大学计
算机系,任正教授。从31岁那年起,他开始出版他的历史性经典巨著:
The Art of Computer Programming。他计划共写7卷,然而仅仅出版三卷
之后,已经震惊世界,使他获得计算机科学界的最高荣誉Turing Award!
此时,他年仅38岁!后来,此书与牛顿的“自然哲学的数学原理”等一起,
被评为“世界历史上最伟大的十种科学著作”之一。相信学过数据结构和编
译原理的同学们都知道KMP算法和LR(K)算法有多么不可思议,然而此书
中这样的算法比比皆是!
在计算机科学上,他主要是一位理论家。然而,他在理论以外也同样做出
惊人的成就。鼎鼎大名的排版软件Tex,就是他的作品。此外,还有Metafont
等,也在世界上得到广泛使用。
Knuth获得图灵奖时为36岁,前面多说了两岁。估计他可能是历史上最年轻的图灵奖
获得者,甚至有可能永远把这个记录保持下去。
相比之下,其他获得图灵奖的人当时一般都是五十几岁或者六十几岁(例如去年的
姚先生,和刚去世的Simon),可见Knuth有多伟大!他真不愧为大师中的大师!
他很早就提前退休,为的是集中精力把巨著The Art of Computer Programming写完。
他一生共带过二十四个(此数字也许不准)博士生,发誓不会再带更多的学生。但是,
他有一个奇妙的承诺:
在他定期进行的讲座中,会不断提出一些新的难题。如果有人能在给定的期限内解出
任何一道难题,他将为那个人的博士论文签名!不知道
世界之大,有没有哪位后起之秀能获得这样的殊誉?
他的其它著作和论文难以数计,其中包括Concrete Mathematics等名著。
从1977年起,他获得Fletcher Jones Professor of Computer Science的
头衔,并且同时兼任Professor of Electrical Engineering。1990年,斯坦
福大学更授予他一个非同寻常的头衔Professor of The Art of Computer
Science,作为对他的特殊贡献的承认!
他的其它荣誉数不胜数,其中主要的有:美国国家科学院院士,美国艺术
与科学院院士,美国工程院院士,法国科学院外籍院士,挪威科学院外籍
院士.......;美国数学会Steele奖,瑞典皇家科学院Adelskold奖,以色列
工学院Harvey奖,IEEE冯诺依曼奖,东京高科技奖...... 共达数十个之多。
同时,他还是牛津大学等二十几所大学的荣誉博士。早在1970年,他就在
国际数学大会上做过特邀报告。建议感兴趣的同学参观他的竹叶:
http://www-cs-faculty.stanford.edu/~knuth/
我去了他的主页,其中竟然有中文高德纳。据他介绍是1977年弗朗西斯.姚给他取的中文名字。估计就是上面说的姚先生
姚先生据说是我们南大毕业的一位师兄现在的导师,他主要研究编译领域的东西,2001年得了图灵奖,是第一个得到图灵奖的华人。我对它的了解也就这么多。
yao的英文叫Andrew,而不是Fransis。他好象不是主要研究编译的,而
是研究计算理论的。ACM的网页上说他对计算几何,复杂性理论,数据
结构分析,通讯复杂度,伪随机数理论都有重要贡献。hehe,姚先生
实在是数学高手(先生是Harvard的物理博士),台湾国立大学出身的少见
人才。
这个三卷本的宝典确实不是一般人啃的下来。
不止一两个高人告诉我
这套书出来以后
被摆在书架上机会会更多。
高德纳还有两卷没写完呢!
今年他过了1000000岁生日,第四卷也在写。
因为他写了三卷,对文本编辑器很不满。
就自己编了第一个支持tex格式的编辑器
用来写书
还有一个故事:大抵如下
linux的发明人说:我一觉醒来,上帝告诉我,我编写了世界上最好的操作系统
还有一个牛人(记不得名字了)说:我一觉醒来,上帝告诉我,我编写了世界上最好的文字处理系统
Donald说:“我没有对你们那么说过!"
这个故事就在他的网页上,他现在Stanford。
可以到他的主页看看去http://www-cs-faculty.stanford.edu/~knuth/
你知道他是什么人,他是数据结构与算法的奠基人,是这门学科的鼻祖。现在,连他导的那19个博士都著作等身了.其中R. Sedgewick(Princeton算法课的掌门人)还写了著名的教材Algorithms in C/C++/Java等等,每种版本5个part呢。
有人真能把这三本书读完,我相信。
能理解多少呢?只有自己知道
还有,注意你在他的书里每发现一个错误,他就付给你2。56美元吆!
D
onald Knuth自传的开头这样写道:“Donald Knuth真的只是一个人么?”作为世界顶级计算机科学家之一,Knuth教授已经完成了编译程序、属性文法和运算法则的前沿研究,并编著完成了已在程序设计领域中具有权威标准和参考价值的书目的前三卷。在完成该项工作之余,Knuth还用了十年时间发明了两个数字排版系统,并编写了六本著作对其做了详尽的解释说明,现在,这两个系统已经被广泛地运用于全世界的数学刊物的排版中。随后,Knuth又发明了文件程序设计的两种语言,以及“文章性程式语言”相关的方法论。
到目前为止,Knuth已经出版发行了17部书籍,一百五十余篇论文,包括了巴比伦算法、圣经、字母“s”的历史等多方面的内容。作为一名数学家, Knuth曾开创了几门新的课程,为纯计算数学做出了很大贡献。他所获得的奖项和荣誉数不胜数,其中最值得注目的有1974年美国计算机协会图灵奖 (ACM Turing Award),1979年美国前总统卡特授予的科学金奖(Medal of Science)以及1996年11月由于发明先进技术荣获的极受尊重的京都奖(Kyoto Prize)。在不多的业余时间里,Knuth不仅写小说,还是一个音乐家、作曲家、管风琴设计师。
是Knuth独特的审美感决定了他兴趣广泛、富有多方面造诣的特点,Knuth传奇般的生产力也是源于这一点。对于Knuth来说,衡量一个计算机程序是否完整的标准不仅仅在于它是否能够运行,他认为一个计算机程序应该是雅致的、甚至可以说是美的。计算机程序设计应该是一门艺术,一个算法应该像一段音乐,而一个好的程序应该如一部文学作品一般。
早期经历
Knuth,1938年1月10日生于美国威斯康星州密尔沃基市。他在模式方面辨别和熟练操作的能力在八年级的时候开始显现出来。当时,当地的一家糖果制造商举办了一项比赛,比赛要求选手用其品牌“Ziegler's Giant Bar”中的字母组成新的单词,规定时间内组成单词数量最多者获胜。Knuth参加了比赛,并以单词总数4500余个远远超过了裁判的2500个的标准,轻松赢得头奖。赛后,Knuth说道,如果自己当初想到回答时用些省略符号的话,还能写出更多。这次比赛Knuth为学校赢得了一台电视机,还为每个同学赢得了一根糖果棒。
Knuth多产的出版事业开始于他的高中时代,当时他的科技设计被Westinghouse Science Talent Search 光荣提及。他的“Potzebie System of Weights and Measures ”的基础章节被登在“Mad”杂志第26号,“Power”的基础章节被叫作“whatmeworry”。“Mad”的编辑认识到了年轻的Donald著作的重要性,以25美元买下了他的文章,并刊登在了其1957年6月的期刊上。
高中的时候,Knuth对数学并没多大兴趣,而是把主要精力放在主修的课程:听音乐和作曲上。他在高中的乐队里吹萨克斯、大号时,曾把Dragnet、 Howdy Doody Time 和 Brylcream的主题曲联成一段新的音乐。这位著名的科学家在近期评论自己的早期作品时承认:“对于版权,我一无所知。”
虽然Knuth的等级平均分是学校历史上最高的,但是他和他的指导老师还是对他能否成功学习大学数学持怀疑态度。Knuth说在他高中阶段和大学早期一直有一种自卑感,这个问题一度是他的一个障碍。作为一个大学新生,Knuth没有对于失败的恐惧,他花了许多时间攻克额外的数学难题,几个月后,他在这方面的能力已经远远超过了其他同学。
高等教育和早期的计算机工作
当Knuth在Case科学院(现在的Case Western Reserve)获得物理奖学金时,梦想成为一个音乐家的计划改变了。Knuth回去继续研究数学是在大二,当时一个爱出难题的教授提出了一个特殊的问题,并说哪个学生能解决这个问题就立刻记成绩“A”。Knuth跟大多数同学一样,也认为那是道解不出来的题目,直到有一天,他错过了公共汽车,只能步行去看一个演出,Knuth利用路上这点空闲时间决定尝试一下。那阵子他运气真的是非常好,不仅问题很快就解开了,得到了“A”,还成功地经常逃课。虽然 Knuth也承认,逃课让他有负罪感,但是很明显,他完全有能力补上落下的功课,接下来的一学年,他的离散数学就又得了个“A”,而且还获得了给自己不能参加的课程评定论文等级的工作机会。
1956年,作为Case的新生,Knuth第一次接触到了计算机,那是一台IBM 650。Knuth说直到一年后,女孩才进入了他的生活。这又是计算机科学界一直以来亏欠科学家们的一个事例之一。
Knuth熬夜读IBM 650的说明手册,自学基本的程序设计。那时,在高等计算机语言发明之前,程序编写只能用第二代或是汇编语言。这个工作既耗时又困难,因为指令必须根据每台机器特定的构造编写,而实际上指令只须一步就可从二进制0、1系列转存到计算机硬盘上。Knuth说,有了第一次使用650的经历,他便肯定自己能编写出比说明手册上介绍的更好的程序。
Knuth很快便开始“闲逛”,编写可以执行数学函数的程序。他的第一个程序是把数字转化为素数,第三个是做井字游戏(或者说是让计算机在改正每次输的错误的过程来学会玩井字游戏)。作为学校篮球队的经理,Knuth编写了一个根据不同成绩标准评定每个运动员对球队贡献等级的程序,他的努力赢来了那些认为这样做有助于球队赢得同盟冠军的教练的好评(虽然,无庸质疑,不是每一个运动员都这样认为)。Knuth的成就成了新闻周刊的标志,他和教练、计算机的照片也被刊登在IBM650后来的说明手册上。
1960年,Knuth从Case毕业时享有着最高荣誉,在由全体教员参加的选举上,他因其公认的出众成就获得了硕士学位。1963年,Knuth回到加利福尼亚理工学院攻取了数学博士学位,之后成为了该院的数学教授。在加利福尼亚理工学院任教期间,Knuth作为Burroughs 公司的顾问继续从事软件开发工作。1968年,他加入了斯坦福大学,九年后坐上了该校计算机科学学科的第一把交椅。1993年,Knuth成为斯坦福大学 “the Art of Computer Programming”(计算机程序设计艺术)的荣誉退休教授。
早期成就和计算机程序设计艺术的开端
1962年,Knuth还是个研究生的时候就开始了他计算机程序的工作。那时,他已经开始了个人咨询,为不同的机器编写编译程序。编译程序是一种翻译原始或高级语言和对象或二进制机器语言的中间语言。在不知道众多软件公司正高额寻求成百上千的编辑者的情况下,Knuth编写了一个程序,赚得5000美元,他的名字立刻响誉了整个行业。世界上一流的出版社Addison-Wesley找到Knuth,请他写一本关于编译程序的书。到1966年,Knuth已经发表了3000页的手写设计草图,并且发明了一种综合方法,用于分析或决定结构翻译所客观需要的文法规则。最近,关于他的那第一部著作,Knuth自己这样评述:“用三年半的时间写第一章可并不是件好事。”
当Knuth的出版商计算出他的那3000页的笔迹打印成文章大约需要2000页时,大家才发现这实际上是一项多么大的工程。Knuth决定将它详述,成为一部更大的关于程序设计科学的纵览,共分为七个部分。一部巨著就这样——诞生了。《计算机程序设计艺术》,至今仍是各程序类图书书架上标志性的书籍。微软首席执行官比尔•盖茨在1995年接受一次采访时说,“如果你认为你是一名真正优秀的程序员,就去读第一卷,确定可以解决其中所有的问题。”值得注意的是,盖茨本人读这本书时用去了几个月的时间,并同时进行了难以置信的训练。盖茨还说:“如果你能读懂整套书的话,请给我发一份你的简历。”
依Knuth本人所讲,《计算机程序设计艺术》是他毕生最重要的事业,其目的是“组织和总结所知道的计算机方法的相关知识,并打下坚实的数学、历史基础”。Knuth撰写的前三卷被翻译成多种语言,到1976年为止,已卖出超过一百万册。他目前正全神贯注地编写第四卷,他期望第四卷的篇幅约为2000 页,并分为三个独立的章节。为了完成丛书的其余部分,Knuth现在进入了一种引退的状态,全身心地投入这项工作。Knuth说,一般说来,他更喜欢在一段时间内集中精神完成一项工作,正像他自己在书中提出的:按“一批”的模式。
Knuth从他主要的工作计划中拿出了十年,即从1976年起,致力于对数字排版的研究,设计了著名的文件准备TeX系统,字体生成程序METAFONT。这项工作带来的值得注意的副产品是用于结构文件和“文章性程式语言”附随方法论的WEB和CWEB语言。
现在,Knuth和他的妻子Jill,两个孩子John 和Jennifer一起,住在斯坦福大学校园里。他继续着《计算机程序设计艺术》第四卷的编写工作。虽然说Knuth是全身心的投入这一项工作,但他还是能挤出时间研究MMIX的设计,那是一台64位RISC(精简指令集计算机)。而他的业余爱好仍然是音乐,还一直邀请那些能够即兴演奏四手联弹钢琴曲的人们给他留下便条,以便安排一些活动。
成就简要回顾
编译程序
编译程序能够实现高级语言和二进制机器语言之间的翻译。二十世纪六十年代初期,Knuth教授致力于这方面的研究,虽然现代的软件已经可以使其变的简单一些,但编写编译程序仍被认为是一项极为困难的工作。Knuth教授在这方面最著名的成就是LR(k)分析的研究,那是一个能使确定一串字符文法规则的过程更加顺畅的值得注目的方法。
属性文法
在编译程序的工作之后,Knuth教授走上了形式上定义程序语言意义、语义的研究道路。他建立起一个更加经济的方法去通译联合规则,他把这种方法称作“属性规则”。该方法创立的同时,计算机科学的子域被称作“属性文法”。
算法
也许Knuth教授在计算机科学领域最原创的贡献就是他对于算法的分析。算法是编写一个程序,使之能去完成一项任务的基础,例如搜索或分类等。在加利福尼亚理工学院时,Knuth教授在一个毕业生的协作下,开发了用来探究数学公理推论的Knuth-Bendix算法。1968年,Knuth教授在斯坦福,和他的一个学生开发了Knuth-Morris-Pratt算法,该法则使计算机在文章中搜索一串字符的过程更加连贯。他所著的《计算机程序设计艺术》是一个详尽的算法实践和科学的概观。
数字化排版
“数学书籍和杂志已经不像从前那样漂亮了。”Knuth教授在一篇早期关于数学排版的文章中这样写道。由于对计算机排版的校样的低质量感到无法忍受, Knuth教授从他史诗性的七卷集巨著的编写过程中拿出了十年时间,来开发一个高质量的计算机排版系统。其间,Knuth开发了两个用于文件排版和字体生成的软件系统,这两个系统现在已被世界大多数出版社运用。它们分别是TeX,用于出版业的科学排版,和“优美文章”的产品;METAFONT,一个字体生成程序。
结构化文件和文章性程式语言
Knuth教授的排版研究,引领他发明了文件构造的两种语言和一个方法论,叫作“文章性程式语言”。语言分别是WEB和CWEB,它们促进了程序编写向 “文学作品,是用来阅读的”这个方向发展。这两种语言的结合,一种是文件格式化,另一种是程序设计,这就使程序员能够同时创建两个不同的系统程序,一个面向人,另一个面向机器。当一条过程清楚地描述程序并促进其维护时,另外一个则产生一个机器可执行的程序。这些工作就是Knuth教授在实现其使程序设计为读者易懂、甚至感觉漂亮的目标的过程中,在计算机领域里所做出的巨大贡献。
Donald E. Knuth,1938年出生于Wisconsin。1960年,当他毕业于Case Institute of Te
chnology数学系时,因为成绩过于出色,被校方打破历史
惯例,同时授予学士和硕士学位。他随即进入大名鼎鼎的加州理工学院
数学系,仅用三年时间便取得博士学位,此时年仅25岁。
毕业后留校任助理教授,28岁时升为副教授。30岁时,加盟斯坦福大学计
算机系,任正教授。从31岁那年起,他开始出版他的历史性经典巨著:
The Art of Computer Programming。他计划共写7卷,然而仅仅出版三卷
之后,已经震惊世界,使他获得计算机科学界的最高荣誉Turing Award!
此时,他年仅38岁!后来,此书与牛顿的“自然哲学的数学原理”等一起,
被评为“世界历史上最伟大的十种科学著作”之一。相信学过数据结构和编
译原理的同学们都知道KMP算法和LR(K)算法有多么不可思议,然而此书
中这样的算法比比皆是!
在计算机科学上,他主要是一位理论家。然而,他在理论以外也同样做出
惊人的成就。鼎鼎大名的排版软件Tex,就是他的作品。此外,还有Metafont
等,也在世界上得到广泛使用。
Knuth获得图灵奖时为36岁,前面多说了两岁。估计他可能是历史上最年轻的图灵奖
获得者,甚至有可能永远把这个记录保持下去。
相比之下,其他获得图灵奖的人当时一般都是五十几岁或者六十几岁(例如去年的
姚先生,和刚去世的Simon),可见Knuth有多伟大!他真不愧为大师中的大师!
他很早就提前退休,为的是集中精力把巨著The Art of Computer Programming写完。
他一生共带过二十四个(此数字也许不准)博士生,发誓不会再带更多的学生。但是,
他有一个奇妙的承诺:
在他定期进行的讲座中,会不断提出一些新的难题。如果有人能在给定的期限内解出
任何一道难题,他将为那个人的博士论文签名!不知道
世界之大,有没有哪位后起之秀能获得这样的殊誉?
他的其它著作和论文难以数计,其中包括Concrete Mathematics等名著。
从1977年起,他获得Fletcher Jones Professor of Computer Science的
头衔,并且同时兼任Professor of Electrical Engineering。1990年,斯坦
福大学更授予他一个非同寻常的头衔Professor of The Art of Computer
Science,作为对他的特殊贡献的承认!
他的其它荣誉数不胜数,其中主要的有:美国国家科学院院士,美国艺术
与科学院院士,美国工程院院士,法国科学院外籍院士,挪威科学院外籍
院士.......;美国数学会Steele奖,瑞典皇家科学院Adelskold奖,以色列
工学院Harvey奖,IEEE冯诺依曼奖,东京高科技奖...... 共达数十个之多。
同时,他还是牛津大学等二十几所大学的荣誉博士。早在1970年,他就在
国际数学大会上做过特邀报告。建议感兴趣的同学参观他的竹叶:
http://www-cs-faculty.stanford.edu/~knuth/
我去了他的主页,其中竟然有中文高德纳。据他介绍是1977年弗朗西斯.姚给他取的中文名字。估计就是上面说的姚先生
姚先生据说是我们南大毕业的一位师兄现在的导师,他主要研究编译领域的东西,2001年得了图灵奖,是第一个得到图灵奖的华人。我对它的了解也就这么多。
yao的英文叫Andrew,而不是Fransis。他好象不是主要研究编译的,而
是研究计算理论的。ACM的网页上说他对计算几何,复杂性理论,数据
结构分析,通讯复杂度,伪随机数理论都有重要贡献。hehe,姚先生
实在是数学高手(先生是Harvard的物理博士),台湾国立大学出身的少见
人才。
这个三卷本的宝典确实不是一般人啃的下来。
不止一两个高人告诉我
这套书出来以后
被摆在书架上机会会更多。
高德纳还有两卷没写完呢!
今年他过了1000000岁生日,第四卷也在写。
因为他写了三卷,对文本编辑器很不满。
就自己编了第一个支持tex格式的编辑器
用来写书
还有一个故事:大抵如下
linux的发明人说:我一觉醒来,上帝告诉我,我编写了世界上最好的操作系统
还有一个牛人(记不得名字了)说:我一觉醒来,上帝告诉我,我编写了世界上最好的文字处理系统
Donald说:“我没有对你们那么说过!"
这个故事就在他的网页上,他现在Stanford。
可以到他的主页看看去http://www-cs-faculty.stanford.edu/~knuth/
你知道他是什么人,他是数据结构与算法的奠基人,是这门学科的鼻祖。现在,连他导的那19个博士都著作等身了.其中R. Sedgewick(Princeton算法课的掌门人)还写了著名的教材Algorithms in C/C++/Java等等,每种版本5个part呢。
有人真能把这三本书读完,我相信。
能理解多少呢?只有自己知道
还有,注意你在他的书里每发现一个错误,他就付给你2。56美元吆!
D
onald Knuth自传的开头这样写道:“Donald Knuth真的只是一个人么?”作为世界顶级计算机科学家之一,Knuth教授已经完成了编译程序、属性文法和运算法则的前沿研究,并编著完成了已在程序设计领域中具有权威标准和参考价值的书目的前三卷。在完成该项工作之余,Knuth还用了十年时间发明了两个数字排版系统,并编写了六本著作对其做了详尽的解释说明,现在,这两个系统已经被广泛地运用于全世界的数学刊物的排版中。随后,Knuth又发明了文件程序设计的两种语言,以及“文章性程式语言”相关的方法论。
到目前为止,Knuth已经出版发行了17部书籍,一百五十余篇论文,包括了巴比伦算法、圣经、字母“s”的历史等多方面的内容。作为一名数学家, Knuth曾开创了几门新的课程,为纯计算数学做出了很大贡献。他所获得的奖项和荣誉数不胜数,其中最值得注目的有1974年美国计算机协会图灵奖 (ACM Turing Award),1979年美国前总统卡特授予的科学金奖(Medal of Science)以及1996年11月由于发明先进技术荣获的极受尊重的京都奖(Kyoto Prize)。在不多的业余时间里,Knuth不仅写小说,还是一个音乐家、作曲家、管风琴设计师。
是Knuth独特的审美感决定了他兴趣广泛、富有多方面造诣的特点,Knuth传奇般的生产力也是源于这一点。对于Knuth来说,衡量一个计算机程序是否完整的标准不仅仅在于它是否能够运行,他认为一个计算机程序应该是雅致的、甚至可以说是美的。计算机程序设计应该是一门艺术,一个算法应该像一段音乐,而一个好的程序应该如一部文学作品一般。
早期经历
Knuth,1938年1月10日生于美国威斯康星州密尔沃基市。他在模式方面辨别和熟练操作的能力在八年级的时候开始显现出来。当时,当地的一家糖果制造商举办了一项比赛,比赛要求选手用其品牌“Ziegler's Giant Bar”中的字母组成新的单词,规定时间内组成单词数量最多者获胜。Knuth参加了比赛,并以单词总数4500余个远远超过了裁判的2500个的标准,轻松赢得头奖。赛后,Knuth说道,如果自己当初想到回答时用些省略符号的话,还能写出更多。这次比赛Knuth为学校赢得了一台电视机,还为每个同学赢得了一根糖果棒。
Knuth多产的出版事业开始于他的高中时代,当时他的科技设计被Westinghouse Science Talent Search 光荣提及。他的“Potzebie System of Weights and Measures ”的基础章节被登在“Mad”杂志第26号,“Power”的基础章节被叫作“whatmeworry”。“Mad”的编辑认识到了年轻的Donald著作的重要性,以25美元买下了他的文章,并刊登在了其1957年6月的期刊上。
高中的时候,Knuth对数学并没多大兴趣,而是把主要精力放在主修的课程:听音乐和作曲上。他在高中的乐队里吹萨克斯、大号时,曾把Dragnet、 Howdy Doody Time 和 Brylcream的主题曲联成一段新的音乐。这位著名的科学家在近期评论自己的早期作品时承认:“对于版权,我一无所知。”
虽然Knuth的等级平均分是学校历史上最高的,但是他和他的指导老师还是对他能否成功学习大学数学持怀疑态度。Knuth说在他高中阶段和大学早期一直有一种自卑感,这个问题一度是他的一个障碍。作为一个大学新生,Knuth没有对于失败的恐惧,他花了许多时间攻克额外的数学难题,几个月后,他在这方面的能力已经远远超过了其他同学。
高等教育和早期的计算机工作
当Knuth在Case科学院(现在的Case Western Reserve)获得物理奖学金时,梦想成为一个音乐家的计划改变了。Knuth回去继续研究数学是在大二,当时一个爱出难题的教授提出了一个特殊的问题,并说哪个学生能解决这个问题就立刻记成绩“A”。Knuth跟大多数同学一样,也认为那是道解不出来的题目,直到有一天,他错过了公共汽车,只能步行去看一个演出,Knuth利用路上这点空闲时间决定尝试一下。那阵子他运气真的是非常好,不仅问题很快就解开了,得到了“A”,还成功地经常逃课。虽然 Knuth也承认,逃课让他有负罪感,但是很明显,他完全有能力补上落下的功课,接下来的一学年,他的离散数学就又得了个“A”,而且还获得了给自己不能参加的课程评定论文等级的工作机会。
1956年,作为Case的新生,Knuth第一次接触到了计算机,那是一台IBM 650。Knuth说直到一年后,女孩才进入了他的生活。这又是计算机科学界一直以来亏欠科学家们的一个事例之一。
Knuth熬夜读IBM 650的说明手册,自学基本的程序设计。那时,在高等计算机语言发明之前,程序编写只能用第二代或是汇编语言。这个工作既耗时又困难,因为指令必须根据每台机器特定的构造编写,而实际上指令只须一步就可从二进制0、1系列转存到计算机硬盘上。Knuth说,有了第一次使用650的经历,他便肯定自己能编写出比说明手册上介绍的更好的程序。
Knuth很快便开始“闲逛”,编写可以执行数学函数的程序。他的第一个程序是把数字转化为素数,第三个是做井字游戏(或者说是让计算机在改正每次输的错误的过程来学会玩井字游戏)。作为学校篮球队的经理,Knuth编写了一个根据不同成绩标准评定每个运动员对球队贡献等级的程序,他的努力赢来了那些认为这样做有助于球队赢得同盟冠军的教练的好评(虽然,无庸质疑,不是每一个运动员都这样认为)。Knuth的成就成了新闻周刊的标志,他和教练、计算机的照片也被刊登在IBM650后来的说明手册上。
1960年,Knuth从Case毕业时享有着最高荣誉,在由全体教员参加的选举上,他因其公认的出众成就获得了硕士学位。1963年,Knuth回到加利福尼亚理工学院攻取了数学博士学位,之后成为了该院的数学教授。在加利福尼亚理工学院任教期间,Knuth作为Burroughs 公司的顾问继续从事软件开发工作。1968年,他加入了斯坦福大学,九年后坐上了该校计算机科学学科的第一把交椅。1993年,Knuth成为斯坦福大学 “the Art of Computer Programming”(计算机程序设计艺术)的荣誉退休教授。
早期成就和计算机程序设计艺术的开端
1962年,Knuth还是个研究生的时候就开始了他计算机程序的工作。那时,他已经开始了个人咨询,为不同的机器编写编译程序。编译程序是一种翻译原始或高级语言和对象或二进制机器语言的中间语言。在不知道众多软件公司正高额寻求成百上千的编辑者的情况下,Knuth编写了一个程序,赚得5000美元,他的名字立刻响誉了整个行业。世界上一流的出版社Addison-Wesley找到Knuth,请他写一本关于编译程序的书。到1966年,Knuth已经发表了3000页的手写设计草图,并且发明了一种综合方法,用于分析或决定结构翻译所客观需要的文法规则。最近,关于他的那第一部著作,Knuth自己这样评述:“用三年半的时间写第一章可并不是件好事。”
当Knuth的出版商计算出他的那3000页的笔迹打印成文章大约需要2000页时,大家才发现这实际上是一项多么大的工程。Knuth决定将它详述,成为一部更大的关于程序设计科学的纵览,共分为七个部分。一部巨著就这样——诞生了。《计算机程序设计艺术》,至今仍是各程序类图书书架上标志性的书籍。微软首席执行官比尔•盖茨在1995年接受一次采访时说,“如果你认为你是一名真正优秀的程序员,就去读第一卷,确定可以解决其中所有的问题。”值得注意的是,盖茨本人读这本书时用去了几个月的时间,并同时进行了难以置信的训练。盖茨还说:“如果你能读懂整套书的话,请给我发一份你的简历。”
依Knuth本人所讲,《计算机程序设计艺术》是他毕生最重要的事业,其目的是“组织和总结所知道的计算机方法的相关知识,并打下坚实的数学、历史基础”。Knuth撰写的前三卷被翻译成多种语言,到1976年为止,已卖出超过一百万册。他目前正全神贯注地编写第四卷,他期望第四卷的篇幅约为2000 页,并分为三个独立的章节。为了完成丛书的其余部分,Knuth现在进入了一种引退的状态,全身心地投入这项工作。Knuth说,一般说来,他更喜欢在一段时间内集中精神完成一项工作,正像他自己在书中提出的:按“一批”的模式。
Knuth从他主要的工作计划中拿出了十年,即从1976年起,致力于对数字排版的研究,设计了著名的文件准备TeX系统,字体生成程序METAFONT。这项工作带来的值得注意的副产品是用于结构文件和“文章性程式语言”附随方法论的WEB和CWEB语言。
现在,Knuth和他的妻子Jill,两个孩子John 和Jennifer一起,住在斯坦福大学校园里。他继续着《计算机程序设计艺术》第四卷的编写工作。虽然说Knuth是全身心的投入这一项工作,但他还是能挤出时间研究MMIX的设计,那是一台64位RISC(精简指令集计算机)。而他的业余爱好仍然是音乐,还一直邀请那些能够即兴演奏四手联弹钢琴曲的人们给他留下便条,以便安排一些活动。
成就简要回顾
编译程序
编译程序能够实现高级语言和二进制机器语言之间的翻译。二十世纪六十年代初期,Knuth教授致力于这方面的研究,虽然现代的软件已经可以使其变的简单一些,但编写编译程序仍被认为是一项极为困难的工作。Knuth教授在这方面最著名的成就是LR(k)分析的研究,那是一个能使确定一串字符文法规则的过程更加顺畅的值得注目的方法。
属性文法
在编译程序的工作之后,Knuth教授走上了形式上定义程序语言意义、语义的研究道路。他建立起一个更加经济的方法去通译联合规则,他把这种方法称作“属性规则”。该方法创立的同时,计算机科学的子域被称作“属性文法”。
算法
也许Knuth教授在计算机科学领域最原创的贡献就是他对于算法的分析。算法是编写一个程序,使之能去完成一项任务的基础,例如搜索或分类等。在加利福尼亚理工学院时,Knuth教授在一个毕业生的协作下,开发了用来探究数学公理推论的Knuth-Bendix算法。1968年,Knuth教授在斯坦福,和他的一个学生开发了Knuth-Morris-Pratt算法,该法则使计算机在文章中搜索一串字符的过程更加连贯。他所著的《计算机程序设计艺术》是一个详尽的算法实践和科学的概观。
数字化排版
“数学书籍和杂志已经不像从前那样漂亮了。”Knuth教授在一篇早期关于数学排版的文章中这样写道。由于对计算机排版的校样的低质量感到无法忍受, Knuth教授从他史诗性的七卷集巨著的编写过程中拿出了十年时间,来开发一个高质量的计算机排版系统。其间,Knuth开发了两个用于文件排版和字体生成的软件系统,这两个系统现在已被世界大多数出版社运用。它们分别是TeX,用于出版业的科学排版,和“优美文章”的产品;METAFONT,一个字体生成程序。
结构化文件和文章性程式语言
Knuth教授的排版研究,引领他发明了文件构造的两种语言和一个方法论,叫作“文章性程式语言”。语言分别是WEB和CWEB,它们促进了程序编写向 “文学作品,是用来阅读的”这个方向发展。这两种语言的结合,一种是文件格式化,另一种是程序设计,这就使程序员能够同时创建两个不同的系统程序,一个面向人,另一个面向机器。当一条过程清楚地描述程序并促进其维护时,另外一个则产生一个机器可执行的程序。这些工作就是Knuth教授在实现其使程序设计为读者易懂、甚至感觉漂亮的目标的过程中,在计算机领域里所做出的巨大贡献。