计算机鼻祖-Donald Knuth(高德纳) 的传奇

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

2017-05-30年更新 关于Knuth教授的中文名字


关于Donald Knuth的几个版本

「高德纳」是姚期智夫人、计算机科学家储枫在他 1970 年代访问中国之前起的名,正式的出版物应当依照名从主人的原则采用这个名称,就像原澳大利亚总理陆克文一样。

「唐纳德」是他本名 Donald 的音译,「高纳德」。

「高纳德」应该是误传,可能是前面两个名字的混合Donald Knuth 的官网上,标注的中文名就是高德纳。

扫描二维码关注公众号,回复: 4036558 查看本文章

因此Knuth教授的中文名字就是「高德纳」「德纳」音译自 Donald, 而「高」则取自 Knuth 这个姓氏的首音,并配以中国姓氏。这样的名字与其说是翻译,不如说是根据原名发音而取的中文名。这类名字在对于中国文化有一定兴趣和了解的外国人中不罕见。


参见Knuth教授的个人主页:


Donald E. Knuth ((高德纳)), Professor Emeritus of The Art of Computer Programming at Stanford University, welcomes you to his home page.

 is my Chinese name, given to me in 1977 by Frances Yao. Many browsers are now able to display these characters in their typeset form (高德纳); hopefully this will be routinely possible as computers andUnicode help the world to get smaller.



        

          李开复说,练内功,不要只花功夫学习各种流行的编程语言和工具,以及一些公司招聘广告上要求的科目。要把数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。不妨试试Donald Knuth的Art of Computer Programming里的题目,如果你能够解决其中的大部分题目,就说明你在算法方面的功力不错了。

          Donald 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为学校赢得了一台电视机,还为每个同学赢得了一根糖果棒。

数学上,克努特也很早就表现出天才。高中一年级时,他发明了一种方法,利用这种方法,对任意画出的2条相交直线,他能立即给出相应的方程。

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的主题曲联成一段新的音乐。这位著名的科学家在近期评论自己的早期作品时承认:“对于版权,我一无所知。”

1956年,克努特以各科平均97.5的创记录的高分从密尔沃基路德兰高级中学毕业,进入俄亥俄州克利夫兰的开思理工学院(Case Institute of Technology)攻读物理。这一年,他在中学时就创作的一篇出色的科学幻想小说“普茨比度量衡体系”(The Potrzebie System of Weights and Measures)在美国著名的《疯狂》(Mad)杂志上发表,克努特获得了他的第一笔稿费25美元,并因而获得西屋科学天才的提名奖。在这篇小说中,克努特风趣而富于幻想地提出了替代公制的一种新的计量制度,比如以一本流行杂志的厚度为长度单位,虽然滑稽可笑,却设计得严密周到,天衣无缝,其中甚至还包括一种新的历法。文章刊出后大受欢迎,多次重印,1991年还重印过一次,其时作者克努特即将退休。

  虽然 Knuth的等级平均分是学校历史上最高的,但是他和他的指导老师还是对他能否成功学习大学数学持怀疑态度。Knuth说在他高中阶段和大学早期一直有一种自卑感,这个问题一度是他的一个障碍。作为一个大学新生,Knuth没有对于失败的恐惧,他花了许多时间攻克额外的数学难题,几个月后,他在这方面的能力已经远远超过了其他同学。

 

高等教育和早期的计算机工作

 

当Knuth在Case科学院(现在的Case Western Reserve)获得物理奖学金时,梦想成为一个音乐家的计划改变了。Knuth回去继续研究数学是在大二,当时一个爱出难题的教授提出了一个特殊的问题,并说哪个学生能解决这个问题就立刻记成绩“A”。Knuth跟大多数同学一样,也认为那是道解不出来的题目,直到有一天,他错过了公共汽车,只能步行去看一个演出,Knuth利用路上这点空闲时间决定尝试一下。那阵子他运气真的是非常好,不仅问题很快就解开了,得到了“A”,还成功地经常逃课。虽然 Knuth也承认,逃课让他有负罪感,但是很明显,他完全有能力补上落下的功课,接下来的一学年,他的离散数学就又得了个“A”,而且还获得了给自己不能参加的课程评定论文等级的工作机会。

 

1956年,作为Case的新生,一年级结束以后的暑假,克努特在学校打工,负责把统计数字画成图表。碰巧他工作室的隔壁就是计算机房,新到了一台IBM650。当时的计算机体积都很庞大,有供输入和调试的控制台,上面排列着一排排的开关和指示灯,计算机工作时指示灯快速闪烁变化出不同的图案,这引起克努特极大的好奇与兴趣,他接连好几天彻夜不眠地呆在机房,观察它的工作,钻研使用手册,探究计算机的奥秘。一年以后,他终于改学数学,与计算机结缘。这段经历对于克努特是如此重要和关键,以致他在《计算机程序设计的艺术》第一卷的卷首,不像别的作者那样一般写上“献给自己的父母”或“献给自己的妻子”,而是写着“献给曾经安装在开思理工学院的650型计算机,以纪念那些愉快的夜晚”。

