把两本书对照来读,发现很多有意思的地方, 在这里开个帖子讨论,欢迎提问和点评。
《Unix 传奇》 https://book.douban.com/subject/35292726/
《观止 微软创建NT和未来的夺命狂奔 》https://book.douban.com/subject/3699395/
8. Unix 哲学 https://zh.wikipedia.org/wiki/Unix%E5%93%B2%E5%AD%A6
如何用Shell 命令组合起来完成一个复杂的任务,请看例子: (4条消息) 如何用 awk sed 命令统计一个 Unix 系统中文件大小的分布情况?-编程语言-CSDN问答
感谢 Unix 的发明者和后来的维护者,布道者, 让我们可以使用 Unix,Linux,MacOS,iOS,还有很多其他的分支... ... 也影响了几代程序员...
Unix 的下一代是什么,它也很成功么? 一帮证明过自己的科学家来设计下一代的 OS,为何几乎没有人听说过呢? 请看 Plan9 的故事: Plan-9效应:为什么东西不坏就不要去修它_ IT技术精华 (taocms.org)
NT 的下一代是什么,它也很成功么?请看 Midori 的故事:如何评价 Midori(Operating System)? - 知乎 (zhihu.com)
4. 典型程序员的特点是什么?
Unix 传奇:从书上的描述看, 这些人都是:友善,有合作精神,追求卓越。
Unix 创立者:对自己严格要求,经常鼓励别的同事(能在贝尔实验室工作的人非常聪明, 可能鼓励就足够了)
Unix 创立者们开会:几乎没有正式的会议,就是聊天,邮件,而且没有什么大的冲突。
NT: 作者这样描述 David Cluter,并说这是普遍程序员的特点:
single-minded (专注), obsessive (执着,一根筋) and competitive (竞争性).
David 对自己严格要求, 也用同样的标准要求所有团队成员。 他这样评价自己:
“I thrive on stress”
David 的团队开会: 前十五分钟平静地讨论会议议程,中间充满了有敌意的大嗓门,最后大家居然能微笑着走出会议室。
1. 首先是创始人的信息,他们都是 1942 年前后生人,但是家庭环境和个人成长经历很不一样:
Unix:
Dennis Ritchie (1941) 老爸是贝尔实验室的科学家,他获得哈佛博士,1966年 进入贝尔实验室实习随后成为正式员工。
Brian Kernighan (1942) 多伦多大学学士,普林斯顿博士,1967 进入贝尔实验室实习随后成为正式员工。大学时开始编程 (COBOL,FORTRAN) 但是不得其法。
Kenneth Thompson (1943) UC 伯克利硕士, 1966年进入贝尔实验室。
NT:
David Cutler (1942) 密歇根州 Olivet 文理学院的学士
贫苦出身,和父亲(汽车厂的清洁工)缺少交流,聪明并且各种体育项目都是明星。靠体育奖学金上了大学,但是受伤中断体育生涯。1965年毕业后拒绝了 GM 的程序员 offer (那时候程序员职业名声不好),而进入杜邦公司。 他开始并不喜欢计算机编程,由于工作的原因不得不学,被触动后决定要成为强者,半夜去学习,成功地在 IBM 大型机上实现实时系统处理化学数据。
2. 他们学习编程都不是一学就精通。 但是都喜欢熬夜折腾。
Ken Thompson:午夜之后会用自己的钥匙去开机房,在大型机上折腾直到第二天早上 8 点。 "我很快乐,毫无雄心壮志,是一个没有目标的工作狂“
David Culter:半夜去上机,犯各种错误,然后从错误中学习。
关于折腾, 我们教授(女)曾经说,当年上机时间非常宝贵,女生通常把算法考虑非常仔细,把代码仔细地打在卡片上,上机一次运行就成功,于是高高兴兴地下机了,其实对具体的电脑了解不多。 男生通常很自信,但是程序经常不对,在机器上折腾很多次。 后来,女生都当了老师,男生大多去做实际开发工作了。
我在Unix 系统上也喜欢折腾, 经常把机器搞崩溃,半夜重装系统。 :)
3. 编程的能力
Ken Thompson: 开发了国际象棋程序 Belle,是第一个拿到国际象棋大师称号的程序。 他在一台快要过时的PDP-7 (8K * 18位 内存)写了一个游戏,然后写了简单的文件系统。 正好他妻子带娃走亲戚,不在家三周时间,他用这三周时间写出操作系统的的其他模块。
David Culter: 他的同事评价他的编程能力 - 他处理困难的问题和处理简单问题一样快。
6. 和先行者 OS 的关系
Unix 的先行者叫 Multics, 是GE,MIT,Bell Lab 等多方合作的项目,经历了典型的过度设计和拖延,最后Bell Lab 退出了合作。 然后两个程序员 (Ken,Dennis) 自己做出了简单的早期的 Unix , 一个 Minimal Viable Product, 足够好到能给同事们用,就行了。
NT 的先行者是 VMS,是 DEC 公司的还算成功的小型机的操作系统。 也是 David Culter 领导开发的。 David 在离开 DEC 公司前做的一个项目 Prism 失败了,被公司高层砍掉,他在项目解散会上流下了热泪... 随后加入了微软, 他想用 NT 证明什么呢?
7. 项目的难度
Unix: 是几个非常聪明的计算机科学家和工程师写给自己用的简单操作系统。
NT:是一个商业公司工程团队写给商业用户的操作系统。要支持 DOS,OS/2, Windows 应用程序。 要有现代化的操作系统内核,网络功能,应用程序支持,图形界面。
5. 程序员和领导的关系
Unix:贝尔实验室的行政领导通常不管程序员在干什么。 他们的管理方法是:找到优秀的员工,把新员工介绍给优秀的老员工,然后让大家自己寻找项目和合作者。
对于那些长年做一件事情(还没有成果)的人,管理层会保持耐心,以待长远。
不同部门的领导在互相评价兄弟团队的员工很少说:“我的人比你的人强”, 而更加会说 “别忘了你的人还做了一件好事”。
NT:
David Culter 在 DEC 公司的时候, 他的领导 Gordon Bell 给了他很大的自由度,并保护他不受其他人的打扰。 在Gordon 离职后,David 把团队搬到西雅图, 因为那时候波士顿到西雅图没有直飞的航班, 公司大领导很少来视察,他获得了很多自由。
加入微软后, 盖茨和鲍尔默都给了David Culter 很多空间, 但是也派了微软原生的程序员去合作,希望双方能磨合好。
微软公司的绩效评价经历了很多阶段,从末位淘汰到不同团队之间恶意争夺排名(尽管不同的工程师做的事情不具备可比性)。
都是历史上的传奇人物和传奇产品。