读UNIX传奇:历史与回忆07遗产

读UNIX传奇:历史与回忆07遗产

1. 遗产

1.1. Unix或Linux或macOS或其他变种运行在数十亿台计算机上,持续为数十亿人服务,当然也为在它之上构建业务的人赚取了数十亿美元

1.2. 贝尔实验室为Unix开发的语言和工具随处可见

  • 1.2.1. 在这些编程语言中,有C语言和C++,它们至今仍是系统编程的中流砥柱,还有如awk和AMPL等更专门的语言。核心工具有shell、diff、grep、Make和Yacc等

1.3. GNU(​“GNU’s not Unix”的递归缩写)是一个大型软件集合,大部分基于Unix模式,以源代码的形式免费提供给所有人使用:有了它,Unix上几乎所有东西都可以使用,甚至包括更多工具

  • 1.3.1. 当今大量的软件开发都基于开源项目,在很多情况下就是基于GNU的实现

1.4. GNU加上Linux操作系统,相当于免费版的Unix

  • 1.4.1. Unix命令的GNU实现是开源的,可以被使用和扩展

  • 1.4.2. 唯一的限制是,如果发布了改进,成果必须免费提供给每个人,不可以私有

2. Unix哲学

2.1. 是关于如何处理计算任务的编程风格

2.2. 让每个程序做好一件事。要做一件新的工作,就构建新程序,而不是通过增加新“特性”使旧程序复杂化

2.3. 预期每个程序的输出都能成为另一个未知程序的输入

  • 2.3.1. 不要用无关的信息来干扰输出

  • 2.3.2. 避免使用严格的分栏对齐或二进制输入格式

  • 2.3.3. 避免使用严格的分栏对齐或二进制输入格式

2.4. 设计和构建软件,甚至是操作系统,要尽早试用,最好是在几周内就用起来

  • 2.4.1. 大刀阔斧砍掉笨拙的部件,重建它们

2.5. 宁可绕道构建用后即弃的工具来减轻编程负担,也别依赖经验欠奉的帮助

3. 技术方面

3.1. 分层文件系统是对既有做法的重大简化

3.2. 文件包含未被解释的字节,系统本身不关心这些字节是什么,也不知道它们的意义

3.3. 文件的创建、读取、写入和删除只需六七个系统调用即可完成

3.4. 事实上,现代系统支持各种各样的实现,呈现出相同接口,但用不同的代码和内部数据结构来实现

3.5. 高层级的实现语言当然是为用户程序服务的,但也是为操作系统本身服务的

3.6. C语言比它的前辈们更适合,它让操作系统具备可移植性

3.7. 曾几何时,世上只有硬件制造商的专有操作系统,配备专有语言,而Unix则成为开放的、被广泛理解的标准,然后变作一种商品

  • 3.7.1. 客户不再被束缚在特定硬件上,制造商也不再需要开发自己的操作系统或语言

3.8. 用户级的可编程shell具有控制流语句和方便的I/O重定向功能,使得将程序作为构件进行编程成为可能

3.9. 管道是典型的Unix发明,是临时连接程序的一种优雅而高效的方式

  • 3.9.1. 管道并不能解决所有的连接问题,但道格·麦基尔罗伊最初概念中完全通用的非线性连接在实践中并不经常出现,线性管道几乎总是足敷使用

3.10. 将程序当作工具并组合使用是Unix的特色

  • 3.10.1. 编写各自做好一件事的小程序,而不是功能繁多的单个大程序,有很多好处

  • 3.10.2. 这种方法是整个程序层面的模块化,平行于程序内功能层面的模块化

3.11. 普通文本是标准数据格式

3.12. 穿孔卡实际上强迫人们形成一种世界观,一切都以80个字符为单位,而信息通常都位于这些字符块的固定字段中

3.13. 能写程序的程序是威力强大的理念

3.14. 在更高的层面上,Yacc和Lex是生成代码、创建编程语言的典范

3.15. shell脚本和makefile等自动化和机械化工具实际上也是创建程序的程序