天天与计算机为伍,Knuth说直到一年后,女孩才进入了他的生活。这又是计算机科学界一直以来亏欠科学家们的一个事例之一。

Knuth 熬夜读IBM 650的说明手册,自学基本的程序设计。那时,在高等计算机语言发明之前,程序编写只能用第二代或是汇编语言。这个工作既耗时又困难,因为指令必须根据每台机器特定的构造编写,而实际上指令只须一步就可从二进制0、1系列转存到计算机硬盘上。Knuth说,有了第一次使用650的经历,他便肯定自己能编写出比说明手册上介绍的更好的程序。

Knuth很快便开始“闲逛”,编写可以执行数学函数的程序。他的第一个程序是把数字转化为素数,第三个是做井字游戏(或者说是让计算机在改正每次输的错误的过程来学会玩井字游戏)。他的第一个计算机应用程序也是在650计算机上实现的:他为他所在的校篮球队(克努特人高马大,也喜爱运动,娱乐)设计了一个复杂的公式,根据球员在每场比赛中的得分、助攻、抢断、篮板球、盖帽等多项统计数字对球员进行综合评估。球队教练根据克努特的程序挑选和使用球员,使开思理工学院在1960年赢得了联赛冠军,克努特的“神奇的公式和程序”也被当地报纸和广播传为美谈。

作为学校篮球队的经理,Knuth编写了一个根据不同成绩标准评定每个运动员对球队贡献等级的程序,他的努力赢来了那些认为这样做有助于球队赢得同盟冠军的教练的好评(虽然,无庸质疑,不是每一个运动员都这样认为)。 Knuth的成就成了新闻周刊的标志,他和教练、计算机的照片也被刊登在IBM650后来的说明手册上,当然这也是Knuth的第一个计算机应用程序。

 

1960年,Knuth从 Case毕业时享有着最高荣誉,在由全体教员参加的选举上,他因其公认的出众成就不但被授予学士学位,还被破例同时授予硕士学位。之后他进入加州理工学院研究生院,1963年获得博士学位,留校工作至1968年,然后转入斯坦福大学任教,其间1972—1973年曾经在奥斯陆大学当客座教授。

 

1963年,Knuth回到加利福尼亚理工学院攻取了数学博士学位,之后成为了该院的数学教授。在加利福尼亚理工学院任教期间,Knuth作为Burroughs 公司的顾问继续从事软件开发工作。1968年,他加入了斯坦福大学,九年后坐上了该校计算机科学学科的第一把交椅。1993年,Knuth成为斯坦福大学 “the Art of Computer Programming”(计算机程序设计艺术)的荣誉退休教授。

 

 

早期成就和计算机程序设计艺术的开端

计算机程序设计艺术

1962年,Knuth还是个研究生的时候就开始了他计算机程序的工作。那时,他已经开始了个人咨询,为不同的机器编写编译程序。编译程序是一种翻译原始或高级语言和对象或二进制机器语言的中间语言。在不知道众多软件公司正高额寻求成百上千的编辑者的情况下,Knuth编写了一个程序,赚得5000美元,他的名字立刻响誉了整个行业。在伯克利毕业的前一年,世界上一流的出版社Addison-Wesley艾迪生-韦斯利出版社约初露头角的高德纳写一本编译器和程序设计方面的书,这件原本寻常的事最终成就了计算机科学史上的一个奇观。出版社1962年约稿,可直到1966年还动静全无,编辑忍不住去电催促,说都过去4年了,书写到啥程度了啊?高答才3000来页。编辑惊呼那干嘛还不交稿?答曰还没进入正题呢。编辑崩溃地说,那只能出多卷本了……

