从NT开发过程中看到的东西

 在这里要推荐下《观止-微软创建NT和未来的夺命狂奔》,非常精彩,讲述了windows NT开发过程中的人和事。这不仅仅是故事书,也可以看做一本项目管理方面的指南,可以看看这么巨大的项目(几百万行代码)所遭遇到的难题和痛楚。我更愿意将这本书当做《人月神话》的故事版,同样是创建划时代的OS,同样是管理众多人参与的大型的项目,也同样遭遇了种种困扰和痛苦,从这个角度也可以看出,人类的痛苦的相通的:)

   单纯从软件构建的角度去看这本书,可以说说我看到的东西,这些是我今天早上走在上班路上的时候想的,咳咳。

1、开发OS是烧钱的事情,NT开发接近5年,每年的花费据说在5000万美刀,那可是在90年代初期,换算成现在更是天文数字。从另一个侧面也说明了linux系统的伟大。开发一个这么烧钱的玩意,如果没有管理层的强力支持,那么不是被砍掉,就是遭遇流产的命运,幸运的是NT团队得到了盖茨的鼎力支持,大概也只有他能这么烧钱了。Dave Culter从DEC辞职的原因也是因为管理层砍掉了他的团队。盖茨另一个做法是不干涉NT团队的开发工作,他只提出目标和期望,然后就偶尔过来看看,不对不知道的东西指手画脚,这点可不容易。

2、每日构建非常重要,NT团队的构建实验室一开始是每周构建,后来做到了每日构建。只有每日构建,持续集成,才能帮你掌控产品质量,及时发现潜在的问题。我们现在的项目使用了hudson,比CC容易配置一点,效果还不错。

3、测试极其重要,专业的测试团队对于大型项目来说尤其重要。除了测试人员之外,开发人员需要做自测,需要对自己check-in的代码负责,如果你签入的代码导致构建失败,那么Dave culter可能冲破墙壁进来,拍着桌子冲你咆哮。对check in必须做严格控制和跟踪,如果在项目的最后冲击阶段,除了showstopper级别的修正代码允许签入之外,其他的修改都不被接受。开发者和测试人员很容易存在对立,检讨自己,我对测试人员也存在偏见和某种程度上的轻视和厌烦,如果从就事论事和都是为一个目标努力的角度来说,测试和开发并不对立,两者是相辅相成,甚至于测试人员更为至关重要。

4、在一个长期而复杂的项目中,如何保持团队成员的士气也是个难事儿。软件开发归根到底是的因素是人,而非工具或者其他,关注人,其实就是在关注你的软件。鼓励士气的常见做法就是设定里程碑,在这个里程碑上发布一个重要版本,让大家看到希望,但是对于OS这样的巨型项目来说,里程碑不是那么容易设定,这从书中项目的不断延期可以看到。另外就是宽松的工作环境和假期,微软的工作环境有目共睹,能做到每个员工独立一个办公室的国内企业还没有吧。国外的开发者似乎很会玩,赛车、滑雪、空手道,其实不是我们不会玩,是我们玩不起,国内的待遇和生活压力让你想玩也玩不起。
   可是就算是再好的物质待遇,其实也换不来美好生活,书中充斥着开发者对家庭和婚姻的困惑和痛苦,为了NT,他们也失去了很多,对工作过度投入的后果就是失去平衡的家庭生活,再次验证上帝是公平的,有得必有失,就看你看重的是什么。

5、开发者的效率差异是惊人的,在《人月神话》里已经说明了这一点,开发者之间的效率差异可以达到惊人的10倍,在NT这样的团队里也再次验证了这一结论。

6、投入越多的人力,并不能带来效率的提升,当NTFS文件系统的进度拖慢的时候,微软的经理们考虑添加人手,但是经过慎重的考虑还是没有加人,因为文件系统是技术活,新人很难马上投入开发,而需要老手的带领和培训,引入了更多的沟通成本和培训成本。

7、优秀的代码无法通过行数来衡量,软件某种程度上还真是魔法的产物。

8、NT的一个教训是,应该及早设定你的性能目标,并在适当时候开始关注并优化系统。NT团队后期的很大部分工作都是在优化系统性能,并缩小尺寸。

9、设定Deadline常常是不靠谱的事情,对软件开发的时间估计也常常是不靠谱的事情,这一点从NT的一次又一次的延期可以看出。延期失望的不仅仅是客户,也会打击你的团队成员,遥遥无期的开发过程容易让人崩溃。

10、NT的开发贯穿了对市场的需求的考虑,有个牛X的产品经理还是相当重要的。当然,没有开发者喜欢添加新功能,特别是在已经完成一个新功能的情况下,以至发展到NT的开发者看到产品经理就不由得拿起球棒击墙的地步:)

   这本书花了我两个晚上看完,还是看故事有趣呀,上面所说只是我的印象,书中还有许多八卦故事老少咸宜,如果有出入,请看原著:) 有空还得重读下。

文章转自庄周梦蝶  ,原文发布时间 2009-08-13

时间: 2024-09-11 10:04:47

从NT开发过程中看到的东西的相关文章

陈榕:操作系统开发过程中遇到的困难及解决方法

