软件艺术家40载春秋——C语言之父访谈

新软件

当IT爆发式膨胀的同时,有一些人曾默默地奉献,他们可能开创了一个时代,他们的作品可能是IT发展中的一个里程碑……

执著一生的研究工作

C语言或Unix,任一项发明都足已让Dennis成为一代又一代程序员的偶像,任一项发明也足以成就他“软件艺术家”的称号。但当我们接触这位伟人之后发现,Dennis是一位非常低调的人,形成对照的是他在软件业的辉煌成就。今天,当初与他同期加入贝尔实验室的科学家中,多数人都已安享晚年或是自立门户成为老板,而Dennis还是一如既往地在这里从事自己喜欢的研究工作。在完成C语言和Unix两座高峰后,他还带领他的研究小组开发出了 商业操作系统Plan 9和Inferno。

著名的《经济学人》杂志曾评价他是在C语言和Unix研发小组中唯一一位至今仍保持着年轻人热情和活力的伟大科学家。

影响大师成长的两个人

Dennis认为自己并不是在英雄熏陶下成长起来的,但在他的职业生涯中,有两个人对他的影响最大,一个是他的父亲,而另一个是他的挚友,即同为Unix发明人的Ken Thompson。尤其是后者,Ken负责了大部分的Unix的工作,他也是C语言的前辈。C语言从某种程度上来讲,是Unix开发项目的副产品。

1941年9月9日,Dennis出生于纽约 的Bronxville。1960年前后,他在哈佛大学学习物理和应用数学。也正是在这时候,一个偶然的机会改变了他一生的选择。主修物理学的他在听取了一些计算机讲座后,从此开始对计算机着迷。

1967年,Dennis步父亲后尘,也加入贝尔实验室,正是由于父亲的影响,他走上了科学研究之路。Dennis在协助Ken Thompson做Unix操作系统的过程中,他向Ken的B语言中加入数据类型和新的句法,就这样产生了一种新语言——C。C是便携式Unix的基础,也在其他领域得到了广泛应用,同时是后来的C++语言的基础。

C语言、Unix双双飞

作为一门伟大的语言,C语言的发展颇为有趣,C语言是借助Unix操作系统的翅膀而起飞的,Unix操作系统也由于C而得已快速移植落地生根,两者相辅相承,成就了软件史上最精彩的一幕。

1967年,Dennis参与的第一个项目是Multics,是由麻省理工学院、通用电器公司和贝尔实验室合作的一个大型系统。

但到1969年,贝尔实验室的管理层和研究人员意识到实施Multics时间太紧代价昂贵,没正式放弃之前,开始调整该项目,当时的组长是Ken Thompson。但调整计划要实施,迫切需要一门计算机语言做工具,可供选择的范围仅仅是PL/I、Fortran等,经过一一实验,不得不放弃,最后Ken 决定设计一种自己的语言,将BCPL压缩到仅有8KB的内存中,B语言诞生了。

B语言也并非无懈可击,由于自身局限性,在设计Unix操作系统时让设计者吃了不少苦头。为了解决程序的可移植性问题,他们决定对它进行简单改进,形成了NB语言。但NB依然不尽如人意,此后Dennis又对NB语言做了改进,C语言诞生。这是个划时代的贡献,C语言让Unix能够轻易地被移植到各种不同的机器上,为Unix的迅速普及立下汗马功劳。

1977年Dennis发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。1988年,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准。随着标准化的深入,C语言发展迅速, 成为最受欢迎的语言之一。

Dennis 也由于C语言和Unix两项成就,被人们称为“软件艺术家”,成为许多编程爱好者膜拜的对象。C语言最初被用于Unix的编写,后来它成为使用最广泛的系统开发语言,这却是Dennis本人也没有预料到的。

对话C语言之父

C语言是Dennis的得意之作。如今在众多的关于各种计算机语言的激烈辩论中,处在中心位置的Dennis却显得很平静。从采访中,我们可以看出他的一些态度。

问:您是怎样发明C语言的?它对您的生活和研究有什么影响吗?

Dennis:C语言最初是为了更易于编写Unix操作系统程序。Unix做得比较好,并且PC开始普及,由于C语言在Unix上应用得很好,使得用它来写应用程序和操作系统的人迅速增长起来。因此,对我来说,C语言的确非常重要。

问:您觉得C语言和C++有什么不同吗?

Dennis:多年以来,C和C++已经是两种不同的语言了;Stroustrup先生汲取了C语言语法和潜在的语义学中的许多东西,形成了C++语言。在一些交叉领域,标准委员会尽量使两种语言兼容。

问:您对面向对象是怎样理解的?它是不是一种好的可接受的编程思考方式?有没有学习OO(面向对象)必需的有用的工具?

Dennis:我看过OO的东西但我现在还不是OO迷。这种思想是非常好的,也即是通过隐藏任务的执行来定义界面,但是它可能做得有点过火;它也很难发现工作本质的程序终结;它的所有的东西就是界面。

问:您能对IT的将来做一下预测吗?将来我们最有可能用什么语言?

Dennis:我对预测不在行,对于C语言,它可能正在被C++,也可能是Java,或者是更高级的脚本语言所替代。当然,它在关于系统一类设计中还是相当强的工具。但是很明显,人们正在从像C语言之类的直接编译型语言,转换到注重解释性的语言,如某些脚本语言。

在采访的最后,Dennis也对学习编程的朋友提出了一些建议:“知识面最好要宽一些,不要仅仅局限于编程。即使是编程,最好多学几种语言。我在大学时花了几年时间学习物理和计算理论知识,现在我仍然对当时的选择比较满意”。

了解Dennis与C语言

Dennis M Ritchie(以下简称Dennis),人称他为“软件艺术家”。他不仅是C语言之父,由于和Ken Thompson一起开发了Unix操作系统,因此,他还是当之无愧的Unix之父。现年64岁的他在贝尔实验室/朗讯科技公司(原AT&T实验室)工作了近40年,现担任计算科学研究中心系统软件研究部主任。

从20世纪70年代起,他因杰出的工作得到了众多计算机组织的公认和表彰。

1974年,美国计算机协会(ACM)授予他系统及语言杰出论文奖。

1982年,电气和电子工程师协会(IEEE)授予他 Emmanuel Piore 奖。

1983年,他获得了贝尔实验室特别人员奖和美国计算机协会颁发的图灵奖……

C语言是使用最广泛的语言,可以说,C语言的诞生是现代程序语言革命的起点,是程序设计语言发展史中的一个里程碑。自C语言出现后,以C语言为根基的C++、Java和C#等面向对象语言相继诞生,并在各自领域大获成功。但今天C语言依旧在系统编程、嵌入式编程等领域占据着统治地位。