3.16. 专用语言,今天常被称为小语言(little language)​、领域特定语言(domain-specific language)或应用特定语言(application-specific language)​

  • 3.16.1. shell就是好例子:它是用来运行程序的,而且它在这方面非常擅长,但你不会想用它来写浏览器或视频游戏

  • 3.16.2. Fortran针对科学和工程计算

  • 3.16.3. COBOL针对商业数据处理

  • 3.16.4. 语言不必非得体现高超科技

3.17. at命令在40多年后仍在使用,变化不大

  • 3.17.1. 如同其他一些语言,其句法是一种像是在大声说话的风格化英语

4. 组织

4.1. Unix成功的原因还有一大部分来自非技术因素,如贝尔实验室的管理和组织结构,1127中心的人际环境,以及一群人才聚在一起解决不同问题时的思想交流

4.2. 稳定的环境至关重要:资金、资源、任务、组织结构、管理、文化都应持续和可预测

4.3. 经费有保障,研究人员不用考虑钱的问题

4.4. 富含难题的环境

  • 4.4.1. 不研究重要问题,就不可能做重要工作

  • 4.4.2. 几乎所有主题都可能重要,并与AT&T的通信任务相关

  • 4.4.3. 计算机科学是新领域,在理论和实践两方面都有很多想法可以求索

  • 4.4.4. 理论和实践之间的相互作用特别富有成效

  • 4.4.5. 语言工具和正则表达式就是很好的例子

4.5. 贝尔实验室的科学家们也被要求融入学术研究界,因为学术界是科研问题和见解的另一来源,而且能借此紧跟施乐PARC和IBM Watson等其他工业研究实验室的进展

4.6. 除了讲授内部课程,人员也在高校任教

  • 4.6.1. 普林斯顿大学、纽约大学、哥伦比亚大学和西点军校等附近的学校算是近水楼台

4.7. 聘请优才

  • 4.7.1. 慎于雇人

  • 4.7.2. 在1127中心通常每年只能新雇一两人,而且几乎都是年轻人,所以招聘决策非常谨慎,也许是过于谨慎了

4.8. 与高校的关系往往是长期的

4.9. 技术管理

  • 4.9.1. 管理者必须了解他们所管理的工作

4.10. 协作环境

  • 4.10.1. 贝尔实验室规模庞大、规格高级,几乎在每个技术领域都有多名专家,而且往往是各自领域的世界顶尖人物

4.11. 乐趣

  • 4.11.1. 享受你的工作以及与你的同事一起工作的时光,这很重要

4.12. 贝尔实验室不提供免费食物(这是现代福利)​,但不知何故,有免费咖啡喝,管理层会悄悄付钱

4.13. 要建立和维持一个组织,使其成员相互喜欢和尊重,并享受彼此的陪伴,这需要付出努力

  • 4.13.1. 不能靠管理部门的命令,也不能靠外部顾问来创造

  • 4.13.2. 它是在一起工作的乐趣中有机地成长起来的,也是在一起玩耍的乐趣和互相欣赏中成长起来的

5. 认可

5.1. Unix及其主要创建者肯·汤普森和丹尼斯·里奇的贡献得到了认可

  • 5.1.1. 在1983年获得ACM图灵奖

  • 5.1.2. 在1999年获得了美国国家技术奖章

5.2. 1127中心还有其他8位老同事都是国家工程院院士

6. 历史能重演吗

6.1. 好的管理并非闻所未闻,硬件非常便宜,优秀的软件往往免费

6.2. 丹尼斯的C语言是早期Unix发展的核心,至今仍是计算机的通用语言

6.3. 良好的管理是成功的另一要素

6.4. 贝尔实验室的管理层技术能力很强,在1127中心尤其如此

6.5. 做好研究的最大秘诀是雇用优才,确保让他们做有趣的事情,着眼长久,而且不横加干涉

6.6. 计算并不存在于技术真空中

  • 6.6.1. 晶体管的发明,然后是集成电路的发明,意味着50年来计算硬件不断以指数级速度变得更小、更快、更便宜

  • 6.6.2. 随着硬件变得更好,软件编写变得更容易,我们对如何创建软件的理解也变得更好

6.7. Unix可能是一个奇点,它是改变计算机世界的各种因素的独特组合结果