UNIX传奇:历史与回忆

978-7-115-55717-9
作者: [美]布莱恩·W.克尼汉(Brian W. Kernighan)
译者: 韩磊
编辑: 郭媛

图书目录:

详情

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

图书摘要

版权信息

书名:UNIX传奇:历史与回忆

ISBN:978-7-115-55717-9

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    [美] 布莱恩•W. 克尼汉(Brian W. Kernighan)

译    韩 磊

审  校 陈 硕

责任编辑 郭 媛

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


自1969年在贝尔实验室的阁楼上诞生以来,Unix操作系统的发展远远超出其创造者们的想象。它带动了许多创新软件的开发,影响了无数程序员,改变了整个计算机技术的发展轨迹。

本书不但书写Unix的历史,而且记录作者的回忆,一探Unix的起源,试图解释什么是Unix,Unix是如何产生的,以及Unix为何如此重要。除此之外,本书以轻松的口吻讲述了一群在贝尔实验室工作的发明天才的有趣往事,书中每一个故事都是鲜为人知却又值得传播的宝贵资源。

本书适合对计算机或相关历史感兴趣的人阅读。读者不需要有太多的专业技术背景,就可以欣赏Unix背后的思想,了解它的重要性。


Brian W. Kernighan: UNIX: A History and a Memoir, 1st Edition © 2020 by Brian W. Kernighan. All rights reserved.

This work may not be translated or copied in whole or part without the written permission of the Author.

未经作者书面许可,不得以任何方式复制或抄袭本书内容。

版权所有,侵权必究。


UNIX系统的正式写法是全大写的UNIX。本书作者出于个人喜好,使用Unix代替UNIX(见本书相关章节)。为尊重作者、保留原文风格起见,除书名位置使用规范的UNIX字样外,中文版的封面文字与书中文字均与作者喜好保持一致,使用首字母大写的Unix。


Unix从诞生到现在,已经半个世纪过去了。很难想象没有 Unix 的话,还会不会有互联网,会不会有智能手机,至少,世界会大不相同。这么多年来一直期待有一本讲述Unix发展历史的中文图书,现在终于可以看到了。Unix 的理念曾深刻影响了很多人的思考方式,我认为信息领域的每一位从业者都有必要阅读这本书。

—— Fenng(冯大辉) 无码科技创始人

这本书是“书小故事大”,像是一本“小人书”,却有很强的故事感,翻译得也很不错,娓娓道来,读起来倍感舒畅,是一本有趣的、讲述Unix技术与系统发展史的故事集。

聪明的研发者、开明的管理者以及管理者与研发者共同营造的开放环境和宽松氛围,鼓励创新创造的企业文化和不断追求卓越的专业精神,持续的投资和投入,是Unix取得成功的关键要素。这些都是我们当前在倡导和推进科技创新、管理创新过程中值得好好学习、思考和借鉴的东西。

丹尼斯•里奇所言之因努力改善人类生活而获得愉悦的情怀,更是推动Unix不断发展、不断创新并得以广泛应用的、发自内心的原动力,这也是书中所言之人、之事、之史令人感动之所在!

—— 王胜开博士/教授 亚太信息安全领袖成就奖获得者

本书从布莱恩的人生轨迹切入,全书的脉络以Unix的关键成就和在这些关键成就里各个Unix核心的领袖人物的活动以及思考为切入点双向展开。对一切皆为文件、管道、grep、Yacc等Unix的核心理念或工具的研发背景和研发考虑进行了深入描述。Unix的诞生,受益的可能不是一群科学家,而是一群买不到机器的科学家。我们可以看到优秀的科学家在遇到问题时如何思考问题、解决问题,而这恰恰是我国当前操作系统教育、操作系统工作者最缺失的。

—— 冯富秋 阿里云智能系统技术负责人

这虽是一本介绍Unix历史的书,却向我们展示了一群发明天才丰富而有趣的工作和生活。它不仅带领读者见识了Unix操作系统中一些关键部分(如Yacc、Lex、Make、grep、sed、awk等)的来龙去脉,讲述了肯•汤普森、丹尼斯•里奇、道格•麦基尔罗伊等人的传奇故事,还展示了国际象棋计算机、贝尔实验室内部电话号码簿、彼得脸视力表、“龙书”等珍贵物品。正是因为这些,我不知不觉地看完了这本书,获得轻松愉快的阅读体验和回味无穷的精神滋养。

—— 朱少民 《全程软件测试》作者,同济大学特聘教授

对于计算机科学来说,Unix操作系统是一个必不可少的组成部分,可以说如果没有Unix操作系统,世界将会是另一番景象。贝尔实验室被公认为创新科技和创新管理的发源地,在计算机科学发展中扮演着难以替代的重要角色。而这本书,恰可以作为我们了解贝尔实验室Unix操作系统前世今生的重要参考。

—— 汤小丹教授 经典教材《计算机操作系统》第一主编

我们今天谈论 Unix 操作系统,可以发现其在计算机世界几乎无处不在的深远影响。当初在Unix里实现的诸多特性已经成为如今各种操作系统所遵循的事实标准。这本书的作者带着我们穿越历史时空回到 Unix诞生之初,让大家得以一窥创造这件跨时代作品的有趣历史。如果你是计算机行业的从业人员,单单是了解这些如雷贯耳的名词如何诞生就会让你激动不已。即使没有深厚的技术背景,你也可以从这些闪耀着天才光芒的思想中获益良多。

—— 祁宁(Joyqi) SegmentFault思否CTO

Unix操作系统是计算机软件行业创新的“发动机”,也是众多世界级软件专家的摇篮。这个环境自由、开放,不迷信和崇拜权威,百花齐放,百家争鸣。在C语言奠基人之一克尼汉的这本风格轻松的回忆录中,除了那些令人着迷的故事,你还可以学习很多软件设计的基本原则,领悟解决软件核心复杂性问题的真谛。

—— 李锟 资深业务架构师

你的能力不可能超越你的鉴赏力。阅读顶级大师的书,特别是记录了历史演变和其心路历程的杰作,是提高鉴赏力的捷径。《UNIX传奇:历史与回忆》就提供了这样一次难得的机会。

—— 杨力祥 畅销书《Linux内核设计的艺术》作者之一

Unix是众多现代计算机技术的发源地、“培养皿”和“催化剂”,从某种意义上说,Unix的历史就是现代计算机技术的发展史。如今,Unix的架构思想和设计哲学已经潜移默化地影响了众多的技术领域,人们甚至习以为常。然而,只有在回望这段往事时,我们才能重新思考和赞叹初代工程师的“神机妙算”。

这本兼备严谨与通俗的《UNIX传奇:历史与回忆》带我们回到了那个创新、进取的时代,以亲历者的视角分享了有关Unix的历史与故事,读来令人激动不已。

—— 邱岳 无码科技产品经理,“二爷鉴书”作者

Unix的主要创造者之一的亲身回忆,有助于我们理解操作系统的精髓,领悟他们的开拓精神。在硬件可编程、硬件可重构时代,操作系统对电子信息类专业的教师和学生也是非常重要的。

—— 张有光 北京市教学名师,

北京航空航天大学电子信息工程学院博士生导师、教授

30年前读轧钢硕士时遇到Unix,25年前读计算机硕士时研究Minix,23年前成为程序员时使用Solaris,17年前创业时研发产品基于Linux,而Minix、Solaris、Linux都是由Unix演变或改造而来的。可以说,30多年来,Unix架构思想及编码技巧一直影响着我在技术之路上前行的每一步。

今天拜读了布莱恩大行至朴的《UNIX传奇:历史与回忆》,这使我更走近且走进了Unix,同时也使我更深刻地体会到:

—— 陈刚 上海开源大数据研究院院长,中云数据总裁

作为操作系统的热爱者和授课教师,虽然接触Unix系统已经将近30年,但这本书仍给我带来前所未有的惊喜。它通过一个个清晰、生动的故事,以独特的视角回顾了Unix的历史演进过程。比如,肯•汤普森如何在不到一个月的时间,用汇编语言神奇地实现了包含文件系统的操作系统内核、文本编辑器、汇编器以及一个命令行界面;丹尼斯•里奇发明的C语言,如何深刻地影响了Unix以及各种软件。而这一切又在很大程度上起源于MIT(麻省理工学院)提出的Multics。

这些有趣和激动人心的故事,使我不禁期待,从Unix诞生到现在已经有50年,下一个Unix在哪里?下一个C语言在哪里?也许下一个伟大的肯•汤普森或丹尼斯•里奇,就在这本书的读者中。

—— 陈渝 清华大学计算机系副教授

Unix技术本身对于现代操作系统和应用影响深远,是毋庸置疑的,这本书给出了最谦虚而自信的描述。技术之外,文化和组织部分也是值得我们关注的部分,这本书也娓娓道出了其中的“玄机”:开放、平等、频繁交流、问题不设限、宽松、享受工作本身、注重知识传播、保持和高校的关系、友好的协作精神等是Unix 成功的重要原因。

—— 适兕 开源布道师

作为操作系统行业的从业人员,我能切身体会到Unix的重要性。没有它,如今手机上的Android和iOS、电脑上的 Windows、云计算中被广泛使用的Linux就无从谈起;没有它,石油开采、航空航海、机械制造、金融商业的效率水平无法预测;没有它,国产操作系统之路又何其漫漫。过去20年,国产操作系统正在渐渐从“可用”阶段向“好用”阶段良性发展,并且在国家防范网络攻击与威胁等安全领域扮演着核心角色。可见Unix的诞生对国产操作系统开发的作用也是不可估量的。阅读这本书,让我想起了读传记大师斯蒂芬•茨威格的名著《人类群星闪耀时》时的感觉,仿佛自己就是当年贝尔实验室的一员,与各位发明天才零距离相处,身临其境,见证历史。

