Dennis Ritchie悼辞
贝尔实验室,Dennis Ritchie日
新泽西默里山,2012-9-7

今天,我们聚集于此,悼念Dennis Ritchie,缅怀他在软件方面开创的深远贡献。

几乎所有人都听说过“软件”一词,但只有少数人知道软件是什么,如何工作,世上有多少软件。在哥伦比亚大学的计算机科学入门课程上,我用这样一个问题作为开场白:今天世上有多少软件在服役?要充分考虑到各方面的软件系统,包括工业,政府,学术,社会,不要重复计算了。你们认为创造所有这些系统需要写多少行代码?

过了一会儿,一些勇敢的学生举起手说“一百万”。又有其他学生说“不,我想应该更多一点,大概一千万”。接着我会提到,光微软的windows xp操作系统就有四千五百万行源代码,我看到的文章说几年前SAP的商业应用程序环境的代码估计已经超过了二亿五千万行。

举了几个大型软件系统的例子后,我最终会说没人会知道这个问题的确切答案,但可以估算出目前世界上在运行的代码至少有一万亿行。我的理由如下:假定世界上大概有五百万程序员,具有职业水准的程序员的平均产出是--每年大约有2500到5000行经过测试,具有文档的代码。这样看的话,每年会产出几十亿行新代码。程序员们已经写了几十年的软件,很容易得出总共会有成千上万亿行代码。丢弃旧有软件是非常困难的,这样遗留的代码数量会越来越庞大。

不过软件的社会影响力远不如它应得的,伟大的软件创造者的社会影响力就更远远不如了。可以做个小实验,google名字“Dennis MacAlistair Ritchie”得到97000个结果,作为对比,“Justin Drew Bieber” google得到的结果却有两千万。

为了了解Dennis的贡献对社会的巨大影响,可以先看看他在C和Unix上的工作。首先我们先追述一下历史,C语言是Dennis在70年代早期创建的,是他和Ken Thompson在开发Unix操作系统时的一部分工作成果。当C编译器可用之后,C就迅速地成为Unix上开发软件的首选语言。

短短几年内,C成了开发的通用语言,甚至在Unix操作系统之外也是如此。比如,微软的Windows操作系统也是用C语言实现。事实上,现今世上许多紧要关键的软件系统都是用C写的。没有Dennis的发明,你现在打不了电话,坐不了飞机,开不了车。我收到来自于工作在NASA的Gerard Holzmann的笔记,其中的内容可作为C的伟大之处的显著证明。Gerard说:刚刚着陆在盖尔陨石坑的NASA好奇号火星车,有着令人惊叹的空中起重机下降操纵系统,它是由380000行ISO标准C控制的。Dennis的发明走出了贝尔实验室的Unix工作室,来到了火星的盖尔陨石坑,这期间过了40年。

另一个衡量Dennis在软件方面的影响力可以参看在C语言之后,有多少种重要的新编程语言是直接继承C或者受到了C的强烈影响。大约在Dennis发明C十年后,Bjarne Stoustrup加入了贝尔实验室,并在C语言中加入了面向对象和类,从而创建了C++。我想可以很确定的说大多数的软件系统中有很多都是用C或C++写的,或者说是同时使用了这两者。

但C++并不是唯一一个受到C影响的编程语言。其他今天非常流行的计算机语言--C#、Java、Javascript、Object-C、PHP,它们都是脱胎于C。事实上,我可以大胆的说,现今世上几乎所有人们用的主要软件系统都是用C或受C影响的语言写的。

从个人经历来说,我在编程语言及编译器的研究及教学兴趣受到了Dennis的重要影响。举个例子,1977年Brian KernighanPeter Weinberger和我开发了一种名为Awk的数据解析语言。Awk程序是一系列模式-动作语句组成。模式是正则表达式和数字的布尔组合,动作是C风格的语句。

另外两种领域专用语言在贝尔实验室的更早些时候就创建出来了,它们有着相同的模式-动作范式。在70年代中期,Michael LeskEric Schmidt开发了Lex语言,用来创建文本解析工具及编译器的词法分析前端。与此同时,Steve Johnson设计了Yacc语言,用来创建编译器的语法分析器及其他语言的翻译工具。Lex和Yacc都用了C风格的语句来描述动作语义,甚至之后几十年这两个工具依然是现代编译器课程的主要内容。

我在哥伦比亚大学计算机语言及编译器课程中,让学生五人一组,每组都要设计和实现一个具有创造性的新语言。这些小组用Lex和Yacc来生成他们的语言解释器。因为使用这两个工具来生成一个可工作的编译器非常简单,学生们可以把精力用来进行语言的创新性设计,而不是甩开工具花费大量时间去实现一个毫无新意的语言。

举个例子,上个学期这个编译器课程上出现了一门很有趣的语言,叫做W2W,就是穿什么(what to wear)。W2W用户要到根据衣橱服装生成的数据库中找衣服。她要写段W2W程序来描述她的穿衣风格。W2W程序编译好后运行时读取第二天的天气预报,给出整套服装的建议 。由于专注在语言的设计层面,这门课在哥伦比亚很受欢迎,每学期都会有100多名学生来上课。

在期末的时候,学生需要写项目报告,其中要包含"经验教训"这个章节。这个章节中最好的评述之一来自一位学生,他写下“在这门课程中,我们意识到自己的幼稚和自大,多年来对C语言有想当然的误解,深入类C语言的经历让我们认识到其中蕴含的价值,上此课真是个正确的决定。”

