沉默的巨人:丹尼斯·里奇
2011年10月5日,苹果前CEO史蒂夫·乔布斯去世。
万家媒体竞相报道,政治、经济、科技、体育、娱乐等各界大佬纷纷发文悼念,无数粉丝走上街头,他们在小纸条上写上对乔布斯的感谢,贴在离自己最近的苹果官方零售店玻璃墙上,用自己的方式送别这位天才。
如今快十年过去了,仍有大批媒体在每年的10月发文缅怀乔布斯。
其实与乔布斯同年同月去世的,还有另外一个大佬。当年他的去世无论是大众还是媒体都鲜有人关心,近十年里提起他的更是屈指可数。
但,这位大佬在计算机操作系统和互联网领域的成就是乔布斯开创苹果帝国的起点,可以说,他正是用肩膀支撑起乔布斯眺望远方的那位巨人。
为什么这么说呢?
因为如果没有乔布斯的话,大家的苹果手机现在可能只是更丑更难用一点,但是如果没有这个人的话,乔布斯根本就不可能去做个人电脑和智能手机。
这位计算机大佬就是丹尼斯·里奇(Dennis Ritchie)。
丹尼斯·里奇1941年出生于纽约的布朗克斯维尔,他的父亲阿利斯泰尔·里奇是大名鼎鼎的贝尔实验室的研究员,专职研究电路板。
里奇在上学期间就是个成绩优异的小天才,高中毕业后顺利进入哈佛,最终以物理和数学双学位快乐毕业。在哈佛的时候,里奇去听了一场关于计算机操作系统的讲座,本来就对电子系统非常感兴趣的他,被当年还只见于高端科研实验室和军事基地的“操作系统”这个新奇的概念一发入魂。
R.I.P.(愿逝者永享安宁)
按照里奇的贡献,他本可以名扬四海,家财万贯,但他放弃了这些,甘愿在一家公司当个扫地僧。
操作系统就是一种给用户提供交互界面、管理计算机硬件和软件资源、控制输入和输出的程序。翻译成人话就是,它把人的指令传递给各个电子元件,安排和指挥它们通力合作来实现有意义的结果反馈。
打个比方,你在玩枪战游戏时看到地上有一把枪,你按下E键,这个E的信号就从键盘传到操作系统,然后操作系统再通知游戏引擎E键被按下了,游戏引擎判定玩家要捡起枪了,再反过来经过操作系统通知CPU和GPU(图形处理器),一个负责把捡枪这件事“算”出来,一个负责把捡枪的动作“画”出来,最后再由操作系统把动画展现在显示器上。
你最终在屏幕上看到的画面很简单,就是玩家把枪捡了起来,而在这背后负责指挥各个部件之间交流的程序就是操作系统。
当时里奇觉得这种像军师一样接收用户命令,指点电子江山的操作系统实在是太新奇了,比手动拨计算机上几百个开关来控制各种电子元件不知道要高明到哪里去了。
由于哈佛大学当时并没有完善的计算机科学专业,里奇决定马上出门右转,去街对面的麻省理工学院(MIT)找了个工作,开始研究计算机系统和软件。
为了自己的梦想,作为哈佛学子的里奇来到麻省理工发光发热。
.因为里奇在MIT工作的时候和贝尔实验室有点接触,再加上老爸也在那做事,他就在1967年顺理成章地进入了贝尔实验室。
贝尔实验室那时在紧锣密鼓地研发一款划时代的操作系统,这对里奇来说简直正中下怀。
现在大家用电脑的时候,多任务切换已经是稀松平常的事情了,前面做着Excel表格,后台Alt+Tab一切就是挂机游戏,工作游戏两不误。
不过如果你用着当年的电脑的话,就别想后台挂机了:用户一旦启动一个软件,输入一批数据,这台机子这一段时间就只能处理这一件事情。比如第一款做商业和行政用途的计算机UNIVAC 1,就被美国人口普查局所采购,专门用来统计人口。
对于当年的计算机来说,时间就是金钱,让机器满负荷跑出来的数据对于研究所和大公司来说都是白花花的真金白银,更不要说消耗的人力和电力了。
有效利用CPU的计算时间就是在印钞票!
所以,能够做多任务处理的计算机呼之欲出。
世界上第一款商用计算机UNIVAC 1。曾经在CBS(美国哥伦比亚广播公司)电视台上直播预测过1952年的美国大选,计算出的结果和当时的主流预测大相径庭,但最后大选结果却和UNIVAC 1算出的预测一致。
第一台能够多任务同时进行的电脑,叫做分时系统(time-sharing)计算机,可以让不同的程序在同一时间处理各自的任务,来满足多个用户同时使用自己的程序的目的,能更高效地利用CPU的计算时间。
于是通用电气(General Electric)找到了贝尔实验室和麻省理工学院,打算在自家的GE 645电脑上开发一个名为Multics(多路复用信息与计算服务)的交互式操作系统,来达到多用户同时处理多任务的目的。
虽说是交互式系统,但当时人和电脑的互动并不像现在大家点点鼠标甚至是戳一下屏幕,操作就完成了,因为鼠标那时根本就没有!如果回到1960年,交互是非常简单粗暴的:你对电脑输入一串命令行,它能对你的指令做出即时的反应,人们要背下来很多指令才能操作电脑。
刚进入贝尔实验室的里奇在麻省理工学院的时候就听说过这个Multics系统,加上自己感兴趣,他二话不说就参加了研发。过程中,他碰到了自己的好友,也是一生中最重要的研究伙伴——肯尼斯·汤普森(Kenneth Lane Thompson)。
这两位老哥不仅一头栽进系统的开发,而且还充分地利用了Multics的交互特性,抽空给Multics系统适配了一个叫做《宇宙航行》(Space Travel)的小游戏。这个游戏的操作方式现在看来非常原始——你要在命令行里手动输入操作指令来指挥飞船飞行。
想象一下你玩枪战游戏的时候前进不是按键盘上的W键,而是调出聊天框,在里面输入“人物向前移动距离:5米;移动速度:1米每秒”。听起来很复杂,但在当时都算是高级货色了。
不过由于贝尔实验室和通用电气对Multics这个系统的期望过大,导致整个系统过度研发,变得非常复杂和臃肿,使用起来要消耗大量的人力物力,比如玩一把上面的《宇宙航行》小游戏,竟然要花费掉相当于50—75美元的CPU计算时间。
眼看团队花几年做出了个事倍功半的东西,通用电气很失望,在1969年一刀砍掉了Multics这个项目。
项目被砍,被没收游戏和机子的里奇与肯尼斯手痒得不行,于是两个人商量好,打算私底下继续研究这种交互式系统,顺便把之前玩的游戏搬运过去。
他们决定把这个系统命名为Unics,后来演化为Unix,告诫自己吸收Multics失败的教训(作为英语前缀的uni是“单”的意思,multi是“多”的意思),删繁就简,积少成多。
由于Multics的失败,贝尔实验室不肯给里奇和肯尼斯买新设备,他们就不得不使用之前留下来的老设备老硬件来开发Unix,也就是PDP-7,这也促使他们把目光聚焦在了迷你计算机上。
——确实迷你,大概也就半吨重吧。
不过,虽然硬件很烂,这两位同学开发的情绪却异常高涨,而且PDP-7更低的内存和更差的处理性能反而鞭策他们把Unix做得更简洁,效率更高。经过了大半年业余时间的爆肝,里奇和肯尼斯终于在1969年的圣诞节把Unix系统的最初版做出来了。
然而当他们来找贝尔实验室要更好的设备去测试Unix的时候,办公室里的其他老哥们依然不信他们能写出一个完整的操作系统来:“我们整个团队花了5年的时间都没能写出令人满意的Multics系统,你们短短一年能做出啥?”
这咋办?
Multics的logo(标识)
PDP-7迷你计算机。这个块头放在今天怎么看都不算迷你,但是比起动辄占满一整个房间的大型计算机,PDP-7就像过家家的玩具一样。
里奇和肯尼斯巧立名目连蒙带拐地提出:贝尔实验室当时正好缺文字处理软件,他们可以把Unix包装成一个“办公室自动化系统”,大概就是一套Office软件,可以拿来做文字处理。一顿操作下来,终于说服贝尔实验室买了台当时最先进的PDP-11。他俩将整个系统迁移了过去,然后暗中传播给办公室里的其他同事用。
结果大家纷纷表示真香,而Unix这套系统也在贝尔实验室里慢慢流传开了。
但是里奇觉得这套初版的Unix还不是他心目中完美的操作系统。其中最大的原因是Unix系统的运行效率有点低,而这个效率取决于编写系统的语言。
这里,我们就要稍微解释一下编程语言和计算机的关系了。
由于计算机是各种电路板的组合,只能理解0和1,没办法直接理解人话,所以人就要用机器语言0和1来和机器交流。但是一个程序动不动就是几百万字节,也就是上千万个0和1,人手动打这么多个0和1怕是要打到天荒地老。于是为了写程序方便,我们就需要编程语言,比如想要实现双击打开Word的功能,我们写程序的时候写成“当用户双击鼠标时,打开Word文档”就好了,这样不需要敲几千个0和1。虽然这行字是用编程语言写的,但到0和1的机器语言还需要层层翻译,这就需要编译器,相当于机器和人类的翻译官。
但是每个人或者组织编程的时候用的人话又不太一样,比如还是“双击运行Word”这段程序,有些人可能更喜欢说“当用户点两下鼠标时,运行Word文档”,同样,编程语言也有多种,比如C语言、Java、Python等等。这些语言就和标准普通话一样,都有自己的语法、编写标准和对应的编译方法与编译器。
而里奇感到不满意的初版的Unix是基于Basic语言的,属于解释语言,每次运行的时候,编译器都要先把人话解释成机器语言再运行,每运行一次就重新解释一次,做了许多无用功,效率比较低。
与之相对,如果是编译语言的话,编写好程序以后点击编译,编译器就会把整个程序都翻译成机器语言打包保存下来,之后每次运行直接用机器语言运行就OK了。所以在系统运算资源匮乏的60、70年代,编译好的系统能大大提升运行的效率。
碰巧之前在开发Multics的时候里奇就设计过好几个不同的编译器,于是他就改良了Basic语言,添加了数据类型和数据结构,将其演化成了C语言,顺便还给C语言加了个编译器,每次写好程序,编译器就直接把程序翻译成0和1再保存下来,让C语言成为编译语言,大大简化了用C语言编写软件的难度和流程,也大大提升了Unix系统的运行性能。
而C语言也随着Unix系统的推广迅速成为当年全世界程序员最爱的语言,没有之一。
这里补充一个高级语言和低级语言的概念。这里的高级和低级是指在计算机高低层运行的意思。越低级的语言越靠近计算机底层的0和1的逻辑,虽然写起来会比较繁琐,但是能直接指挥计算机,运行效率比较高;而越高级的语言就越靠近人类的思维,比如“人物向前移动距离:5米”这种指令,需要层层翻译才能到达计算机能理解的程度,运行效率会变低,但是写起来却特别容易,比如现在大量编程培训机构主推的Python就是典型的高级语言,因为它和人话更像,比较容易上手。而C语言这么受欢迎是因为它不仅有高级语言的语法,写起来比较容易,还有着低级语言的运行效率,能直接进行系统比较底层的操作,贯彻了大道至简的原则,语法简单,结构清晰。
里奇和布莱恩合著的《C程序设计语言》。这本书到现在还被非常多的程序员和编程爱好者买来放在家中装饰镇宅用。
里奇还和他的同事布莱恩一起写了本《C程序设计语言》的教材,就是左面这本。前前后后加起来只有100多页,和C语言本身一样清晰明朗。
1973年,用C语言整个重新编写过的Unix操作系统正式向大众发布第五版,从此以后Unix系统的热度就一发不可收,后来的大学研究院、大公司和开发者都纷纷采用了Unix系统的标准来编写程序,所以市面上大部分软件也能在Unix上直接运行。比如iPhone的操作系统iOS,苹果一系列产品,比如Mac电脑、苹果手表AppleWatch等,用的操作系统也都是基于Unix开发的。
你可能会说“我不用苹果产品啊”,那么很遗憾地通知你,不用iPhone的朋友们手上的安卓系统是基于Linux开发的,而Linux则被称为“类Unix系统”,因为本质上Linux是照搬参考了Unix系统以及其各种变体创作出来的。
换句话说,世界上除了Windows(基于DOS系统)以外,其他所有现存的操作系统要么是直接基于Unix,要么多多少少参考了Unix的结构。没错,就连深受米粉喜欢的MIUI也算是Unix的远房亲戚。
快来跟差评君一起喊:
万物基于Unix!
Unix和类Unix系统的演变
而C语言的重要性更是不言而喻,除了上面列的一大堆操作系统都是用C语言写的以外,毫不夸张地说,现在我们网上冲浪用的几乎所有浏览器和网络服务器都是用C语言写的。
那么里奇这么牛的科技大佬为什么很少有人耳闻呢?
究其原因还是里奇本身就是个非常低调的老哥,和他一起写C语言教程的同事布莱恩·柯林汉和另一位同事罗伯特·派克描述他说:“我和他在同一个走廊里工作了二十年,然而我还是觉得自己不太认识他。”
一般人要是有这么个轰动世界的科技发明,说不定早就开始躺着赚钱了,而里奇却明确表示自己并不想通过Unix变富翁,只想老老实实待在贝尔实验室,好好聚焦在自己的研究上,继续从事Unix相关的工作。连里奇最后成为贝尔实验室软件系统部门的老大,都是经过百般推脱,实在没有办法了才上任的。
里奇在2007年正式退休,不过还是每天都去贝尔实验室工作,直到他因为前列腺癌和心脏疾病去世。
大家现在每天用这么多的电子产品,可能很少会去思考它们背后运行的原理,更少会去想它们背后是哪些科学家智慧的结晶。但是如果有那么一套神奇的显微镜,往各位的手机、电脑上一照,就能看到背后所凝结的各位科学家一点一滴的心血,那么我相信大家一定能看到丹尼斯·里奇做出的不可磨灭的贡献。
前人栽树,后人乘凉。
而丹尼斯·里奇就是计算机和互联网行业不为人知的参天大树。