希望更多的读者能够读到这本书,它会使你对Unix的历史和计算机发展进程有更深入的理解。也感谢这本书的译者和人民邮电出版社,向国内广大读者分享了一段如此精彩的历史往事。

—— 秦冰 统信学院执行院长

在计算机的发展史上,Unix举足轻重,理查德•马修•斯托尔曼在1983年发起了自由软件运动,要做一个完全自由的操作系统,选择了兼容Unix,但又不是Unix,所以叫“GNU’s not UNIX”,进而发展出GNU/Linux开源软件运动,以及现在的Android操作系统等。整个过程引发了在技术、法律、全球社群、文化、协作模式、互联网等各个方面的一系列持续创新。今天,Unix看似已经不复存在,但却又无处不在,Unix是传奇!

—— 徐继哲 自由软件支持者,牛顿项目创始人

如今我们很难想象有那么多的图灵奖获得者曾在一个实验室共同工作,Unix的历史可以说是早期软件业发展的一个缩影。那是一个辉煌的年代,大师云集,群星闪耀,工业研究与极客探索完美地结合。这本书正是亲历者对那份荣耀的记录。通过阅读它,我们不仅能够近距离感受到那些伟大工程师的睿智,也能够发现他们兴趣是如此广泛而又深远地影响了此后的各类软件设计。在这个软件工程师都在自嘲为“码农”的时代,我认为真的有必要感受一下那些理想主义工程师的视野和 生产力。

—— 程显峰 原石资本合伙人

如果将操作系统比喻成酒,那么Unix应该是所有操作系统的“基酒”,因为有了它,才有了现在的互联网/物联网世界。这本书不仅介绍了20世纪最伟大的发明之一 —— Unix 的来龙去脉,激发了更多人对科技的兴趣,还从侧面介绍了Unix诞生的大环境 —— 贝尔实验室。对于努力发展前沿科技的我们,也许能从贝尔实验室的发展中获得更多启示,包括资本制度、运作机制、人才建设等。

—— 霍泰稳 极客邦科技创始人兼CEO


这本书唤起了我久违的编程记忆,1990年我在大学里啃读这本书作者写的《C程序设计语言》,1992年我的好友梁肇新(超级解霸创始人)手抄Minix源代码一万多行。

最近30年全球经济取得巨大发展,经济发展最大的推动力源自信息技术创新。

然而全球最领先的企业都是软件驱动的。不用说谷歌、腾讯,就连硬件领域最大公司苹果的创始人史蒂夫•乔布斯2007年也说过:“苹果公司最大的秘密,那就是苹果把自己看成是一家软件公司。如果你仔细想一下MacBook是什么,它是OS X操作系统——虽然它也有一个漂亮的外壳,但它是OS X操作系统。如果你想一下iPhone 是什么,它也是软件。”

软件技术的“皇冠明珠”就是操作系统。所有行业都在数字化,数字化的服务就是操作系统控制的各种程序,我们现在依赖的各种网站、云计算、大数据、手机通信及航空航天技术的背后都是操作系统在控制调度的。

Unix是现代操作系统的鼻祖。从Unix到FreeBSD,再到OS X,最后到iOS应运而生。由于Unix的版权纠纷和Minix的封闭,Linux诞生了,而后又产生了Android。

Unix的创造者奠定了操作系统的标准基石,Unix的“分而治之”设计哲学——让每个程序做好一件事;要做一件新的工作,就构建新程序,而不是通过增加新“特性”使旧程序复杂化——被优秀程序员奉为圭臬。

文件、目录、系统调用、shell、管道,还有一大批优秀的生产力工具,如grep(正则表达式)、diff、Lex、Yacc、Make等,都凝结着Unix创造者的智慧和心血。

贝尔实验室是在美国科学创造的黄金时代产生的。作者布莱恩身处贝尔实验室,见证了Unix的诞生,他用有趣的文字和翔实的资料给我们展示了Unix如何从无到有,以及如何从一个实验项目成长为工业级的事实标准的故事。

一大批天才人物聚集在一起,没有生活的压力,没有KPI的烦恼,自由地探索科学的发展和应用。即使是贝尔实验室的小角色后来都成了大人物,比如谷歌前董事长埃里克•埃默森•施密特就曾作为贝尔实验室实习生参与编写Lex第一版程序。这些天才人物是什么样的个性?创作一个个优秀工具的时候他们经历了什么样的思考和过程?什么样的环境和机制才能带来这样的创造性?这些精彩往事值得细读。

为什么我们今天要读这本书?

数百年的科技发展史告诉我们,谁掌握了科技的创新,谁才能成为全球经济的主导者。当今我国在互联网应用和移动应用方面已走在世界前列,但在系统科技领域、原创科技领域还乏善可陈,我们正面临信息技术的又一次大革命,5G、人工智能、物联网、区块链等技术进一步发展。生逢其时,中国科技工作者需要从应用创新走向系统创新,需要沉下来去钻研突破重大的基础课题,需要争做科技创新的时代 先锋。

怎样构造这样的环境?怎样激发这样的人才?怎样驱动科技创新?这些问题都可以从这本书略见端倪。小米创始人雷军说过大学里读到的《硅谷之火》激励了他从事软件创业,希望这本Unix创造者的精彩故事集也能激励年轻科技工作者从事系统科技的研究与创新。

蒋涛

2020年12月


20世纪的六七十年代可以说是人类现代史上非常特殊的年代,整个西方世界散发着一种迷人的味道,掀起摇滚乐、嬉皮士、爱与和平等文化新浪潮,像披头士、皇后乐队、齐柏林飞艇等经典摇滚乐队在那时诞生……那些脍炙人口的作品到今天还在传唱。那个年代的科技也突飞猛进,NASA送人上月球,还进行全世界电视直播,离开仙童公司的工程师们创建了AMD和Intel,从此揭开了芯片的硅谷时代。AT&T创办的贝尔实验室带来的成果举世瞩目,贝尔实验室除了不断地获得诺贝尔奖和图灵奖,还不断地发明改变人类所需的新技术。什么晶体管、太阳能电池、激光器、手机、通信卫星……这段时间发生的事,对于我来说,就跟追科幻或是超级英雄的美剧一样,一季接一季,里面的超级英雄,一个接一个,让人无法不惊叹称奇。

贝尔实验室对计算机发展的贡献着实让人佩服,在他们退出Multics项目后,肯•汤普森在一台被弃置的只有24KB内存和512KB磁盘的计算机上用3周开发了一个Unix的原型。24KB内存!512KB的磁盘!这算计算机吗?!还要编写个操作系统出来?而且3周就写出来了,可以编辑和编译程序,有shell和API……一般来说,如果一部电影是这样的开场,那么这必然是一部超级精彩的电影。随后,丹尼斯•里奇把肯的B语言加上类型造就了C语言;道格•麦基尔罗伊神来一笔,提出了管道的想法,肯实现完后自己玩了一下,叹道“好震撼”;管道下的grep、sed、awk加上正则表达式,让文本处理变得无所不能;史蒂夫•伯恩编写的shell让Unix命令可以进行编程,让Unix变成无所不能; Yacc、Lex、Make等工具让你可以轻松地创建一门语言,从而导致了编程语言快速演进(如Fortran 77和C++);随着AT&T把Unix的代码授权给各大高校,加州大学伯克利分校有个叫比尔•乔伊的人为Unix添加了vi文本编辑器和C语言的shell、csh,再加上改变世界的TCP/IP协议的socket接口……这帮“超级英雄”编写的书(如“龙书”《编译原理》《C程序设计语言》《编程珠玑》)到今天都是经典中的经典。当时的贝尔实验室简直就是科研人员的聚集地。招聘团队就像今天的“球探”一样到处招“牛人”,只要你有足够的能力,他们就会主动找到你家里,或出现在你旅游途中。他们就像神盾局一样,一定会邀请你加入“复仇者联盟”—— 贝尔实验室。在那里你要找你自己的研究方向和课题,然后专心科研,所做项目还能注册专利,说不定还能获得图灵奖。

然而,这还不是最酷的,这只是这部“超级英雄”电影的第一季。在Unix广为流传之后,本来致力于改变世界的AT&T被美国政府拆分,变成真正的“死星”。他们开始商业化Unix,向整个世界发难,向伯克利的Unix衍生版BSD提起诉讼,并把对Unix热情高涨的“银河联盟”冲得七零八落。经过两次拆分,贝尔实验室风光不再,那些“绝地武士”们也不得不隐忍起来,直到一个叫理查德•马修•斯托尔曼的开源狂人,与一个21岁的芬兰大二学生,在两个不同方向上开始发起集结,向“银河帝国”发起挑战。林纳斯•托瓦兹把那些隐于深林的“绝地武士”再次召集起来,让Unix以Linux方式得以重生,开始了真正的“帝国反击战”……

今天,我们回头看肯•汤普森、丹尼斯•里奇、道格•麦基尔罗伊、阿尔•阿霍、彼得•温伯格、布莱恩•W.克尼汉、比尔•乔伊……这些人就像世界的开创者一样,早在三四十年前就为未来计算机世界编制了迷人的DNA,这个DNA就是Unix和C语言。今天,整个计算机世界全都有Unix和C语言的印记。不仅如此,Unix的“设计哲学”以及Unix所带来的为自由而开源的“黑客文化”也成为最纯正的计算机文化,推动着整个人类计算机文明的向前发展。只有了解这些璀璨的历史和文化,我们才知道计算机世界中真正的格局和品味是什么,也才知道真正的原力是什么。