再说说操作系统。Unix系统是Dennis Ritchie和Ken Thompson一起编写的,它在操作系统中的影响力不亚于C语言在计算机语言社区中的影响力。引用1972年6月Dennis和Ken所说“...Unix的装机量达到10了,预期会更多。”今天有数以亿计的Unix系统在世界上工作,Unix也是每年数十亿美元的工业。今天用的主要非微软操作系统有Google的Android,Apple的OS X,无数版本的Linux和BSD,某种意义上说它们本质上都是Unix。公平的说,今天的全球信息网络基础设施,离开那些继承了Dennis和Ken发明的原始Unix的操作系统是不能运转的。

有人可能会问为什么Unix和C有着这么大的影响力。这不是因为同时期没有与他们竞争的操作系统和计算机语言。事实上,Ken在被要求停止Multics操作系统(贝尔实验室,通用电气,麻省理工联合开发)上的工作后,才在1969年写出了Unix第一版。那时C刚开始成长,美国国防部开始主持设计一门通用性的计算机语言ADA,适用于所有的软件开发者。ADA只火了一阵子,现在只是苟延残喘,远不能与C的通用性或者说广泛性相比。

那到底为何Unix和C这么成功?这个问题已经有很多研究,我想它们成功的理由有不少。一个很重要的理由就是Bell实验室研究院的开明管理风格,它让科学家们投身于有前景的长期研究中,很少进行细枝末节的管控。另一个理由,个人觉得是最重要的一个,就是Dennis和Ken卓越的软件品位。当搞软件的第一次碰到或者读到Unix和C时,他们会有会心的感觉--“耶,操作系统就该这样子,系统级编程语言还能是别的样子么。”自从第一个小巧的实现可用后,他们迅速开始使用Unix和C,同时教同事和学生使用。第三个理由,Unix诞生于Unix工作室,那儿有一小群天才研究者与Dennis和Ken一起工作,他们贡献了很多创意和批评意见,重要的是用Unix系统本身去开发软件。

所以Unix和C的成功让其他系统的研究者感到沮丧和嫉妒也就不奇怪了。1989年Richard Gabriel写了一篇有着矛盾修辞题目的文章”坏就是好“,来解释为什么强调简单和弹性设计的Unix/C在市场上胜过了强调一致和完整性设计的MIT。Gabriel的”坏就是好“的说明有时称为”新泽西风格“。在新泽西,我们更愿意说”小即美妙“。

当我在1967年首次加入贝尔实验室时,Richard Hamming,海明码的发明者,在第一个星期就来到我的办公室,跟我说”阿尔,要想成为伟大的科学家,不仅要做出好的成果,还要教会其他人用你的成果。“我想早期的优质可用的指南和手册也是Unix和C成功的关键理由。在Doug McIlroy的坚持下,早期的Unix系统拥有的在线手册让Unix很容易学习和使用。

接下来说说K&R。在顶尖的创造性软件开发者当中,Dennis是个优秀的科技作家,他能够将复杂的软件概念以简单清晰,生动的方式呈现给初学者。他和Brian Kernighan合著的书”The C Programming Language“,我觉得不仅是学习编程语言也是学习编程的最好教科书。此书常简称为K&R。除了初步定义了C语言,它还教授初学者如何编写优雅可用的C程序,做到这些仅仅用了不到300页的篇幅。

我前面提到的编程语言及编译器课程也大大受益于K&R。作为语言实现成果的一部分,我要求每个小组的学生写一篇基于K&R第一章的指南,参照附录A写语言的参考手册。一旦我坚持让各小组在实现他们的语言之前先写指南和语言参考手册,就没有小组会在期末时交不出一个可用的编译器。

Dennis和Ken在编程语言和操作系统的深远贡献让他们获得了计算机科学的最高荣誉。1983年,Dennis和Ken赢得了ACM图灵奖,这是计算机科学的技术成就方面的最具声望的奖项。1998年,他们获得了美国总统克林顿授予的国家技术奖章,2011年获得信息与通信技术日本国际奖

我向哥伦比亚大学的一个教员同事问过有没有一种计算机新科学发展的潜在影响力在计算机领域能够与Unix/C媲美,他说没有,唯一能想到的能有如此广泛的影响力的新事件就是彗星撞地球。

我很荣幸为Dennis说上几句来献上我的敬意。我发觉Dennis是个非常内向,谦逊的人。但只要跟他谈论起来,他的体贴,广泛的兴趣,亲切的举止会深深吸引你。

当2000年贝尔实验室在北京创立新研究实验室时,Dennis和我到几所中国高校进行讲演。在北京大学,Dennis做了Unix和C的演说,热情的学生观众挤破了教室,就像是来看摇滚巨星演出。讲演末尾,一个激动不已的学生问Dennis:您发明了Unix和C是很久以前的事情了,请问在那以后您还做出什么成果吗?Dennis毫不介意的回答:知道么,这是我第一次被问这个问题,我得考虑下这个问题的答案。

Dennis表达自己的见解时直言无忌。1994年有人写了“Unix痛恨者手册”,斥责了Gabriel的“坏就是好”哲学。Dennis为此书写了反击序言,结果真的被收录在这本书中。

Dennis的反击序言是这样结尾的“这是我的比喻:你们的书凉拌着各色合理见解。就像大便一样,这里都是些未消化的残余,供养那些以此为生的生物。它不是可口的甜饼:它散发着傲慢与嫉妒的恶臭。祝你们好胃口!”

Dennis还有着绝妙的讽刺幽默感。有一次他被问到:以你的经验,编程新手需要花多长时间才能真正成为熟练的C开发者并能写出重要的产品代码?

Dennis回答:我不知道。我从没去学过C。

对软件世界来说,Dennis就是天才。对有幸能够了解他的人,他是一个受人尊敬的智者。

Dennis,我们永远怀念你。

Alfred V.Aho
Lawrence Gussman讲席教授
计算机科学系
哥伦比亚大学

原文见 http://www.wking-china.com/xpjylc/~aho/Talks/12-09-07_DMR.pdf