老婆离家三周,我写了一个操作系统!
我出生于1943年,今年已经78岁了,依然战斗编程的第一线,今天给大家讲讲我当年写操作系统的故事......
我小时候特别喜欢鼓捣电器,玩了10年。
当我去加州大学伯克利分校读电子工程的时候,我发现课程超级简单,于是我迷上了一个新玩意儿:计算机。
每天晚上,我都会偷偷打开机房大门......
到了大四,我觉得自己玩得太嗨,学业不够优秀,就没有申请读研。
但是有一天,教我课的Berlekamp教授突然给我我一个“惊吓”。
原来Berlekamp教授替我做了申请,并且通过了!教授真是一个好人。
一年以后,我拿到了电子工程和计算机科学的硕士学位。
大名鼎鼎的贝尔实验室想把我招去工作,但是当时我的心还比较“野”。
贝尔实验室不厌其烦地邀请我, 我把他们拒绝了七八次,最后他们居然找到了我家里!
我来到了贝尔实验室参观,被震撼了!
第二天,我租车出行,去找我的朋友。
贝尔实验室不知怎么查到了行踪, 居然在我旅途的第三站留下来一份offer。
1966年,我加入贝尔实验室。
悲催的是,我的第一项工作就和同事们一起掉进了坑:Multics操作系统。
这个操作系统是我们和GE、MIT一起研制的,试图做一个比CTSS更好的OS,但是大家犯了一个大错误:过度设计。
(注:第二系统效应,意思是在首个系统(如CTSS)创建成功以后,打算创建一个新系统,修正旧系统的遗留问题,添加新特性,结果塞进去太多东西,得到了过于复杂的系统)
1969年,Multics还是无法完成,忍无可忍的贝尔实验室决定退出。
回来以后, 我和项目组成员还是想做操作系统,向经理申请费用。
(其实我是有点想念Multics上我开发的太空旅行游戏了)
但是管理层被Multics伤透了心,不愿意给我们买硬件。
既然如此,我只能“废物利用”了,我很快找到一台没怎么用过的PDP-7。
PDP-7的图形显示还不错, 我很快在上面“恢复”了太空旅行这个游戏。
玩家可以模拟操作太空船在代表太阳系的二维画面内进行飞行、着陆。太空船会受到万有引力影响。
这个游戏很容易上瘾,经常让人一玩就是好几个小时
我相信程序员热爱游戏的传统将会被传承下去,例如MySQL发明人, Linux发明人,都是游戏迷,他们不但玩游戏,还会像我一样写游戏。
我在移植游戏的过程中,开发了自己的数学计算和图形子程序。
但是太空旅行在PDP-7上运行得很慢, 于是,我和Dennis Ritchie等人又重新设计了文件系统:
等到太空旅行能顺利运行起来的时候,我赫然发现, 我离一个操作系统只剩下三周之遥了!
恰巧,我太太休了三周假, 带着1岁的儿子回娘家,我就有了三周不受打扰的工作时间。
这三周,我的代码生产力简直爆棚!
1969年底,一个操作系统可以运行了,它被我的同事称为Unix。
Unix操作系统看起来像是我们为了玩游戏而产生的副产品 !
20多年后,一个芬兰的小伙子Linus会再次深刻地体会了这个过程:本来想给自己找点儿乐子, 结果却做出了伟大的操作系统。
正所谓:有心栽花花不开,无心插柳柳成荫。
当然,这一切的底层基础是:对计算机强烈的兴趣,以及强悍的编程能力。
(Linus的故事传送门在这里《Linux之父:财务自由以后,我失眠了!》)
虽然我们直接买机器的企图失败了,但我们很快找到了替代办法。
贝尔实验室创新太强了,平均每天都能产出一项专利,处理专利文件成了一个大问题。
交易达成,买了一台PDP-11 , 我和Dennis Ritchie很快就把Unix移植了过来,哈哈。
打字员们白天处理专利文档,到了晚上,我们Unix小组的人就它来开发软件。
后来,专利部门尝到甜头,又给我们买了一台PDP-11, 这样我们才能全天候开发了
于是就有了这张著名的图片,我和Dennis Ritchie在一起工作。
说起Dennis Ritchie,这可是我一生的好友,超级大牛。
他看到Unix是汇编写的,而不同架构的机器,汇编语言是不同的,移植起来很费劲。
于是,他发明了C语言,并且用C语言重写了Unix,让Unix可以轻松地在各种机器间移植。
Unix很快便在大学和科研机构流行起来。
1975的秋天,我休了一个长假,回到了母校加州大学伯克利分校,开设了一门Unix课程。
我不仅讲解理论,还在晚上带着大家阅读一行行的Unix内核代码,向大家解释为什么这么做。
我在伯克利大学的教学激发了很多人对操作系统的热情, Bill Joy尤其突出,他后来创建了著名的Unix分支:BSD 。
(Bill Joy的故事传送门在这里:《那些神一样的程序员》)
贝尔实验室是个非常棒的地方, 既给每个人提供独立办公室,又提供可以协作的共享空间, 这里鼓励创造,不同的思想在这里碰撞、激发,充满了黑客的氛围。
我的同事道哥在Unix上开发了一个叫speak的程序,可以和一个叫Votrax的语音合成器连接,把文字变成语音输出。
每天下午一点,Votrax的大喇叭就会提醒大家1点15分食堂就关门,该去吃饭了。
我从小就热爱国际象棋,1971年,我在PDP-11上写了一个国际象棋程序,后来又制作了加速运算的特殊硬件, 最终形成了一台叫Belle的国际象棋计算机。
Belle战绩骄人,在于人类的常规比赛中,获得了2200等级分,成为第一台荣升国际象棋大师的计算机,还获得了1980年世界计算机国际象棋大赛的冠军。
除了象棋之外,我还是一个狂热的飞行爱好者。
在我的影响下, 贝尔实验室计算机科学研究中心出现了六七位私人飞行员 。
我们经常约着飞出去看秋叶,或者到有意思的地方吃午饭。
但是,这些飞机开起来不过瘾。
1992年,我决定玩儿一票大的,来到莫斯科,去玩了一把米格29战斗机
由于在Unix操作系统和C语言的杰出贡献,我和Dennis Ritchie获得了1983年的图灵奖。
2000年,57岁的我从贝尔实验室退休。
但是我觉得还能折腾。
2006年,我又加入了Google ,和Rob Pike, Robert Griesemer等人发明了Go 语言,现在Go语言的发展势头还不错!
这就是我这几十年的故事,我是Ken Thompson, 一个写过操作系统,会开飞机的程序员!
更多技术漫画,尽在码农翻身
后记:非常感谢人民邮电出版社的刘鑫老师,送了我一本重磅图书《Unix传奇》,我在周末一口气读完,激发了画这篇漫画的灵感。
获得了改变授权以后,我主要基于书中 Ken Thompson小传这一节和wikipedia的内容,变成了本漫画。
漫画只是从Ken的角度,展示了Unix的发展, 书中还讲到了非常多Unix历史中有意思的人物、技术和事件,可以看到那些程序员大师们的风采,以及一个鼓励创新的组织结构是什么样子的, 值得每一位IT从业者认真阅读。