内容简介 · · · · · ·
作者为人们管理复杂项目提供了颇具洞察力的见解,既有很多发人深省的观点,也有大量的软件工程实践。书中的内容来自布鲁克斯在IBM公司System 360家族和OS 360中的项目管理经验。初版的20年后,布鲁克斯重新审视了他原先的观点,增加了一些新的想法和建议。新增加的章节包括:原著中一些核心观点的精华;在经过了一个时代以后,Brooks博士对原先观点新的认识;1986年的经典文章《没有银弹》;对1986年所下论断(在10年内不会出现银弹)现在的认识。
作者简介 · · · · · ·
弗雷德里克·布鲁克斯(Frederick P. Brooks, Jr.)是北卡罗莱纳大学Kenan-Flagler商学院的计算机科学教授。他曾荣获图灵奖,美国计算机协会(ACM)称赞他“对计算机体系结构、操作系统和软件工程做出了里程碑式的贡献。”
布鲁克斯被认为是IBM 360系统之父,他曾担任360系统的项目经理、360操作系统项目设计阶段的经理。因在这两个项目中的杰出贡献,布鲁克斯和Bob Evans、Erich Bloch在1985年获得美国国家技术奖(National Medal of Technology)。布鲁克斯早期还曾担任IBM公司Stretch和Harvest计算机的体系结构设计师。布鲁克斯创立了北卡罗莱纳大学的计算机科学系,在1964-1984年期间担任系主任。他还曾任职于美国国家科技局和国防科学技术委员会。他目前的教学和研究方向... (展开全部) 弗雷德里克·布鲁克斯(Frederick P. Brooks, Jr.)是北卡罗莱纳大学Kenan-Flagler商学院的计算机科学教授。他曾荣获图灵奖,美国计算机协会(ACM)称赞他“对计算机体系结构、操作系统和软件工程做出了里程碑式的贡献。”
布鲁克斯被认为是IBM 360系统之父,他曾担任360系统的项目经理、360操作系统项目设计阶段的经理。因在这两个项目中的杰出贡献,布鲁克斯和Bob Evans、Erich Bloch在1985年获得美国国家技术奖(National Medal of Technology)。布鲁克斯早期还曾担任IBM公司Stretch和Harvest计算机的体系结构设计师。布鲁克斯创立了北卡罗莱纳大学的计算机科学系,在1964-1984年期间担任系主任。他还曾任职于美国国家科技局和国防科学技术委员会。他目前的教学和研究方向是计算机体系结构、分子模型绘图和虚拟环境设计。
UMLChina翻译组的成员汪颖(Adams Wang)翻译了这本《人月神话》。UMLChina是中文世界访问量最大的软件工程网站。译者汪颖毕业于华中理工大学,从事软件开发以及流程改进方面的工作。
布鲁克斯被认为是IBM 360系统之父,他曾担任360系统的项目经理、360操作系统项目设计阶段的经理。因在这两个项目中的杰出贡献,布鲁克斯和Bob Evans、Erich Bloch在1985年获得美国国家技术奖(National Medal of Technology)。布鲁克斯早期还曾担任IBM公司Stretch和Harvest计算机的体系结构设计师。布鲁克斯创立了北卡罗莱纳大学的计算机科学系,在1964-1984年期间担任系主任。他还曾任职于美国国家科技局和国防科学技术委员会。他目前的教学和研究方向... (展开全部) 弗雷德里克·布鲁克斯(Frederick P. Brooks, Jr.)是北卡罗莱纳大学Kenan-Flagler商学院的计算机科学教授。他曾荣获图灵奖,美国计算机协会(ACM)称赞他“对计算机体系结构、操作系统和软件工程做出了里程碑式的贡献。”
布鲁克斯被认为是IBM 360系统之父,他曾担任360系统的项目经理、360操作系统项目设计阶段的经理。因在这两个项目中的杰出贡献,布鲁克斯和Bob Evans、Erich Bloch在1985年获得美国国家技术奖(National Medal of Technology)。布鲁克斯早期还曾担任IBM公司Stretch和Harvest计算机的体系结构设计师。布鲁克斯创立了北卡罗莱纳大学的计算机科学系,在1964-1984年期间担任系主任。他还曾任职于美国国家科技局和国防科学技术委员会。他目前的教学和研究方向是计算机体系结构、分子模型绘图和虚拟环境设计。
UMLChina翻译组的成员汪颖(Adams Wang)翻译了这本《人月神话》。UMLChina是中文世界访问量最大的软件工程网站。译者汪颖毕业于华中理工大学,从事软件开发以及流程改进方面的工作。
豆瓣成员常用的标签(共294个) · · · · · ·
喜欢读"人月神话"的人也喜欢 · · · · · ·
按有用程度 按页码先后 最新笔记
-
第1页
逆鳞 (考拉的一生也是很壮绝的!)
“神话和传说中的魔术在我们的时代已变成了现实。在键盘上键入正确的咒语,显示出前所未有的或是已经存在的事物。 编程非常有趣,在于它不仅满足了我们内心深处进行创造的渴望,而且还愉悦了每个人内在的情感。“ 编程为什么有趣?作为回报,它的从业者期望得到什么样的快乐? 首先是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到愉快一样,成年人喜欢创建事物,特别是自己进行设计。.. (更多)“神话和传说中的魔术在我们的时代已变成了现实。在键盘上键入正确的咒语,显示出前所未有的或是已经存在的事物。 编程非常有趣,在于它不仅满足了我们内心深处进行创造的渴望,而且还愉悦了每个人内在的情感。“
(收起)编程为什么有趣?作为回报,它的从业者期望得到什么样的快乐? 首先是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到愉快一样,成年人喜欢创建事物,特别是自己进行设计。我想这种快乐是上帝创造世界的折射,一种呈现在每片独特、崭新的树叶和雪花上的喜悦。 其次,快乐来自于开发对其他人有用的东西。内心深处,我们期望其他人使用我们的劳动成果,并能对他们有所帮助。从这个方面,这同小孩用粘土为“爸爸办公室”捏制铅笔盒没有本质的区别。 第三是整个过程体现出魔术般的力量——将相互啮合的零部件组装在一起,看到它们精妙地运行,得到预先所希望的结果。比起弹珠游戏或点唱机所具有的迷人魅力,程序化的计算机毫不逊色。 第四是学习的乐趣,来自于这项工作的非重复特性。人们所面临的问题,在某个或其它方面总有些不同。因而解决问题的人可以从中学习新的事物:有时是实践上的,有时是理论上的,或者兼而有之。 最后,乐趣还来自于工作在如此易于驾驭的介质上。程序员,就像诗人一样,几乎仅仅工作在单纯的思考中。程序员凭空地运用自己的想象,来建造自己的“城堡”。很少有这样的介质——创造的方式如此得灵活,如此得易于精炼和重建,如此得容易实现概念上的设想。(不过我们将会看到,容易驾驭的特性也有它自己的问题) 然而程序毕竟同诗歌不同,它是实实在在的东西;可以移动和运行,能独立产生可见的输出;能打印结果,绘制图形,发出声音,移动支架。神话和传说中的魔术在我们的时代已变成了现实。在键盘上键入正确的咒语,屏幕会活动、变幻,显示出前所未有的或是已经存在的事物。 编程非常有趣,在于它不仅满足了我们内心深处进行创造的渴望,而且还愉悦了每个人内在的情感。
2011-06-30 01:56:58 2人收藏 回应
-
第1页
在众多软件项目中,缺乏合理的时间进度是造成项目滞后的最主要原因,它比其他所有因素加起来的影响还大。导致这种普遍性灾难的原因是什么呢? 首先,我们对估算技术缺乏有效的研究,更加严肃地说,它反映了一种悄无声息,但并不真实的假设——一切都将运作良好。 第二,我们采用的估算技术隐含地假设人和月可以互换,错误地将进度与工作量相互混淆。 第三,由于对自己的估算缺乏信心,软件经理通常不会有耐.. (更多)在众多软件项目中,缺乏合理的时间进度是造成项目滞后的最主要原因,它比其他所有因素加起来的影响还大。导致这种普遍性灾难的原因是什么呢? 首先,我们对估算技术缺乏有效的研究,更加严肃地说,它反映了一种悄无声息,但并不真实的假设——一切都将运作良好。 第二,我们采用的估算技术隐含地假设人和月可以互换,错误地将进度与工作量相互混淆。 第三,由于对自己的估算缺乏信心,软件经理通常不会有耐心持续地进行估算这项工作。 第四,对进度缺少跟踪和监督。其他工程领域中,经过验证的跟踪技术和常规监督程序,在软件工程中常常被认为是无谓的举动。 第五,当意识到进度的偏移时,下意识(以及传统)的反应是增加人力。这就像使用汽油灭火一样,只会使事情更糟。越来越大的火势需要更多的汽油,从而进入了一场注定会导致灾难的循环。 用人月作为衡量一项工作的规模是一个危险和带有欺骗性的神话。它暗示着人员数量和时间是可以相互替换的。 人数和时间的互换仅仅适用于以下情况:某个任务可以分解给参与人员,并且他们之间不需要相互的交流(图2.1)。这在割小麦或收获棉花的工作中是可行的;而在系统编程中近乎不可能。 对于软件任务的进度安排,以下是我使用了很多年的经验法则: 1/3计划 1/6编码 1/4构件测试和早期系统测试 1/4系统测试,所有的构件已完成 简单、武断地重复一下Brooks法则: 向进度落后的项目中增加人手,只会使进度更加落后。(Adding manpower to a late software project makes it later) 概念的完整性要求设计必须由一个人,或者非常少数互有默契的人员来实现。 而进度压力却要求很多人员来开发系统。 对于非常大型的项目,将设计方法、体系结构方面的工作与具体实现相分离是获得概念完整性的强有力方法。 如果要得到系统概念上的完整性,那么必须控制这些概念。这实际上是一种无需任何歉意的贵族专制统治。 “没有规矩,不成方圆。巴赫曾被要求每周创作一篇形式严格的歌剧,但这似乎并没有被压制他的创造性。 在开发第一个系统时,结构师倾向于精炼和简洁。他知道自己对正在进行的任务不够了解,所以他会谨慎仔细地工作。 第二个系统是设计师们所设计的最危险的系统。而当他着手第三个或第四个系统时,先前的经验会相互验证,得到此类系统通用特性的判断,而且系统之间的差异会帮助他识别出经验中不够通用的部分。 一种普遍倾向是过分地设计第二个系统,向系统添加很多修饰功能和想法,它们曾在第一个系统中被小心谨慎地推迟了。 一句古老的格言警告说:“决不要携带两个时钟出海,带一个或三个。”同样的原则也适用于形式化和记叙性定义。如果同时具有两种方式,则必须以一种作为标准,另一种作为辅助描述,并照此明确地进行划分。 随着实现的推进,无论规格说明已经多么精确,还是会出现无数结构理解和解释方面的问题。显然有很多问题需要文字澄清和解释,还有一些仅仅是因为理解不当。 显然,对于存有疑问的实现人员,应鼓励他们打电话询问相应的结构师。 一种有用的机制是由结构师保存电话日志。日志中,他记录了每一个问题和相应的回答。每周,对若干结构师的日志进行合并,重新整理,并发布给用户和实现人员。这种机制很不正式,但非常快捷和易于理解。 卡内基-梅隆大学的D.L.Parnas提出了更彻底的解决方法1。他认为,编程人员仅了解自己负责的部分,而不是整个系统的开发细节时,工作效率最高。这种方法的先决条件是精确和完整地定义所有接口。 如果项目有n个工作人员,则有(n2 - n)/ 2个相互交流的接口,有将近2n个必须合作的潜在团队。团队组织的目的是减少不必要交流和合作的数量,因此良好的团队组织是解决上述交流问题的关键措施。 减少交流的方法是人力划分(division of labor)和限定职责范围(specialization of function)。当使用人力划分和职责限定时,树状管理结构所映出对详细交流的需要会相应减少。 有一些技巧。例如,产品责任人可以通过一些微妙状态特征暗示来(如,办公室的大小、地毯、装修、复印机等等)体现技术主管的威信,尽管决策权力的源泉来自管理。 巴比伦塔可能是第一个工程上的彻底失败,但它不是最后一个。交流和交流的结果——组织,是成功的关键。交流和组织的技能需要管理者仔细考虑,相关经验的积累和能力的提高同软件技术本身一样重要。 生产率会根据任务本身复杂度和困难程度表现出显著差异。在复杂程度估计这片“沼泽”上的指导原则是:编译器的复杂度是批处理程序的三倍,操作系统复杂度是编译器的三倍8。 项目经理可以做两件事来帮助他的团队取得良好的空间-时间折衷。一是确保他们在编程技能上得到培训,而不仅仅是依赖他们自己掌握的知识和先前的经验。 另外一种方法是认识到编程需要技术积累,需要开发很多公共单元构件。每个项目要有能用于队列、搜索和排序的例程或者宏库。对于每项功能,库至少应该有两个程序实现:运行速度较快和短小精炼的。上述的公共库开发是一件重要的实现工作,它可以与系统设计工作并行进行。 Cosgrove很有洞察力地指出,开发人员交付的是用户满意程度,而不仅仅是实际的产品。 Cosgrove主张把所有计划、里程碑、日程安排都当作是尝试性的,以方便进行变化。这似乎有些走极端——现在软件编程小组失败的主要原因是管理控制得太少,而不是太多。 不过,他提出了一种卓越的见解。他观察到不愿意为设计书写文档的原因,不仅仅是由于惰性或者时间压力。相反,设计人员通常不愿意提交尝试性的设计决策,再为它们进行辩解。 在大型的项目中,项目经理需要有两个和三个顶级程序员作为技术轻骑兵,当工作繁忙最密集的时候,他们能急驰飞奔,解决各种问题。 麻省理工学院核科学实验室的Betty Campbell指出特定版本的软件发布生命期中一个有趣的循环。如图11.2所示。起初,上一个版本中被发现和修复的bug,在新的版本中仍会出现。新版本中的新功能会产生新的bug。解决了这些问题之后,程序会正常运行几个月。接着,错误率会重新攀升。Campbell认为这是因为用户的使用到达了新的熟练水平,他们开始运用新的功能。这种高强度的考验查出了新功能中很多不易察觉的问题。5 程序维护中的一个基本问题是——缺陷修复总会以(20-50)%的机率引入新的bug。所以整个过程是前进两步,后退一步。 Lehman和Belady研究了大型操作系统的一系列发布版本的历史6。他们发现模块数量随版本号的增加呈线性增长,但是受到影响的模块以版本号指数的级别增长。所有修改都倾向于破坏系统的架构,增加了系统的混乱程度。用在修复原有设计上瑕疵的工作量越来越少,而早期维护活动本身的漏洞所引起修复工作越来越多。随着时间的推移,系统变得越来越无序,修复工作迟早会失去根基。每一步前进都伴随着一步后退。尽管理论上系统一直可用,但实际上,整个系统已经面目全非,无法再成为下一步进展的基础。而且,机器在变化,配置在变化,用户的需求在变化,所以现实系统不可能永远可用。崭新的、基于原有系统的重新设计是完全必要的。 系统软件开发是减少混乱度(减少熵)的过程,所以它本身是处于亚稳态的。软件维护是提高混乱度(增加熵)的过程,即使是最熟练的软件维护工作,也只是放缓了系统退化到非稳态的进程。 每个骨干人员都仔细地保管自己工作生涯中搜集的一套工具集,这些工具成为个人技能的直观证明。 这种方法对软件项目来说是愚蠢的。首先,项目的关键问题是沟通,个性化的工具妨碍——而不是促进沟通。其次,当机器和语言发生变化时,技术也会随之变化,所有工具的生命周期是很短的。毫无疑问,开发和维护公共的通用编程工具的效率更高。 不过,仅有通用工具是不够的。专业需要和个人偏好同样需要很多专业工具。 因此,项目经理应该制订一套策略,并为通用工具的开发分配资源。 好的自顶向下设计从几个方面避免了bug。首先,清晰的结构和表达方式更容易对需求和模块功能进行精确的描述。其次,模块分割和模块独立性避免了系统级的bug。另外,细节的隐藏使结构上的缺陷更加容易识别。第四,设计在每个精化步骤的层次上是可以测试的,所以测试可以尽早开始,并且每个步骤的重点可以放在合适的级别上。 一些糟糕的系统往往就是试图挽救一个基础很差的设计,而对它添加了很多表面装饰般的补丁。 一次添加一个构件。在添加了新构件之后,用它们来测试子系统。因为那些原来可以在子系统上成功运行的用例,必须在现有系统上重新运行,对系统进行回归测试。 对于大型开发项目中的估计行为,政府的承包商做了两项有趣的研究。研究结果显示: 1. 如果在某项活动开始之前就着手估计,并且每两周进行一次仔细的修订。这样,随着开始时间的临近,无论最后情况会变得如何的糟糕,它都不会有太大的变化。 2. 活动期间,对时间长短的过高估计,会随着活动的进行持续下降。 3. 过低估计在活动中不会有太大的变化,一直到计划的结束日期之前大约三周左右。 有两种掀开毯子把污垢展现在老板面前的方法,它们必须都被采用。一种是减少角色冲突和鼓励状态共享,另一种是猛地拉开地毯。 减少角色的冲突。首先老板必须区别行动信息和状态信息。他必须规范自己,不对项目经理可以解决的问题做出反应,并且决不在检查状态报告的时候做安排。当项目经理了解到老板收到项目报告之后不会惊慌,或者不会越俎代庖时,他就逐渐会提交真实的评估结果。 猛地拉开地毯。不论协作与否,拥有能了解状态真相的评审机制是必要的。PERT图以及频繁的里程碑是这种评审的基础。大型项目中,可能需要每周对某些部分进行评审,大约一个月左右进行整体评审。 每一份发布的程序拷贝应该包括一些可以例行运行的小测试用例,为用户提供信心——他拥有了一份可信赖的拷贝,并且正确地安装到了机器上。 Parnas澄清了术语上的混乱: 现在有两种差异非常大的AI定义被广泛使用。AI-1:使用计算机来解决以前只能通过人类智慧解决的问题。AI-2:使用启发式和基于规则的特定编程技术。在这种方法中,对人类专家进行研究,判断他们解决方法的启发性思维或者经验法则。 (收起)2011-05-15 13:16:11 回应
-
第43页
言若一不小心 (主动生活)
整个系统必须具备概念上的完整性,要有一个系统结构师从上至下地进行所有的设计,要使工作易于管理,必须清晰地划分体系结构设计和实现之间的界限,系统结构师必须一丝不苟地专注于体系结构。 概念的异质性、原则及主要功能上的整体设计至关重要,但是设计与具体实现之间会有差距,这个差距如何解决?尤其是遇到可A可B的情况,是严格按照设计还是遵从于资源及其他限制? (更多)
概念的异质性、原则及主要功能上的整体设计至关重要,但是设计与具体实现之间会有差距,这个差距如何解决?尤其是遇到可A可B的情况,是严格按照设计还是遵从于资源及其他限制? (收起)整个系统必须具备概念上的完整性,要有一个系统结构师从上至下地进行所有的设计,要使工作易于管理,必须清晰地划分体系结构设计和实现之间的界限,系统结构师必须一丝不苟地专注于体系结构。
2011-09-08 23:09:01 1回应
书评 · · · · · · (共47条) 我来评论这本书
热门评论 最新评论
各章概要和图片说明
-
- pythia 第一章 焦油坑 史前时代的焦油坑吞噬了成千上万个力大无穷的巨兽,今天的大型软件项目则令无数庞大的开发团队陷入无从逃脱的窘境。软件程序按其规模和目标的不同,对开放过程的要求也有极大的不同,这给软件开放这一职业带来无穷乐趣,同时也是这一行业苦恼的根源。 【图片评注】图为洛杉矶自然历史博物馆George C Pa...... (2回应)2007-11-10 12/12有用来自 人民邮电出版社2007版
人月神话三十年
-
- pythia 2000年新年伊始,国际计算机协会(ACM)在纽约宣布1999年图灵奖得主为时年69岁的布鲁克斯(Frederick P. Brooks, Jr.)。评选委员会主席在致辞中提到,“今天我们所看到的计算机体系结构、软件工程,以及三维计算机图形,均受惠于布鲁克斯的开创性工作,是他改变了这些领域的面貌。”布鲁克斯确实是一位在......2007-11-10 9/9有用来自 人民邮电出版社2007版
12个人月看完人月神话
-
- 临渊羡鱼(永远没有黎明。。。) 程序员,就像诗人一样,几乎仅仅工作在单纯的思考中。他们运用自己的想象,来建造自己的“城堡”。——这句话我非常喜欢,作为我blog的说明。 用了12个人月看完人月神话,断断续续。这本书的软件开发背景,和现在大部分程序员应用开发的背景大不相同,也和现在快速开发方法工具语言环境已经很大不同。但是这本书表达的应该是软件工...... (2回应)2005-12-04 10/13有用
经理必读,不要用屁股决定脑袋
-
- simonliu(读书 + 实践) 这本书是“国外程序员推荐:每个程序员都应读的书”中一本非技术书,书中没有任何技术知识。我花了大概一周的时间粗略读了一遍,感触呢,如书中所说“大多数观点本来已经知道”。 软件工程师应该至少过一遍书中提出的观点,在实际工作中加以运用,比如:多交流,不知道的一定要问;多做实验来验证不确定的东西;选顺手的工具;用合理的方......2012-01-31
关于《人月神话》的东西
-
- 虫二亮 看完这本经典的书,心中似有所悟,也明白了为什么叫做人月神话了。期间一边在看,一边反思目前的项目,看看有多少是合乎经典的东西。不经意略过,其实我们一直都在或多或少的按照经典在做。譬如架构的一致性,我们有专门架构师负责统一的架构与技术解答;我们有专门的项目经理在统一领导,协调;我们有专门的测试团队在保证质量;我们有专门的Q......2011-10-06
历久弥新,不堪重任
-
- zpmad 如果说“术”的话,大部分是过时的东西,毕竟是20年前的东西。boehm模型的数据值得借鉴。 不过分析问题的角度却永不过时,对优化团队、组织管理、模型实现的分析一针见血。 建议重点看精华部分,在最后——再版的总结。......2011-08-07 来自 清华大学出版社2007版
"人月神话"的论坛 · · · · · ·
| 《人月神话》(英文版)上市 | 来自杨爽 | 2010-08-10 | |
| 问:该书是不是专业性强不易看懂? | 来自gloooomy | 4 回应 | 2010-10-29 |
| 鼻祖布鲁克斯 | 来自Moo | 2010-06-30 | |
| 对Surgical Team一章不太认同 | 来自someC | 2010-01-30 | |
| 看不懂 | 来自缇缇结 | 2 回应 | 2011-12-20 |
> 浏览更多话题
- 清华大学出版社版 当当网 RMB 36.00
- Addison Wesley版 亚马逊 RMB 394.50
- 加入购书单 多本比价 批量购买 已在购书单
这本书的其他版本有售 · · · · · ·
这本书的其他版本 · · · · · · ( 全部8 )
- 清华大学出版社版 2007-9 / 434人读过 / 有售
- 中国电力出版社版 2003-03-01 / 99人读过
- Addison Wesley版 1995-8-12 / 54人读过 / 有售
- 人民邮电出版社版 2007年06月 / 45人读过 / 有售
以下豆列推荐 · · · · · · (全部)
- 互联网产品经理 全方位入门 (iamsujie)
- 咨询&思考&方法论 (rink)
- 我的编程之路 (风中纸页)
- 网编,产品,运营,项目经理 (Jane)
- 游戏策划的自我修养 (九慕。)
谁读这本书?
喜欢这本书的人常去的小组 · · · · · ·

- 开源 (4098)

- Vim (6168)

- O'Reilly爱好者 (2797)

- Python编程 (18965)

- 分享计算机书籍 (5284)

- LISP (1993)

- Emacs (2327)

- 程序员(不看公告发豆油的... (4662)
喜欢这本书的人关注的活动 · · · · · ·
订阅关于人月神话的评论:
feed: rss 2.0











