终于有幸拜读了《人月神话》这部业内经典著作。整体来说,本书的主线——人月神话、没有银弹在现今的软件工程管理领域依然属于有效的基础理论。不过有些东西确实过时了,比方说文档的管理,现在已经有了svn或者在线文档。提到调试的复杂性,现在的集成环境把调试变得非常容易。读完之后才感觉不是给编程的人看的,更应该是项目经理或者架构师看的,很巧的是我的下一阶段职责正是往这个方向转型,还是很有帮助的。下面我就记录一些我印象比较深刻的章节。
第一章-焦油坑。焦油坑是作者用来形容大型系统开发的一个概念。史前时代,恐龙、猛犸象、剑齿虎这些大型食肉动物碰到焦油坑也是没有办法挣脱的,而且越用力就越容易被沉入坑底。这种场景就像极了大型系统开发的工作。基本上一个大型的编程系统产品的开发成本会是单个的简单程序的9倍。这里的编程系统产品是指的由很多编程程序以及系统组合而成的可交互、协作的程序集合。我们每个人都应清晰的认识到这样一种非线性关系,认识到真正的大型编程系统产品并不是简单程序的简单堆叠。这也就是所谓的“焦油坑”。既然是明知是焦油坑,那我们为什么要跳进去呢?因为软件开发有其独有的的乐趣。比如创建事物的快乐、开发对其他人有用的东西的乐趣、面对不重复的任务不断学习的乐趣。
第二章-人月神话。在软件项目中我们往往用人月这个指标在衡量项目的工作量。但是人月这个指标实际上是一个危险的带有欺骗性的神话。它暗示着人员数量和时间是可以互相替换的。只有在将任务分解给参与人员后他们之间不需要互相交流的情况下,人数和时间才是可以互换的。简单来说就是,3个人要干3个月的事情不是说安排9个人就能1个月干完了。看到作者有一个很有意思的结论:在进度落后的项目中增加人手的做法,往往只会使进度更加落后。但现实是一旦发现进度落后很多,除了增加人手,很难有更有效的办法来解决这个问题。当然了,走到这一步确实本身也是因为前面的计划有严重问题。
第三章-外科手术队伍。面对软件项目的“焦油坑”以及“人月神话”,作者给出的一个解决办法是——“外科手术队伍”。分别是外科医生、管理员及其文秘、编辑及其文秘、副手、程序职员、工具维护人员、测试人员和语言专家。有研究表明,同样有两年经验而且受到同样培训的情况下,优秀的专业程序员的生产率是较差程序员的10倍。在软件项目中,一个小型的、精干的队伍是最好的,这样既减少了沟通成本,又提高了生产率。但是对于真正意义上的大型系统来说,小型精干的队伍往往意味着太慢。这就是矛盾的所在,对于效率和概念的完整性来说,最好由少数精干的人员来设计和开发,而对于大型系统来说,则需要大量的人手,以使产品能在时间是满足市场的需求。
第四章-贵族专制、民主政治和系统设计。作者认为在系统设计中,概念完整性应该是最重要的考虑因素。就是说,为了反映一系列连贯的设计思路,您可省略写不规则的特性和改进,也不提倡独立和无法整合的系统,哪怕它们其实包含着许多很好的设计。概念的完整性要求设计必须由一个人,或者非常少数互有默契的人员来实现。虽然作者不认为只有结构师才有好的创意,新的概念经常来自实现人员或者用户。但是系统的概念完整性决定了其使用的容易程度。结构师一直处在解决用户问题,实现用户利益的核心地位。若要得到系统概念上的完整性,必须有人控制这些概念。这实际上是一种无需任何歉意的贵族专制统治。
第七章-为什么巴比伦塔会失败。据《创世纪》记载,巴比伦塔是人类继诺亚方舟之后的第二大工程壮举,同时,其也是第一个彻底失败的工程。这个故事在很多方面和不同层次都是非常深刻和富有教育意义的。他们有清晰的目标、充足的人力和材料、有足够的时间和技术,最后还是失败了。作者认为是两个原因,其一是交流;其二是交流的结构——组织。他们无法相互交谈,从而无法合作。交流的缺乏导致了争辩、沮丧和群体猜忌。很快,部落开始分裂。确实很多时候,尤其大一点的项目,沟通是很大的成本,费事费力,项目经理和架构师意见不和还会内耗。作者推荐小型团队的模式是技术主管作为总指挥,产品负责人充当其左右手,合理的组织是成功的关键。交流和组织的技能需要管理者仔细考虑,相关经验的积累和能力的提高同软件技术本身一样重要。
第十四章-祸起萧墙。当人们听到某个项目的进度发生了灾难性的偏离时,可能会认为项目一定遭受了一系列重大灾难。然而,灾祸来自白蚁的肆虐,而不是龙卷风的侵袭。同样,项目进度经常以一种难以察觉,但是残酷无情的方式慢慢落后。这个真的深有感触,一般都是很小的地方跟自己说,这个地方有特殊处理先放一下,那个地方回头再测试,结果最后报进度的时候就落后了。这个主要还是靠项目经理把握,有些明确的节点一定要亲自检查成果并及时调整计划,不然后果不堪设想。
第十六章-没有银弹。狼这种民间传说中存在的怪物,会在月圆之夜由我们熟悉的人类面孔变成可怕的狼脸。我们熟悉的软件项目也有着人狼的特性,看似简单明了的外表,但是却可能随时变成一个进度落后、超出预算、存在大量缺陷的怪物。在民间传说中对付人狼唯一可靠的武器就是银弹。所以银弹在软件项目中就是比喻这种使得软件成本像计算机硬件成本一样迅速降低的尚方宝剑。然而,作者在40年前悲观的告诉我们,没有银弹。40年后我们回首望去,这个预言恐怕是真的。在软件开发中存在着4个天生的根本困难——复杂度、一致性、可变性和不可见性。现代软件工程中通过高级语言、分时系统、面向对象程序设计、使用开源库、敏捷开发等新的理论实践不断在克服软件开发中的次要困难,同时也减轻了一些根本困难。但始终不能消除软件复杂度这样的根本性困难。因为随着软件工具能力不断的提升,软件开发中需要面对的复杂度其实也是在不断提升的。所以,我们在软件生产效率上的提升需要的是逐步的进步,而不是期待一个一蹴而就的突破。
最后是作者做的一个小总结:软件工程的焦油坑在将来很长一段时间内会继续使人们举步维艰,无法自拔。软件系统可能是人类创造中最错综复杂的事物,只能期待人们在力所能及的活在刚刚超越力所能及的范围内进行探索和尝试。这个复杂的行业需要:进行持续的发展;学习使用更大的要素来开发;新工具的最佳使用;经论证的工程管理方法的最佳应用;良好的自我判断以及能够使我们认识到自己的不足——上帝所赐予的谦卑
标签:读书笔记,焦油,项目,系统,进度,银弹,软件 From: https://www.cnblogs.com/yvxiaoshuai/p/17472959.html