执著一生的研究工作
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也对学习编程的朋友提出了一些建议:“知识面最好要宽一些,不要仅仅局限于编程。即使是编程,最好多学几种语言。我在大学时花了几年时间学习物理和计算理论知识,现在我仍然对当时的选择比较满意”。