《UNIX 传奇》读书笔记

Posted 唐门教主

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《UNIX 传奇》读书笔记相关的知识,希望对你有一定的参考价值。

春节读完了 Brian W. Kernighan 的最新著作《UNIX 传奇》,却一直没时间输出点什么,今日趁将机械键盘拾掇出来使用之时,且做笔记沉淀一二。

Brian W. Kernighan 其人是谁?

Brain Kernighan,加拿大计算机科学家,曾在贝尔实验室工作超过 30 年,目前为普林斯顿大学教授。他曾参与 Unix 的研发,也是 AMPL(A Mathematical Programming Language,数学编程语言与 AWK(文本处理工具)的共同创造者之一,他和 Dennis Ritchie 共同写作了C语言的第一本著作《C程序设计语言(The C Programming Language)》,他是大名鼎鼎的 K & R(Kernighan and Ritchie)里面的 K,当然也是 AWK 里面的 K 。作为 Unix 的开发者之一、Unix 命名者,亲眼见证了 Unix 的诞生。关于 Kernighan,还有一个有趣的定律——柯林汉定律。

Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.
调试在一开始就比编写程序困难一倍。因此,按照定义,如果你的代码写得非常巧妙,那么你就没有足够的能力来调试它。

《UNIX 传奇》讲的是什么?

本书的介绍是这样写的:

自 1969 年在贝尔实验室的阁楼上诞生以来,Unix 操作系统的发展远远超出其创造者们的想象。它带动了许多创新软件的开发,影响了无数程序员,改变了整个计算机技术的发展轨迹。
本书不但书写 Unix 的历史,而且记录作者的回忆,一探 Unix 的起源,试图解释什么是 Unix,Unix 是如何产生的,以及 Unix 为何如此重要。
除此之外,本书以轻松的口吻讲述了一群在贝尔实验室工作的发明天才的有趣往事,书中每一个故事都是鲜为人知却又值得传播的宝贵资源。

总结下来,基本可以囊括两个方面:

  • Unix 诞生往事:这个作为现代计算机起源的操作系统,诞生得格外有趣,Ken Thompson 的太太休了 3 周的假,带着孩子回加州探望父母,由此获得了 3 周不受打扰的工作时间,“一周,一周,再一周,我们就有了 Unix”。多说一句,Unix 的命名来自于 Kernighan。

  • 一群天才人物、传奇程序员聚集在一起,做了自己想做的、有意思的事情,除了 Unix 之外,还有 C 与 C++、Go,很难说究竟是贝尔实验室成就了他们,还是他们成就了贝尔实验室。

贝尔实验室

持续的资金投入是研究工作的关键保障,这意味着 AT&T 能布局长远,贝尔实验室的研究员们也能自由探索那些未必有短期回报,甚至可能永无回报的领域。

贝尔实验室的起源,来自于 AT&T 在其发展历史的早期阶段,AT&T 意识到,它需要一个研究机构系统地解决建设全国电话系统时遇到的科学和工程难题。1925 年,AT&T 创办研发子公司贝尔电话实验室(从这个名称我们可以看出,贝尔实验室的研究重点始终还是电话系统),意在解决这些难题。这也就是我们常说的贝尔实验室。

从 1967 年做实习生开始,直到 2000 年退休,Brain Kernighan 在贝尔实验室工作了 30 多年。还在实习的时候,他遇到了 Richard Hamming(纠错码发明者,他分享的《你和你的研究》直至今日依然为人津津乐道)。

Kernighan 笔耕不辍,有着非常多的著作,而 Hamming 是促使 Kernighan 写书的人。“他认为,应该像教写作一样教编程。好代码应该与怀代码风格迥异,应该教会程序员如何写出漂亮的、风格优雅的代码。”

Kernighan 还分享了 Hamming 的趣事:

他挂了个部门负责人的头衔,但他的部门却没有员工,这看起来有点儿古怪。他告诉我,他花了很大力气才弄来这个不用负具体责任的职衔。
很久以后,当我当上管理十几号员工的部门主管时,我才明白拥有一个不用负具体责任的职衔有多么令人羡慕。

1969 年,Kernighan 正式加入贝尔实验室时:

没人告知我具体要做什么事。惯例如此:把你介绍给其他人,让你随意晃荡,去寻找自己的研究课题和协作者。
……
贝尔实验室向来缺乏明确的管理层指示。1127 中心(Kernighan 以及 Ken 等所在部门)的项目不由管理层指派,而是自下而上,由对某个课题感兴趣的人员自主成立项目组。
贝尔实验室的其他部门也是如此:如果我参与了某个开发组,也许会“利诱”科研同事也来参加,不过他们得自愿加入。

贝尔实验室的管理原则:

雇佣聪明的人,帮他们融入环境,指出大致的需求方向,给他们很多自由空间。不是说他们想要多少钱就给多少钱。有所投有所不投。就算你误判了好东西,如果它够强,仍然会脱颖而出。—— Mike Mahoney

那些风云人物与研究

  • Douglas McIlroy 在 Unix 的发展上起了极大的作用,但他的贡献不怎么广为人知。
  • 参与 Unix 早期工作的还有:Rudd Canaday、Robert Morris……
  • 专精于某一领域的人可能会得到其直接上级的高度评价,但再上一层就未必了解其工作成果。另外,跨学科的工作在更高层眼中更突出,因为更多管理人员看得到它。协作越广泛,就会有越多管理者看得到,结果就形成了一个极其偏重协作与跨学科研究的组织。
  • 有些人成功地长期拒绝晋升。“我做部门主管后不久,Dennis Ritchie 也做了主管,但 Ken Thompson 就一直没进入管理层”。
  • 1969 年 4 月,贝尔实验室退出 Multics 项目。
  • Multics 项目最持久的贡献:它影响了一个叫“Unix”的小操作系统,这个小系统诞生的部分原因是想摒弃 Multics 的复杂架构。
  • Go 语言的诞生。“Ken 和我都于 2000 年年末从贝尔实验室退休。我去了普林斯顿大学,他加入贝尔实验室同事创办的 Entrisphere 公司。2006 年,他加入 Google 公司,和 Rob Pike 以及 Robert Griesemer 一起发明了 Go 语言。”

(1)Rob Pike 还和 Ken 共同开发了 UTF-8。
(2)2006 年 Ken 在和 Kernighan 的邮件中调侃道:“我没有改变 Google 员工年龄中位数太多,但我想确实拉高了年龄平均线。”—— 调侃自己年龄大😀

  • C 语言的诞生。“Dennis 开始针对新的架构对 B 语言进行增强,并为其编写编译器。新的语言被称为‘NB’,即‘New B’(意为‘新 B 语言’),最后发展成了 C 语言。” —— New B 谐音了中文中我们经常说的“牛 B”😆

  • C++:Kernighan 是 C++ 之父 Bjarne Stroustrup 的部门主管,Kernighan 说他“算是看着 C++ 长大的”。尽管 C++ 因其尺寸太大而饱受诟病,但“如果 Bjarne 不以兼容 C 语言为目标,C++ 成功的机会就会小很多”。

历史会重演吗?

会不会有另一个 Unix?会不会有新操作系统横空出世,在几十年内占领世界?当我谈到 Unix 时,经常会被问到这样的问题。我的回答是不会,至少目前不会。不会有革命发生。更有可能的是,操作系统将继续发展,同时携带大量的 Unix DNA。

但在计算机的其他领域也可能获得类似成功。总有一些有创造力的人。

以上是关于《UNIX 传奇》读书笔记的主要内容,如果未能解决你的问题,请参考以下文章

有奖征文 | 蒋涛邀你悦评《UNIX传奇》新书,赢技术进阶好礼

每日一书|UNIX传奇史上最关键的10位,谁是你的No.1?

Unix 传奇50年,操作系统中的老兵,一代程序员的挚爱

UNIX读书笔记---UNIX基础知识

他们创造了美国 读书笔记

读书笔记《Unix编程艺术》一