图灵奖得主演义

人在天涯

┳??初级会员??┳
注册
2002-01-23
消息
17,253
荣誉分数
7
声望点数
0
转贴自

相约加拿大 www.rolia.net 枫下论坛


1974 Donald E. Knuth(ZT) by pipibug (golf) at 2005.3.9 22:52


Donald E. Knuth

Citation
For his major contributions to the analysis of algorithms and the design of programming languages, and in particular for his contributions to the "art of computer programming" through his well-known books in a continuous series by this title.

--------------------------------------------------------------
Donald E. Knuth,1938年出生于Wisconsin。1960年,当他毕业于Case Institute of Technology数学系时,因为成绩过于出色,被校方打破历史
惯例,同时授予学士和硕士学位。他随即进入大名鼎鼎的加州理工学院
数学系,仅用三年时间便取得博士学位,此时年仅25岁。

毕业后留校任助理教授,28岁时升为副教授。30岁时,加盟斯坦福大学计
算机系,任正教授。从31岁那年起,他开始出版他的历史性经典巨著:
The Art of Computer Programming。他计划共写7卷,然而仅仅出版三卷
之后,已经震惊世界,使他获得计算机科学界的最高荣誉Turing Award!
此时,他年仅38岁!后来,此书与牛顿的“自然哲学的数学原理”等一起,
被评为“世界历史上最伟大的十种科学著作”之一。相信学过数据结构和编
译原理的同学们都知道KMP算法和LR(K)算法有多么不可思议,然而此书 [ 相约加拿大:枫下论坛 rolia.net/forum ]
中这样的算法比比皆是!

在计算机科学上,他主要是一位理论家。然而,他在理论以外也同样做出
惊人的成就。鼎鼎大名的排版软件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美元吆!
 
1974 Donald E. Knuth(ZT) (2)

1974 Donald E. Knuth(ZT) (2)

Don Knuth, 高爷爷其实用不着偶多说。学编程的不知道他就好像学物理的不知道牛顿,学数学的不知道欧拉,学音乐的不知道莫扎特,学Delphi的不知到Anders Hejlsberg,或者学Linux不知道Linus Torvalds一样,不可原谅啊。:-)为了让文章完整,就再罗唆几句吧。高爷爷本科时就开始给行行色色的公司写各种稀奇古怪的编译器挣外快了。他卖给别人时收一两千美元,那些公司拿了code,加工一下卖出去就是上万上十万。不过也没见高爷爷不爽过,学者本色的说。想想那可是60年代初啊,高爷爷写编译器写多了,顺带就搞出了个Attribute Grammar和LR(k),大大地造福后人啊。至于高爷爷在CalTech的编程比赛(有Alan Kay得众多高高手参加)总是第一,写的Tex到86年就code freeze,还附带2^n美分奖励等等都是耳熟能详的,偶就不饶舌乐。

顺便说一下,高老大爷是无可争议的写作高手。他给Concrete Mathematics 写的前言可谓字字铿锵,堪为前言的典范。他的技术文章也是一绝,文风细致,解释精当,而且没有学究气,不失轻快跳脱。记得几年前读Concrete Mathematics,时不时开怀大笑,让老妈极其郁闷,觉得我nerdy到家,不可救药。其实呢,子非鱼,安知鱼之乐,更不知那完全是高爷爷的功劳。说到写作高手,不能不提Stephen A. Cook。他的文章当年就被我们的写作老师极力推荐,号称典雅文风的样本。库爷爷一头银发,身材颀长,总是面带谦和的微笑,颇有仙风道骨,正好和他的仙文相配的说。

高爷爷其实还是开源运动的先驱。虽然他没有象Richard Stallman那样八方奔走,但他捐献了好多作品,都可以在网上看到,比如著名的Mathematical Writing,MMIXWare,The Tex Book等,更不用说足以让他流芳百世的Tex乐。
 
翻译《计算机程序设计艺术》经过的片断回忆

翻译《计算机程序设计艺术》经过的片断回忆

苏 运 霖
那是在1973年至1974年期间,为了在吉林大学开设有关软件的课程,我被吉林大学派往中科院数学所进修,同时和数学所、中山大学和贵州大学的同志一起协作,从事XR(系列软件)项目的某个子课题的研究。当时,国内对于计算机软件的重要性才刚刚有所认识,因此对于程序设计、操作系统等,以中关村及北大、清华为中心,掀起了一个引进国外先进技术的热潮。就在这期间的一个周日,我来到五道口的外文书店,猛然发现了醒目的"The Art of Computer Programming"的3卷大部头新书,心绪为之一动,通过流览书的目录和部分章节,感到这是极有价值的书,在决心认真阅读学习的同时,心里也产生了把它们译成中文的念头。

当然,这样的重头书,不会只引起我一个人的注意。计算所和数学所的许多同行也都传开了有这本新书的消息。人们自然也都感到,把它译出,很有价值。
[ 相约加拿大:枫下论坛 rolia.net/forum ]
不久之后,我就回到了吉林大学。长春的外文书店,也都有了这套书,我向当时在一起工作的管纪文先生介绍了这套书,并把我想把它们译出的想法告诉了他。当然我们也告诉了当时任系主任的中科院学部委员,我们的老师王湘浩教授,他对我们这一重大举动,也深表支持。于是,我们也就这样开始干起来。

但是,那还是"文化大革命"时期,虽然已经不是只抓革命,不搞生产的文化大革命时期;特别是在邓小平复出,主持中央工作的阶段,学校已开始了招生和教学。然而,压倒一切的还是革命,后来又搞起批林批孔,矛头所指,直接针对周总理,后来又再次搞起批邓。当时,我白天时间,全在挖防空洞中消耗掉了,所以,我只能在晚上和清晨进行翻译工作。我和管纪文先生的分工是:我全部负责翻译,再由他誊清我的译文,并做一些润饰工作。整个3卷,我们都是这样干的。我们的翻译工作,真正地做起来,是在1975年底才开始的。

在我们开始从事这一工作时,当然受到人们的注意。一种人认为,我们干不了,这也有一点道理,因此在此之前,我们都还没有干过这样重大的翻译工作,特别是,这个领域对我们来说,完全是新的。但是,实际上,我们并非毫无基础,在此之前,我已经翻译过由当时计算所所长许孔时访问美、加带回的一本《操作系统》教材 (多伦多大学),并且全文刊登在由当时的1015所出版的《计算机参考资料》上,当时这一译文,就倍受读者称赞,认为译文精确、流畅,可读性强;此外,我还译过当时著名的《课程表68》这一ACM制定的教学大纲。所以,只能说以前的工作,在其工作量上、难度上,没有现在的工作这么大而已,但是,有了以前的基础,我们怎么就干不了呢!所以对于这种人和他们的责难,我们毫不理会。

另一种人,则站在"革命者"的角度,说我们又在搞崇洋媚外的一套,说我们宣扬西方的文明,宣扬西方的生活方式,不知怎么回事,当时竟传出,这本书是宣扬资产阶级生活方式的。我曾为了翻译《课程表68》而受过批判和指责,所以,对于现在的责难,我也就不当一回事。我们坚信,这是一本高质量的科技著作,它在国外引起重视,在国内,也应得到同样的重视,才有利于我国的科技发展。?在我们开始进行翻译时,我们并没有联系出版社讨论出版事宜。只是到了我们把整个第1 卷都已翻译完时,我们才开始找出版社。而关于我们进行这套书的翻译的消息,不胫而走。在北京的很多同行中,许多人早已知道此事。当我们把第1卷的翻译稿带到北京后,许多朋友也都主动热心地帮我们联系此事。在这方面,给了我们很大帮助的是北京1015所的王寿松、梁大同、严友淳等同志,还有数学所的陆汝钤院士、周龙骧教授等,以及曾经到过斯坦福大学的软件所董韫美院士等。他们帮我们联系了国防工业出版社(为什么没有联系科学出版社,我们也不大清楚,可能 1015所同国防工业出版社更密切些,是其中的一个原因吧),最后,我们得到的答复是,我们的书有望在国防工业出版社出版。在这个过程中,我们也就开始同国防工业出版社的四编室的同志们打交道,当时四编室主任是周先珂同志,编辑室里有张均武、徐德霆、周烈强等同志,而负责从事本书编辑工作的,最初就是徐德霆同志。

然而,事情却决非这么容易,因为尽管我们在下边已开始操作,但此事成与不成,仍须经过上头的同意。据说,国防工业出版社的总编也无权批准,所以,尽管我们把书稿交给了出版社,但后来却迟迟没有下文。我们当然很着急,想知道事情的真相。然而我们又没有任何了解真相的渠道。后来,听了1015所同志们的介绍,我们才知道阻力来自于上头。我们也才知道,所谓此书宣扬资产阶级生活方式、宣扬西方文明等,实乃空穴来风,正是上头有人在这么说。而且,也才知道,许多国内当时的专家,如计算所阎沛霖、罗沛霖,15所总工陈力为等,都以他们政治上的大无畏精神和业务上的远见卓识,给了我们支持,他们力荐这套书的出版,最后才使上边为我们出书开了绿灯,也才使后来的工作,顺利地进行下去。这段使我们的工作险些胎死腹中的时间,有两三个月之久。这也就是为什么我要在本书的新译本的前言中,回忆此事,并对那些曾经帮助过我们的领导和专家致以深深谢意和敬意的原因。当然,说起来,最根本的是,邓小平同志改革开放,科教兴国的思想,使中国不再是闭关锁国,夜郎自大,这才有我们在该书译者前言中提到的祖国科学的春天。

