作者:yueq    

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

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教授在实现其使程序设计为读者易懂、甚至感觉漂亮的目标的过程中,在计算机领域里所做出的巨大贡献。

----------------------------------------
传说 Knuth 写书写文章的第一稿都是用铅笔写的。
很多人不明白他为什么不用键盘。
其实原因是这样,Knuth 曾经参加过一个训练小秘的学习班,
练习打字每分钟 80 个词以上。

到了后来,他发现他打字的速度大大高于他思考的速度,
所以如果他用键盘,就会出现很多停顿。
所以他决定用铅笔,这样可以与读者的思考速度保持一致。

____________________________________________________

Knuth 作为一个计算机科学家,
为什么放下他所有的工作10年,
专心研究排版美学,创造 TeX 系统。
这是很奇怪的一件事情。

其实原因是这样。真正完美的数学排版应该是用金属活字进行的。
但是自从70年代以来,真正懂得这项技术的人都死光了。
新的排版机器,很不幸的都被计算机操纵了 (想想 Matrix :p)

虽然当时计算机能够排出一些简单的报纸,杂志,
但是它们不能很好的处理数学公式。
____________________________________________________

很多人都对 TeX 断行的算法感到满意,
其实只有 Knuth 觉得担心。

他设计 TeX 的时候听说有一本书叫做 Aesthetic Measures,
作者是美国 No.1 数学家 George David Birkhoff。
是说怎样用数学公式来衡量“美”。

他查阅了7个Harvard图书馆,其中有一个图书馆有一个拷贝,
但是却被人借走了。无奈,跑到 MIT 去借。

还好,借到了。后来他就在 TeX 里加入了一个变量叫做 badness,
用来衡量一行文字的美感。badness 越小这行文字就越美。

但是与 Birkhoff 不同,Knuth 对这个公式没有多少信心。
也许是因为谦虚。

____________________________________________________

Knuth 的书都是自己用 TeX 排版的,但是却不都是自己设计的。

传说 Knuth 和 Graham, Patashnik 合作写 Concrete Mathmatics 的时候
请了一位有名的图书版面设计家为他们设计好了书的尺寸,字体大小,标题样式,
后来 Hermann Zapf 专门设计了一种数学字体叫做 Euler,
自此,数学家 Euler 的灵魂浮游于 CM 当中……

另外一个图书设计家告诉 Knuth 一种格式数学公式的办法,
就是不把数学居中,而是只相对正文缩进一定距离。

____________________________________________________

大家都知道 1974 年图灵奖授予 Knuth
主要是因为他写了一部巨著叫做
The Art of Computer Programming

但是不幸的是,很多人不能理解,甚至不相信
他为这部书起了这么一个不“科学”的名字。

后来很多人的著作里出现这样的文献引用:

"The Act of Computer Programming, Donald Knuth."
____________________________________________________

Knuth 是个喜欢自夸的人,这是毫无疑问的。
在他出版 The Art of Computer Programming 之前就已经有这种苗头了。

还没有出版的时候,在一次会议上,有个人知道他的这种性格,
就说:“我猜你正在写的这本书的书名肯定是 ‘An Introduction to Don Knuth’。”

Knuth 回答说:“正好相反。我要以你的名字来命名它。”

原来这个人的名字叫 "Art Evans".

____________________________________________________

Knuth 是Caltech数学系博士毕业的
但是他常常说:“我戴着一顶计算机科学家的帽子,而不是一顶数学家的帽子。”
这说明他似乎对数学家有某些看法。
在他看来数学家只知道“What is it”,
而他还知道 "How to do it".
这就是他认为的数学与计算机科学的区别。

____________________________________________________

Knuth 回到 Stanford 时,学校让他自己给自己一个头衔
他就选了一个
Professor Emeritus of The Art of Computer Programming
他其实觉得“计算机科学”不是科学。
虽然大家很希望计算机编程变成科学,这是某ACM刊物提出的忠旨。
但是 Knuth 觉得奇怪为什么大家这么喜欢科学,
以致于他们瞬间把程序设计变成了科学,方法就是叫它“计算机科学”。

-- Just call it "Computer Science" :p

在他眼里,计算机科学其实仍然是门艺术。

____________________________________________________

在 Knuth 的眼里,科学与艺术有什么区别呢?
艺术是人创造的,而科学不是。
艺术永远是可以无止境的提高的,而科学不是。
艺术需要天赋才能掌握,而科学不需要,按部就班就行。

所以,The ... ART ... of Computer Programming!
____________________________________________________

Knuth 的 The Art ... ft,这么长……以后简称TAOCP吧 :p

…… 开始写的也不那么好。

传说有一天 Bob Floyd 给 Knuth 一封信,开门见山就说:
“Don, 请不要用那么多感叹号!”信的结尾至少打了五个概叹号。
看了之后,Knuth 发现 TAOCP 里竟然平均每页有两个感叹号!!

____________________________________________________

有人说 Knuth 写完三卷 taocp 就去研究 TeX,其实是因为害怕写第四卷。
很多人早就希望他放下 TeX,继续写书。
Knuth 说:“一个人要把事情做的完美,只有当他跟上帝的意图保持和谐,
现在上帝要我去写第四卷了。”

____________________________________________________

