在互联网上,几乎所有东西都会使用 C 语言和 Unix 操作系统,但 C 语言之父的离世却很少有人缅怀。2011 年 10 月,人们对乔布斯的去世记忆深刻,但这一年还有另一位本应获得同样关注的人物也与世长辞,他就是 C 语言之父 Dennis Ritchie 。
不过,并不是所有人都忽视了 Dennis Ritchie 所曾作出的贡献。
“乔布斯的逝世引起了一片哭声,那种情形非常动人,而且乔布斯受到这样的待遇也是合情合理的。但在事实上, Dennis 对这个世界的影响更大,然而公众却甚至都不知道他到底是谁。”编程领域中的传奇人物、目前供职于谷歌的 Rob Pike 说道,他曾在贝尔实验室与 Dennis 共事 20 年。
在 Dennis 去世时,Rob Pike 在 Google+ 上发帖宣布了这一噩耗。2011 年 10 月 12 日,在经历了长时间的病痛折磨后, Dennis 在他位于美国新泽西州的家中与世长辞,享年 70 岁。在资深科技人士中,人们对这一消息所作出的反应是巨大的;但在互联网上,人们向 Dennis 献上的悼词完全无法与他对现代社会带来的广泛影响画上等号。
不可否认,乔布斯带给我们世上从未见过的创新和标志性的产品,还有一大批对他顶礼膜拜的狂热消费者和终端用户。
但是苹果和乔布斯以及很多其他公司所创造的出色产品,和所有现在我们了解现代计算机领域的东西,都要归功于 Dennis 。
有些年轻人可能都要摇头, Dennis Ritchie 是谁?
1954年,电气工程师 Alistair Ritchie,决定举家从纽约州的 Bronxville ,搬到几十公里以外的新泽西。这样可以离他的工作单位贝尔实验室更近一些。
13岁的 Dennis Ritchie ,就这样随着父亲一起来到新泽西。那时,谁也没有想到,这个文静的少年将在这里待上一辈子,并且创造出改变世界的发明。
中学毕业后, Dennis Ritchie 听从父亲的建议,进入哈佛大学学习应用数学,直到拿到博士学位。他的第一份工作,是为军方研制核武器,这并不符合他的志趣。1967年,通过父亲介绍,26岁的他进入贝尔实验室,从事刚刚兴起的计算机研究。从此,他在新泽西老家一住就是44年,直到去世。
Dennis 不像某位来自硅谷,生活精致和少年得志的亿万富翁,穿着帽衫在站满粉丝的屋子里,演示炫酷的产品。
不, Dennis 是一位胡子有些凌乱的计算机科学家,他穿着羊毛衫坐在一间凌乱的办公室里。
如果没有 Dennis Ritchie ,就不会有我们现在所熟知的现代计算。他是 C 语言之父和 Unix 操作系统的联合发明人。
Dennis 发明了和共同发明的这两个关键的软件技术,是构成几乎每一款计算机软件产品的 DNA ,现在我们直接或间接都在使用这些软件产品。这听起来让人难以置信,但它确实是真的。
20 世纪 60 年代, Dennis 和他在贝尔实验室的合作伙伴 Ken Thompson 参与了贝尔实验室 Multics 系统的开发,目的是开发一个前所未有的、可以多人使用的、同时运行多个程序的操作系统。该项目由贝尔实验室、麻省理工学院和通用电气公司三方联合研制,但是由于设计过于复杂,迟迟拿不出成果,贝尔实验室又撤出了 Multics 计划。于是 Ken Thompson 找到了一台 PDP-7 机器,从头开始开发应用程序和操作系统。在此期间, Dennis 和 Ken 也带领团队进行系统的开发工作。
1970 年, Brian Kernighan 建议把系统命名为 “Unix”,与 “Multcis” 名字相对。在完成 Unix 系统开发的基本工作之后, Ken 觉得 Unix 系统需要一个系统级的编程语言,便创造了 B 语言。
关于 B 语言的得名有两种说法,一种说法是来自 Ken Thompson 的妻子 Bonnie,另一种说法则是来自上个世纪六十年代中期诞生于剑桥大学的 BCP 语言。但无论如何,C 语言是从 B 语言衍生出来的这一点都是毋庸置疑的。
Dennis 之所以开发出 C 语言,是因为他和 Ken Thompson 需要一种更好的方式来构建 Unix 系统。最早的 Unix 内核是用汇编语言编程的,但不久以后两人决定需要开发出一种“更高级别”的语言,能让他们对遍及这个操作系统中的所有数据都具备更大的控制力。1970 年前后,他们用 Fortran 语言开发出了第二个版本的 Unix 系统,但效果并不理想。然后,Dennis 就基于 Ken Thompson 开发的 B 语言提出了一种新的语言。
B 语言是一种解释性语言,而 C 语言则是一种编译语言,可被转译为机器编码,然后在 CPU 上被直接执行。在当时,C 语言被认为是一种更高级别的语言,不但能给Dennis 和 Ken Thompson 带来他们所需要的灵活性,同时速度也很快。
C 语言是 Dennis 在 1969 年至 1973 年开发的,它被认为是第一个真正意义上可移植的现代编程语言。自它诞生差不多 45 年以来,它已经被移植到几乎每一个出现过的系统架构和操作系统上。
1978 年, Brian Kernighan 和 Dennis 合著出版了《C 程序设计语言》这本书。这本《C 程序设计语言》是计算机科学的杰作,它也是解释现代程序设计概念的一个关键参考,甚至到今天,它还是计算机科学课程里学习程序设计的经典教材。
Dennis 和 Brian Kernighan 随后对它进行了一定程度的优化,最终于 1989 年被美国国家标准协会的 X3J11 委员会进一步细化为 ANSI C 程序设计语言。
直到今天, ANSI C 作为一种编程语言还被大量地使用,后来它还发展出很多的衍生语言,这些语言又分别有很多的追随者。
其中最流行的 C++ 是由 Bjarne Stroustrup 于 1985 年发明,它增加了面向对象编程和类的支持,用在各式各样的操作系统上,包括像 Linux 和 Mac 这样的 Unix 衍生品上,它作为微软 Windows 软件开发的主要编程语言长达 20 多年。
此外还有 Objective-C,是由 Stepstone 的 Brad Cox 和 Todd Love 在八十年代发明的,增加了 Smalltalk 消息传递功能,进一步拓展了这种语言面向对象和代码重用的特性。
Objective-C 很大程度上被认为是一个鲜为人知的 C 语言衍生品,直到它在八十年代末和九十年代初被广泛用于 NeXT 公司(乔布斯 1985 年于苹果公司辞职后所创办)的 NeXTStep 和 OpenStep 操作系统上。NeXT 于 1996 年被苹果公司收购,乔布斯在 1997 年重新回归苹果并出任公司的 CEO。
2001 年,苹果发布了 Mac OS X,其中大量使用了 Objective-C ,以及 NeXTStep 和 OpenStep 所引入的面向对象技术。
当时 C++ 也被大量应用在 Mac 上,Objective-C 被用来在 XCode IDE 下编写本地面向对象的 “Cocoa” API ,这些 API 是 iOS 上手势识别和动画功能的核心,这些功能为未来推出的 iPhone 和 iPad 增色不少。
除此之外,微软也有自己的 C 语言衍生品: C# ,于 2001 年发明并作为 .NET 框架的编程基础。
但是 C 语言的影响并不仅局限在它的衍生品上。Java 这样一个重要的企业级编程语言,在很大程度上也是基于 C 语言语法。
其它语言例如 Ruby、Perl 和 PHP 等,它们是构成动态现代网络的基础,也都使用了Dennis 发明的 C 语言语法。
所以说,如果没有 Dennis 的工作,我们根本就不可能有现代的软件和系统。
因为它是一种命令的、编译的和程序化的编程语言,它允许语法变量作用域和递归,允许内存的底层访问,还有复杂的 I/O 和字符串操作功能,以上这些使这种语言变得相当通用。
与人们今天所知的 C 语言相比,第一个版本的 C 语言并无多大不同,只是稍微简单一些。这种语言能提供完整的数据结构和变量类型,令 Dennis 和 Ken 得以构建了新的 Unix 内核。“他们开发出C语言是为了写一个程序。”Pike 曾回忆,他在 C 语言问世的十年以后加入了贝尔实验室。“而那时他们想要编写的程序就是 Unix 内核。”
除了 C 语言之外, Dennis 还是 Unix 操作系统的共同发明人。当然 Unix 的原型是用汇编语言编写,到七十年代早期就完全用 C 重写了。
早在1969年, Ken Thompson 在一台 DEC PDP-7 上引导了第一个版本的“Unics”,从那开始 Unix 已经演变出很多类似的操作系统,并运行在各种各样的系统架构上。
吸取了 Multics 设计复杂而导致失败的教训, Dennis 将 Unix 的设计原则定为"保持简单和直接"(Keep it simple stupid),也就是后来著名的 KISS 原则。为了做到这一点,Unix 由许多小程序组成,每个小程序只能完成一个功能,任何复杂的操作都必须分解成一些基本步骤,由这些小程序逐一完成,再组合起来得到最终结果。
表面上看,这样的设计很低效:为了取得结果,你必须运行一连串小程序,那么为什么不用一个大程序一次运行就得到结果呢?但是事实证明,由于小程序之间可以像积木一样自由组合,所以非常灵活,能够轻易完成大量意想不到的任务。而且,计算机硬件的升级速度非常快,所以性能也不是一个问题。另一方面,开发单一目的的小程序,要比开发大型程序容易得多,所以 Unix 才有可能在短短几个月内问世。
每一个主要的计算机供应商都曾经实现过自己的 Unix。甚至连微软也曾经拥有一个叫做 XENIX 的产品。
点击和放大看下图,可更好地理解 Unix 家族。
发明Unix和C语言,给 Dennis 带来巨大的荣誉,他得到了1983年的图灵奖、1990年的汉明奖、1999年的美国国家技术奖章。尽管功成名就,但是就像他的工程设计思想, Dennis 在个人生活上也尽量"保持简单"。他依然住在新泽西,低调地生活,不太在媒体上曝光,终身没有结婚。
可以这么说,如果没有 Dennis 的贡献,现在我们没法用个人计算机,成熟的软件应用甚至是互联网。
没有 Android 智能手机,没有乔布斯和苹果创造令人惊叹的 Mac 和 iPad。
没有微软的Windows 10 和 Surface Book。
没有云计算、没有 AWS ,没有 Azure 。
向 Dennis 致敬 —— 感谢他带给我们这些技术,让我们可以成为今天的专家。
参考资料: Without Dennis Ritchie, there would be no Steve Jobs . Jason Perlow