这里还要提到本书作者D. E. Knuth的访华之行。1977年,Knuth携夫人和两个当时尚未成年的女儿访问中国,为时3周。陪同他访问的是加州圣地亚哥大学的华裔教授胡德强先生,胡先生是北京籍人,但在台湾受教育和成长,讲一口流利的北京话。Knuth来华访问的消息,由科学院数学所的陆汝钤教授等通知我和管纪文先生,并请我们也从长春前去北京,参加同Knuth的会见和听取他的报告、同他座谈等活动,这使我们有幸同本书作者认识。他当时还未满40岁,然而已经学富五车,蜚声四海,并荣获计算机界最高奖--图灵奖。但见他高大健壮,风流倜傥,而又彬彬有礼,极富学者风度。他在北京的讲话,谈到了算法和算法分析的重要性以及一些他认为甚有价值的问题。也谈到了后来成为他的重大成果的计算机印刷和排版技术--METAFONT和TEX。

胡先生向我们讲述了他的一些生平。他是在加州理工学院接受的高等教育,由于他聪明过人,又十分勤勉发奋,因此在大学阶段就已经做出了令业界瞩目的成就。后来,他没有通过硕士阶段,就直接读博士学位。他在CACM杂志社曾经工作过一段时间,审查和研究了许多算法,从而为他成为算法设计和分析的先驱打下了基础。他不仅在计算机科学领域有极高造诣,而且兴趣广泛。他酷爱文学,对莎士比亚戏剧深有研究,而且他本人就出版过小说。他还热爱音乐,对音乐也很有研究。后来,还写过用计算机谱曲的文章。他生活很有规律,每天都有固定安排,如周一是阅读和处理文件的时间,周二是接待学生和客人来访时间,周三爬山,周四上课,然后其它是研究工作时间。他有过人的精力,每天可以不离书案连续工作十几个小时。还讲到他的夫人,她是学过中文的。大概就是由于这点吧,使他们对中国很友好。他在来中国之前,要他的学生姚储风为他取了中国名字--高德纳。当他得知我和管先生是他的著作的中文译者后,对我们表示了鼓励和支持,后为当我们请他为中文版写序时,他欣然答应,并且很快就寄来了。但是遗憾的是,后来该书第1次印刷时,该序未被收入其中,使我觉得很难向他作解释。然而在第2次印刷时,还是收进来了。这次,在我们出版新版本时,他又一次为中文本写序,足见他对于此书在中国出版的支持,而且信中充满了作者对中国读者的殷切期望。信中提到要用他的中国名字,这大概也是因为当初我们没有用他的中文名的一点不满而发吧。

这里我还想透露一件鲜为人知的事情。在80年代,中国开始大规模公派留学生出国,我当时也属于政府考虑选派的对象,因此曾经去信给他,表示希望他帮助安排到斯坦福大学进修。他回信表示进修不可能,但他可以让我攻读他的博士学位。由于不知道博士学位是由对方提供资助的,我竟由于感到经济上没有保证而没有接受。这成为日后的一大遗憾,我把这当成一生中最大的失误。

在第1卷出版的过程中,我们继续进行第2卷和第3卷的翻译工作,而且所有3卷书,在我于1980年调到暨南大学之后不久,都全部完成了。但是3卷的出版顺序,却并非按照1,2,3的自然顺序,这是因为当时有些专家认为第3卷比第2卷更急需,要我们先把第3卷搞好。于是造成了历史上这一个事实--第3卷先于第2卷出版。而且,由于书价的剧烈浮动,使书的印量也发生了很大变化--第1卷头一次印了30 000册,第2次又印了10 000册;但第3卷则仅印了10 000册;第2卷,差不多推迟10年出版,和第1卷定价相差达10倍,因此印量仅3000册。?

第2卷的推迟,还有一个原因,即原书作者在该书出版不久,即出了新版,新版大概是1984年或1985年出版的,因此出版社自然希望我们重新按新版本译出。此时我已经在新西兰,而译稿交给陆汝钤院士校阅。那时他把译稿放在他的办公室里,办公室里是七八个人一起办公(可见当时知识分子的工作条件何其艰苦),结果,有一年,在他出访而所内搞迎新大扫除时,把译稿当成废纸扔掉了。所以在1986年,我从新西兰回国之后,在出版社找我要稿子时,陆教授才发现稿子丢失了。还好,并未全部扔掉,大概丢了三分之一多一些。他为此深感抱歉,我也无话可说,只好重新翻译。在这期间,又不知什么原因,一直使该书的出版拖延良久,直到1992年才终于出版了。?

以上这些事情,不觉之间,已经距今20余年,至少也有10余年了。在我重操旧业翻译该书新版时,回忆它们,感触良深。写下它,作为永远铭记的一段人生经历。
 
1972 E.W. Dijkstra(ZT)

1972 E.W. Dijkstra(ZT)
Edsger W. Dijkstra


Citation
Edsger Dijkstra was a principal contributor in the late 1950's to the development of the ALGOL, a high level programming language which has become a model of clarity and mathematical rigor. He is one of the principal exponents of the science and art of programming languages in general, and has greatly contributed to our understanding of their structure, representation, and implementation. His fifteen years of publications extend from theoretical articles on graph theory to basic manuals, expository texts, and philosophical contemplations in the field of programming languages. [ 相约加拿大:枫下论坛 rolia.net/forum ]

Edsger Wybe Dijkstra, 对,就是E.W. Dijkstra. 一提到EWD,很多人就会想起找最短路径的Dijkstra Algorithm,就好像一提到Sir. Tony Hoare,就想起Quick Sort一样。其实这些个算法不过是两个牛人在他们职业生涯中最琐碎的贡献。比如Dijkstra算法,无非是戴爷爷在1956年为了展示新计算机 ARMAC的计算能力,初试身手的成果,属于他的算法处女作。据戴爷爷自述,他搞出最短路径算法的时候连纸笔都没用。当时他和他老婆在阿姆斯特丹一家咖啡厅的阳台上晒太阳喝咖啡,突然就把这个算法想出来乐。而且当时的算法研究还比较原始,牛人们忙着用计算机搞数值计算,对离散算法不屑一顾。那时连一个象样的专注于离散算法的专业期刊都没有。戴爷爷于是推迟发表这个算法。直到1959年,他才把这个算法发表在Numerische Mathematik的创刊号上,权为捧场。:-) EWD在多个领域牛气冲天,端的是理论和编程两手硬的高手。只不过他的很多工作比较深刻,学校的老先生们觉得本科生接受不了,不给本科生讲而已。

戴爷爷大概因为最短路径算法一战成名,于是有人请他参加另一台计算机X1的设计工作,并且把设计实时中断系统的任务派给了他。现在看来实时中断也许不算什么,但要知到,X1前根本就没有实时中断的概念。实现它简直就是一场豪赌。戴爷爷起初还不情愿,但经不住项目负责人Bram和Carel的轮番"吹捧":我们知道实时中断让您工作变得非常困难,但象您这样的牛人肯定能做出来的说。结果戴爷爷被糖衣炮弹彻底击穿,接下了这个烫手山芋。两三年后,他不仅搞出了实时中断,还围绕这个写出了自己的博士论文,顺利戴上博士帽。

让戴爷爷真正成名立万的还是在X1上开发的Algo60,最早的高级语言之一。戴爷爷没日没夜地工作了8个月,就搞出了Algo60,也因此获得了 1972年的图灵奖。因为Algo60,戴爷爷发表了一篇石破天惊的文章:Recursive Programming,于是人们才知道,原来高级语言也可以高效地实现递归,原来从此以后,所有程序员都不可避免地和戴爷爷发明的一个词(应该说是概念)打交道:堆栈。而且Algo60还让戴爷爷深入地思考多道程序设计的问题,最终发明了每个系统程序员都绕不开的概念:semaphore。当然,戴爷爷总是把他发明的概念严格形式化,极具科学家本色的说。和这些成就想比,他提出的吃饭的哲学家问题,也就没什么好说的了。