愿原力与你同在!

陈皓(左耳朵耗子)

2020年12月


与人类的历史相比,软件的历史很短。1843年,英国大诗人拜伦的女儿埃达•洛夫莱斯(Ada Lovelace,1815—1852)为数学家巴贝奇的分析引擎编写了一个用于计算伯努利数的程序。凭借这段程序,埃达享有了第一个程序员的美名。她编写的伯努利数程序被认为是人类历史上的第一个计算机程序。这如果算作软件历史的起点,那么距今还不到200年。

在埃达去世大约100年后,另一个伟大的女性在软件历史上立下不朽功勋。她的名字叫格蕾丝•霍珀(Grace Hopper,1906—1992),她在UNIVAC I大型机上开发出了一个名为A-0(Arithmetic Language version 0)的特殊软件,这个软件可以把人类书写的程序自动编译为可以在计算机上执行的程序。这样的程序很快被赋予一个专有的名称——编译器。

编译器的出现,不仅解决了手工翻译的诸多不足,而且证明了一种新的“软件生产模式”,那就是可以使用适合人类理解的高级语言来编写软件,然后交给编译器翻译为适合机器执行的二进制程序,不再像以前那样非得使用晦涩的计算机硬件语言来编写程序。

基于编译器的“软件生产模式”被广泛认可后,具有不同特色、适合不同应用领域的高级语言——Fortran(1957)、ALGOL(1958)、COBOL(1959)、BASIC(1964)纷纷出现了。

高级编程语言的出现,让人类更容易把自己的智慧转换为代码,也降低了编程的门槛,让更多人可以编写软件。这为软件大生产和构建更复杂的软件世界奠定了基础。

于是,软件和代码的数量每分每秒都在不断增加。日益增加的软件刺激硬件的发展,更强大的硬件出现后,继续催生了更多和更复杂软件的出现。

软件世界变得日益复杂之后,这个世界亟待出现一个优秀的“管理者”,它能很好地统筹宝贵的硬件资源,为不同功能的应用软件提供丰富的基础设施和安全公平的“生存”环境,为不同身份的用户提供简单易用的人机接口。

在这样的背景下,Unix出现了。Unix是什么?它是计算机历史上的一座丰碑,是一种文化的代表,是一种哲学的例证,是不朽的传奇。

伴随Unix一起成名的还有一种伟大的编程语言,它就是C语言。在今天仍在广泛使用的编程语言中,C语言绝对是响当当的前辈。今天我们使用的几大主流操作系统的内核代码主要是使用C语言编写的。

无论是Unix还是C语言,每当说到它们的发明者,都不得不提到两个名字:丹尼斯•里奇(1941—2011)和肯•汤普森(1943— )。他们的年龄相近,只差两岁。他们是一起工作多年的同事,是相互欣赏的好朋友,是共同开创伟大事业的盟友。

Unix和C语言是软件历史上的两座丰碑,我一直想深入学习这段历史。于是在拿到《UNIX传奇:历史与回忆》的试读本之后,我手不释卷,很快便把它从封面读到封底。感谢那段历史的亲历者布莱恩博士在古稀之年为我们把这段珍贵的历史变为永恒的文字。

张银奎

2021年1月


Unix的主要创造者肯•汤普森到贝尔实验室面试时,沿计算科学研究中心的走廊漫步,两边办公室上的名牌写满了他听说过的人名。这就是我读这本书时的感受:书中提到的许多名字,早已如雷贯耳。在我心目中,他们全是大神级人物,高高在上,凡夫不可亲近。

全书译完,这些人从神坛走下来,就地现出极客真面目。无论做出过什么非凡成果,原来,他们都是“不折不扣的程序员”。以我之见,程序员的追求就是让机器听话,让工作自动化,让人类生活更美好。昔年Unix核心团队乃至贝尔实验室计算科学研究中心的一众精英,无疑都是秉承这个初衷,尽展所长,才取得如此辉煌的成就的。

几十年过去了,“让机器听话”部分演变为“让机器听得懂人话”。人工智能科技进步巨大,在一些领域中,机器展现出可观的能力,替代了相当一部分人工。在翻译本书的过程中,我大量使用了DeepL翻译工具。有时,DeepL给出的译文可以用“惊艳”来形容;就算是那些不够出色的译文,约七成也能达意。这意味着,对于非文学类作品,自动化翻译工具已相当接近初译要求的水平。即使不能完全替代人类译者,自动化翻译工具在不远的未来也将成为人类译者的亲密伙伴。人类译者也许最终会变成审校者。

另外一方面,机器也在赋能于人。例如,我目前关注的AR(Augmented Reality,增强现实)领域,已有许多技术可以让人看得见原本看不见的东西。在某个项目中,警员佩戴AR智能眼镜巡逻,3个月内识别出近400个重点管控人员。在另一个项目中,无人机搭载违法识别和车牌自动识别技术,极大地提升了交警处置效率。机器与人共同 发展,未来可期。

本书作者认为,宽松的环境、稳定的投入、专业人士是贝尔实验室成功的要素。我翻译的《梦断代码》恰好是这种看法的反例:没有期限、几乎无限量的资本、十几个精英程序员,只换得美梦破灭。世界已经变得不同。开放源代码、远程协作、增长黑客……开发模式与商业模式相互促进,“数据”变得与“代码”和“算法”一般重要甚至更重要。可以预见,计算与连接将“遍及万物”。生活会更好还是会更糟?我相信一定会更好。

我的老朋友陈硕认真阅读了译稿,提出许多修改意见。术语方面的意见我几乎照单全收,其中有一些错译或文字不准确是我的疏忽,但大部分完全是我的知识储备不足使然。至于文本、语句方面的改进意见,我保留了大部分原译。盖此事关乎个人文字风格,见仁见智,留待读者评判吧。算来我与陈硕已有十几年没有见面,各自做着自以为能让世界更美好一点的事情,这大概算是程序员共有的一点小情怀吧。

韩磊

2020年9月


1969年,肯•汤普森(Ken Thompson)和丹尼斯•里奇(Dennis Ritchie)在贝尔实验室(Bell Labs)创造了Unix系统。50年后,Unix系统在全世界被广泛应用,多数时候以Linux的形态呈现,在从极小到极大的无数种计算机上运行。无论运行于何种计算能力与架构上,Unix都提供了同样方便、富有表达力和极具生产力的环境,以及丰富的程序开发工具。Unix系统构造优雅,使这些工具很好地结合在一起。

Unix是怎么来的?贝尔实验室是怎样的机构?寥寥数位研究员组成的小团队是如何改变世界的?是什么让Unix成为可能,并推动演进和发展

我试图在《UNIX传奇:历史与回忆》中回答这些问题。本书不仅写到技术内容,还写了许多幕后故事,写了那些天才人物的个性,以及Unix诞生和发展的独特创造性环境。

韩磊翻译的中文版问世,我倍感欣慰。相信它能帮助中国的朋友和同行了解Unix的历史。衷心希望您能享受到阅读的乐趣。

布莱恩• W.克尼汉


“回忆往往披着玫瑰色的光晕,令人欢欣。回忆常驻于美好而持久的事物上,也常驻于因努力改善人类生活而获得的愉悦之中。”

——丹尼斯·里奇,
“The Evolution of the Unix Time-sharing System”
(Unix分时系统的演进),1984年10月

自1969年在贝尔实验室的阁楼上诞生以来,Unix操作系统的发展远远超出其创造者们的想象。它带动了许多创新软件的开发,影响了无数程序员,改变了整个计算机技术的发展轨迹。

Unix及其衍生产品在特定的技术社区之外并不广为人知,但它们是若干系统的核心,这些系统已是许多人生活的一部分。谷歌(Google)、脸书(Facebook)、亚马逊(Amazon)等提供的许多服务和其他大量服务都由Linux驱动。Linux是类Unix操作系统,后文将会讲到。你的手机或MacBook运行着某种版本的Unix操作系统。如果你家里有Alexa等智能小电器,或者车上有导航软件,它们也由类Unix操作系统驱动。如果你浏览网页时总被广告轰炸,也是Unix操作系统在后面支撑。当然,基于Unix的追踪系统也知道你在做什么,以便更精准地对你进行广告轰炸。

50多年前,在一小群合作者和追随者的帮助下,有两个人创造了Unix。由于一系列幸运的“意外”,我在其中亦有贡献,但绝不敢居功自傲。我顶多是写了一些有用的软件,还有几本帮助人们学习Unix及其语言、工具和哲学的图书。这要感谢那些顶尖的合著者们。

本书不但书写Unix的历史,而且记录了我的回忆,一探Unix的起源。本书试图解释什么是Unix,Unix是如何产生的,以及Unix为何如此重要。不过,本书绝非学术著作(脚注欠奉[1]),与我的初衷不同,它偏重回忆甚于历史。

本书为那些有兴趣了解计算或创新史的读者撰写。书中有一些技术内容,我会尽量给出解释,好让没有相关背景知识的读者能够领会基本概念,以及了解这些概念的重要之处。读者可以随意略过看起来太难懂的部分,不必逐字阅读。对于程序员,其中一些解释会显得太啰唆,还好书中有些对历史的思考仍然有用,与之有关的故事也颇有意趣。