当Knuth的出版商计算出他的那3000页的笔迹打印成文章大约需要2000页时,大家才发现这实际上是一项多么大的工程。在3000页的手写设计草图中,Knuth发明了一种综合方法,用于分析或决定结构翻译所客观需要的文法规则。最近,关于他的那第一部著作,Knuth自己这样评述:“用三年半的时间写第一章可并不是件好事。”Knuth决定将它详述,成为一部更大的关于程序设计科学的纵览,共分为七个部分。一部巨著就这样——诞生了。《计算机程序设计艺术》,至今仍是各程序类图书书架上标志性的书籍

  把一件平常的事做到人间极致,这就是高德。他不是故弄玄虚,他的心里攒着一股劲儿,要写一部与牛顿的《自然哲学的数学原理》相媲美的巨著。 1968年,《计算机程序设计艺术》(TAOCP)的第一卷正式出版了。这一卷的标题叫《基本算法》,但难度却并不低。。微软首席执行官比尔盖茨在1995年接受一次采访时说,“如果你认为你是一名真正优秀的程序员,就去读第一卷,确定可以解决其中所有的问题。”值得注意的是,盖茨本人读这本书时用去了几个月的时间,并同时进行了难以置信的训练。盖茨还说:“如果你能读懂整套书的话,请给我发一份你的简历。”高德本人的说法更犀利:要是看不懂,就别当 程序员。

  同年,高德跳槽到斯坦福大学,并当上了教授。一年后,TAOCP第二卷正式出版。1973年,这本书出到了第三卷。这三卷书被计算机界惊为“ 神作”,在最初的几年内就卖出去100多万套。按照计划,这套书一共是七卷,但是现在刚刚写完三卷,就已是震古烁今。震到什么程度呢,连图灵奖颁奖委员都 坐不住了。按照惯例,图灵奖的获奖者都是成就等身,要经过时代的检验。但此时,美国计算机协会便决定立即为其颁发图灵奖。这对高德来说,无疑是个殊荣, 这一年他只有36岁。至今,他仍保持着图灵奖最年轻获奖者的纪录。

高德在获此殊荣之后,再一次令世界大跌眼镜:他宣布从此歇笔了,因为排版工具太差,破坏了这套书的美。这一动作让外界十分震惊。有人说,高德 纳江郎才尽,见好就收;有人说,图灵奖对前三卷的评价过高了,高德只好找理由撤了;还有人说,获奖之后停止写作,充分体现了他写书的目的就是为了功利。

Tex文字排版系统

  可高德在辍笔的10年间居然创造了三个重要的成果:字体设计系统METAFONT、文学化编程(Literate Programming),以及其中影响最大的排版系统TEX。

  在Word系统中写科学论文是一件很辛苦的事,你需要调整格式,也很难表现数学式。但是在TEX中,这些麻烦几乎完全不存在,只要载入样式文件,排版就自动完成了。TEX是一场出版界的革命,直到现在仍是全球学术排版的不二规范。

  TEX作为一个软件产品,也令人叹为观止。它的版本号不是自然数列,也不是年份,而是从3开始,不断逼近圆周率(目前最新版本是 3.1415926)。高德再一次用行动宣告,这个东西趋近完美,不可能再有什么大的改进了。他还设立了奖金:谁发现TEX的一个错误,就付他2.56 美元,第二个错误5.12美元,第三个10.24美元……以此类推。结果直到今天,他也没有为此付出多少钱,可见TEX经过了怎样的千锤百炼。他设置的另 一个奖项是找出其著作中错误的人能得到2.56美元,因为“256美分刚好是十六进制的一美元”。据说,获奖者将有他签名的支票视为珍宝,并不兑现。

为什么是2.56美元?Knuth 教授的答案是:

“256 pennies is one hexadecimal dollar.”


从1981年夏至1996年7月1日,Knuth 教授给指出错误的人回信250多封,其中一半以上装有奖励支票。从奖励支票清单来看,有一位名叫 Axel Böttcher 的人,曾先后5次得到两块五毛六的支票,3次得到五块一毛二的支票,真可谓牛人背后有牛人。

受麦粒与棋盘的故事影响,Knuth 教授宣布,每发现一个 TeX 程序或 METAFONT 程序中的错误,奖励从2.56美元开始,每年翻倍,最高为327.68美元。1995年有两人领取了这项奖金,此后至今,还无人能够认领!

 

有网友戏说,什么是聪明:在 Knuth 的书中找到错误;什么是愚蠢:去兑现那张两块五毛六的支票。

 

歇笔十年的高德,手捧这三项成果重出江湖,打消了一切质疑。这时他才对十年前的歇笔事件做了一个轻描淡写的解释:一个人要想把事情做得漂亮,就必须要跟上帝保持和谐,现在,上帝终于让我去写四卷了。

  1992年,高德为了专心写作,宣布提前退休,并停用电子邮箱(此人从1975年就开始玩电邮了)。高德一共带了28位博士生,他觉得28 这个数字很好,于是便宣布不再收学生了。尽管如此,他仍然为想要师从于他的人们留下了一个盼头:他开了一门公开课,每次会提出一个问题,如果谁能快速解出 来,高德就会为他的博士论文签名。不知道哪位后起之秀能够获得如此殊荣呢,我们拭目以待吧。

  2008年,在TAOCP的前三卷面市30年之后,第四卷终于面世了。而高德自己却已是白发苍苍的古稀老人了。他对计算机科学的热爱,使他为这套丛书耗费了一生的心血。

 

 