Knuth 很推崇随机算法。
他批改作业时,一般都是翻到随机一页,仔细看那一页,
之后就对学生的作业有了一个概貌,其它的部分就看的不那么仔细了。

Knuth 看书的时候首先看第316页,如果书很短就看第100页。
仔细看那一页。之后他就可以说那本书好不好。
据说这样做出判断的正确率很高。

不知道是否有很多人跟他学,看316和100.
以后写书要注意把第316页或者100页写好呀!
____________________________________________________

<script type="text/javascript"> google_ad_client = "pub-2416224910262877"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_channel = ""; google_color_border = "E1771E"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_text = "000000"; google_color_url = "008000"; </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

Donald Knuth 传奇相关推荐

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

    2017-05-30年更新 关于Knuth教授的中文名字 关于Donald Knuth的几个版本 「高德纳」是姚期智夫人.计算机科学家储枫在他 1970 年代访问中国之前起的名,正式的出版物应当依照名 ...

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

    李开复说,练内功,不要仅仅花功夫学习各种流行的编程语言和工具,以及一些公司招聘广告上要求的科目.要把数据结构.算法.数据库.操作系统原理.计算机体系结构.计算机网络,离散数学等基础课程学好.最好还是试 ...

  3. 计算机鼻祖 Donald Knuth 的传奇

    李开复说,练内功,不要只花功夫学习各种流行的编程语言和工具,以及一些公司招聘广告上要求的科目.要把数据结构.算法.数据库.操作系统原理.计算机体系结构.计算机网络,离散数学等基础课程学好.不妨试试Do ...

  4. Donald Knuth(高德纳) 真的只是一个人么?

    Donald Knuth(高德纳) 真的只是一个人么?(原地址) Donald Knuth自传的开头这样写道:"Donald Knuth真的只是一个人么?"作为世界顶级计算机科学家 ...

  5. Donald Knuth(高德纳)

    Donald Knuth自传的开头这样写道:"Donald Knuth真的只是一个人么?"作为世界顶级计算机科学家之一,Knuth教授已经完成了编译程序.属性文法和运算法则的前沿研 ...

  6. Donald Knuth 简介

    看了<李开复给计算机系大学生的建议>这篇文章,让我对Donald Knuth这个人产生了兴趣,他是何许人也?于是便有下文. 引用: (1)练内功.不要只花功夫学习各种流行的编程语言和工具, ...

  7. Donald Knuth

    看了<李开复给计算机系大学生的建议>这篇文章,让我对Donald Knuth这个人产生了兴趣,他是何许人也?于是便有下文. 引用: (1)练内功.不要只花功夫学习各种流行的编程语言和工具, ...

  8. donald knuth --图灵奖获奖者

    唐纳德•克努特(Donald Ervin Knuth) --经典巨著<计算机程序设计的艺术>的年轻作者 洋洋数百万言的多卷本<计算机程序设计的艺术>(The Art of Co ...

  9. Donald Knuth教授寄来$0x1.00支票了。。。

    对,就是大名鼎鼎的计算机程序设计艺术(TAOCP)的作者,Knuth来信了.因为我发现了taocp习题的一个错误. 这是一件好事,另一件事是坏事,就是我今天刚刚得知马上要开题了.... 这几乎不可能, ...

最新文章

  1. Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)
  2. 解决ViewPager嵌套后子ViewPager不能滑动的方法
  3. IOS开发知识(二)
  4. angularjs 弹出框 $modal传值
  5. YBTOJ:方程的解(组合数学)(插板法)
  6. 网站是如何跟踪监视你的
  7. 将 nginx 安装成 windows 的方法
  8. CSS3 Transform变形(2D转换)
  9. 自学python顺序-Python学习之调换顺序
  10. 呼叫中心系统的工单流转处理流程
  11. 搭建阿里云服务器内有阿里云幸运券
  12. 谷歌地图上不去了,用LSV就可以
  13. [ NeurIPS 2020 ] 一叶知秋 —— 基于“单目标域样本”的领域自适应方法
  14. linux替换变量字符串,linux shell 替换字符串的几种方法,变量替换${},sed,awk
  15. 行人重识别(Person re-identification)概述
  16. 定位position
  17. 100行代码实现最简单的基于FFMPEG+SDL的视频播放器(SDL1.x)
  18. 从车联网基础知识出发通往5G彼岸
  19. win7怎么看计算机内存不足,Win7电脑提示虚拟内存不足怎么办?Win7电脑虚拟内存不足解决方法...
  20. 国产元宇宙电影要来了? 《元宇宙2086》影视动漫首批概念图曝光

热门文章

  1. [文档] 软件测试报告
  2. raid卡缓存对硬盘性能_我们怎么解决机械硬盘既慢又容易坏的问题?
  3. 计算机应用基础模拟试卷 一,计算机应用基础模拟试卷一模拟试卷-02answer
  4. 探索ESP8285(2)搭建Windows版MQTT服务器
  5. VS2008工具栏看不到配置管理器或者解决方案配置
  6. 计算机手绘图软件,openCanvas
  7. ubuntu下连接武大校园网
  8. 融合收敛因子和樽海鞘群的蝴蝶优化算法
  9. code vs 集成tfs_tfs – VSCODE和TFVC如何连接?
  10. 玩转安卓 Android系统文件夹结构解析(绝对有用)