diff --git a/chapters/1.md b/chapters/1.md index 4efd985852400cb1ee47995de6638c9d6adfca93..c1531786a9336dec28d7346757cc7861b55759f6 100644 --- a/chapters/1.md +++ b/chapters/1.md @@ -69,7 +69,7 @@ Beyer, Kurt W.. Grace Hopper and the Invention of the Information Age (Lemelson 总结:在早期的计算机上,“软件” 只是实现把数学公式转化到机器代码中,子程序的出现,让大多数的常用计算公式能够一次写好,多次被调用。随着计算机软件科学和技术的发展,如何分享 “科研成果” vs “保护商业利益” 成为程序员需要面对的问题。 2. 1960 - 1970 年代: -在环境/文化方面: 黑客文化兴起 +在环境/文化方面: 黑客文化兴起 (请看 Ken Thompson 的故事) 在计算机/OS 方面: Unix 在大学计算机教育界的兴起和版权纠纷 在应用软件方面:VI,Emacs: 商业创新方面: 个人电脑:Xerox Parc 的 Alto 电脑, Apple I,BASIC 解释器 @@ -94,3 +94,5 @@ Beyer, Kurt W.. Grace Hopper and the Invention of the Information Age (Lemelson ### 国内开源的发展现状 (2)国内开源的发展现状, 参看 2022 中国开源发展蓝皮书。 +### 相关资料 +开源,社区合作相关的书籍: https://github.com/oscar-open-source-book/booklet-2022 \ No newline at end of file diff --git a/chapters/KenThompson.md b/chapters/KenThompson.md new file mode 100644 index 0000000000000000000000000000000000000000..d87a236dffccafc4b6e5dfde6d96cdcef232db9f --- /dev/null +++ b/chapters/KenThompson.md @@ -0,0 +1,77 @@ +## 开源软件开发导论 - 资料 + +### 黑客文化和黑客的介绍 +我们提到了黑客(hacker)文化兴起: 黑客的精神是:分享所有信息,鼓励探索,不喜欢权威和秘密,理性分析。Playful cleverness。 + +先来说说Ken Thompson,他被叫做Unix之父,从Unix 操作系统诞生的过程中,我们既能看见许多开发项目常见的弊病,同时也能看到,很多后来看起来伟大的创新,它的起步其实是很卑微弱小的,但是持续的热情、持续改进和由此获得的洞察力,能解决很多别人看起来巨大的问题。 + +在讲Ken的故事之前呢,我想先来问你一个问题:如果你是一个不错的程序员,也写过一些不错的程序,现在上级给你一个任务,让你带领团队开发一个操作系统,要求是这样的,第一希望它是业界领先的,第二希望它的预计生命周期在五十年以上,第三预期有上亿的各种设备会使用这个操作系统,第四还希望你顺便设计出一个计算机语言,适用范围甚至比这个操作系统还要广。 + +面对这样一个任务,你会怎么办? + +很多人会说:我会先收集需求,考察目前的各种先进操作系统,然后好好组织专家,进行多轮讨论,逐步细化设计,等等。 + +哦对了,因为我还要同时设计出一个计算机语言来,所以还需要同时组织另外的一批专家,进行另外的一套调研、讨论和设计...... + +麻省理工学院,在上个世纪六十年代,就接下了类似这样的的工作,他们当时已经有一个早期的操作系统,但现在要做一个更好的。他们把这个系统叫做 Multics ,也就是Multiplexed Information and Computing Service的简称,翻译过来就是多路复用信息和计算服务。 + +但是Multics 这个项目,最后陷入了一个典型的“第二版本综合征”。 + +什么意思呢?就是你开发软件,做了第一版,大家用了一下觉得,哎,挺有新意的啊,不错!但同时,又觉得还有很多可以改进的地方。 + +你的团队受到了鼓舞,觉得应该在第二版里面,把在第一版没有实现的各种设计都做到完美,同时又要解决现在大家在业务上碰到的问题,满足所有人的期望,还要为将来出现的问题做准备。 + +当年,麻省理工学院主导设计Multics 这个系统时,请了两家著名公司来帮忙,一家是GE(美国通用电气公司),负责设计全新硬件,另一家是贝尔实验室,负责操作系统设计。 + +这三家在全球科技界都是声名显赫,而且牛人云集,但它们分布在美国的三个地方,当时的通讯又没有现在这么发达,所以想要要合作打造一个全新的计算机+操作系统,难度可想而知。当时参加项目的一个工程师说,这个项目就像是在“同时爬好多颗树”,或者像我们谚语说的,是“鹰搏二兔”。 + +Ken 当时也参加了这个项目,但是正如 Ken 自己的评价,这个项目最后虽然勉强完成了,但“过度设计,过度建造,什么都过度。结果近乎不可用。” + +设计之前想得太多,导致这个项目最后太过复杂,项目投入很大,又让它最后太贵,而两者加在一起,最后导致用户很少。 + +Ken 作为这个项目的参与者,最后却说:“它搞出来的东西我自己都不想用”。 + +其实这个项目立项的初衷本来很好,有强大的技术支持,研发的资金也有保障,但为什么所有这些有利的条件加在一起,仍然做不出一个好产品呢? + +对所有开发人员来说,这都是一个值得思考的问题。我觉得我们想要做出一个好的项目,有一个基本的前提,就是你在做之前,自己先想一想,我们开发的是面向消费者的产品,那如果你现在不是开发者,而是一个消费者,这样的产品,你自己会用么? + +这次不太成功的尝试之后,贝尔实验室退出了Multics 项目。这时Ken 还是想写一个好的操作系统,只是管理层被这次失败伤透了心,不想给任何预算了。 + +换成一般人,缺乏外部条件,领导不支持,可能就此就放弃了。但Ken 没有,他找到了一台已经有些过时闲置的 DEC PDP-7 计算机。你可能想象不到,这台计算机只有 16KB 的内存,16KB是个什么概念,只是现在主流台式机电脑内存的一百万分之一。 + +Ken觉得,既然领导不给预算,那就将就着先用这个吧。 他先是为这个电脑写了一个太空旅行游戏,让用户可以漫游太阳系,探访各个行星。然后,又写了一个磁盘调度算法来控制这个电脑的古怪的磁盘驱动器。 + +下一步,怎么来测试这个算法呢? 需要写一个磁盘 I/O 程序,这样就能往磁盘上读写大量数据。 + +到这儿,离实现一个简单的操作系统只差三个模块了: +一个是用来创建代码的编辑器 +一个是把代码编译为 PDP-7 汇编语言的汇编器 +还有一个能运行命令的环境,用行话叫 “操作系统的外壳” (Shell) + +这个时候,Ken的妻子正好带着一岁大的孩子离开了三星期,他就利用这三周的时间,把上面提到的三个模块都写出来了。 + +三个模块完成后,一个小型的操作系统就做出来了,这就是 Unix 的最初版本。他们最初起 Unix这个名字,也是对 Multics 的一个玩笑,因为 Multic 是多的意思, Uni (Unix?)是单独的意思。 + +对了,除了这个操作系统,Ken也确实发明了一个 B 语言,这个语言后来演化为 C 语言, 成为现代 IT 产业应用最广泛的语言之一,也是后来很多语言发展的源头。 + +后来,随着 Unix 的兴旺发展,热爱 Unix 都有一些共性,比如大家都是都是用命令行,各种参数都记得,喜欢用各种工具的组合等等。在使用这个系统的过程中,大家的共性,就被总结成了一个成文的 Unix 设计哲学。 + +例如:简单就是美。这一点,你比较一下 COBOL 和 C 语言的 Hello World 的程序,就能发现不同。 + +Unix 的另一个设计哲学就是:只做一件事,把它做好。 + +这个特点,在Ken 身上体现得十分明显。 + +Ken曾经说过自己对于计算机为什么这么熟悉,他说自己从小喜欢鼓捣电器,去加州大学伯克利分校读电子工程的时候,因为他已经玩了 10 年的电器,所以很轻松地学完了电子学的课程。 +后来,他迷上了电脑(大型机)。就经常在午夜时分进到学校的机房,一待就是一晚上。他非常享受这样的过程,因为在第二天早上 8 点之前,这就一直是他一个人的计算机。那时的他很快乐,他自己说 “我毫无雄心壮志,是一个没有目标的工作狂”。 我认为,把计算机玩的精通,这个也是非常了不起的雄心壮志。 + +### 总结 +你从 Ken Thompson 的故事中获得了什么呢? +Playful cleverness? + + +### 注解 +这篇文章作者:邹欣 +曾发表于 《湛庐书单课:给技术人的职场突围课》 + +