当前位置: 首页 > 编程日记 > 正文

Knuth(佩服的一塌糊涂)

Donald Knuth自传的开头这样写道:“Donald Knuth真的只是一个人么?”(我觉得不是,^_^)作为世
界顶级计算机科学家之一,Knuth教授已经完成了编译程序、属性文法和运算法则
的前沿研究,并编著完成了已在程序设计领域中具有权威标准和参考价值的书目
的前三卷(就是那三本art of computer programming哦)。在完成该项工作之余,Knuth还用了十年时间发明了两个数字排版系统(latex,相信大家听说过),
并编写了六本著作对其做了详尽的解释说明,现在,这两个系统已经被广泛地运用
于全世界的数学刊物的排版中。随后,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语言(
Tex的诞生主要是因为老人家自己觉得现有的排版让它的书看起来不顺眼,所以干脆自己写了个排版软件;系里的硕士如果以后投国外期刊,tex是必学的一个课程哦)。

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

其个人主页为:http://www-cs-faculty.stanford.edu/~knuth/

转载于:https://www.cnblogs.com/dyllove98/archive/2005/10/03/2462121.html

相关文章:

编程基础知识科普:C#中的问号运算符

C#是一门非常性感的语言,时不时冒出一些语法糖来满足大家的需求,问号运算符就是其中的一种。我们知道基础数据类型的默认值都是基础数据类型的,如int为0,double为0.0,bool为false等等,而引用类型的默认值为…

Listener监听器之HttpSessionListener

编写一个OnlineUserListener。 package anni; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionListener; import javax.servlet.http.HttpSessionEvent;public class OnlineUserL…

ActiveMQ快速入门

2019独角兽企业重金招聘Python工程师标准>>> 1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip,然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序。 启动Act…

企业为什么要使用基于Docker的PaaS/CaaS平台

作者:精灵云 前言早在十多年前国内外的一些大厂就开始投入研发和使用容器技术,比如Google,对他们来说,使用容器能够充分利用计算资源节省硬件成本。而这几年——众所周知——真正把容器技术发扬光大的是Docker。Docker的slogan“B…

算法基础知识科普:8大搜索算法之红黑树(下)

这是介绍红黑树的最后一部分,令y为要删除结点,n为要删除结点的子结点(子结点最多有1个),w为y的兄弟结点,删除操作的重点是使红黑树删除结点并通过调整后仍满足自身是搜索二叉树和设定的三点规则。删除操作可…

asp提供在线文章翻译的功能(转)

有时候想为我们的网页提供多语言支持,如果一种语言用一张网页来做实在太麻烦了,幸好Google提供了语言工具功能,下面介绍如何利用它来实现网页多种语言之间的转换。 作者:淘特网 出处:http://www.tot.name 注&#xff1…

Java基础学习总结(13)——流IO

2019独角兽企业重金招聘Python工程师标准>>> 一、JAVA流式输入/输出原理 流是用来读写数据的,java有一个类叫File,它封装的是文件的文件名,只是内存里面的一个对象,真正的文件是在硬盘上的一块空间,在这个文…

ASP.NET 2.0 绑定高级技巧

1.简单数据绑定定<!--ASP.NET 1.x data binding expression --><%# DataBinder.Eval(Container.DataItem, "Price") %><!--Equivalent ASP.NET 2.0 data binding expression --><%# Eval("Price") %><!--XML data binding --&g…

JSP中的EL表达式详细介绍

2019独角兽企业重金招聘Python工程师标准>>> 一、JSP EL语言定义 EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算。JSP 2.0…

Software development Problem

筹划“软件开发过程”以及“面向对象分析与设计”这个话题已有很长时间。虽然大学毕业后在Rational公司学习过这方面的内容&#xff0c;这几年带着团队也一直践行里面的理念与方法&#xff0c;但总感觉自己理解的不透彻&#xff0c;不敢动笔。 10年过去了&#xff0c;总不能一…

Spring MVC常用注解说明

2019独角兽企业重金招聘Python工程师标准>>> 使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能。02 之前在使用Struts2实现MVC的注解时&#xff0c;是借助struts2-convention这个插件&#xff0c;如今我们使用Spring自带的spring-webmvc组件来实现同…

代码规范性与品质问题~

&#xff12;&#xff10;&#xff10;&#xff11;年在delphibbs做“首届Delphi编程竞赛”活动(http://www.delphibbs.com/delphibbs/dispq.asp?lid650664)的时候&#xff0c;曾就代码的规范性与品质问题与大家进行过讨论&#xff0c;摘录一些言论如下&#xff1a;3. 我们公司…

FutureTask中Treiber堆的实现

2019独角兽企业重金招聘Python工程师标准>>> 在文章FutureTask源码分析中简单说明了FutureTask中使用Treiber堆栈来保存等待结果的线程&#xff0c;本文将详细分析其原理。 Treiber堆使用CAS操作来实现节点的入栈和出栈&#xff0c;由于CAS操作只是保证操作的原子性…

软件开发过程中遇到的问题

今天早晨去石家庄河北电力工程监理有限公司&#xff0c;回来后就在整理这篇图文&#xff0c;结果还是过了12:00。这是针对昨天图文“Software Development Problem”的翻译以及自己的一些理解&#xff0c;分享给大家。 其实&#xff0c;看看这些东西蛮好的&#xff0c;最起码能…

Java基础学习总结(9)——this关键字

2019独角兽企业重金招聘Python工程师标准>>> 一、this关键字 this是一个引用&#xff0c;它指向自身的这个对象。 看内存分析图&#xff1a; 假设我们在堆内存new了一个对象&#xff0c;在这个对象里面你想象着他有一个引用this&#xff0c;this指向这个对象自己&am…

