观止--微软创建NT的夺命狂奔
周末读了一本小众的书--观止,讲的是windows NT的开发过程。
这个项目历时5年,从1988-1993,是一个典型的软件项目,延期很久,出来的是一个艺术品,奠定了windows的基础。

showstopper是什么意思?
英文意思观看戏剧演出,演到精彩处,观众拍手叫绝,演出被喝彩打断。
在计算机领域,指造成停机的A类故障。

故事主角戴夫.卡特勒(Dave Culter)
1942年生人,目前快80了还在微软编程,宝刀不老。他非科班出身,也非名校毕业,英雄不问出处。在杜邦公司研究化学数据,需要计算机,上了个培训班,然后就在公司编程处理化学数据,不想爱上了编程,进入DEC小型机公司,顺风顺水,1975年编写了著名VAX系统上的操作系统VMS,一战成名。后来为了远离公司政治,在西海岸的西雅图(正是微软总部所在地)成了了研究所,做新一代计算机,后prism项目被公司取消,一气之下离开DEC。正赶上微软在招揽人才,盖茨亲自出马,有了经典对话:
盖茨:你觉得微软的DOS如何
卡特勒:那就是个玩具,不是真正的操作系统
盖茨:好,请你来为微软设计真正的操作系统。
1)管理风格:缺乏耐性、火爆脾气,经常攻击别人,说“我靠压力生存”。幸好有个助手皮亚佐利,脾气随和,善解人意。两人红脸白脸的管理方式相得益彰。
皮亚佐利在1996年卡特勒厌倦管理转技术后,领导了windows2000的开发。
2)家庭:结婚两次,发誓不再跌倒第三次,只有一个女友,不再结婚。长期专注工作。和父母关系差,父亲去世也没有参加葬礼。当然父亲小时候也没有给过他关心,经常酗酒打老婆。
3)匈牙利表示法
微软早期员工西蒙尼(就是自己花钱上太空的那个人)的变量命名法。卡特勒的评价:是我见过的最愚蠢的东西。
4)每行代码都加注释。
5)对优化的看法:总是要把事情做对,让其可靠,然后才顾及性能。一边向前走一边逐渐加入修饰和润色。NT的问题没有哪个是时间无法治愈的。性能不好是新程序的通病。软件历史证明这一点,从IBM的360到UNIX,再到Windows,都是在不成熟状态就发布了,然后逐步演进并赢得广泛认可。
6)对UNIX的看法:是个由一帮博士设计的垃圾操作系统。整个系统背后的设计思想从来没有统一过,而且显露在外面。
7)人数:只想管理内核团队,对图形、网络、测试团队不想管,后来为提高效率,不得不管。最终人数发展到800人,就卸任去做技术了。
8)娱乐:不吃午饭,去打一小时壁球。其他时间全部围绕NT展开。不过里程碑后会放假滑雪。
9)C++:盖茨为图形组引入C++,卡特勒反对,但图形组的人赞同,最终果然拖慢了性能,程序也变大。看来做操作系统的人都不太喜欢c++, linus在写git时有人问他为何不用C++,他回复C++是shit.

比尔.盖茨
1955年生人,富裕家庭。从小在湖畔中学(条件好的私立学校)学习了计算机。1974年在电子杂志上发现了牛郎星个人电脑,与艾伦看到了机会,给这个电脑做了basic程序,微软起步。 同时起步的还有苹果,沃兹尼亚克和乔布斯也看到了个人电脑的机会,不过这个组合更厉害,看不上牛郎星,沃兹直接自己设计了硬件,然后也是加上basic语言,软硬件一人包了,足见其天才。苹果很快崛起。
1979年IBM看着PC机被苹果做的很好,也找了一个边缘部门做PC,这个部门很懒,把核心CPU包给了intel,操作系统还没有着落,盖茨看到了机会,很快在西雅图花5万买了DOS系统,通过老妈关系作为了IBMPC的操作系统,并且只买授权,这个聪明做法使微软八十年代随着PC流行而发了笔大财。
盖茨在90年代可谓所向披靡,IT界头把交椅,可称工业界的拿破仑,也顺利成为首富。2000后,逐步转去做慈善,公司交给了鲍尔默,这家伙差点把公司高破产,幸亏微软底子厚。换上了那亚拉,刚上云计算这波浪潮,才再次崛起,现在发展平稳。