说来好笑,当时的大学(忘了哪所了)还是觉得戴爷爷没有受过正统的数学训练,也不是专门搞数值分析的,所以最后不太情愿地给了他一个教职。这种小挫折并不能妨碍象戴爷爷这样的牛人创造历史。他一边教数值分析(:-D) ,一边开始开发一个新的操作系统,并培养计算机科学家。几年后,THE Multiprogramming System横空出世。THE是第一个支持松散耦合,显式同步的进程并由此使得严格证明系统没有死锁变得容易的操作系统。可惜戴爷爷任职的系不识货,还强行解散了他的研究小组(1972年戴爷爷给他的系主任说他得了图灵奖,系主任的第一反应是你们搞计算机就喜欢乱发奖)。这让戴爷爷相当郁闷,得了抑郁症。在极度郁闷之中,戴爷爷决定用写作来治疗自己的抑郁症。于是经典就诞生乐:Notes on Structured Programming。戴爷爷从此被尊为结构化编程的奠基人,而且他的抑郁症也被治好乐。

EWD太牛,结果他的故事也太多。先到这里吧。1973起,他的故事就在美国发生了。
 
1972 E.W. Dijkstra(ZT)(2)

;;;;2002年8月6日,在与癌魔多年的斗争之后,计算机科学及工程界的泰斗Edsger;Wybe;Dijkstra教授在荷兰Nuenen的家中与世长辞,享年72岁。

;;;;1930年,Dijkstra出生在荷兰的鹿特丹。他的父亲是一位化学家,母亲是数学家。

他在莱顿大学获得了数学和理论物理的硕士学位,又在阿姆斯特丹大学获得了计算机科学博士学位。

1952年至1962年间,他在阿姆斯特丹数学中心作程序员;1962年至1984年在艾恩霍芬科技大学任数学教授;

1984至1999年,他在美国奥斯汀的德克萨斯大学任计算机科学教授;

1999年退休,任德克萨斯大学名誉教授。
[ 相约加拿大:枫下论坛 rolia.net/forum ]
;;;;Dijkstra提出了一个著名的见解:算法逻辑是而且必定是一切有用的计算机程序结构的基础。此外,他的著名观点还包括:将*作系统作为明确同步的顺序进程来构造、计算机程序开发的正规化、有效控制不确定性的智力投资等。他发明的最短路径算法有着极高的效率。

他还设计并且实现了第一个Algol;60语言编译器。

他还是废除“goto语句”的领导者。

;;;;Dijkstra是一位高产的作家。http://www.cs.utexas.edu/users/EWD这个网址,你可以找到他全部超过3, 000篇的作品。他经常与数百位朋友、同事通信――不是使用电子邮件,而是传统的信件。无论是写学术论文还是写信,他都坚持使用钢笔,而不是计算机。

;;;;Dijkstra最广为人知的是他的睿智、雄辩而一针见血的话语。他说:“计算机能不能思考?这个问题就好象‘潜水艇能不能游泳’一样。”

当年轻的科学家问他如何选择研究课题时,他回答:“只做你能做的事。”在荣获图灵将之后的演讲中,他说:“作为一种工具,计算机使我们的文化起了浅浅的波澜,但也仅此而已;作为对人类智力的一种挑战,计算机掀起的轩然大波在人类历史上是史无前例的。”
< r o l i a. n e t >
;;;;Dijkstra提出了许多新概念、新术语,大大的丰富了计算机科学的语言。他提出的概念包括结构化程序设计、问题分解、同步、死锁、“哲学家晚餐”、最弱前提……以及著名的用于控制计算机进程同步的“信号量”。牛津英语词典收录了他在计算机科学环境中使用的“vector”和“stack”这两个词。

;;;;在他的科学生涯中,Dijkstra一直坚持学院派的高风亮节,不让自己的研究受到来自商业、管理、政治等等因素的影响。简单、优美而又说服力,这就是他的风格。在程序设计和数学领域中,他对“优雅”的一贯坚持激励了成千上万的人。他把自己的工作评价为“最高标准”,;并以此鼓励他的朋友做到同样的高度。

另外,他还义无反顾地担当了苏格拉底的角色――城邦的牛虻。他一次又一次地指出时髦观点中存在的错误,;象牛虻一样刺激国家这匹“驽马”不断前进,和苏格拉底一样,他最重要的遗产就是那些未完地研讨、归纳了一半的理论和没有完成的探索。所有与他讨论、共事过的人,尤其是那些参加过他在艾恩德霍芬和奥斯汀组织的读书小组(著名的“星期二下午俱乐部”
)的人,都从他身上获益匪浅。

;;;;Dijkstra是1972年图灵奖的得主――图灵奖常被称为“计算机科学界的诺贝尔奖”。

他是荷兰皇家科学院的院士、美国国家科学院的院士,同时还是不列颠计算机协会的名誉会员。

他还在1974年获得过美国信息处理学会联合会(AFIPS)颁发哈里・古德奖。 { 枫下论坛 rolia.net/forum }

在1982年获得电气电子工程师协会(IEEE)颁发的计算机先驱奖。

在1989年获得美国计算机学会(ACM)为计算机科学教育做出突出贡献者而颁发的SIGCSE奖。

雅典经济大学曾在2001年授予他名誉博士头衔。

2002年,日本的C&C基金会对Dijkstra地评价是:“他对软件基础理论、算法理论结构化和信号机制进行了开创性的研究,为计算机科学奠定了坚实的基础。”

让我们借用裴多给苏格拉底的悼词:“我们毫无疑问地宣称,在我们所知的与他同一时代的所有人中,他是最聪明、最公正、最优秀的。”

Edsger;Wybe;Dijkstra引导了并且将继续引导这个星球所有的程序员,他的贡献和影响将与世长存。
 
1983 Dennis M. Ritchie (ZT)

Dennis M. Ritchie


Citation
For their development of generic operating systems theory and specifically for the implementation of the UNIX operating system [ 相约加拿大:枫下论坛 rolia.net/forum ]

Dennis M. Ritchie, 既然Ken Thompson是我的偶像,新闻组上人称DMR的Dennis M. Ritchie自然也是,毕竟两人共同缔造了UNIX,而Dennis几乎独力把C搞大(当然,C的前身是B,而B是Ken Thompson一手做出来的)。J 两人1983年分享图灵奖,是有史以来少数几个因工程项目得奖的工程师(本来是唯一的一对儿,但Alan Kay才因为SmallTalk得奖,所以就成了唯二的乐) 。一个人一生能做出一个卓越的系统已经不易,DMR的C和UNIX长盛不衰近30年,至今生机勃勃,DMR此生可以无憾的说。

D爷爷也算有家学渊源:他老爸在AT&T贝尔实验室工作了一辈子,并在电路设计方面卓有成就,还出了本颇有影响的书The Design of Switching Circuits,据说在交换理论和逻辑设计方面有独到的论述。当然,D爷爷和他老爸是不同时代的人:他老爸的研究成形于晶体管发明之前,而D爷爷的工作离了晶体管就玩儿不转乐。:-D


不要看D爷爷搞出了C,其实他最爱的编程语言是Alef,在Plan9上运行,支持并行编程。Alef的语法和C相似,但数据类型和执行方式都和C大大不同。说到语言,D爷爷对后来人有非常中肯的建议:抱着学习的目的来开发你自己的语言,不要冀望于它被众人接受。这个建议不光对语言开发有用,也适用于其它大型系统的开发。别的不说,DMR后来领导自己的团队在1995年和1996分别推出了Plan9和Inferno操作系统,又用多少人知道呢?其实,D 爷爷当初也没想过C会风行世界。他开发C的初衷和Eric S. Raymond在Cathedral and Bazaar里阐述的一样,就是要消除自己对现有工具的不爽之处。谁知D爷爷无心插柳,C竟然受到众多程序员的狂热拥戴,连D爷爷自己都大惑不解。在一次采访中D爷爷说大概那是因为C的抽象程度碰巧既满足了程序员的要求, 又容易实现。当然C一度是Unix上的通用语言也是原因。但不管怎么说,D爷爷对编程语言出色的审美意识奠定了C广为流传的基础。

最后八卦一下。D爷爷的业余爱好和NBA大牛Karl Malone一样:开卡车。不过D爷爷更喜欢开NASCAR,而KM独爱巨无霸。J D爷爷自称心中不供偶像,如果一定要说一个,那就是Ken Thompson了。现在Ken爷爷退休当飞机教练去了,而D爷爷当了贝尔实验室系统开发部的头,整日忙于开支票。他俩合作20年,屡屡创造历史。这段令人神往的佳话,也就长留你我心中乐。

P.S., 很多人都以为Brian W. Kernighan是C的作者。其实BWK只是写了那本经典K&R C。据D爷爷说,他,Ken, 和Kernighan三人中,Kernighan最能写文章,他次之,而Ken写得最少;但说到编程,Ken爷爷才是当之无愧的老大。
 
1983 Dennis M. Ritchie (ZT) (2)

采访Dennis M. Ritchie (丹尼斯?里奇) -- By Manuel Benet

(翻译:江雄, 译着玩的,有错请指正。:)

有的人因为改变历史而出名,也有的人是因为创造历史。Dennis Ritchie就属于这种人。当我们中大多数人还在学走路的时候,他开发出使用最为广泛的C语言。这个对人类的贡献勿需多言。

这还远不够。Dennis Ritchie和Ken Thompson开发了Unix操作系统,真正意义上的“操作系统”。没错,他创造了Unix。