我虽尽力求真,但回忆总有错漏。而且,那些我借以佐证的访谈、忆旧、口述、书籍和文章并不全然与我的记忆相符,甚至这些资料也会互相矛盾。

幸好很多早期参与其中的人士仍然健在,他们能够帮我去伪存真。他们的记忆也会有误,或者带有定见,但成书中的错漏皆我之过。

本书主要的写作目的是讲述计算机历史上某个极具生产力和发展性的时期中的一些精彩往事。理解我们习以为常地使用的技术如何演化而来,颇为要紧。有人顶住压力、克服时间限制,做出了定义技术发展方向和路径的决策。越了解历史,我们越感激那些带来Unix的发明天才,或许也越能理解现代计算机系统是如何发展成现在这个样子的。仅就那些如今看起来大错特错抑或倒行逆施的选择而言,常常也是在当时可用资源限制之下所能考虑和实现的必然结果。

Unix操作系统是故事的中心,但其余亦有涉及。我还将讲述被广泛使用的C语言,人们用它编写了支持互联网运行的系统及利用系统能力的各种服务。在贝尔实验室,还有一些编程语言随Unix而生,尤其要提到也被广泛使用的C++。Word、Excel和PowerPoint等微软Office软件就是用C++写成的,大多数网页浏览器也是用C++编写的。程序员们耳熟能详的一二十个日常开发工具,在Unix的早期就已问世,四五十年以来一直维持原状,至今仍在许多程序员的工具包中有一席之地。

计算机科学理论同样扮演着重要的角色,常常极大地推动实用工具的产生。硬件研究开拓出设计工具、集成电路、计算机体系架构,还有不常见的特殊用途设备。这些活动相互作用,往往带来预料以外的发明,这也是贝尔实验室在多个不同领域持续产出活力的原因之一。

科技创新的发生还与另一件有趣的事相关。Unix诞生地贝尔实验室是很出色的机构,它既制造出许多好点子,也投资了这些好点子。多个改变世界的发明由贝尔实验室而起,它的运作机制值得学习。

Unix的故事当然也贡献了大量有关设计和构造软件,以及有效利用计算机的洞见,我会在书中一一指出。例如,Unix软件哲学倡导合用既有软件,完成很多不同任务,而不是从头写个新软件。这个例子简明又生动,它在编程领域体现了“分而治之”的故技:将大任务切分为多个小任务,每个小任务都变得更可控,然后再以各种不可思议的方式将之整合到一起。

最后,虽然Unix是贝尔实验室最抢眼的软件,但它绝非贝尔实验室对计算领域的唯一贡献。计算科学研究中心(The Computing Science Research Center),即传说中的“1127中心”,或简称“1127”,在那二三十年里面生产力“爆棚”。Unix激发了它的能力,Unix也是它的工作基础,但1127中心的贡献远超于此。1127中心的成员写出了多本重要著作,这些著作在后面的很多年里成为计算机科学的核心文献,也是程序员可以按图索骥的指南。1127中心分外显赫,在当时及以后都是极具生产力和规模较大的计算机科学研究团体。

Unix及其周边环境为何如此成功?区区两人的实验性产品如何演化为真正改变世界的东西?这是否是孤例?类似事件还会再发生吗?关于如此耀眼的成果能否被规划出来的大问题,我打算留到本书末尾再讨论。目前我认为,Unix的成功是一些偶然因素的作用结果:两位杰出人士,一群优秀拥趸,卓越而开明的管理体制,有远见的公司的持续投资,允许离经叛道、大胆探索的自由环境。科技快速演进,硬件以指数级速度不断变小、变快、变便宜,推动了Unix的应用。

对我和贝尔实验室的很多同事而言,Unix的早期岁月既富有活力,又充满乐趣。我希望这本书能让你略微感受到丹尼斯•里奇说的那种因努力改善人类生活而获得的愉悦。

[1]  原文如此。为帮助读者理解,译者添加了一些脚注。


写作这本书时,联系到那么多老朋友和旧同事,真是意外之喜。他们慷慨地分享了自己的回忆和好故事,其宝贵程度无以言表。书中虽未能全数收纳,但光是得以耳闻我已颇为满足。这些优秀的前同事让我获益匪浅。

本书中满是人物事迹,但对其中3位着墨最多,没有他们,Unix就不会问世。他们是肯•汤普森、丹尼斯•里奇,还有道格•麦基尔罗伊(Doug McIlroy)。肯和道格给本书提出了很多宝贵意见,尽管他们根本无须对我搞错的地方或我的无心快语负任何责任。我也从丹尼斯的兄弟约翰(John)和比尔(Bill)处得到很多有价值的评论与建议。丹尼斯的侄子萨姆(Sam)亦就几版书稿提供了一些具体意见。

乔恩•本特利(Jon Bentley)一如既往地给出了无价的洞见、文稿组织和重点方面的有益建议、许多轶事,还有写作上(起码六七版书稿)的具体意见。承蒙指教,谨致谢意。

杰勒德•霍尔兹曼(Gerard Holzman)除了提供建议,还分享出压箱底的资料和许多原始照片,这些照片丰富了本书的视觉趣味。

保罗•克尼汉(Paul Kernighan)阅读了多版书稿,并指出多处文字错误。他还帮忙拟了几个很棒的书名,但我最后还是心怀遗憾地没有使用A History of the Unix-speaking Peoples[1]这个书名。

阿尔•阿霍(Al Aho)、迈克•比安基(Mike Bianchi)、斯图•费尔德曼(Stu Feldman)、史蒂夫•约翰逊(Steve Johnson)、迈克尔•莱斯克(Michael Lesk)、约翰•林德曼(John Linderman)、约翰•马希(John Mashey)、彼得•诺伊曼(Peter Neumann)、罗布•派克(Rob Pike)、霍华德•特里基(Howard Trickey)和彼得•温伯格(Peter Weinberger)审阅了书稿,提供了不少Unix早期的故事,在书中多有引用。

迈克尔•巴昌德(Michael Bachand)、戴维•布罗克(David Brock)、格雷丝•埃姆林(Grace Emlin)、马亚•哈明(Maia Hamin)、比尔•乔伊(Bill Joy)、马克•克尼汉(Mark Kernighan)、梅格•克尼汉(Meg Kernighan)、威廉•麦格拉思(William McGrath)、彼得•麦基尔罗伊(Peter McIlroy)、阿诺德•罗宾斯(Arnold Robbins)、乔纳•西诺维茨(Jonah Sinowitz)、本贾尼•斯特劳斯特鲁普(Bjarne Stroustrup)、沃伦•图米(Warren Toomey)和珍妮特•韦尔泰希(Janet Vertesi)也给本书提出了很多有用的意见。

对于他们的慷慨相助,我深深感激,但文责自负。过去50年以来,有很多人为Unix做出过重要贡献,书中未能尽录,谨致歉意。

[1]  脱胎于温斯顿•丘吉尔的名作A History of the English Speaking Peoples(《英语民族史》)。


“一套策略,一个系统,普遍服务。”

——AT&T的使命陈述(1907年)

“乍看之下,贝尔电话实验室新泽西州主要办公地就像是一个巨大的现代化工厂,与周边乡村环境格格不入。从某种意义上讲,它的确是工厂,但却是生产创意的工厂。所以,它的生产线也不可见。”

——阿瑟•克拉克(Arthur Clarke)《越洋之声》
Voice Across the Sea)(1974年),
引自乔恩•格特纳(Jon Gertner)《创意工厂》
The Idea Factory)(2012年)

要了解Unix是如何产生的,得先了解贝尔实验室,尤其是其运作机理,以及它提供的创意环境。

AT&T,即美国电话电报公司(American Telephone and Telegraph Company),由分布于美国各地的多个当地电话公司组合而成。在其发展历史的早期阶段,AT&T意识到,它需要一个研究机构,系统解决在建设全国电话系统时遇到的科学和工程难题。1925年,AT&T创办研发子公司贝尔电话实验室(Bell Telephone Laboratories),意在解决这些难题。该机构通常被简称为贝尔实验室(Bell Labs)或BTL,有时甚至只是“实验室”,但电话系统始终是其关注的重点。

贝尔实验室最初位于纽约市西街463号。第二次世界大战之初,实验室的许多工作被移到了纽约以外进行。AT&T积极援战,为大量重要军方事务提供专业方案——通信系统自然有份,另外还有高射炮火控计算机、雷达及密码学等。其中部分工作在纽约以西33千米的新泽西州郊区或乡村开展,最大规模的办公点位于墨里山。墨里山是新普罗维登斯及伯克利高地小镇群落的一部分。

图1-1展示了纽约市与新泽西墨里山的相对位置。西街463号在哈得孙河畔,9A高速公路标记往北一点点。墨里山的贝尔实验室位于新普罗维登斯和伯克利高地之间,正好在78号州际公路北侧。两个驻地都用圆点标出。

图1-1 从纽约市到新泽西州墨里山

贝尔实验室的工作越来越多地移往墨里山,实验室于1966年完全搬离西街463号。在20世纪60年代,墨里山容纳了3 000名员工,其中至少1 000名拥有物理、化学、数学或各种工程方面的博士学位。

图1-2展示的是1961年墨里山园区的航拍照片。当时有3幢主要建筑。1号楼在右下位置;2号楼在左上位置;3号楼呈方形,有一个露天庭院。1号楼与2号楼原本由一条400米的长廊相连,20世纪70年代,2幢新楼断开了这条长廊。

图1-2 1961年的贝尔实验室(贝尔实验室供图)