[中云网 消息]5月29日,以大力发展并推动北京科技原创能力为宗旨的"2013中国·北京(国际)开源大会"在北京新世纪日航酒店隆重开幕.本次大会由北京市经信委指导,中国软件行业协会主办,中云网承办,并得到了中国云产业联盟.中关村云计算产业联盟.天云趋势等单位的大力支持.大会以"开源中国  原创北京"为主题,通过丰富前瞻性的思想盛宴,力争让北京在世界科技发展新趋势下占据主动地位. 上海科泰华捷科技有限公司董事长陈榕 [中云网 配图] 上海科泰华捷科技有限公司董事长陈榕

快速原型开发模式在实际开发过程中的应用

[摘要]本文以作者的实践开发经验为主线,从理论和实际的角度探讨快速原型开发模式在实践开发中的应用,并从软件开发的各个角度.各个时期剖析快速开发模式的优缺点和应该注意的问题. [关键字]软件工程.开发模式.快速开发.软件开发.原型模式     快速原型开发模式的基本思想是在系统开发的初期,在对用户需求初步了解的基础之上,以快速的方法先构造一个可以工作的系统原型.将这个原型提供给用户使用,听取他们的意见.然后修正原型,补充新的数据.数据结构和应用模型,形成新的原型.经过几次迭代以后,可以达到用户与开

人工智能和大数据的开发过程中需要注意这12点

人工智能是近年来科技发展的重要方向,在大数据时代,对数据采集.挖掘.应用的技术越来越受到瞩目.在人工智能和大数据的开发过程中,有哪些特别需要注意的要点? 人工智能领域的算法大师.华盛顿大学教授Pedro Domingos对此进行了深入思考. 在我们新近翻译的<智能Web算法>(第2版)中,对Pedro Domingos教授的观点进行了高度的概括,提炼出12个注意点,为行业开发实践提供了重要参考: 注意点1:你的数据未必可靠 在实际应用中,有很多各种各样的原因会导致你的数据是不可靠的.因此,当你

把一个普通应用程序变为win2000(NT)中的服务

程序 把一个普通应用程序变为win2000(NT)中的服务 下载相关程序 srvany.exe instsrv.exe http://postboy.myetang.com/files/srvany.exehttp://postboy.myetang.com/files/instsrv.exe 下载上面的两个文件,放在c:\winnt 或别的地方. 打开命令行程序CMD.exe (或命令行窗口). 输入: c:\>instsrv "服务的名称" c:\winnt rvany.ex

基于IBM Rational Build Forge实现敏捷开发过程中的持续构建

在敏捷开发过程中,软件构建周期以及自动化程度直接影响开发的速度和质量.本文结合具体的软件开发项目,描述如何利用 IBM Rational Build Forge 在敏捷开发过程中实现完全自动化的软件构建,产品安装以及单元测试,进行每天持续快速构建,提高开发团队的效率,改进产品和开发质量. 概述 敏捷开发(Agile development)是一种以人为核心.迭代.循序渐进的开发方法,开发周期一般是两星期到四星期.敏捷开发的一大原则是尽早的.持续的交付有价值的软件来使客户满意,交付的间隔时间越短越

iOS开发过程中专门在调试时运行代码的方法

在开发过程中,我们经常会使用NSLog用于跟踪调试,不过在发布的产品可能 并不希望这些调试代码被运行.这里有一个小技巧分享一下. 在编写代码时可以使用如下方式: #ifdef DEBUG< // Debug 模式的代码... #else< // Release 模式的代码... #endif 其中的DEBUG是在Xcode默认的工程中已经定义好的,也可以根据自己的实际情 况添加其他常量定义. 在Xcode中,选择导航区域左侧顶端的根节点,然后选择Project/Build Settings,在

移动-大家在开发过程中如何碰到PM提出的需求明显不合理,怎么解决?

问题描述 大家在开发过程中如何碰到PM提出的需求明显不合理,怎么解决? 对我们做移动开发的应该都碰到过这个问题,产品经理不断改需求,有些需求甚至是明显不合理的,这个问题是怎么解决的?应该如何与产品人员沟通?(好像非移动开发也经常有这样的情况) 大家都来说说是怎么解决这个问题的? 解决方案 我觉得这事没有什么可质疑的. 产品经理毕竟是专业的,对产品的设计也是从用户体验上讲的. 当然,如果产品上的设计到开发这里需要对架构进行大调的话,应该和产品经理商量一个中间方案来. 不排除一些产品经理确实很外行,

hibernate开发过程中的问题

问题描述 hibernate开发过程中的问题 在利用Servlet处理增.删.改.读的功能时,有些函数看不懂,能不能解释一下,尽量详细一点.1. //显示添加页面 protected void initAdd(HttpServletRequest request HttpServletResponse response) throws ServletException IOException { List<Cat> catList = baseDAO.list("" sel

在C和C++开发过程中应用测试驱动开发的理念

测试驱动开发和现在流行敏捷开发的是分不开的,测试驱动开发是敏捷开发的一个强有力工具,可以帮助我们从简单的设计开始,逐步地有保护重构设计直至完善设计过程.测试驱动开发是 Kent 提出的一种新的软件开发流程,现在已广为人知,这种开发方法依赖于极短重复的开发周期,面对开发需求,http://www.aliyun.com/zixun/aggregation/7155.html">开发人员要先开发代码测试用例,这些代码实现的测试用例定义了工程要实现的需求, 然后去开发代码快速测试通过这这些用例,这