他在计算机和操作系统上的工作没有停止。他领导的研究人员开发出了Plan 9和Inferno系统。

他的工作得到了无数计算机组织的承认:1974年因系统和语言方面的杰出论文获得ACM奖章;IEEE Emmanuel Piore奖章(1982),Bell实验室高级成员(1983);ACM图灵奖(1983);NEC C&C基金奖(1989); IEEE Hamming奖章(1990)等等。

现在,Dennis M. Ritchie是新泽西州Murray Hill的贝尔实验室/朗讯科技的计算机科学研究中心、系统软件研究部主任。

LF(采访者): 象孩子们希望成为超人一样,你是全世界许多C程序员和Unix爱好者的偶像。被成千上万Unix和C程序员崇拜是什么感觉?如果没有Unix或者C的话,完全无法想象现在我们的世界会是什么样子。当你创造C语言并开始Unix工作的时候,你想到过它会成为计算机科学的“未来”吗? [ 相约加拿大:枫下论坛 rolia.net/forum ]

Dennis: 这两个问题差不多,也是人们常常问到的。当然我和同事们受到的奖励和评价是令人愉快的,我们的确感觉到我们协助创造了一些真正有意义的东西。但我们真的没有料到它成其为“未来”,甚至没有意识到我们工作的最后影响。它源于“让我们做点有用的事”同时帮帮其它参与者这样的思想。

记住这点很重要:虽然整个Unix和C或者C++很重要,计算机科技和真正产品的天地更加广阔。无论在编程语言的学术研究方向上还是富有的软件领域都是如此。

LF: 如果说Unix是过去和现在的操作系统,C当之无愧地可以称为过去和现在的编程语言,尽管也出现了很多面向对象的语言。对C++、Java以及C和C++程序员之间常常出现的激烈争论你怎么看?

Dennis: C++从C中获得很多东西,因为在C++之前C就被相当广泛接受,C++可以把C作为构造新语言的基础及其编译器的工具。C(令人羡慕而又招人怨恨地)表现为一种可移植的汇编语言,C++试图将它提升到面向对象的层次,成为更抽象的编程方法。(根据最近出现的标准)这两者都显得过于装饰性,堆积了不少小玩意儿。它们体现出一种实用主义,试图理解确实需要的东西。Java则明显是C++的后代,立即除去了C中和指针有关的东西,加进机器无关的目标码的想法 (并非很新颖,但很合理)。现在它陷入Sun和Microsoft之间的较量中,(当然仍然存在装饰性强的问题),很难说它会怎么发展。

LF: 提个假设性的问题:以现在的眼光来看,有了这么多年C编程的经验,如果你不得不重新设计C,你会有什么不同的考虑吗?

Dennis: 设法(如果时间允许的话)坚持在ANSI/ISO标准中存在的一些东西:函数形参类型的完整说明,即1989年C标准中称作函数原型的东西。还有很多小细节显得过于零乱。例如,static关键字因被用于好几种目的而意思含混。对于语言声明部份的文法我还不很明确。在语言声明中使用的文法模仿了变量声明的做法。这引起了很多批评,但这样做还是有一定道理的。

LF: 当C语言建立和完善地定义出来时,操作系统还在不断演化之中。更高速和更便宜的硬件也带来一些新的想法。在操作系统基础设计中的关键因素是什么?特别地,你对微内核和一体化设计方法持什么看法?

Dennis: 我认为这方面并非一个很有意义的问题。我确实很倾向于在Unix(包括Linux)、Plan 9、Inferno中为应用程序提供的结构化、公用的名字空间和资源访问机制。在我看来,微内核的想法在实际中并不重要,至少对通用目的的操作系统基础是这样。实际上,微内核常常是为在其之上的宏观系统服务的。它可以是系统内部结构中有用的工具,但它本身并不能独立存在。当然(事情复杂起来了),也有些情形简单操作系统会用于小的工具设备,而不是一般性的用途,无论是桌面系统或者大型机。

LF: UNIX现在已经是有很长历史的操作系统。它很多年前就出现了,打那时起,网络、硬件、服务和应用程序的能力和要求都起了巨大变化。面对当前和以后近期的用户需求,Unix眼下的局限性或弱点是什么?

Dennis: 从基本系统API(系统调用)上看,没有本质的、技术上的局限性。当然在商业/政治问题上有很大的问题,表现为不同Unix商业卖主之间和几种“免费”的Unix(包括Linux和BSD)之间的明争暗斗。

LF: 最近人们对千年虫问题和由此产生的Internet崩溃的可能非常关心。你觉得一些专家的这样的天命预言有根据吗?

Dennis: 对此没什么好的见解,真的。在1999年12月31日23:59我不会在坐飞机,但因为我任何新年的时候附近都没有飞机,这实际上和千年虫没有关系。
LF: 我们无法不提到Inferno,你现在工作中的操作系统。开发这样一个全新的操作系统,以及它自身的Limbo语言主要是出于什么样的原因?并且为什么有了JavaVM/Java,还要Inferno/Limbo?换句话说,Inferno要提供Java所缺少的什么东西?

Dennis: Inferno是Phil Winterbottom和Rob Pike的创造物,它正好在Java出现之前开始。Java也有它的前身(内部名称叫Oak),但酝酿Inferno的时候还没有理由相信会出现Java 热,并且尽管我们也知道Java,但它毕竟还未成型。我想这是一个奇怪的汇聚,一个古老的技术上的想法(一种用可移植虚拟机实现的语言)同时被Sun和我们复活了。也就是说,Inferno的想法源于操作系统技术中更有趣的一些东西(一种可以在原始、廉价、最低限度的硬件上工作的语言和系统能同样在 Windows或Unix或Linux上作为应用程序运行)。同时Sun由于和巨大膨胀的WWW/浏览器市场挂钩更加紧密,也应该获得尊敬。

LF: 在我们看来,Limbo作为一种编程语言的未来和Inferno的扩充和广泛化密不可分。把Limbo移植到其它操作系统有没有意义呢?会不会它的设计和目标太依赖于Inferno了呢?

Dennis: 技术上,Limbo并不特别地依赖Inferno。现实中,它的确是依赖的,很简单,因为一个新的语言总是依赖于使用它的环境的。

LF: 从你在贝尔实验室的经历看来,你似乎每时每刻都是在为你所喜爱的项目工作。我假定对Inferno也是如此。那么难道我认为你非常喜欢Unix和C设计会不对了吗?

Dennis: 我确实喜欢我在贝尔实验室的工作(现在和以后)。

LF: 我不可避免的要把你和所有为非盈利项目工作的人作个比较,因为他们也喜欢如此----虽然我相信如果有人为他们的免费工作支付薪水他们也不会拒绝。如果你不是在贝尔实验室,你会加入Linux或者类似的项目中吗?根据你多年的、在创新性的研究室的经验你对这些人怎么看?由于我们的杂志主要面向Linux用户,我不会忘了问个Linux的问题。首先,你对Linux的发展动力、以及很多公司开始为它开发软件的决定(例如贝尔实验室,Inferno也移植到了 Linux上)持什么样的观点?

Dennis: 让我一起来回答这些问题。我认为Linux现象是可喜的,因为它从Unix提供的基础中吸收了这么多东西。尽管有种种BSD系统和工作站、大型机厂商的正式产品,Linux可说是Unix直接派生出来的最健康的一种。当然,我不得不注意到,“免费源码”的Unix派生世界看来和商业领域里发生的和正在发生的一样,受着分裂和冲突的折磨。

LF: 关于Linux的重大问题:你曾用过Linux吗?如果用过,你对它意见如何?

Dennis: 恐怕我得承认,我实际上没有真正用过它----即依靠它来做我每天的工作。我自己的计算环境是Plan 9、Windows和Inferno的奇怪混合体。我非常钦佩Linux的发展和活力。偶尔人们也问我几乎同样的问题,但是出于一种希望得到这样的回答的姿态,希望我对Linux和其它传统公司的Unix的竞争表现出嫉妒或愤怒。一点也不。这两者我看都是Ken和我以及其它很多人很多年前产生的想法的继续。

LF: 还有微软...你对该公司现在在桌面计算机上的垄断地位怎么看?过去科幻电影描绘了一幅人类生活被巨型机器所控制的图画,现实则是完全不同的另一种画面。计算机,在很多方面都被看作是一种简单设备。你为程序员着想开发了一个操作系统,在科幻电影的场景中生活过,想象到过计算机的实际情形,你怎么预见未来的计算机时代呢?你认为Inferno和Linux在其中处于什么样的位置?

Dennis: 这是两个问题。微软的确对桌面系统有一定的垄断,但那不是世上计算机的唯一应用领域。提供软件的其它途径(如Linux),以及那些没有产生象 Windows或浏览器大战那样火爆的新闻的计算机领域(如高性能计算、高可靠性计算、极小型计算)都会有一席之地。我相信Linux和Inferno都会兴旺的。
 
天涯同学终于决定要搞算法了吗?:blink:
 
1983 Ken Thompson(ZT)

嘿嘿,还没,只是ZT要按顺序罢了
================================

