中国科学技术大学软件 李云鹏 原创作品转载请注明出处
人月神话读后感:
前言: 知者行之始,行者知之成。 ——王阳明
首先我想说的是虽然没有大型软件的开发经验,但是读起这本书来,并没有特别累的感觉。作者用通俗
易懂却又十分专业的语言描述了软件开发的各个问题。
我们可以说,软件行业整个都在焦油坑中苦苦挣扎。不仅仅是程序,项目,甚至程序员。不论是开发大型
软件系统还是小型项目,都会遇到诸多复杂的问题和影响因素,项目本身就是一个足够复杂的动态系统。但是
焦油坑中仍然保持激情就显得弥足珍贵。人月中指出了编写程序的乐趣所在以及伴随这种种乐趣的苦恼。作者
在这里抛给我们一个问题:如何在焦油坑中挣扎的同时保持激情?每个编程人员都要考虑这个问题,因为它绝
对会影响我们全部的职业生涯。
人月神话。
刚听这个名字很虎啊。但是深入阅读后,发现还是很容易理解的。这里不得不为作者的睿智折服。有些很
浅显的道理,就像一层纸,没有戳破之前,你会有诸多困惑,但是一旦明白了,却又觉得如此简单。或者这就
是所谓的返璞归真。我觉得第二章中最重要的两个理论如下:
1.缺乏合理的时间进度是造成项目滞后的主要原因。它比其他所有的因素的总影响还要大。
2.Brooks 法则: 向进度落后的项目增加人手,只会使进度更加落后。
刚开始看的时候是对这两个问题是没有答案的。作者通过对时间成本的分析,明确的给了我们答案:是的,
项目本身时间进度的错误安排将是最大的问题。但是,并没有一个确定的准则,如何安排时间进度:我们往往
通过有经验的管理者安排进度。而编程人员"都是乐观主义者”,我们总期并相信程序会按照我们期望的方式运行。
然而我们的构思本身是有缺陷的,因此总会有Bug。向软件项目中增派人手,需要额外投入培训新人成本,额
外的沟通成本。通过详细的计算,作者证明了第二条理论的正确性。再次说明了预估时间安排如何重要。
概念完整性
优秀的程序员与普通程序员的抉择问题。文章证明了:1.小型精干的队伍是最好的;2.对于真正大型的项目
小型干练的队伍太慢了;3.大型编程系统经验显示,一拥而上的开发方法是高成本/速度慢/效率低的。
这里,作者参考外科手术队伍为我们提供了一种比较好的方法:领导队伍精干并且小型,各自带领团队。这
样既保证了少数头脑产生的产品完整性,又彻底减少了沟通的工作量。
概念完整性非常重要。如何保证概念完整性呢?
外科手术队伍给了我们灵感:一个人或者具有共识的小团队完成设计。这里的一个人或者小团队就是贵族专
制。为了保持系统的统一和完整性,这种贵族专制统治是必须的。
在项目进行中,要尽可能的早交流,并保持持续的沟通以保证开发人员对设计的信息以及明确各自的责任。
在设计结果统一前提下,要能保证贯彻执行。依旧是为了维持整个项目设计的统一,允许体系结构式对实现人
员的询问做出回答,并进行日志记录发布。
还有一个比较突出的问题就是画蛇添足,画蛇添足是开发第二个系统导致的。包括设计花哨界面/不适用功
能;过度考虑可扩展性从而扩大系统的复杂度没有迭代以及渐进的思路,而想着一次完美的得到产品,结果导致
不能完成产品等等。为避免画蛇添足,需要有对需求外的特殊诱惑的警觉。确保原则上的概念和目标在详细设计
中得到完整的体现。
巴比伦塔的失败的例子是为了说明沟通是整个项目团队的核心要素。关于项目的共同愿景,目标,进度任务,
问题,风险,思想等问题都需要通过沟通来传达。有效的团队沟通是提升团队竞争力必不可少的要素。
在一片文件的汪洋中,少数文档形成了关键的枢纽,每件项目管理的工作都围绕着它们运转。它们是经理们
的主要个人工具。(文档是沟通的一种重要辅助手段,文档不在于多少,而在于真正的有效)。一个项目的负责人,
他最重要的工作不是作出决策,而是协调项目组所有人员有目的地工作,而文档就是良好的沟通渠道,通过文档,
每个人都可以容易的了解自己所要做的方向,进而减少许多不必要的私人沟通,更有效的减少一定的理解错误。
通过遵循文档开展工作,项目经理能更清晰和快速地设定自己的方向。
没有银弹
没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步。
--没有银弹
软件开发是复杂的,它的目标要保证具有统一性(可重用),要考虑适用性(可扩展性),开发过程本
身是不可的。这几条特性分别对应于软件开发的复杂性/一致性/可变性和不可见性。由于软件系统开发的复杂性,
人们是无法设计出一套完全的可以自动化生成软件的产品。例如:我们可以想象汽车产业或者食品产业等产业,
由于具有高度的重复性,可以通过自动化技术,轻松的提高生产力。但是,任何软件产品都不可能在没有人员
参与的情况下完成产品的开发。可以说,编程自动化是不可能实现的。
统一框架和技术平台的建设是有所突破的,虽然仍无法突破“没有银弹",但是一定程度上能够简化开发。另
外,可以在加强组件复用和技术平台建设上下功夫。
总结:正如开头所说,知是行之始,行是知之成。在软件开发这条路上,我还只是一只小小的菜鸟。特别是
比较大型的项目开发,更是一点经验都没有。学习人月神话这本书,对项目开发中的各种问题都能够有了一些预
知。相信以后我会再读这本书。也相信再读这本书时,能够结合自身经验更深入的学习和理解。