转贴:雅虎公司C#笔试题,看看你能解答多少

这是刚在在网上看到了&#xff0c;觉得这些题目出得真不错&#xff0c;能考出一个程序员的基本功。所以先发在这里&#xff0c;做个备份&#xff0c;以后慢慢来做&#xff08;偶好像只能免强及格哦&#xff0c;呵呵&#xff0c;关于网络的题目太多了&#xff0c;偶不太熟啊&…

亿级PV请求的三种负载均衡技术

在互联网不断渗透到生活中的今天&#xff0c;各种各样的网络服务存在在我们身边&#xff0c;他们的访问流量也是大得惊人。一个大型网站&#xff08;百万PV以上&#xff09;想要正常访问&#xff0c;单单靠一台服务器是不可能提供稳定服务的。这时候就需要用负载均衡技术将海量…

The Six Best Practices(1~3)

前几期的图文我们介绍了软件工程中常见的问题&#xff0c;分析了产生这些问题的根本原因&#xff0c;引出了软件工程中的六个最佳经验。今天我们具体介绍这些最佳经验的内容。

Java项目命名规范

2019独角兽企业重金招聘Python工程师标准>>> 一、命名规范 1、 项目名全部小写 2、 包名全部小写 3、 类名首字母大写&#xff0c;如果类名由多个单词组成&#xff0c;每个单词的首字母都要大写。 如&#xff1a;public class MyFirstClass{} 4、 变量名、方法名首字…

一道数据结构算法题

现有一个链表&#xff0c;证明如果存在环&#xff0c;则&#xff1a;使用两个指针同时前进但步长不一样&#xff0c;则能够在有限步之后能够相逢。题目的意思是我归纳出来的&#xff0c;我的解题思路是这样的&#xff1a;能够相下逢的意思是&#xff1a;在走了x步以后&#xff…

win7系统下载 ghost win7 Sp1 32位纯净3月版

win7系统下载 ghost win7 Sp1 32位纯净3月版软件名称: Ghost Win7 Sp1 32位纯净3月版软件语言: 简体中文软件大小: 3.81大小: GB发布日期: 2017-03-21文件名称: ZJY_Ghost_win 7_X86_CJ201703.GHOM D 5: C21A7A17D8C2568A05844C5…

The Six Best Practices(4~6)

昨天图文介绍了The Six Best Practices的前三个经验&#xff1a;迭代化开发、需求管理、基于构件的体系构架&#xff0c;今天介绍后面的三个经验&#xff1a;可视化建模、持续的质量验证和变更管理。

代码生成器前戏 之 数据库元数据

总结&#xff1a;代码生成器大致有两种方式&#xff0c;1.根据po 生成 表 结构 等系列类&#xff0c;如 Hibernate自动生成 2.根据表生成 po 等系列类。其实实际 开发时候 多半还是 先设计好表&#xff0c;然后生成 的情况多。 元数据&#xff1a;描述数据的数据&#xff0c;就…

有感于框架设计难,实施框架更难!

很久没有写了&#xff0c;不能怪没有时间&#xff0c;只是自己太懒。这两天休息&#xff0c;有时间重新回顾一下项目的设计&#xff0c;从目前的开发情况看&#xff0c;最早设计的一些编程框架&#xff0c;并没有很好的遵守&#xff0c;看上去比较零乱&#xff0c;这个可能由于…

六个最佳的软件工程实践(基于构件的体系结构、可视化建模)

昨天图文介绍了迭代化开发和需求管理&#xff0c;今天我们介绍基于构件的体系结构和可视化建模。基于构件的体系结构是软件开发中最体现创造力的地方&#xff0c;可以通过“修建桥梁”来理解为什么要贯彻基于构件的体系结构以指导我们每次开发的演进增量过程。可视化建模是为了…

通讯组基本管理任务一

经常收发邮件的人都有同感&#xff1a;很多时候都需要向一组人发送邮件。如果一封封地发送&#xff0c;不仅耽误时间&#xff0c;而且很容易出错&#xff0c;将邮件发送给不应该接受邮件的收件人。Exchange Server 2010为了方便用户使用&#xff0c;通过“通讯组”和“地址列表…

无人驾驶相关数据集

普林斯顿大学人工智能自动驾驶汽车项目&#xff1a; 代码V1&#xff1a;http://deepdriving.cs.princeton.edu/DeepDrivingCode_v1.zip 代码V2&#xff1a; http://deepdriving.cs.princeton.edu/DeepDrivingCode_v2.zip 训练集&#xff08;50G&#xff09;&#xff1a;http://…

六个最佳的软件工程实践(持续的质量验证、变更管理)

昨天图文介绍了基于构件的体系结构以及可视化建模&#xff0c;今天我们介绍六个最佳工程实践的最后两个&#xff0c;持续的质量验证以及变更管理。持续的质量验证是伴随迭代化开发而进行的不断验证&#xff0c;且每次迭代的测试集合都是不断递增的。质量验证不仅从功能方面要满…

css层叠样式表(一)

今天研究了下css。这东东入门不算难。可是想写出好的样式就得有很深的功底了。按照老大给网址&#xff0c;12天学会网页设计。做下总结吧。css通过div&#xff08;层&#xff09;来定位&#xff0c;通过层的margin,padding,border等属性来控制板块的间距。常用的模型是盒状模型…

aspx页面使用ajax遇到try catch中使用Response.End()报错

1、使用Ajax接收数据&#xff0c;在返回Response.Write()后应该调用Response.End()才能将数据写入到调用的页面,才能被jQuery的回调函数获取到返回的JSON数据 2、在try--catch里面不能用Response.End()&#xff0c;否则会报错&#xff1a;由于代码已经过优化或者本机框架位于调…