Ken Thompson


Citation
For their development of generic operating systems theory and specifically for the implementation of the UNIX operating system [ 相约加拿大:枫下论坛 rolia.net/forum ]

Ken Thompson,C语言前身B语言的作者,Unix的发明人之一(另一个是Dennis M. Riche老大,被尊为DMR),Belle(一个厉害的国际象棋程序)的作者之一, 操作系统Plan 9的主要作者(另一个是大牛人Rob Pike, 前不久被google挖走了)。Ken爷爷也算是计算机历史上开天辟地的人物了。1969年还是计算机史前时代,普通人都认为只有大型机才能运行通用的操作系统,小型机只有高山仰止的份儿。至于用高级语言来写操作系统,更是笑谈。Ken爷爷自然不是池中物,于是他和DMR怒了,在1969年到1970间用汇编在PDP-7上写出了UNIX的第一个版本。他们并不知道,一场轰轰烈烈的UNIX传奇由此拉开了序幕。Ken爷爷在1971年又把Unix用C重写,于是C在随后20年成就了不知多少豪杰的梦想和光荣。

Ken爷爷还有段佳话: 装了UNIX的PDP-11最早被安装在Bell Lab里供大家日常使用。很快大家就发现Ken爷爷总能进入他们的帐户,获得最高权限。Bell Lab里的科学家都心比天高,当然被搞得郁闷无比。于是有高手怒了,跳出来分析了UNIX代码,找到后门,修改代码,然后重新编译了整个UNIX。就在大家都以为"这个世界清净了"的时候,他们发现Ken爷爷还是轻而易举地拿到他们的帐户权限,百思不解后,只好继续郁闷。谁知道这一郁闷,就郁闷了14年,直到Ken爷爷道出个中缘由。原来,代码里的确有后门,但后门不在Unix代码里,而在编译Unix代码的C编译器里。每次C编译器编译UNIX的代码,就自动生成后门代码。而整个Bell Lab的人,都是用Ken爷爷的C编译器。:D
 
1983 Ken Thompson(ZT)(2) Ken Thompson的后门

UNIX的创造人之一,Ken Thompson,在他的 Turing Award Lecture中,便由这个主题加以发挥,说了一些有趣的故事。C 是一个被拿来写操作系统的语言。写操作系统的人很难忍得住诱惑,不在系统里面装些后门的。想想看,如果我写操作系统时,偷偷在login 的部份加一段程序代码,使得全世界的这套操作系统只要看到我的account和密码就让我进去,给我root权限,这该是多爽呀。 但是我不能直接在 login 的 source code 里面这样写,否则一下就被人抓到了(既然 source code流通,就是要给人看的呀)。该怎么办呢?就从compiler里面动手脚,称作patch1吧:在compiler中多加一道手续,如果发现被compile的原始程序?疑似?在作login动作,就把它开个漏洞,让我进得去。

但是这样也不见得行得通。Compiler以后也会改版,新版的compiler可能不是我在写。装系统的人也不见得用我的compiler。怎么办呢?于是我在compiler 的source code中作第二次手脚,称作patch2:如果这个compiler觉得在compile 的程序?疑似?另一个 compiler 的 source 的话,就加入上面的patch1和这个 patch2本身。

好,现在操作系统推出了,CC1 是我写的内建compiler,其中有我动的两个手脚。现在某人在compile UNIX, 不得不用这个compiler。然而CC1 中已经有了 patch1,于是一旦compile到login, compile出来的login程序就被动了手脚。只要看到我的名字,就一定让我进系统,给我root权限。
  ,----------.    +---------------+    ,--------------.   
  | login |     | Compiled  |    | login   |   
  | source | =====> | by CC2   | =====> | Program  |
  | (clean) |     | patch 1作用 |     |(受感染了!)|
  `--------- ’    +----------------+     `-----------’
既然 compiler CC1会作怪, 那么自己写 compiler 总可以了吧? 然而,C compiler还是得用C写,写好了之后,用谁来compile呢? 只有用CC1来compile。 CC1发现新写的CC2是一个compiler的source code,于是 patch2 就发挥作用了。 CC1会在CC2中也加入patch1和patch2。于是CC2也被?污染?了。
  ,------------.      +-------------+     ,------------------. [ 相约加拿大:枫下论坛 rolia.net/forum ]
  | CC2  |      | Compiled |     | CC2     |   
  | source | =====>  | by CC1  | =====> | patch 2作用 |
  | Program |      | (clean)   |      |含 patch1,2 |
  `-----------’      +-------------+     `-------------------’
如果再用CC2来compile一个正常的login程序,由于CC2中有了patch1,所以 compile出来的login程序也会有后门,让我任意的login;
  ,--------.     +---------------+     ,----------.
   | login |      | Compiled |     | login  |   
   | source |=====> | by CC2   |=====>  | Program |
  | (clean)|      |(patch 1,2) |     | (patched!) |
  `--------’      +--------------+     `--------------’
如果用CC2 compile另一个compiler CC3,由于CC2中已经被加入了 patch2, CC3又会被污染,也就是说CC3这个compiler中还是会有patch1和patch2......如此一来,全世界的每一套UNIX都种下了这个后门,可以让我任意login!

然而这些patch都只在binary档之中出现。CC2的source code一切正常,所以从source code完全看不出有什么不对劲呢!我们还可以进一步湮灭证据。一旦装好一套系统,公开的CC1 source code中不必有动过手脚的程序代码,只要让它被动过手脚的compiler编译就可以了。

有着无辜的包装,事实上内容暗藏玄机的程序,称作?特洛伊木马?。 这个特洛伊木马的故事有趣吗?

用C语言写C compiler,写出来的程序会是个什么样子呢? 举个例子,一个C compiler可能有一段前置处理程序在处理C字符串中的溢出字符。比如说,compiler 需要把如下的字符串:

"Figure listings : Figure1 A Complete Tree ....."

给转换成:

Figure listings :<换行码>Figure1A Complete.....

这段程序可能看起来像这样(为简单起见,这个程序从标准输入读进原始码,送到标准输出):

  if ((c=getchar())==’’)
   switch (getchar()) {
    case ’n’ : putchar(’ ’); break;
    case ’t’ : putchar(’ ’); break;
         :
  }
  else
   putchar(c);

好象有点奇怪,是吗?明明用if和switch把溢出字符’’以及后面的’n’,’t’, 分开了,在putchar的地方又送出’ ’, ’ ’。如果您见多了用某语言写自己的 compiler的情况,对于这种程序段落也就见怪不怪了

后记

这个版本的UNIX传出去之后,Berkley的叫兽们很快就发现了这个后门,重编译也解决不了,但叫兽们毕竟也不是吃白饭的,于是将编译器的源码编译为汇编代码再编译,就解决了这个问题。

C代码编译为汇编代码的时候,没有插入后门,是为了避免让人一眼就看出破绽。而汇编代码到机器代码的翻译很简单,不依赖于原来的C编译器。这样编译一遍就除掉后门了

 
<本文发表于: 相约加拿大:枫下论坛 www.rolia.net/forum
Niklaus Wirth


Citation
For developing a sequence of innovative computer languages, EULER, ALGOL-W, MODULA and PASCAL. PASCAL has become pedagogically significant and has provided a foundation for future computer language, systems, and architectural research.

Niklaus Wirth是著名的语言设计者 之一。凡是学过一点计算机知识的人大概都知道“数据结构十算法= 程序”这一著名公式。提出这一公式并以此作为其一本专著的书名的瑞士计算机科学家尼克劳斯・沃思(Niklaus Wirth)由于发明了多种影响深远的程序设计语言,并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。他是至今惟一获此殊荣的瑞士学者。

Niklaus Wirth的母校苏黎世工学院(ETH),在欧洲甚至全世界都很有名气。1967年Niklaus Wirth回到母校,1968年升为教授,执教,直到1999年退休。在ETH,Niklaus Wirth发明了多种语言,特别是Pascal.

1984年图灵奖获得者: 尼克劳斯・沃思
――PASCAL之父及结构化程序设计的首创者

凡是学过一点计算机知识的人大概都知道“数据结构十算法= 程序”这一著名公式。提出这一公式并以此作为其一本专著的书名的瑞士计算机科学家尼克劳斯・沃思(Niklaus Wirth)由于发明了多种影响深远的程序设计语言,并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。他是至今惟一获此殊荣的瑞士学者。

沃思1934年2月15日生于瑞士北部离苏黎世不远的温特图尔(Winterthur),其父瓦尔特是一位地理学教授。沃思小时就喜欢动手动脑,组装飞机模型是他的最大爱好。中学毕业以后,沃思进入在欧洲甚至全世界都很有名气的苏黎世工学院(ETH),1958年取得学士学位。之后他远渡大西洋到加拿大的莱维大学深造(Laval是和加拿大名城魁北克隔圣劳伦斯河相望的一座城市),于1960年取得硕士学位。之后他又一次迁移,到美国加利福尼亚,进入加州大学伯克利分校,于1963年获得博士学位。

