xugang

从2007年开始,记录一个DotNET程序员的成长

 

Donald Knuth 简介


看了《李开复给计算机系大学生的建议》这篇文章,让我对Donald Knuth这个人产生了兴趣,他是何许人也?于是便有下文。

引用:
(1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及一些公司招聘广告上要求的科目。要把数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。不妨试试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为学校赢得了一台电视机,还为每个同学赢得了一根糖果棒。
  
  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教授在实现其使程序设计为读者易懂、甚至感觉漂亮的目标的过程中,在计算机领域里所做出的巨大贡献。
  

posted on 2007-10-03 12:40 钢钢 阅读(4245) 评论(20)  编辑 收藏 网摘

Body:93.75,BeforeCate:15.625,15.625

评论

#1楼 2007-10-03 14:36 Kain      

什么样的环境造就什么样的人
我个人不是很赞同上面的说法。
算法,数据结构这些基础固然重要,但是在真正的应用软件开发的时候这种东西又用到了多少呢?现阶段是为了能更好的赚一碗饭吃,虽然这种想法很俗,但是这是现实。现在大多数公司要求是能立马能上手干活的,如果你对一门语言不精通我不知道有多少公司会用,当然大公司可能会要,但这毕竟是少数,人家也能培养的起。不知道园子里面有多少不是从喜欢一种语言开始入门的。
  回复  引用  查看    

#2楼 2007-10-03 15:15 明月穿潭[未注册用户]

同意Kain的观点,像这种大家毕竟是少数,对于普通的程序员来说,用得上的就是最好的。   回复  引用    

#3楼 2007-10-03 15:52 张子阳.      

@Kain

数据结构、算法确实就像是内功,如果哪天你感觉自己的技术很难精进了,可以试着回头看看数据结构和算法,兴许会有收获。
  回复  引用  查看    

#4楼[楼主] 2007-10-03 17:09 钢钢      

@Kain
我既不赞同你的看法,也不反对。

但是我们可以从中或许得到一个答案,那就是为什么这么聪明的中国人,却没有出现象Donald Knuth这样的人,或许,我们急功近利的人太多了。

其实我是今年刚毕业的大学生,在学校学了那么多的理论,出来后,有些同学还不如一些培训学校的学生能让公司满意,所以计算机毕业的我的同学和朋友们,很多并没有从事计算机行业!

很不辛的是,这篇文章是我上午发的,下午老总告诉我们,长沙的分部可能要拆除,于是,下个月,我就成了失业着。我还会从事计算机行业吗?
或许会吧。还会继续.net吗?真的不知道。因为我要生存,而下一个公司会不会用.net我也不知道。

今天是我的特殊的日子,一个应届毕业的计算机行业的从事者,从去年大四一学期结束就开始工作,开始.net,一直到今天大约不到一年,感慨万千,遂记录如此。。。

@dudu
感谢博客园的朋友、dudu和在博客园日子,以及我第一份工作的同事们!
  回复  引用  查看    

#5楼 2007-10-03 17:15 volnet(可以叫我大V)      

盖茨还说:“如果你能读懂整套书的话,请给我发一份你的简历。”
盖茨的MAIL多少,或者可以MAIL的Address是什么~HOHO~
一个玩笑……

其实修炼内功是很必要的,这一点不容否认,但是在知识爆炸的年代,我们还是要注重“迭代式的学习”,我个人比较推崇这一点,那种优雅设计再付诸实施的方案确实很美,但是所消耗的时间或者精力甚至耐力不一定是常人所能够接受的,而Knuth本人也是不断实践反馈理论再钻研再实践的过程,所以自然的成长学习过程是最好的,每一份收获每一份努力都应该能够创造最大生产力……

看了这篇文章太精彩了,顶着~
  回复  引用  查看    

#6楼 2007-10-03 17:59 踏雪无痕      

光介绍他的文字都让人看了好久。
据我所知,他的书是讲算法的,很难读。
  回复  引用  查看    

#7楼 2007-10-03 18:00 踏雪无痕      

而且,art那三本书有多少人敢去读的?   回复  引用  查看    

#8楼 2007-10-03 18:10 淡淡的[未注册用户]

但在应用层面上,大多数企业只需要熟练掌握主流开发工具的人。
有什么需求就有什么的供给。
从事计算机研究的人毕竟是少数。
  回复  引用    

#9楼 2007-10-03 19:28 weef[未注册用户]

大学在校生应该读,工作了以后没空也没精力去啃   回复  引用    

#10楼 2007-10-03 20:30 Zhuang miao      

不认识李开复??   回复  引用  查看    

#11楼 2007-10-03 21:13 Anytao      

内功修炼,永无止境,应该是一条长线。。。   回复  引用  查看    

#12楼 2007-10-04 01:52 算法小王子[未注册用户]

我爱算法
我更算法在实际项目中的应用
  回复  引用    

#13楼 2007-10-04 04:31 w[未注册用户]

写的不错!   回复  引用    

#14楼 2007-10-04 10:19 空明流转的马甲[未注册用户]

Knuth的TAOCP前三卷我都读过了。整体来说书有些乱糟糟的。。。后面的题目太KB了。。。如果是参加竞赛的同学可以读一读,我这种烂人就算了。随便读读就好。

我现在手头的算法书还是Intro to Algo,这本书的论证和讲述都要让人舒服很多。有时候想刨根问底才会去翻那本让人吐血的厚书。。。

ps,就算你开腹这厮NB,我觉得他也不见得就能“解决书上的大多数题目”。

最近在补习编译原理,觉得LR的文法限制和语法构造算法太他妈优美了。。。

  回复  引用    

#15楼 2007-10-04 11:08 OObiit[未注册用户]

只能说一点.我们国家出不了这样的人.原因不外是:我们国家不支持,就如linux,教育不支持,政府部门不支持,在我们国家几个外国的大公司决定了我们学习的方向和教育方向,这就是现状!C#,JAVA,RUBY,等等.试问除了这些,我们国家有人对编译器操作系统的开发有多大兴趣,敢说有但是没有环境给他们.   回复  引用    

#16楼 2007-10-05 07:57 anonymous[未注册用户]

内功就是基础。
但基础并不是之学习基础的目的,除非你的目的只是研究基础。所以基础的作用也有限。

外功就是工具。
但工具并不是之使用工具的目的,除非你的目的就是制造工具。所以工具也不是万能的。

顺便随便说说几个牛人:
Donald Knuth:本身就是专注于计算机基础研究的,他说基础很重要,名正言顺,目的很也纯粹。

Kaifi Li:早期研究做得非常好,但他现在的真实身份是职业经理人;评价他的更多的是靠业绩;他的言论更多的应该从扩大雇主在受众中的影响、扩大人才资源和宣传角度去理解。这事实上给很多人、尤其是学校里刚出来的人造成了混淆。
  回复  引用    

#17楼 2007-10-06 14:08 w[未注册用户]

还不错的。   回复  引用    

#18楼 2007-10-12 10:21 liudan[未注册用户]

不错,可以看出Donald Knuth不仅在计算机方面很有造诣,还是个兴趣广泛的人才   回复  引用    

#19楼 2007-10-26 10:46 半山旅客

托着下巴学习中。。。   回复  引用    

#20楼 2008-01-30 19:55 NT-Any[未注册用户]

我从头到尾,及各位学长的内心留言, 说实话真的不知道我还可以说什么!

不多说什么, 在这里 我留下一句话:算出答案!

================一个即将毕业的大专生

  回复  引用    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 913350 swfWdJE1o2E=



相关文章:

相关链接:

导航

统计

公告


穷则独善其身
达则兼济天下

与我在线交流

新闻


在线词典


与我联系

搜索

 

常用链接

留言簿

我参与的团队

随笔分类(124)

随笔档案(166)

文章分类(26)

收藏夹(199)

Blogs

Tools

Websites

积分与排名

最新评论

阅读排行榜

评论排行榜