书,有很多;能改变一个人思维的书,并不多。
于我而言,《程序设计实践》就是一本改变我思维的书。读到这本书之前,我更多关心的是如何实现一个功能,而这本书则为我打开了一个全新的世界。
通过这本书,我知道了原来好的程序不只要实现功能,还有好多要考虑的东西,从代码风格到算法数据结构,从接口设计到性能调优。时至今日,这些内容也深深着影响着我。有幸的是,我在步入职场之前就看到了这本书。
除了书中的内容,这本书更是为我打开了一扇大门,通过它,我知道了 Unix,知道了贝尔实验室,给我后续的职业生涯,找到了一个值得追随的方向,一直不断地前行。
时隔二十年,《程序设计实践》的作者之一 Brian Kernighan 写了一本《Unix 传奇》,讲述 Unix 发展的故事,我的兴奋与激动可想而知。
Unix 之美
Unix 在整个计算机行业中的地位不言而喻,从 IT 行业尽人皆知的 Linux,到普通人熟悉的 Android 系统,其背后都有 Unix 的影子。对一个程序员来说,Unix 是一个宝藏,可以学习的东西有很多:
- 把它当做操作系统的一个样本,我们可以学习它的设计与实现
- 把它当做一个编程接口,我们可以学习它提供的各种 API
- 把它当做一个编程环境,我们可以学习命令行接口和各种工具的用法
- ……
但 Unix 还有一些更重要的东西,这不是直接的技术,更多的是一种风格:
- 理解了 Unix 把很多东西都视为文件,用几个简单的 API 就可以完成几乎所有的操作,我们会震惊于抽象的能力
- 看到了通过管道将不同的命令连接到一起,这样每个命令就可以设计得很小巧,我们会叹服于组合的魅力
- 接受了把文本作为一种标准的数据格式,不同时代的工具都可以应用起来,我们会感慨于简单的威力
- ……
对我来说,Unix 的这种风格更多的是一种品位,一种简洁之美。我一直认为,一个程序员要想成为一个优秀的程序员,必须深刻理解这种美,所以,学习 Unix 是通往优秀程序员的一条捷径,更是一条品味提升之路。
记得有一次,一个刚刚工作不久的小朋友问我,如果想提升自己的编程水平该怎么办?他是一个个人能力非常好的小朋友,一毕业就在一个遍布大牛的团队里工作,很短的时间内,就已经养成了良好的编程习惯,写起程序来能够运指如飞,他需要的是,再进一步提升。我推荐给他的是《Unix 编程艺术》,这是 Eric Raymond 写的一本讲 Unix 编程思想的书,也是第一本让我对 Unix 的理解从工具提升到思想层面的书。
学习一门技术,在我看来,有两点很重要,一是要知道这门技术的核心思想,一是要了解这门技术的来龙去脉。如果说《Unix 编程艺术》可以让我了解 Unix 的核心思想,那《Unix 传奇》则从一个亲历者的角度给我们讲了 Unix 的来龙去脉。站在我们普通人的角度看,那确实是一段传奇。
Unix 传奇
Unix,是一个“黑客”的传奇
黑客,指的是那些对计算机充满热情又有着深度理解的人,而 Unix 的传奇就始于一个黑客的热情,这个人就是 Ken Thompson。
在此之前,贝尔实验室刚刚经历了一个失败的项目:Multics。在经历了一个成功的 CTSS(Compatible Time-Sharing System)系统之后,麻省理工学院(MIT)打算做的一个更好的系统,这就是 Multics。MIT 拉来了通用电气和贝尔实验室帮忙。一个前途无量的系统,在“想得太多”的指导方针下,最终走向了失败,贝尔实验室选择了退出。Ken Thompson 就是这个失败项目的一员。虽然贝尔实验室放弃了 Multics,但 Ken Thompson 并没有放弃操作系统。
所有的传奇都有一个激动人心的开端。
Ken Thompson 给 PDP-7 这种机器写了一个磁盘驱动。在某个时刻,他发现距离一个操作系统仅有三周之遥,他要写三个程序:一个创建代码的编辑器,一个生成机器码的汇编器和一个内核的外层,每个要写一周。刚好这个时候,他的太太休了三周假,带着一岁大的儿子去探望公婆。
于是,Ken Thmopson 有了三周时间。一周,一周,再一周,Unix 诞生了。
Unix,是一个“开源”的传奇
Unix 诞生的年代还没有开源的概念。但 Unix 的产出方式,颇具“开源”的气质。一群有共同兴趣的人,今天你贡献一点新想法,明天我有了一个新点子,Unix 就是这样在 Ken Thompson 工作成果的基础上逐渐生长出来的。
《Unix 传奇》给我们讲述了 Unix 各项特性诞生背后的故事,比如:
- Unix 的命令为什么都很短?因为他们最初使用的是 Model 33 电传打字机,输入非常吃力,所以,少敲几个字母可以节省时间。
- 为什么 Unix 上有那么多处理文本的命令?因为他们的机器是用专利部门的预算购买的,所以,要帮专利部门完成一些文本处理的任务。
- 在 Unix 中,为什么会有 Core Dump 的说法?因为要定位错误,需要有一个文件保存主存储器的内容,而当时的主存储器用的是磁芯,也就是 Core。磁芯已经退出历史舞台,但 Core Dump 没有。
- ……
在今天看来,很多精巧的解决方案,就是这样在解决一个又一个问题的过程中诞生出来的。
如果 Unix 只是停留在贝尔实验室内部,它不会成为今天的 Unix。真正让 Unix 发生蜕变的是,它传播到了贝尔实验室之外,这就像在今天,有人把一个项目开源到了 Github 上。只要是一个真正有价值的项目,很快就是受到足够的关注。Unix 的价值不言而喻,所以,它就受到了万众瞩目,来自各方的贡献涌现了出来:
- 有人写出了新的分支,比如,BSD
- 有人贡献了新的技术,比如,TCP/IP 协议
- 有人写了新的工具,比如,VI
- 有人分析了代码,比如,《莱昂氏UNIX源代码分析》
- ……
Unix 甚至再进一步,进入到商业化的领域,有了各种发行版,这同今天的 Linux 发行版如出一辙。其实,Linux 同样也是 Unix 的后裔,它的商业化也是 Unix 商业化的一种延续。
Unix,是一个“不可复制”的传奇
Unix,源自贝尔实验室,而贝尔实验室本身就是一个传奇般的存在。信息论的奠基者香农(Claude Shannon)曾经在贝尔实验室工作,还有彭齐亚斯(Arno Penzias)和威尔逊(Robert Wilson),他们因为其在贝尔实验室的工作时发现了发现宇宙微波背景辐射而荣获诺贝尔奖。
当时的贝尔实验室有着稳定的环境、有保障的经费、富有挑战的问题,更重要的是,汇聚了行业中的顶级人才,Kernighan 在贝尔实验室实习的第一天,喊他一起吃午饭的人是汉明(Richard Hamming),他是 1968 年图灵奖的获得者。正是这些顶级人才的汇聚,才有思维火花的不断碰撞,也才有了新的想法层出不穷。
对于这些顶级人才,贝尔实验室给予了他们最宽松的管理,Kernighan 多次提及许多人不愿意去做管理,而更愿意面对有挑战的问题。即便成为了管理者,他们也很能理解下属,为大家创造出最适合协作和发展的环境。
经过了高峰之后,贝尔实验室也逐渐辉煌不再,一方面,母公司 AT&T 拆分之后,贝尔实验室逐渐式微,另一方面,新巨头的兴起,贝尔实验室在人才争夺战中已经不再独占鳌头了。
Unix 用一群顶级智慧解决了恰如其分地解决它那个时代面临的问题。
当时代不在,即便是同样一群人,同样无法展现最大的价值,Plan 9 的不成功充分说明了这一点。Plan 9 是一个力图进一步完善 Unix 的尝试,而它对我们今天世界的影响远远不如 Unix,其中的技术在今天影响最广泛的是 Unicode 的 UTF-8 编码。
虽然 Unix 是一段不可复制的传奇,但幸运的是,来自 Unix 的编程思想却影响着一代又一代的程序员不断创造新的传奇。
小结
属于那一代人的 Unix 传奇已经暂告一段落了,但 Unix 的影响会一直存续下去的,它已经深深地嵌入到整个 IT 行业的发展之中。
一个程序员应该学习 Unix,这是他成为优秀程序员的捷径,一个程序员应该读读《Unix 传奇》,这是他深刻理解 Unix 的捷径。