学成以后,沃思受聘到斯坦福大学刚刚成立的计算机科学系工作。著名的斯坦福大学门槛极高,怎么会看中了这个来自欧洲小国的毛头小伙子呢?原来在20世纪50年代末、60年代初的情况下,沃思的计算机经验和成就相当引人注目:在苏黎世工学院时,他曾听过瑞士的计算机先驱斯帕塞(A.P.Speiser,他曾出任IFIP的主席)的课,用过由斯帕塞开发的计算机ERMETH(虽然作为学生,机会并不多);在莱维大学时,沃思学了数值分析,用过 Alvac III E计算机(虽然这台计算机经常出故障而不能开机);在伯克利时,沃思先是有一台Bendix G-15计算机可用,后来又参加了为IBM 704开发 NELIAC语言编译程序器的科研小组。 NELIAC的全称是 Navy Electronics Laboratory International Algol Compiler,即美国海军电子学实验室国际 Algol编译程序语言,该语言用于数值计算和一些逻辑处理,其特点是用自己的语言写自己的编译程序,然后进行自编译,是一个类似于 Aled 58但具有开创性意义的语言。沃思在撰写博士论文时,Algol 60报告已经发表。这是第一个清晰定义的语言,其语法是用严格公式化的方法说明的。当时已有一些学者认识到,清晰的规格说明对于可靠而有效的实现是必需的,但是并不充分: Aled 60报告中还存在一些缺陷和不足。沃思在和 Algol的设计者之一、荷兰人范・维京格尔藤(Andrian van Wijingaarden,他曾任阿姆斯特丹数学中心计算部主任,在开发Algol 68中提出了二级文法,又叫w文法以解决上下文有关这一难题。他曾启发1972年图灵奖获得者狄克斯特拉走上计算机科学之路)多次接触和讨论以后,决定对 Algol 60作进一步改进,并以此作为自己的博士论文课题。这就诞生了由沃思所设计的第一个语言――Euler。Euler虽然在实用性上考虑并不十分周到,但在学术上却非常优美,为编译器的系统设计创造了一个很好的基础。此外,它还对 Algo 60进行了若干扩充,主要是增加了表处理能力。

正是由于以上原因,斯坦福大学看中了沃思。与此同时,IFIP也注意到了Euler语言,决定吸收沃思参加对Algol语言进行完善与扩充的工作小组。当时,这个小组中有两派,一派主张设计一个新语言,以便树立一个新的里程碑;另一派则觉得时间太紧,主张对 Algo 60进行适当扩充。沃思参加进去以后,自称同时属于这两派,并提交了一份建议书。这份建议书经过霍尔(Tony Hoars)等人的修改、完善以后获得通过,这就是Aigol W(W是沃思名字的首字母)。第二年,也就是1966年,Algol W在斯坦福大学的第一台 IBM 360上成功实现并正式应用。这中间还有一个小插曲:IBM 360当时只提供汇编语言和 FORTRAN语言,但沃思和他的学生都觉得这两者并不适宜于作为设计编译器的工具。于是,沃思用了两个星期时间写出了一个用来描写Algol编译器的新的语言的定义,然后用了4个月时间在宝来公司的B-5000计算机上完成了交叉编译程序,而沃思的一个学生则把这个交叉编译程序移植到 IBM 360上去。这些额外的工作极大地加快了 Algol W编译器的开发,同时催生了一个新的语言 PL 360。 PL 360虽然是作为辅助工具而设计、开发的,但后来却在许多地方获得应用,取得了意想不到的成功。

Algol W及 PL 360奠定了沃思作为世界级程序设计语言大师的地位,一举成名。但沃思是一个具有强烈爱国心的人,成名后的他谢绝了斯坦福大学的挽留,于1967年回到祖国,先在苏黎世大学任职,但第二年就回到他的母校苏黎世工学院。在这里,他首先设计与实现了 PASCAL语言(Philips Automatic Sequence CAlculator Language的缩写),这是在 CDC 6600上开发成功的。 PASCAL在数据结构和过程控制结构方面都有很多创造。对于前者,除一般的整型、实型、布尔型数据外,PASCAL还增加了字符型、子域类型、记录结构类型、文件类型、集合类型和指针类型;对于后者,除保留了无条件转移的GOTO语句外,又增加了if-then-else、case、while、 repeat和for等多种控制结构,还允许复合语句和处理记录变量的分量使用with语句这种编写形式。可以说,现代程序设计语言中常用的数据结构和控制结构绝大多数都是由PASCAL语言奠定基础的,因此它在程序设计语言的发展史上具有承上启下的重要里程碑意义。

说来有趣,沃思开发PASCAL的初衷是为了有一个适合于教学的语言,并没有想到商业应用。但一经推出,由于它的简洁明了,它所提供的丰富的数据结构和控制结构为程序员提供了极大的方便与灵活性,也由于它特别适合于由微处理器所组成的计算机系统,竟然大受欢迎,广泛地流传开来。在C语言问世以前, PASCAL是风靡全球、最受欢迎的语言之一,创下了发行拷贝数最多的世界记录。单是沃思的一个学生菲力浦・凯恩(Phillipe Kahn),从 ETH毕业以后,在美国加利福尼亚州办了一个软件公司,就卖出了100多万个PASCAL拷贝,成为百万富翁。

1971年,沃思基于其开发程序设计语言和编程的实践经验,在4月份的 Communications of ACM上发表了论文“通过逐步求精方式开发程序’(Program Development by Stepwise Refinement),首次提出了“结构化程序设计”(structure programming)的概念。这个概念的要点是:不要求一步就编制成可执行的程序,而是分若干步进行,逐步求精。第一步编出的程序抽象度最高,第二步编出的程序抽象度有所降低…… 最后一步编出的程序即为可执行的程序。用这种方法编程,似乎复杂,实际上优点很多,可使程序易读、易写、易调试、易维护、易保证其正确性及验证其正确性。结构化程序设计方法又称为“自顶向下”或“逐步求精”法,在程序设计领域引发了一场革命,成为程序开发的一个标准方法,尤其是在后来发展起来的软件工程中获得广泛应用。有人评价说沃思的结构化程序设计概念“完全改变了人们对程序设计的思维方式”,这是一点也不夸张的。1983年1月,ACM在纪念 Communications of ACM创刊 25周年时,从其 1/4个世纪发表的大量论文中评选出有“里程碑意义的研究论文” 25篇,每年1篇,沃思的这篇论文就是其中之一。

PASCAL的成功也罢,结构化程序设计思想的巨大影响也罢,都没有停止沃思继续创造性的研究与开发工作。20世纪70年代中期,为适应并发程序设计的需要,沃思又成功开发了一个获得广泛应用的语言Modula。M0dula除了提供并发程序设计功能之外,另外一个重要特征是引进了模块概念(这也是这个语言叫做Modula的原因)。此外,它还引进了“进程”(process)这一和并发程序相联系而产生的重要概念。Modula语言还特别适合于书写系统程序。但是,比Modula具有更加重大得多意义的却是它的第二个版本Modula.2。这是 1976年,沃思再次赴美国,到 Xerox公司的 Palo Alto研究中心参与Alto计算机的设计与开发工作。Alto是世界上第一个具有图形用户界面的个人计算机系统(可惜Xerox公司没有把它商品化,而由Apple公司学去了它的技术而推出 Macintosh)。沃思回到瑞士以后,参考Alto的经验,设计、开发Lilith个人计算机系统。为了和Lilith的体系结构相配合,沃思决定在 Modula的基础上开发新版本,作为整个系统的开发语言。Modula-2与Modula相比,语法更加简洁,更加强调界面设计,模块的可重用性更好。它共有3个编译单元,即程序模块、定义模块和实规模块。在定义模块(definition module)中,只给出那些和模块外部交往所必需的信息。例如,对模块内部的子程序说明而言,在定义模块中只给出子程序名、参数名及其类型等,而不给出子程序体本身,也就是说,在定义模块中只给出模块外部可见的信息。在实规模块(implementation module)中,则给出那些在模块外部不可见的信息,例如,在模块内部定义的子程序说明的子程序体。这样的安排既提高了可读性,又有助于分别编译。 M0dula-2在优美性(elegance)和简洁性(simplicity)两方面都比Modula更进一步。Lilith的操作系统、图形软件包、数据库系统、网络协议套件、文件服务器等基本系统和大量应用模块全都是用M0dula-2开发的。目前世界上已经开发了近百个Modula-2的编译系统,北美和欧洲的许多大学已经用Modula-2代替PASCAL作为计算机系本科生的第一门程序设计课程。Modula-2的标准化工作则早在1984 年就已由英国开始进行,ISO则于1987年对它进行标准化,并采用由IBM的维也纳实验室提出的VDM-SL和经过沃思本人加以扩充的BNF(即 EBNF,见下)表达语言的语法与语义,在形式化方面达到了一个新的水平。在Lilith项目中,沃思坚持将计算机体系结构、语言、操作环境这三者统一起来考虑,实行集成化、一体化设计的成功经验是具有革命性的创举,从而使这个项目在计算机科学史上占有重要地位。