从1967年做实习生开始,直至2000年退休,我在2号楼里工作了30多年。我待过的两个办公室都在侧翼的5层(顶层),图1-2中用红点标出。9号梯位于2号楼最远端,而8号梯则在比较靠近大楼中心的侧翼。早期大多数年月里,Unix房间被安置在6层阁楼,8号梯和9号梯之间。

图1-3所示为2019年贝尔实验室的谷歌卫星图片。6号楼(图1-3的左上位置有个标记)和7号楼(图1-3的右下位置)建于20世纪70年代。自1996年开始的几年里,6号楼是朗讯科技(Lucent Technologies)的总部。数数图中谷歌打的标记印证了多少贝尔企业史,颇为有趣:“贝尔实验室”,出口车道处的“朗讯贝尔实验室”(Lucent Bell Labs),入口处的“阿尔卡特-朗讯贝尔实验室”(Alcatel-Lucent Bell Labs),以及6号楼大堂屋顶金字塔形截面尖角处的“诺基亚贝尔实验室”(Nokia Bell Labs)。

图1-3 2019年的贝尔实验室;6号楼在左上位置

我不够资格书写贝尔实验室的详尽历史,幸而已有珠玉在前。我特别喜欢乔恩·格特纳的《创意工厂》,这本书主要写物理科学研究方面的内容。詹姆斯·格雷克(James Gleick)的《信息简史》(The Informationtion)对于了解信息科学极有价值。贝尔实验室官方出品的《贝尔系统的工程与科学史》(A History of Engineering & Science in the Bell System)卷帙浩繁(共7卷,近5000页),既全面又权威,以我之见,也很有趣。

贝尔实验室的早期研究涉及物理、化学、材料学和通信系统。研究员们有追随兴趣的自由,相关问题的环境资源也非常丰富,若想探索既满足科学兴趣又能有益于贝尔系统(Bell System)乃至全世界的领域,并非难事。

贝尔实验室做出了大量改变世界的科技成果。最早的是晶体管,由约翰·巴丁(John Bardeen)、沃尔特·布拉顿(Walter Brattain)和威廉·肖克利(William Shockley)于1947年在尝试为远距电话线路改进放大器时发明。20世纪40年代,业界亟待出现比真空管在物理上更可靠、耗能更少的设备,这是制造通信装备和构建最早的计算机的必要条件。这种需求推动了对半导体材料的基础研究,晶体管应运而生。

1956年,晶体管的发明者荣获诺贝尔奖。共有9项诺贝尔奖是因获奖者在贝尔实验室工作期间的成果而颁发的。贝尔实验室雇员还发明了负反馈放大器、太阳能电池、激光器、手机、通信卫星和电荷耦合器件(有了它,手机上的摄像头才能工作)等。

粗略估算,从20世纪60年代到20世纪80年代,贝尔实验室科研部门(主要在墨里山)拥有3 000名员工,另外还有15 000至20 000名员工隶属于其他地区的开发团队。这些开发团队利用科研部门的成果,为贝尔系统设计装备和系统。人真不少。谁给他们发工资呢?

AT&T为美国大部分地区提供电话服务,确实是一家垄断企业,但并不能随意利用其垄断地位。联邦和各州管制AT&T各项服务的价格,而且不允许AT&T涉足与提供电话服务直接有关的业务之外的其他业务。

这套规管制度多年以来行之有效。政府要求AT&T向所有人提供服务,无论服务对象远在何方,或者是否有利可图,这就是所谓“普遍服务”(universal service)。与之相应,它也获得了稳定和可预测的总体回报率。

作为规管制度的一部分,AT&T将一小部分营收拨付给贝尔实验室,专用于改进通信服务。实际上,贝尔实验室从全国范围内用户为每台电话缴纳的税款中获得回报[1]。据迈克尔 · 诺尔(A. Michael Noll)的论文,AT&T将营收的2.8%投入研发,其中基础研究投入约占营收的0.3%。放到今天,这样的安排不知能起多大作用,但在那几十年里,电话系统因此获得了持续改进,许多基础科学发现也因此应运而生。

持续的资金投入是研究工作的关键保障。这意味着AT&T能布局长远,贝尔实验室的研究员们也能自由探索那些未必有短期回报,甚至可能永无回报的领域。现今世界已全然不同,多数人只做未来几个月的规划,功夫都花在了预测下一季度财务状况上。

贝尔实验室生来就是通信系统的设计、建造与改进先锋,研发范围涵盖从电话之类的消费类硬件到交换机基础设施、微波传输塔和光缆。

有时,对实践领域的广泛关注会带来基础科学的进步。例如,1964年,阿尔诺·彭齐亚斯(Arno Penzias)和罗伯特·威尔逊(Robert Wilson)着手解决“回声号”(Echo)“气球”卫星地面天线的噪声问题。最后,他们发现,噪声来自宇宙太初大爆炸(Big Bang)遗留的背景辐射。彭齐亚斯和威尔逊因这项发现获得了1978年的诺贝尔物理学奖。(彭齐亚斯说:“多数诺贝尔奖得主因他们所追寻的东西而获奖,我们却是因自己想干掉的东西而获奖。”)

贝尔实验室还有一项任务,那就是构建对通信系统工作机制的数学理解。克劳德·香农(Claude Shannon)基于第二次世界大战期间的密码学研究创建了信息论,这是最重要的成果。香农于1948年在《贝尔系统技术杂志》(Bell System Technical Journal)上发表“A Mathematical Theory of Communication”(通信的数学理论)一文,阐释了通信系统可传递信息数量的基本属性和限制。香农于20世纪40年代到1956年期间在墨里山工作,之后回到母校麻省理工学院任教。他于2001年去世,享年84岁。

随着计算机变得越来越强大、越来越便宜,其用途也拓展到数据分析、物理系统和过程的大型建模与仿真。贝尔实验室从20世纪30年代起就开始涉足计算机与电子计算,到了20世纪50年代末期,贝尔实验室已经建成多个容纳大型中央计算机的计算中心。

20世纪60年代早期,一些人员从数学研究部门分离出来,与在墨里山操作大型中央计算机的人员一起,组成了计算机科学研究部门。新部门被命名为计算科学研究中心。在之后很短时间里,虽然该中心仍然负责为墨里山所有其他部门提供计算机服务,但它始终是科研机构,并非服务部门。1970年,计算机设备管理团队就拆分出去了。

本节写到好些我的个人经历,希望能告诉你是什么样的好运气让我选择电子计算作为职业,将我带入贝尔实验室这个举世无双的地方从事相关工作。

我出生于多伦多,曾就读于多伦多大学,专业是工程物理(后来改名为工程科学),这是为那些自己也不知道想学什么的人准备的“大杂烩”专业。我毕业于1964年,那时电子计算正处于早期阶段:我大三时才第一次见到计算机。整个学校只有一台IBM 7094大型计算机,算是当时最高端的设备。它拥有32K(32 768)个36位字长的磁芯存储器(如今我们会说是128 KB),还有大机械硬盘形态的次级存储。当时它价值足足300万美元,安放在空调机房中,由专业操作员照料,普通人(尤其是学生)不允许靠近。

所以,尽管我努力学习Fortran语言,但身为本科生,也只能浅尝辄止。对于那些曾经挣扎着写出自己第一段程序的人,我感同身受。我精读了丹尼尔·麦克拉肯(Daniel McCracken)的Fortran II大作[2],学会了各种编程规则,但还是不懂怎样写出第一段程序。动手能力跟不上理论知识,这该是很多人都会遇到的障碍吧。

在大学生活第一年结束前的那个夏天,我在多伦多帝国石油(Imperial Oil)公司找到一份工作,加入为精炼厂开发优化软件的小组。新泽西标准石油(Standard Oil of New Jersey)公司是帝国石油公司的股东,标准石油于1972年更名为埃克森(Exxon)。

回想起来,我在实习时的表现远低于平均水平。我花了整个夏天的时间编写一套体量庞大的COBOL程序,用来分析精炼数据。我不记得其具体功能,但它肯定没能正常工作。我其实并不清楚如何编程。COBOL缺乏对良好程序组织方式的支持,结构化编程也还未被发明出来。我的代码充斥着没完没了的IF语句,在我想到要做什么事时,将执行流程分支到另外某处。

我还尝试让Fortran程序在帝国石油的IBM 7010上运行,因为相对于COBOL而言,我对Fortran懂得多一点儿,而且Fortran大概更适合用来做数据分析。在与JCL(IBM的作业控制语言)搏斗了几周之后,我才发现7010上根本没有Fortran编译器。JCL错误信息如此晦涩难懂,以至于以前根本没人搞清楚过这个问题。

度过略有挫败感的暑假之后,我回到学校继续完成学业。我对编程的兴趣依然强烈。学校没正式开设计算机科学课程,但我高年级时的论文都与人工智能有关。人工智能在当时是热门主题。定理证明器、下国际象棋和跳棋的程序、自然语言的机器翻译似乎触手可及,看似只需要一点点程序设计就可以实现。

1964年毕业后,我不知何去何从,所以就像很多其他学生一样,打算直接读研究生。我申请了十来所美国大学(那时加拿大人不怎么申请美国学校),并有幸被其中几所录取,其中就有麻省理工学院和普林斯顿大学。普林斯顿大学说,完成博士学业通常需要3年时间,麻省理工学院说大概需要7年;普林斯顿大学提供全额奖学金,麻省理工学院说我得每周做30小时的研究助理工作——结论显而易见。而且,我的好友,高我一届的多伦多校友阿尔·阿霍,已就读于普林斯顿大学,于是我就去了普林斯顿大学。事实证明,这是一个超级幸运的选择。