依Knuth本人所讲,《计算机程序设计艺术》是他毕生最重要的事业,其目的是“组织和总结所知道的计算机方法的相关知识,并打下坚实的数学、历史基础”。Knuth撰写的前三卷被翻译成多种语言,到1976年为止,已卖出超过一百万册。他目前正全神贯注地编写第四卷,他期望第四卷的篇幅约为2000页,并分为三个独立的章节。为了完成丛书的其余部分,Knuth现在进入了一种引退的状态,全身心地投入这项工作。Knuth说,一般说来,他更喜欢在一段时间内集中精神完成一项工作,正像他自己在书中提出的:按“一批”的模式。

 

Knuth从他主要的工作计划中拿出了十年,即从1976年起,致力于对数字排版的研究,设计了著名的文件准备TeX系统,字体生成程序METAFONT。这项工作带来的值得注意的副产品是用于结构文件和“文章性程式语言”附随方法论的WEB和CWEB语言。

 

现在,Knuth和他的妻子Jill,两个孩子John 和Jennifer一起,住在斯坦福大学校园里。他继续着《计算机程序设计艺术》第四卷的编写工作。虽然说Knuth是全身心的投入这一项工作,但他还是能挤出时间研究MMIX的设计,那是一台64位RISC(精简指令集计算机)。而他的业余爱好仍然是音乐,还一直邀请那些能够即兴演奏四手联弹钢琴曲的人们给他留下便条,以便安排一些活动。

 

成就简要回顾

 

编译程序: 

编译程序能够实现高级语言和二进制机器语言之间的翻译。二十世纪六十年代初期,Knuth教授致力于这方面的研究,虽然现代的软件已经可以使其变的简单一些,但编写编译程序仍被认为是一项极为困难的工作。 Knuth教授在这方面最著名的成就是LR(k)分析的研究,那是一个能使确定一串字符文法规则的过程更加顺畅的值得注目的方法。

高德进入伯克利攻读数学博士学位。在此期间,他的编程生涯也正式开始了。他当时所写的程序中最值得一提的,是对ALGOL60编 译器提出的测试方法。ALGOL60经常会因为编译器不成熟而出故障。高德编写了一段非常简单的测试程序,江湖人称“Man or boytest”,翻译成中文就是“是男人就得-67”。高德说,只要用ALGOL60编译器来编译我的这段程序,如果运行结果等于-67,就说明这个 编译器是纯爷们儿。

 

属性文法: 

在编译程序的工作之后,Knuth教授走上了形式上定义程序语言意义、语义的研究道路。他建立起一个更加经济的方法去通译联合规则,他把这种方法称作“属性规则”。该方法创立的同时,计算机科学的子域被称作“属性文法”。

 

算法: 

也许Knuth教授在计算机科学领域最原创的贡献就是他对于算法的分析。”算法”和“数据结构”是Knuth29岁时提出来的,算法是编写一个程序,使之能去完成一项任务的基础,例如搜索或分类等。在加利福尼亚理工学院时,Knuth教授在一个毕业生的协作下,开发了用来探究数学公理推论的Knuth-Bendix算法。1968年,Knuth教授在斯坦福,和他的一个学生开发了Knuth-Morris-Pratt算法,该法则使计算机在文章中搜索一串字符的过程更加连贯。他所著的《计算机程序设计艺术》是一个详尽的算法实践和科学的概观。

 

数字化排版: 

数学书籍和杂志已经不像从前那样漂亮了。”Knuth教授在一篇早期关于数学排版的文章中这样写道。由于对计算机排版的校样的低质量感到无法忍受,Knuth教授从他史诗性的七卷集巨著的编写过程中拿出了十年时间,来开发一个高质量的计算机排版系统。其间,Knuth开发了两个用于文件排版和字体生成的软件系统,这两个系统现在已被世界大多数出版社运用。它们分别是TeX,用于出版业的科学排版,和“优美文章”的产品;METAFONT,一个字体生成程序。

 

结构化文件和文章性程式语言:

 Knuth教授的排版研究,引领他发明了文件构造的两种语言和一个方法论,叫作“文章性程式语言”。语言分别是WEB和CWEB,它们促进了程序编写向“文学作品,是用来阅读的”这个方向发展。这两种语言的结合,一种是文件格式化,另一种是程序设计,这就使程序员能够同时创建两个不同的系统程序,一个面向人,另一个面向机器。当一条过程清楚地描述程序并促进其维护时,另外一个则产生一个机器可执行的程序。这些工作就是Knuth教授在实现其使程序设计为读者易懂、甚至感觉漂亮的目标的过程中,在计算机领域里所做出的巨大贡献。


           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/ugfffj/article/details/83987134
今日推荐