1988DEC部落来到微软
卡特勒不是一个人来的,而是带来了一个团队,包括硬件工程师。他在团队中威信极高,大家愿意追随。
1)进入微软,要求签署竞业协议,即离开微软后1年不得从事类似工作,DEC的人不干,卡特勒直接让HR删除了这一条。
2)微软不做硬件,但卡特勒坚持必须带上DEC硬件的人,盖茨不得不妥协,招收硬件人员。

技术思路整理
不急于开工,先熟悉PC机,同时整理技术思路。整理需求。然后亲自操刀,写出顶层抽象代码,然后把代码分成几十个组,每组代码附上详细要求。然后再分工。 这个办法挺好。

NT几大模块
1)内核:卡特勒的DEC部落主力完成
2)界面部分:微软图形方面专家完成,这部分管理比较松散
3)网络部分:也是一个重要特色,当时novel的netware在局域网上用的比较多,记得同轴电缆组网非常流行,上面运行foxbase数据库。微软这方面比较差,所以增加网络功能非常迫切
4)安全:多用户鉴权是NT引入的。

内存问题
开始预测需要8M内存,盖茨认为太高(记得他说个一句话,好像是计算机有1M内存就足够了)。说明即使是行业领袖,对未来理解也透彻,现在手机都8G内存。最终1993年,NT最少需要16M内存,盖茨不得不妥协。

优化问题
不过早优化,卡特勒的哲学是先跑起来,结构合理。然后再优化。不过NT最后几个月才优化,感觉还是晚了一些。
优化的关键人物,传奇程序员Michael Abrash,汇编专家,图形界面专家。我读过他的黑皮书,真是一位高手。现在研究VR。被同事誉为:地球表面无可争议自强大的intel程序员。
卡特勒也以身作则,亲自写了一部分汇编代码,给优化工作做出了榜样。Michael Abrash看了卡特勒的代码后说:我遇到的最好的汇编代码编写高手。
NTFS文件系统慢的问题:NTFS比DOS好的是有文件备份,不宜损坏,DOS文件损坏我就遇到过,一个好玩的游戏,因为电脑断电,文件被破坏,不能用了。我记得诺顿公司当时有个修复工具,但有时也休不了。言归正传,NTFS做了一个定时备份的机制,但写程序的家伙为了安全,备份时不能读写,这样正常文件操作会很慢,这个问题定位了很久。靠其他团队的同事发现了问题。

微内核和宏内核
1)nt采用的是微内核,其他应用和内容采用client-server模式,这种模式最大的麻烦是互相调用多,性能是个问题,盖茨多次担心此问题,卡特勒很坚持先完成功能才优化,并反复说明肯定可以优化到满意。最终效果看,保持了client-server结构,性能比dos 稍微差点,达到了要求。
2)微内核的学院派教授Rick Rashid,也是著名的Mach的作者,微软有钱给他弄了个研究院,也来给nt提意见,内存占用方面提出了分页技术。卡特勒对这种意见很反感,但最终在内核中加入了分页技术,减少了内存占用。

重视API
也就是微软最重要的win32 API,NT兼容windows,把API全部移植过来,连鲍尔默都参加API检查会议。