1966年,好运再度降临。因为普林斯顿大学研究生李·瓦里安(Lee Varian)上一年在麻省理工学院干得不错,所以我得到了暑期去麻省理工学院实习的机会。我在那儿使用兼容分时系统(Compatible Time-Sharing System,CTSS)和密歇根算法译码器(Michigan Algorithm Decoder,MAD,ALGOL 58语言的分支)编写程序,为一种叫作Multics的新操作系统打造工具。我会在第2章中详谈Multics。(Multics本来拼作MULTICS,但小写字母版本看起来更顺眼,其他全大写字母单词我也都会写成比较顺眼的形式,如将UNIX写成Unix,哪怕这样写不符合史实。)

我在麻省理工学院名义上的老板是费尔南多·科巴托(Fernando Corbató)教授,人人都叫他“科尔比(Corby)”。他创建了CTSS,负责Multics,是一位了不起的绅士。1990年,科尔比因其为分时系统做的基础工作获得图灵奖。他于2019年去世,享年93岁。

除了带领团队设计、实现CTSS和Multics,科尔比还是输入密码访问计算机的发明人。批量计算很少用到这种方式,但运行共享文件系统的分时计算机的确需要某种安全机制来保护私有文件。

1966年夏天我在麻省理工学院时,系统自动为我生成了两个可拼读的短密码,我至今仍然想得起来。使用两个密码确有必要。夏日的某天,有人搞混了存储密码的文件和保存当日欢迎登录消息的文件。密码都是明文存储的,结果一登录系统就会看到所有人的密码。

我的办公室属于约瑟夫·魏岑鲍姆(Joseph Weizenbaum)教授,那个暑假他不在学校,记得办公室里也没有其他人。早在1966年,魏岑鲍姆就发表了对Eliza的描述。Eliza是模拟与罗杰斯学派心理学家对话的程序[3],也是使用自然语言与计算机互动的早期尝试之一。它令人惊奇地有效,起码在我第一次看到时特别有效。我也乐意带领访客去看它。如今有许多模拟Eliza的网页程序,虽然这些程序很快就会“原形毕露”,但和它们聊几分钟还是很有意思的。

ELIZA: Please tell me what’s been bothering you.

YOU: I’m trying to write a book about Unix.

ELIZA: Is it because you are trying to write a book about unix that you came to me?

YOU: Yes.

ELIZA: You are sure.

YOU: Yes.

ELIZA: You seem to be quite positive.

YOU: Yes.

ELIZA: I see.

1967年夏天,终极好运从天而降:墨里山的贝尔实验室计算科学研究中心让我去实习,老板是道格·麦基尔罗伊(图1-4)。道格建议我研究内存分配评估问题,这也是他长期关注的方向。遵循最佳实习传统,我最终做出了与老板要求风马牛不相及的东西。我写了一套函数库,以方便在Fortran程序中做列表处理。整个夏天我都在墨里山的大型计算机GE 635上编写严密的汇编语言。GE 635实际上是重整过后更有条理的IBM 7094,同时也是Multics专用机GE 645的简化版。那差不多是我最后一次写汇编语言。尽管我所做的事从根上就走错了方向,但代码写得十分过瘾,让我与编程结下了不解之缘。

图1-4 道格•麦基尔罗伊,约1981年 (杰勒德•霍尔兹曼供图)

有时地理位置决定一切。

1967年实习时,我的办公室位于2号楼5层8号梯旁。上班第一天,我坐在办公室里(那些连实习生都有自己办公室的好日子啊),琢磨着该做些什么。上午11点,有个年纪略长的家伙出现在门口,说:“嗨,我是Dick。走,吃午饭去。”

我没听清楚他姓什么。不过我想,行,为什么不呢?那顿午饭怎么吃的我完全不记得了,只记得饭后那位迪克某某就去了其他地方。我沿着走廊找到他办公室门上的名牌,上面写着“Richard[4] Hamming”!这位和善的邻居原来是一位名人。他是纠错码的发明者,也是我选修过的一门数值分析课所用教材的作者。

我和迪克(图1-5)成了好朋友。他观点鲜明,不惧表达,我觉得这会让一些人不爽,但我乐意与他为伍,而且多年以来他的建议令我获益良多。

图1-5 迪克•汉明,约1975年,穿着他招牌式的格子正装(维基百科)

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

1968年,他得到通知说自己获得了当年的图灵奖,这个奖现在被看作计算机科学领域的诺贝尔奖。我目睹了他的自嘲式反应:诺贝尔奖当时奖金价值10万美元,而图灵奖奖金价值2 000美元,他说自己得了2%个诺贝尔奖。这是第三届图灵奖,第一、二届分别颁给了艾伦·佩里斯(Alan Perlis)和莫里斯·威尔克斯(Maurice Wilkes),他们两位也是计算领域的先锋人物。迪克因其在数值方法、自动编码系统、错误侦测及错误纠正方面所做的工作而获奖。

迪克是促使我开始写书的人。写书是一件好事。他对大多数程序员评价甚低,因为他感觉他们没有得到像样的培训。至今他的话仍在我耳边萦绕:

“我们给他们一本词典和一套语法规则,说:‘孩子,你已经是伟大的程序员了。’”

他认为,应该像教写作一样教编程。好代码应该与坏代码风格迥异,应该教会程序员如何写出漂亮的、风格优雅的代码。