近年来沃思致力于一个新的计划,即Oberon计划。Oberon是将程序设计语言和操作系统结合在一起的、面向单用户的个人工作站的一个系统。因为沃思认为,在因特网日益普及的情况下,今后联网的计算机主要将是个人工作站,因此如何使个人工作站功能更加强大、更加方便使用是一个十分重大的课题。沃思把这个计划取名为Oberon是寓意深长的,因为Oberon是希腊神话中的仙境之王和女神Titania的丈夫。沃思的目标是要使Oberon语言超越 PASCAL和Modula,设计出的操作系统和编译器功能更加强劲。1992年他写了两本书向读者推荐Oberon(见后),可见其对这个计划的重视。

除了程序设计语言之外,沃思在其他方面也有许多创造。为了定义和描述语言,沃思对著名的“巴科斯-诺尔范式”BNF进行了扩充,成为EBNF (Extended BNF)。我们目前所看到的许多语言的 BNF实际上是EBNF,不过人们往往忽略掉这个E字。和BNF一起出现的,还常常有一些看上去像铁路图那样的图形,称作“语法图”(syntax chart或 syntax diagram)或“铁路图”(railroad diagram),这也是由沃思所设计与发明的,这种图形标记法的描述能力等价于BNF,但当然更易于阅读与理解,更加直观。在语法图中,用圆圈表示终结符,用方框表示非终结符,用有向弧表示走向,图上一条通路就表示该语法结构的一种正确定义方法。语法图的4种基本构造方法如下。

(1)若产生式为W→W1W2W3,则语法图如图1。


(2) 若产生式为W→W1W2|W3a|bcW4 ,则语法图如图2。


〔3〕若产生式为W→abW,则语法图如图3。

(4)若产生式为W→ab|abW,则语法图如图4。


对于较复杂的产生式,其语法图一般可通过上述4种语法图进行组合而得。

在对上下文无关文法的研究中,一个很重要的问题是如何确定两个符号之间的优先关系。现在一般采用的办法也是由沃思和他的同事韦伯提出来的,就叫沃思-韦伯优先关系(Wirth- Weber precedence relation),或叫简单优先关系。它规定上下文无关文法 G中任意两个符号的优先关系如下。
< r o l i a. n e t >
(1)X<Y,当且仅当有产生式 A→αXBβ,且有推导B+→Yr。

(2)X=Y,当且仅当有产生式A→αXYβ。

(3)X> Y,当且仅当有产生式 A→αBYβ,且有推导B+→rX及Y →*aδ。

其中A、B为非终结符,X、Y为待定优先关系的两个任意符号,α、β、Υ和δ为由终结符和非终结符组成的任意符号串,可以是空串。a是终结符。

沃思的学术著作很多,主要有如下几种,其中一些原版是用德文写的,翻译成了英文。

《系统程序设计导论》( Systematic Programming: An Introduction,Prentice- Hall,1973。其德文版已出至第 5版)

《算法十数据结构=程序》(Algorithms+ Data Structures= Programs,Prentice-Hall,1976)

《算法和数据结构》(Algorithms and Data Structures, Prentice - Hall ,1986)

《Modula-2程序设计》(Programming in M0dula-2,Spring6r,1988,第4版)

《PASCAL用户手册和报告: ISO PASCAL标准》 (PASCAL User

Manual and Report: ISO PASCAL Standard, Sprillger, 1991)
{ 枫下论坛 rolia.net/forum }
《Oberon计划:操作系统和编译器的设计》( Project Oberon:the Design of an Operating System and Compiler,ACM Pr.,1992)

《Oberon程序设计:超越Pascal和Modula》(Programming in Oberon: Steps beyond Pascal and Modula, ACM Pr,1992)

《数字电路设计教材》(Digital Circuit Design for Computer Science Students:An Introductory Textbook, Spnnger, 1995)

《编译器构造的原理和技术》(Theory and Techniques of Compiler Construction,Addison- Wesley,1996)

ACM除了1984年授予沃思图灵奖外,1987年又授予他“计算机科学教育杰出贡献奖”。另一重要的国际学术组织IEEE也授予过沃思两个奖项: 1983年的 Emanual Piore奖和 1988年的计算机先驱奖(Computer Pioneer Award)。1992年,加州大学伯利分校命名沃思为“杰出校友”。

沃思是在1984年10月于旧金山举行的ACM年会上接受图灵奖的。沃思发表了题为“从程序设计语言设计到计算机建造”(From Programming Language Design to Computer Construction)的图灵奖演说,回顾了自己在计算机领域所做的工作。演说全文刊载于Communications of ACM,1985年 2月,159- 164页,也可见《前 20年的 ACM图灵奖演说集》(ACM Turing Award Lectures――The First 20 Years:1966-1985,ACM Pr.),179-196页。沃思在演说中强调了程序设计语言简性的重要意义,也讨论了它所需的硬件和软件环境(因为沃思一直很重视语言的实现问题)。他介绍了在设计Modula-2和Lilith中的经验,指出第一手经验和选择良好开发工具的无比价值。

沃思现仍在苏黎世工学院任教,他的电子箱为:wirth @ inf.ethz.ch



布莱兹・帕斯卡尔(Blaise Pascal,1623-1662)是法国十七世纪著名的思想家,一生体弱多病,只活了三十九岁,但在身后却为自己留下了高耸的纪念碑。他的主要著作是《外省通信》和《思想录》,前者常被看作是法国古典主义散文的奠基之作,后者则为哲学和宗教方面的探讨提供了丰富的源泉,成为人因思想而伟大的一个明证。

《思想录》名言: 思想形成人的伟大。


人不过是一根苇草,是自然界最脆弱的东西;但他是一根能思想的苇草。用不着整个宇宙都拿起武器来才能毁灭他;一口气、一滴水就足以致他死命了。然而,纵使宇宙毁灭了他,人却依然要比致他死命的东西更高贵的多;因为他知道自己要死亡,以及宇宙对他所具有的优势,而宇宙对此却是一无所知。

能思想的苇草―我应该追求自己的尊严,绝不是求之于空间,而是求之于自己的思想的规定。我占有多少土地都不会有用;由于空间,宇宙便囊括了我并吞没了我,有如一个质点;由于思想,我却囊括了宇宙。
 
ZT 关系数据库之父:EF Codd 1981年图灵奖获得者

关系数据库之父-埃德加・考特



在数据库技术发展的历史上,1 9 7 0 年是发生伟大转折的一年。这一年的6 月,I B M 圣约瑟研究实验室的高级研究员埃德加・考特 (Edgar Frank Codd) 在Communications of ACM 上发表了《大型共享数据库数据的关系模型》一文。A C M 后来在1 9 8 3 年把这篇论文列为从 1 9 5 8 年以来的2 5 年中最具里程碑意义的2 5 篇论文之一,因为它首次明确而清晰地为数据库系统提出了一种崭新的模型, 即关系模型。 “关系”( r e l a t i o n ) 是数学中的一个基本概念,由集合中的任意元素所组成的若干有序偶对表示,用以反映客观事物间的一定关系。如数之间的大小关系、人之间的亲属关系、商品流通中的购销关系等等。在自然界和社会中, 关系无处不在;在计算机科学中,关系的概念也具有十分重要的意义。计算机的逻辑设计、编译程序设计、算法分析与程序结构、信息检索等,都应用了关系的概念。而用关系的概念来建立数据模型,用以描述、设计与操纵数据库,考特是第一人,因此他被自然地称为“关系数据库之父”。

由于关系模型既简单、又有坚实的数学基础, 所以一经提出,立即引起学术界和产业界的广泛重视,从理论与实践两方面对数据库技术产生了强烈的冲击。在关系模型提出之后,以前的基于层次模型和网状模型的数据库产品很快走向衰败以至消亡,一大批商品化关系数据库系统很快被开发出来并迅速占领了市场。其交替速度之快、除旧布新之彻底是软件史上所罕见的。基于7 0 年代后期到8 0 年代初期这一十分引人注目的现象,考特于 1976年被授予 IBM 名士(IBM Fellow)称号并于 1 9 8 1 年获得了计算机科学领域的最高奖项-图灵奖。在接受图灵奖时,他做了题为“关系数据库:提高生产率的实际基础”的演说。(刊于1982 年2 月的 C o m m u n i c a t i o n s o f A C M 第1 0 9 至第1 1 7 页,或见《A C M图灵奖演说集》第3 9 1 至第4 1 0页。) 2002年,《福布斯》杂志评选考特创建的关系数据库模型是过去 85 年中最重要的创新之一。