几个很难定位的BUG
1)一个写硬盘问题
intel出的RISC芯片i860, 卡特勒在上面编码,NT存盘功能总是搞不定,代码反复检查也无济于事,后来换了新的硬盘驱动器,也不行。换了电缆仍旧不行。最终给硬件工程师索特聊到这个事情,索特想起手册里面的内容,查阅发现手册里藏着一个不起眼的线索,索特忘记安装电路的一个次要零件。卡特勒代码一致是正确的。 i860最终因为问题太多被淘汰。
2)一个网络问题
某款康柏电脑,网元发送数据,总是每页开头多了一个字符串0x3fffffff fffff7。硬件反馈没有问题,让软件这边查。最后都差不错问题,两边打赌谁输了请吃饭。几周后,adaptec网卡的一个工程师发来勘误表,他们公司的设备在康柏电脑上,用来控制输入输出的部分有缺陷,与问题刚好一样。这样格拉斯很愤怒。以为他多次与adaptecg工程师沟通,有一次甚至十分详细的描述了这个问题,而对方很震惊的告诉他从来没有听说过。
所以说外部产品有时不靠谱。
3)发布前的最后一个观止BUG
打印图文混合的文档,pagemaker程序就崩溃了,耗尽了40M内存。分成单页可以打印。也就是说能规避。
因为临近发布,大家想遗留这个故障。但测试猪肝唐尼想继续跟踪,几天没有进展。为啥没有提前发现?唐尼回忆起这个测试的负责人刚离职,去开洗衣店了,所以没有好好测试。以后离职交接要注意啊。
晚上找到程序员定位,最终发现是两个bug,图形程序分配内存不对,pagemaker计算字体内存也不对。当时有点纠结,改图形程序是否会引起其他应用程序问题?最终还是改了。又半夜找人来测试。pagemaker是第三方软件,就不太好弄了,半夜打电话果然没有找打人。开始想退给第三方不管了,后来觉得还是做一下兼容吧,于是NT针对pagemaker错误做了兼容,问题圆满结束。赶上了压盘发布。有点惊心动魄。

吃自己的狗粮
最初大家用OS2上编码,测试用NT,1991年2月开始卡特勒让用NT,吃狗粮不可避免遇到NT的缺陷,使程序员有紧迫感去提高伙食水平,尽快修复错误的代码,从开始就编写耐用的程序。
三个阶段:首先不包括图形的NT,然后加上图形,最后是网络。
人力储备:需要一个万金油人才,什么都懂。拉科夫斯基就是这种人才,当出来问题,他会毫不犹豫地寻找原因,然后拉人解决。

死亡行军
采用每日构造,91年就开始每日构造,确实很早。微软在软件项目管理方面,经验丰富。
里程碑临近时,每天举行会议,包括周六和周日。

收尾
最后阶段,人心浮动,卡特勒让大家做好收尾,并说以后回忆这段经历,肯定是人生的成就。记住这美好的旧日时光。
这让我想起了高考。

花絮-糟糕的IBM
IBM那时已经很官僚,戴蒙得回忆的一个事情:OS2程序崩溃了,IBM程序员对着屏幕研究了一会儿说:喔,好严重的问题,还好不是出在我的代码上。然后他重启电脑继续工作,甚至从来没有报告这个问题。
怪不得90年代初IBM差点完蛋,最后不得不请卖饼干的郭士特纳来拯救,谁说大象不会跳舞。跳到现在又不太行了。老巴都看错了,买了IBM股票,最终以亏损卖出(待查)