对于怎样才能做到这一点,我和他有分歧。但我听取他的意见,于1974年写了我的第一本书《编程格调》(The Elements of Programming Style),合著者是当时坐在我隔壁办公室的P. J.“比尔”·普劳格(P. J. “Bill” Plauger)。我们仿效威廉·斯特伦克(William Strunk)和E. B.怀特(E.B.White)的《风格的要素》(The Elements of Style[5],展示写得差的代码片段,然后阐述如何对其进行改进。

《编程格调》这本书中的第一个例子来自迪克给我看的一本书。有一天,他冲进我办公室,手里拿着一本数值分析书,怒斥书中数值的部分写得有多烂。我只瞟到一段可怕的Fortran代码:

   DO 14 I=1,N 
   DO 14 J=1,N
14 V(I,J)=(I/J)*(J/I)

若你不是Fortran程序员,请听我解释。这段代码包括了两个嵌套的DO循环,这两个循环都在第14行结束。循环控制的索引变量从最低限步进到最高限,所以外循环I从1步进到N,内循环J也从1步进到N。变量V是个NN列的数组;I遍历每一行,在每一行中,J遍历每一列。

这两个循环创建了一个N×N的矩阵,对角线上是1,其他地方都是0,当N等于5时就像下面这样:

1 0 0 0 0 
0 1 0 0 0 
0 0 1 0 0 
0 0 0 1 0 
0 0 0 0 1

在做整数除法时,Fortran会丢弃结果的小数部分,故若I不等于J,除法结果为0;若I等于J(在对角线上),结果就是1。

在我看来,这有点过于炫技了。在编程时,“乱抖机灵”并非良策。

用更直截了当和显而易见的方式重写,得到下面这个更清楚的版本:遍历外循环时,内循环将第I行的每个元素设为0,然后外循环再将对角线元素V(I,I)设为1:

C MAKE V AN IDENTITY MATRIX 
     DO 14 I = 1,N 
        DO 12 J = 1,N 
  12       V(I,J) = 0.0 
  14    V(I,I) = 1.0

于是我得到编程风格的第一条规则:写明白,别炫技。

迪克于1976年从贝尔实验室退休,去了加利福尼亚州蒙特雷的美国海军研究生院(Naval Postgraduate School in Monterey,California)任教,直至1998年初逝世,享年82岁。据说,他有一门课被学生称为“汉明论汉明”(Hamming on Hamming),正与本节内容相呼应。

迪克无时无刻不在深思自己在做什么,为什么要这么做。他常说“算以获识,非算以得数”[6],他甚至有一条(用中文)写着这句话的领带。他很早就认为,电子计算将在贝尔实验室的工作中占到一半比例。同事们都不这么认为,但很快他的预测就成真了。他常说,周五下午宜哲思,所以他每逢这个时间就安坐思考,但也随时欢迎我这样的访客。

退休后的几年,迪克总结了关于职业生涯成功之道的建议,开设讲座,题为“You and Your Research”(你和你的研究)。你可以在网上找到相关内容。最早一次讲座于1986年3月在Bellcore(即贝尔通信研究院[7])举办,肯·汤普森开车载我一起去听。几十年来,我一直向学生们推荐这一讲座——非常值得阅读记录文本,或者观看视频。

1967年夏天,维克·维索斯基(Vic Vyssotsky)(图1-6)坐我对面办公室。他也是极聪明和有天分的程序员。维克和科尔比搭档,负责管理贝尔实验室的Multics研发工作。他会尽量抽空每天与我这个基层实习生谈话。维克逼着我给需要学编程的物理学家和化学家上Fortran课。给非程序员上编程课,原来也颇为有趣。这让我克服了对公众讲话的恐惧,也让我后来能轻松应对各种教学工作。

图1-6 维克·维索斯基,
约1982年(贝尔实验室供图)

不久以后,维克搬去贝尔实验室的其他驻地,从事“卫兵”(Safeguard)导弹防御系统方面工作。后来,他又回到墨里山,担任计算科学研究中心的执行总监,成了在我上面好几级的老板。

1968年春天,我着手解决博士论文中我的导师彼得·韦纳(Peter Weiner)给的一个图划分(graph partitioning)问题(图1-7):给定一些由边线连接的节点,试将这些节点切分为大小相同的两组,且从一组中的节点到另一组中的节点的连接边数尽可能少。

图1-7 图划分问题示例

表面上看,这来源于实际问题:如何将程序切分为多个部分,放到不同的内存页中,当程序运行时,程序页进出内存的交换量保持最小。节点代表代码块,边线代表代码块与代码块之间的可能交换,每条边有一个衡量交换频率的权值,从而可以估算出不同内存页中的代码块的交换代价。

从某种意义上讲,这是一个生造出来的问题,但它也是某些现实事物的合理抽象,而且还有其他具体问题符合这个抽象模型。例如,电路板上的元件如何布置才能减少电路板与电路板之间的昂贵连接?另一个不太恰当的例子是,如何将员工分配到不同楼层,才能让经常交谈的人在同一个楼层?

这是一个合适的博士论文选题,但我进展甚缓。1968年夏天,当我回到贝尔实验室开始第二段实习期时,我向林申(Shen Lin)请教。那时他刚为经典的“旅行商问题”找到当时最有效的算法:对于一组城市,给出最短路线,必须访问每座城市且每座城市仅访问一次,然后返回。

林申提出了一种图划分算法,这种算法虽然无法保证能得出最优解,但看来可靠。我想出了高效地实现它的路子。我用大量图来做实验,评估该算法在实践中的有用程度。该算法看起来相当有效,但我们没办法找到最优解。我也找了一些有趣的特殊图,对于这些图,可以给出既快又能得到最优解的算法。以上工作的成果对于一篇论文是足够了,在暑期结束时,我已经全获所需。我在秋天着手撰写论文,并于1969年1月通过毕业答辩(从普林斯顿大学3年毕业的乐观估计最后变成了4年半毕业)。

一周后,我开始到贝尔实验室计算科学研究中心工作。没面试,实验室在上一年秋天就给我发了录用通知,但有个要求:必须先完成论文。高我两个行政级别的研究中心主任萨姆·摩根(Sam Morgan)告诉我:“我们不招博士肄业生。”完成论文绝对是好事一桩——12月,我又收到一封信,说我得到大幅加薪,而我当时都还没去报到!

说句题外话,林申和我找不到既高效又总能给出最优解的图划分算法确实情有可原,不过,当时我们还不知道这一点。有人一直在研究图划分之类的组合优化问题的固有困难,并发现了某些有趣的一般关系。

1971年,多伦多大学的数学家和计算机科学家斯蒂芬·库克(Stephen Cook)做出了非凡的成果,证实包括图划分在内的许多难题是等价的。也就是说,如果我们能找到解决其中一个难题的有效算法(即比尝试所有可能性更好的方法),就能找到解决所有难题的有效算法。在计算机科学领域,这类难题是否真的很难,还是悬而未决的问题,但我认为它们确实很难。库克因为这项工作获得了1982年的图灵奖。

1969年,我正式加入贝尔实验室时,没人告知我具体要做什么事。惯例如此:把你介绍给其他人,让你随意晃荡,去寻找自己的研究课题和协作者。回想起来,这似乎是下马威,但我不记得有什么麻烦。周边有那么多新鲜事在发生,想找点儿东西来研究,或者找个人来合作,根本不成问题。两个夏天之后,我已经认识所有人,也了解了一些项目情况。

贝尔实验室向来缺乏明确的管理层指示。1127中心的项目不由管理层指派,而是自下而上,由对某个课题感兴趣的人员自主成立项目组。贝尔实验室的其他部门也是如此:如果我参与了某个开发组,也许会“利诱”科研同事也来参加,不过他们得自愿加入。

无论如何,有一段时间,我继续和林申一起研究组合优化问题。林申对这类问题特别有见地。他用纸笔画一些示例,就能察觉到有前途的攻击路线。他对旅行商问题有了新的想法,大幅改进了他以前的算法(已经是当时最有名的算法),我用Fortran程序实现了他的新算法。这个算法工作得很好,此后多年间一直是最顶尖的算法。

这类工作既有趣又能带来成就感,而我善于将想法转化为可工作的代码,却完全不擅长算法,所以我逐渐涉足其他阵地:文档编制软件、专用编程语言,还有一点点图书写作。

我也会时不时回来和林申一起工作,其中一次是为AT&T客户的私有网络优化设计提供一套复杂工具。在相对纯正的计算机科学与对公司切实有用的系统间来回切换是件好事。

贝尔实验室公关部门对林申在旅行商问题上的成果产生了兴趣,拿他做了好几回宣传主角。图1-8所示为其中一次的模糊剪报,我在右下角。图1-9引自实验室某本装点面子的杂志,报道主题是我们在图划分方面的工作,时间大概在我们拿到算法专利之后。

图1-8 林申,约1970年(贝尔实验室供图)

图1-9 公关图片,约1970年(贝尔实验室供图)

可以注意到,在图1-9中,我系着领带,这很不符合我的一贯形象。几年后,丹尼斯·里奇和我为另一本内刊,大概是Western Electric Engineer(西部电气工程师)吧,撰写关于C语言的文章。刊物出版前,编辑要我们寄几张肖像照片过去做配图,我们照办了。几星期后,他们说照片丢了。我们说,没问题,那就再寄一次好了。他们回复:“这次可以系上领带吗?”我们严词拒绝,后来他们奇迹般地找到了之前没系领带的照片,并且刊印了。

我开始以长期雇员身份工作时,办公室在2号楼5层9号梯附近,在那里我待了30年。世界变幻,我自岿然。在那些年里,走廊上的邻居有肯·汤普森、丹尼斯·里奇、鲍勃·莫里斯(Bob Morris)、乔 · 奥桑纳(Joe Ossanna),还有杰勒德·霍尔兹曼,大名鼎鼎的约翰 · 莱昂斯(John Lions)、安迪·塔嫩鲍姆(Andy Tanenbaum)和戴维·惠勒(David Wheeler)也来造访过。

我在实验室的最后10年里,肯·汤普森和丹尼斯·里奇的办公室在我办公室正对面。图1-10展示的是丹尼斯的办公室,这张照片是2005年10月在我的旧办公室门口拍的。肯的办公室在丹尼斯的办公室的左边。

图1-10 2005年,丹尼斯·里奇的办公室

在那些年里,我和比尔·普劳格、洛琳达·彻丽(Lorinda Cherry)、彼得·温伯格和阿尔·阿霍都曾做过邻居,道格·麦基尔罗伊、罗布·派克和乔恩·本特利的办公室离得也很近。和身边的人协作比较容易。能与这些人比邻,实在幸运。

那时有哪些人?工作环境如何?20世纪70年代早期,计算科学研究中心只有30来名员工,其中4~6人从事Unix或与之密切相关的工作。图1-11展示了贝尔实验室内部电话号码簿的部分页面。它并非是因年代久远而变黄的,我刚到那儿时,组织结构图就是用黄色纸张印刷的,如同旧式电话号码簿的黄色纸页一般。

图1-11 贝尔实验室内部电话号码簿,约1969年(杰勒德·霍尔兹曼供图)

图1-11所示的纸页印刷于1969年,其上列出了由萨姆·摩根(图1-12)领导的计算科学研究中心人员名单。萨姆是出色的应用数学家,也是通信理论专家。道格·麦基尔罗伊在Unix的发展上起了极大的作用,但他的贡献不怎么广为人知。他负责一个小部门,肯·汤普森就在其中,参与了Unix早期工作的其他人员还有拉德·卡纳迪(Rudd Canaday)、鲍勃·莫里斯、彼得·诺伊曼、乔·奥桑纳等,埃利奥特·平森(Elliot Pinson)部门的丹尼斯·里奇、桑迪·弗雷泽(Sandy Fraser)和史蒂夫·约翰逊也为Unix工作过多年。

图1-12 萨姆·摩根,1127中心主任,约1981年(杰勒德·霍尔兹曼供图)

尽管大多数研究员都有博士学位,但没人称呼“博士”,因为每个人都是博士。图1-11所示的电话号码簿中,女士名字前冠以“小姐”或“夫人”,而男士则完全没有表明婚姻状况的称谓。这种称谓方式并不常见。我不记得这些标记究竟何时消失,但在20世纪80年代早期,电话号码簿里就彻底见不到了。

20世纪60年代和20世纪70年代,贝尔实验室的技术类岗位上仅有少量女性和少数族裔;技术团队成员大部分是白人男性,这种状况持续了很久。在这方面,贝尔实验室代表了历史上那个时代的大多数技术工作环境。

20世纪70年代早期,贝尔实验室启动3个长期项目,试图改善这种状况。合作研究生奖学金项目(The Cooperative Research Fellowship Program,CRFP)于1972年启动,每年资助约10个少数族裔学生攻读4年或4年以上的研究生课程,直至获得博士学位。1974年启动的女性研究生项目(The Graduate Research Program for Women,GRPW)每年为15~20名女性提供研究生阶段的资助。有几位受资助的女性曾在1127中心和我的部门工作,大多数人毕业后在贝尔实验室、高校或其他公司大展宏图。1974年启动的暑期研究项目(Summer Research Program,SRP)为大约60位女性本科生和少数族裔学生提供全额资助的暑期实习工作。他们被安顿在墨里山、霍姆德尔和其他驻地,在科研导师的一对一指导下工作。我在1127中心负责SRP长达15年之久,所以有机会见到很多尖子生,还指导过其中几个。

长期来看,这些项目取得了一定的效果,但在20世纪60年代和20世纪70年代,技术环境还是比较单一,我确信自己并没有意识到这种状况导致的一些后果。

贝尔实验室有明确的管理层级。总裁在顶端,管着15 000~25 000人。往下是科研(编号10)、开发(编号20)、电话交换(编号50)、军队系统(编号60)等部门,每个部门都有一位副总裁负责。科研部门下设物理学(编号11)、数学和通信系统(编号13)、化学(编号15)等部门,同样各自有负责的执行总监,除此之外还有法务和专利部门。数学研究中心编号131;计算机科学研究中心划为137中心,下设1371等十几个独立部门。几年之后,在一次大改革中,所有部门重新编号,我们变作127中心。再后来,在一次重组时,编号前面加了一位数,成了1127。这个编号一直沿用到2005年,而我已于2000年退休。

管理架构只有相对较少的几个层级。我这样的研究员是“技术团队成员”,或称MTS(Member of Technical Staff),下面还有几个技术岗层级。科研部门的MTS通常会有独立办公室,但大家都会尽量敞着门。MTS之上是主理层,1127中心一直都只有为数甚少的几个主理;往上一级是道格·麦基尔罗伊这样的部门主管,负责管理6~12个研究员;再往上是中心主任,管约6个部门;然后是执行总监,管一大票中心;跟着是副总裁,管理所有执行总监。

副总裁向总裁汇报。优秀的化学家比尔·贝克(Bill Baker)在1955年至1973年担任科研副总裁,之后担任贝尔实验室总裁直至1980年[8]。据信,他任副总裁时,记得住科研部门每位MTS的名字,而且随时关注他们的工作——我想那多半是真的。当然他也一直知道我和我同事的工作内容。

直至1981年不情不愿地成为部门主管之前,我都是一名普通MTS。多数管理人员都是“赶鸭子上架”,因为这虽然没有终结个人研究生涯,但必然会拖慢进度,而且照料麾下部门颇具挑战性。但人家自有一套话术来说服你:“反正躲不过,长痛不如短痛吧。”或者有时反过来说:“机不可失。”要么是:“你不上,就会有不怎样的人上了哦!”

不管是好是坏,我都成了一个新部门的负责人。部门编号为11276,小心翼翼地被起了个没意义的名字——计算结构研究部(Computing Structures Research)。部门里通常有8~10位研究员在职,关注范围广得令人生畏:图形硬件、集成电路设计工具、文档编制工具、操作系统、网络、编译器、C++、无线系统设计、计算几何、图论、算法复杂度,以及其他一大堆东西。搞清他们每个人的工作内容,向上级汇报,对我来说一直是个挑战,不过也让我颇有收获。那时学到的大量技能一直与我相随。

管理架构中的每个层级都有些小福利。有的比较明显,例如自担任中心主任起越来越大的办公室。我觉得担任部门主管也会有小幅涨薪,但应该没有多到令人难忘的程度。

有些福利更为细微:部门主管及以上管理人员的办公室铺了地毯,而一般人员的办公室则只有油毡或瓷砖地板。升职时,我领到一本印刷精美的小册子,在其上面列出可供选择的地毯颜色、办公家具等。我短暂试用过一张新办公桌,但它太大,而且不舒服,所以我还是用回1969年从上一任部门主管那儿继承来的世楷牌(Steelcase)老旧办公桌。我并不热衷于区分等级,坚决不肯铺地毯。萨姆·摩根力劝我铺地毯,他说,总有一天我会想要拥有地毯带来的权威。我还是拒绝了,地毯区别策略最终也消失无踪。

部门主管每年都要做绩效审查,评估部门员工的工作。MTS在纸上写下年度工作总结,在1127中心,大家叫它“我很棒报告”,我觉得这词是萨姆·摩根首创。部门主管在另一张纸上写下对该员工作的总结和评价,包括“可改进的地方”,即建设性的批评意见。

撰写评估和反馈是件苦活儿,好些人不填“可改进”部分。但有一年,我们被告知必须填写,不再允许留空或者简单写上“N/A”。我的应对之道是填上“继续努力工作”,在上级以“人无完人”为由要求填写更严厉的批评意见之前,躲了一两年清静。好在我不必给肯·汤普森这种明星研究员写评语。能给他写什么呢?

部门主管和中心主任开会评估MTS的绩效,这通常会花上一整天。几个星期后,还将有个耗时一整天的会,从加薪池中为每位MTS分配次年加薪幅度。这两个彼此相关的评估过程的正式名称是绩效审查和工资审查,但我总是把它们看作“抽象绩效”和“具象绩效”。

评估逐级向上执行,由一位执行总监和中心主任们一起审查全体MTS的绩效评估结果,也对部门主管进行考核。

在其他中心,绩效审查也许具有竞争意义,但我们中心的绩效审查却其乐融融。相对于“我的人比你的人强”,我们更加会说“别忘记你的人还做了一件好事”。

也许我过于乐观,但我认为整个过程运转得很好,因为管理层在晋升过程中保持了技术能力,而且都有基层经历。整个系统看起来并不过于偏重实践或理论,起码对于我们1127中心这帮人是这样的——优秀的程序和优秀的论文都很受重视。对未来工作的提议或计划一概欠奉,这是件好事。每个人都会大略预估年终成果,但不管做错多少次都没关系。对于那些年复一年做同一件事的人,管理层会保持耐心,以待长远。我想,科研部门管理层级较少也有好处,这样一来大多数人在大多数时候就不会去考虑晋升问题。如果有人立志做官,最好选择其他部门。

比较贝尔实验室和科研型高校的绩效评估过程是一件有趣的事。在高校里,招聘和晋升会大量参考来自同领域外部知名学者的推荐信。这激励了对狭窄领域的专精研究,因为学者的目标是深究一门,好让外审人员能理所当然地评价“此人在其学术生涯的当前阶段,已是该子领域的魁首”。

而贝尔实验室则为每位研究员打造了自下而上的评级制度。部门主管为其员工评级,评级结果在中心层面与部门主管的评级合并,如是再向上传递两层,最后,每个人在全体人员中的大概位置就确定了。

专精某一领域的人可能会得到其直接上级的高度评价,但再上一层就未必了解其工作成果。另外,跨学科的工作在更高层眼中更突出,因为更多管理人员看得到它。协作越广泛,就会有越多管理者看得到,结果就形成了一个极其偏重协作与跨学科研究的组织。做决策的管理人员也要经历这个评估过程,所以他们会有同样的倾向。

我做了15年以上部门主管,管理水平顶多算中等,而且绝对愿意让贤予能。有些人成功地长期拒绝晋升。我做部门主管后不久,丹尼斯·里奇也做了主管,但肯·汤普森就一直没进入管理层。

在高校任教20年之后,我仍然不乐意评价别人的工作。然而,这事确有必要。有时你必须做出影响他人生活的决定,例如解雇某人(还好我没这么做过)或不让学生及格(不常见但也偶有所闻)。贝尔实验室绩效考核方式的好处在于,它基于由理解某项工作的人的共同评估做出。如道格·麦基尔罗伊所言:“合议是这套体系的极妙之处。谁都不必依赖与单个老板的关系。”贝尔实验室这套流程不见得完美,但它的确挺好,我听说过和读到过一些差劲得多的绩效评估方法。

[1]  美国对享受通信服务的个人和机构征收消费税。这项税款由通信服务提供商代收,通信服务提供商将税款上缴美国国税局(Internal Revenue Service,IRS),获得退税。 ——译者注

[2]  应该是指1961年出版的《Fortran编程指南》(A Guide to Fortran Programming)一书。麦克拉肯是纽约城市大学教授,著有20多本编程书。《Fortran编程指南》盛行20多年,是Fortran语言的标准读物。——译者注

[3]  卡尔·罗杰斯(Carl Rogers)是人本主义心理学的创始人之一,首创非指导性治疗,主张患者通过自我调整恢复心理健康。Eliza实际上是一套自然语言处理程序,与罗杰斯学派心理学家对话只是其应用之一。这个应用可接收用户输入,通过模式匹配输出文本,令用户感觉似乎在与人对话。——译者注

[4]  Dick(迪克)是Richard(理查德)的昵称。类似的名字/昵称在后文还有出现,如Bob是Robert的昵称,Bill是William的昵称,Mike是Michael的昵称,等等。 ——译者注

[5]  这本书有多个版本,对应中译本也有多个版本,中文书名也不尽相同,有《风格的要素》《英语写作手册:风格的要素》等。——译者注

[6]  对应原文为“The purpose of computing is insight, not numbers.”。——译者注

[7]  1984年,美国司法部依据《反托拉斯法》,将AT&T分拆为专营长途电话的新AT&T,以及7个本地电话公司。贝尔通信研究院(Bell Communications Research)是独立研究机构,为这些公司提供创新研发服务。——译者注

[8]  比尔·贝克1979年转任贝尔实验室董事会主席,这里可能是作者记忆有误。——译者注


相关图书

Linux常用命令自学手册
Linux常用命令自学手册
庖丁解牛Linux操作系统分析
庖丁解牛Linux操作系统分析
Linux后端开发工程实践
Linux后端开发工程实践
轻松学Linux:从Manjaro到Arch Linux
轻松学Linux:从Manjaro到Arch Linux
Linux高性能网络详解:从DPDK、RDMA到XDP
Linux高性能网络详解:从DPDK、RDMA到XDP
跟老韩学Linux架构(基础篇)
跟老韩学Linux架构(基础篇)

相关文章

相关课程