提交 c3bbf11f 编写于 作者: SoftwareTeacher's avatar SoftwareTeacher

Merge branch 'master' into 'master'

modified:   chapters/1.md

See merge request !18
......@@ -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
## 开源软件开发导论 - 资料
### 黑客文化和黑客的介绍
我们提到了黑客(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?
### 注解
这篇文章作者:邹欣
曾发表于 《湛庐书单课:给技术人的职场突围课》
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册