观止--微软创建NT的夺命狂奔相关推荐

  1. 《观止-微软创建NT和未来的夺命狂奔》 语录摘抄

    本文将读过的<观止-微软创建NT和未来的夺命狂奔>这本书中一些觉得经典的语句摘抄下来,供以后借鉴: 经典摘要 软件不仅是智慧的结晶,也是信仰.尊严和魅力的代名词. 好的技术不一定都能换成钱 ...

  2. 揭示微软鲜为人知的秘密:观止--微软创建NT和未来的夺命狂奔 (Show Stopper!中文版)...

    观止--微软创建NT和未来的夺命狂奔 (Show Stopper!中文版)(揭示微软鲜为人知的秘密) 市场价 :¥42.00 会员价 : ¥31.50(75折) 样章试读及网上购买:http://ww ...

  3. 不得不推荐的一本好书《观止》

    昨天收到了华章寄来的新书<观止:微软创建NT和未来的夺命狂奔>,其实这本已经算不上是新书了,15年前英文版已经上市,而在15年之后终于有机会看到中文版.本来对这样一本书我是没有多大兴趣的, ...

  4. [读书笔记]读<<观止>>有感

    8月中旬在豆瓣上有一本书吸引了我,这本书便是<<观止> > ,英文名<<ShowStopper>> . 这本书讲述的是微软在八十年代末九十年代初设计和开 ...

  5. 不能错过的好书—《观止》NT当年那点事儿

    最近事情比较多,难得静下来看会儿书,也好久没有特别关注新书市场的情况了!那天第一眼看到这本书的时候,最先是被这个名字吓了一跳,过了一会儿才反应过来,原来这是<Show Stopper!>的 ...

  6. 谁能成为“代码勇士”(3)——《观止》

    图书内容: " 微软创建Windows NT 这个计算机技术领域惊人突破背后的故事,揭示了成功创新的艰难和痛苦.集中表现了卡特勒的反复无常.激励和鞭策团队的能力,色彩鲜明地描述了这个巨大企业 ...

  7. 谁能成为“代码勇士”(4)——《观止》

    图书内容: " 微软创建Windows NT 这个计算机技术领域惊人突破背后的故事,揭示了成功创新的艰难和痛苦.集中表现了卡特勒的反复无常.激励和鞭策团队的能力,色彩鲜明地描述了这个巨大企业 ...

  8. VC 创建NT服务程序

    VC 创建NT服务程序 #include "Windows.h" #include "Winsvc.h" #include "time.h" ...

  9. 几何学观止(代数几何部分)

    上承这个页面,实际上寒假就已经完成了,不过不在学校没法方便地引用文献,所以现在再发. 几何学观止-代数几何部分(20190204).zip 博客园现在不支持pdf直接上传了,所以打包成压缩包. PS: ...

最新文章

  1. python怎么使用训练好的模型设计_tensorflow训练好的模型怎么调用?
  2. 油价新年首涨:“五连跌”终结 一箱油多花4元
  3. 程序员应该如何自我驱动,迅速获得成长?
  4. ARM GIC简介与Linux中断处理分析
  5. IBASE Read buffer invalidate when locked
  6. 容器化分布式日志组件ExceptionLess的Angular前端UI
  7. 设计灵感|简约复古风格海报设计这样玩
  8. 处理接口超时_开发中那些事儿:为啥update会超时呢?
  9. adbe Air/flash swf中不能正常显示系统字体问题的解决方案
  10. 基于IDEA使用Spark API开放Spark程序(1)
  11. 二阶无源低通滤波器幅频特性曲线_一文看懂二阶lc低通滤波器的设计及原理
  12. 如何使用SQL判断身份证号码第18位是否符合规则
  13. LTE学习笔记五:LTE两种帧结构
  14. javaScript实现简单网页倒计时代码
  15. 帝国CMS采集帝国模板程序通用
  16. 【Pytorch】基于卷积神经网络实现的面部表情识别
  17. pages文件夹 AddCartSuccess Center Detail Home Login Pay PaySuccess
  18. 串口TXD和RXD的线序导致不能通信的问题
  19. 计算机测控技术论文,计算机测控技术论文(2)
  20. java基础语法入门到类型转换问题,运算符,数据输入,数组,方法概述,Debug模式,以及10个小案例的详细介绍。

热门文章

  1. Android手机静态ip地址网关,安卓手机Android 4.0系统静态ip设置方法【详解】
  2. linux pcm和alsa 区别,linux alsa pcm(此pcm非硬件pcm接口)
  3. vue实战之在线翻译项目
  4. BAT云平台之争:百度领先,阿里发力,腾讯落后
  5. 【Flutter】入门07-Row、Column与其主轴、交叉轴
  6. 实现一个信息量的计算公式
  7. 计算机操作系统原理复习笔记——考试版
  8. Gradle排除依赖模块的某个类
  9. 关于谢灵抄袭案媒体采访的声明
  10. 20155305乔磊第三次随笔