考特原是英国人,1 9 2 3 年8 月1 9 日生于英格兰中部的港口城市波特兰。第二次世界大战爆发以后,年轻的考特应征入伍在皇家空军服役,1 9 4 2 至1 9 4 5 年期间任机长,参与了许多重大空战,为反法西斯战争立下了汗马功劳。二战结束以后,考特上牛津大学学习数学,于1 9 4 8 年取得学士学位以后到美国谋求发展。他先后在美国和加拿大工作,参加了I B M 第一台科学计算机7 0 1 以及第一台大型晶体管计算机 S T R E T C H 的逻辑设计,主持了第一个有多道程序设计能力的操作系统的开发。他自觉硬件知识缺乏,于是在6 0 年代初,到密歇根大学进修计算机与通信专业( 当时他已年近4 0 ) ,并于1 9 6 3 年获得硕士学位, 1 9 6 5 年取得博士学位。这使他的理论基础更加扎实,专业知识更加丰富。加上他在此之前十几年实践经验的积累,终于在1 9 7 0 年迸发出智慧的闪光,为数据库技术开辟了一个新时代。

由于数据库是计算机各种应用的基础,所以关系模型的提出不仅为数据库技术的发展奠定了基础,同时也成为促进计算机普及应用的极大推动力。在考特提出关系模型以后,I B M 投巨资开展关系数据库管理系统的研究,其“S y s t e m R”项目的研究成果极大地推动了关系数据库技术的发展,在此基础上推出的D B 2 和S Q L 等产品成为I B M 的主流产品。S y s t e m R本身作为原型并未问世,但鉴于其影响,ACM还是把1988 年的 “软件系统奖”授予了S y s t e m R开发小组( 获奖的6 个人中就包括1 9 9 8 年图灵奖得主J . G r a y )。这一年的软件系统奖还破例同时授给两个软件,另一个得奖软件也是关系数据库管理系统,即著名的I N G R E S 。

1 9 7 0 年以后,考特继续致力于完善与发展关系理论。1 9 7 2 年,他提出了关系代数和关系演算的概念, 定义了关系的并、交、投影、选择、连接等各种基本运算, 为日后成为标准的结构化查询语言(S Q L )奠定了基础。

考特还创办了一个研究所(关系研究所)和一家公司(C o d d & A s s o c i a t i o n s),他本人是美国国内和国外许多企业的数据库技术顾问。1 9 9 0 年,他编写出版了专著《数据库管理的关系模型: 第二版》,全面总结了他几十年的理论探索和实践经验。

考特于 2003 年 4 月 18 日逝世,享年 79 岁。他的功绩会被历史永远纪录。
 
ZT SQL 之父 Don Chamberlin

2003 年对于 Don Chamberlin 来说,可以说是收获之年:这一年他获得了 IBM 公司技术方面的最高荣誉 IBM 名士(Fellow)称号;获得了 ACM SIGMOD 颁发的创新奖;获得了母校 Harvey Mudd 学院的杰出校友奖; 特别是,他还获得了《软件研发》英文版《Dr. Dobb'sJournal》颁发的 Dr. Dobb's 程序设计杰出奖 (Excellence in Programming Award),与 Linus Torvalds、James Gosling、Anders Hejlsberg 等一起载入史册。

Don Chamberlin 获得这些殊荣当然是无愧的:是他发起了数据查询的两次革命,他是 SQL 语言的创造者之一,也是 XQuery 语言的创造者之一。今天数以百亿美元的数据库市场的形成,与他的贡献是分不开的。

Don Chamberlin 似乎天生与数据库、信息检索有缘:小的时候,家里的一本 100 多磅重的百科全书是他的最爱,在他看来,这大概是数据库的最早形式。作为地地道道的硅谷人,他的本科是在规模很小但是声誉很高的 Harvey Mudd 学院度过的,这个学校至今仍然保持每年从 1600 多名申请者中仅招收 100 多名学生的制度。

在斯坦福大学获得博士学位以后,Chamberlin 加入了位于纽约的 IBM T.J.Watson 研究中心。那里汇聚了当时计算机界的大批精英,主要研究方向是操作系统。Chamberlin 一开始从事的项目是 System A,一年后,项目最终失败。当时担任项目经理的 Leonard Liu(后来曾担任 Cadence 公司首席运营官)很有远见地预见到数据库的美好前景,他转变了整个小组的方向。

Chamberlin 从此如鱼得水,在数据库软件和查询语言方面进行了大量研究。他成了小组中最好的网状数据库 CODASYL 专家,整日徜徉在复杂指针和集合选择规则的海洋中。与此同时,20 世纪 60 年代晚期,在美国西海岸 IBM 圣何塞研究中心(Almaden研究中心的前身)工作的数学家 Edgar Codd 独自创造了关系数据库的概念。但是,由于这种思想对 IBM 本身已有产品造成了威胁,公司内部最初是持压制态度的。当然这也与 Codd 采用了太多数学方法(以谓词演算为基础),不容易理解有关。在 Codd 里程碑性的论文"A Relational Model of Datafor Large Shared Data Banks"以及许多重要的后续论文公开发表之后,IBM 研究中心从事数据库的研究人员中,还有不少人以怪异思想视之,或者半信半疑,或者完全摸不着头脑的,甚至有人做出如此轻蔑的评论:"这东西过十年再说吧。 "

一天, Codd 到 Watson 研究中心访问, 在讨论会上,他几乎用一行语句就完成了类似于"寻找比他的经理挣得还多的雇员"这样的查询。"我的天!"Chamberlin 知道,这个查询用 CODASYL 来表示的话,可能要超过 5 页纸。这种强大的功能使 Chamberlin 醍醐灌顶,幡然醒悟,从此转向了关系数据库。

在其后的研究过程中,富于程序员气质的 Chamberlin 相信,Codd 提出的关系代数和关系演算过于数学化,无法成为广大程序员和使用者的编程工具,这个问题不解决,关系数据库也就无法普及。因此他和刚刚加盟的 Ray Boyce 设想出一种操纵值集合的关系表达式语言-- SQUARE(Specifying Queries as Relational Expressions)。

1973 年,IBM 在外部竞争压力下,开始加强在关系数据库方面的投入。Chamberlin 和 Boyce 都被调到圣何塞,加入新成立的项目 System R。当时这个项目阵容十分豪华,有 Jim Gray ,Pat Selinger,和 Don Haderle 等数位后来的数据库界大腕。

System R 项目分成研究高层的 RDS(关系数据系统)和研究底层的 RSS(研究存储系统)两个小组。Chamberlin 是 RDS 组的经理。由于 SQUARE 使用的一些符号键盘不支持,影响了易用性,Chamberlin 和 Boyce 决心进行修改。他们选择了自然语言作为方向,其结果就是"结构化英语查询语言(Structured English Query Language,SEQUEL)"的诞生。当然,后来因为 SEQUEL 这个名字英国已经被一家飞机制造公司注册了商标,最后不得不改称 SQL。有趣的是,他们的野心很大,想借此实现非程序员也就是普通大众也能广泛应用计算机的梦想(当然,那时候还没有图形界面)。因此,项目组找来了一位语言学家,她跑到圣何塞州立大学,找了许多不懂计算机的大学生,教授他们 SEQUEL 和 SQUARE 两种语言,像白居易当年对老妪吟诗那样,寻找改进的方案。他们的梦想当然并没有实现,然而,SQL 的简洁、直观还是使它迅速成为了世界标准(1986 年ANSI/ISO),30 年后仍然占据主流地位。而经过了 1989、1992、1999 和 2003 年四次修订,当初仅 20 多页的论文就能说完的 SQL,如今已经发展为篇幅达到数千页的国际标准。 { 枫下论坛 rolia.net/forum }

1988 年,由于"革命性地改变了数据库系统行业的面貌",System R 和伯克利分校开发的竞争系统 INGRES 共同获得了 ACM 颁发的"软件系统奖",Chamberlin 是 9 位获奖者之一。

此后,Chamberlin 曾一度顺应个人电脑的大潮,对桌面出版发生了兴趣。他领导了一个小组开发了一种文档编辑/格式化程序,名为 Quill。其中文档的逻辑视图是用 SGML 保存的。这是 Chamberlin 第一次接触标记语言。

20 世纪 90 年代,Chamberlin 再次返回数据库世界,开始从事对象--关系数据库的开发,其成果在 DB2 中得到了体现。其间他曾撰写过一本专门讲 DB2 的书《A Complete Guide to DB2 Universal Database》(Morgan Kaufmann,1998)。在网络时代到来,XML 日益成为标准数据交换格式的时候,Don 看到了自己两方面研究经验--数据库查询语言和文档标记语言相结合的最佳时机。他成为 IBM 在 W3C XML Query 工作组的代表,并与工作组中两位同事 Jonathan Robie 和 Dana Florescu 一起开发了 Quilt 语言,这构成了 XQuery 语言的基础。而后者经过多年快速发展,即将成为 W3C 的候选标准。对于 Chamberlin 来说,XQuery 语言标志着自己"整个职业生涯中的又一个高峰。"他深信 Web 数据技术的发展将带来第二次数据库革命。

Chamberlin 的学术成就,使他 1994 年当选为 ACM 院士,1997 年当选为美国工程院院士。他对于教育一直很有兴趣,多年来一直担任 ACM 国际大专程序设计竞赛(ICPC)的出题人和裁判。
 
应该讲讲图灵了吧
 
后退
顶部