人月神话

第一章焦油坑提出了软件工程中乐趣和苦恼,第二章人月神话则讲述了人员数量和时间是无法互换的,并研究了产生这种情况的原因,第三章到第十五章则讨论了解决这种情况的种种方案,到最后得出结论软件工程并没有银弹(即没有万能的方法),只有一些子弹而已。

神话和传说中的魔术在我们的时代已变成了现实。在键盘上键入正确的咒语,显示出前所未有的或是已经存在的事物。编程这种快乐是一种创造事物的纯粹快乐。如同小孩在玩泥巴时感到快乐一样。 编程非常有趣,在于它不仅满足了我们内心深处进行创造的渴望,而且还愉悦了每个人内在的情感。

用人月作为衡量一项工作的规模是一个危险和带有欺骗性的神话。它暗示着人员数量和时间是可以互相替换的。人数和时间的互换仅仅适用于以下情况: 某个任务可以分解给参与人员,并且他们之间不需要相互的交流。这在收割小麦或收获棉花的工作中是可行的,而在编程中近乎不可能。

Brooks法则: 向进度落后的项目中增加人手,只会使进度更加落后。

没有银弹,所谓的快速开发工具触礁再正常不过了。因为真正复杂的是需求,而不是软件。项目永远是在催促你,不管开发工具的效率多高,花在和客户沟通上的成本一点都不会减少。不管快速开发的语言有多厉害,照样也需要改来改去。

程序员的生产力相对是一个常量,它不受开发所用的语言的影响。因此,实际生产力收获来自于迁移到高级语言编程,这些语言每行表达了更多的实际工作。

Brooks列出的根本性困难包括:

  • 复杂性(complexity)——“复杂”是软件的根本特性,可能来自于程序员之间的沟通不良,而产生结构错误或时间延误;也可能因为人们无法完全掌握程序的各种可能状态;也可能来自新增功能时而引发的副作用等等。
  • 一致性(conformity)——大型软件开发中,各小系统的界面常会不一致,而且易于因为时间和环境的演变更加不一致。
  • 易变性(changability)——软件的所处环境常是由人群、法律、硬件设备及应用领域等各因素融合而成的文化环境,这些因素皆会快速变化。
  • 不可见性(invisibility)——软件是看不见的,即使利用图示方法,也无法充分表现其结构,使得人们心智行的沟通面临极大的困难。

这些是软件的本性,Brooks认为没有捷径可以解决(there is no royal road),但可以渐进式地进行改善。他认为可行的方案有:

  • 买来装配(buy and build)——软件的建造尽量使用现有零组件,不要一起都从头做起。
  • 快速雏形(rapid prototyping)——使用重复式的开发方法(iterative development)来渐进地改善软件的雏形,以求逐步理清使用者需求。
  • 有机成长(growing organically)——生命皆是由小慢慢长大的,建造大型软件的方法应该是逐渐成长,而不是一次建造完成。
  • 优秀设计者(great designer)——人是软件设计的核心,良好的方法可改善人的创造过程,但无法激励人的原本创造力,须倚重有创意的人。

人月神话道出了软件开发要面对的本质问题,即人与机器之间交流。程序员作为两者之间沟通的桥梁,无论硬件和编程环境如何改变,成本最高的沟通成本仍然不会有数量级的减少。

今有程序员五人,需时日几何?
一年。
吾急需之!若有十人,几何?
两年。
百人若何?
万世。


上一篇
麻省理工《计算机科学及编程导论》 麻省理工《计算机科学及编程导论》
课程介绍: 这门课程适用于那些拥有很少或没有编程经验的学生,它致力于使学生理解计算机在解决问题中的作用,并且帮助学生,不论其专业,使他们对于能够完成有用的小程序的目标充满信心。这门课程将使用Python语言进行教学。 课程类型: 计算机
2012-02-03
下一篇
黑客与画家 黑客与画家
为什么书呆子不受欢迎 所有东西都在变成软件,印刷机诞生后,人类写过多少个字,未来就有多少家软件公司。 事实上,大多数会画的人,本身就很喜欢画画,将许许多多时间投入其中,这就是为什么他们擅长画画的原因。同样受欢迎也不是天生的,而是要你自己做出
2012-01-16