拜读完这本74年的大作,我产生了两个想法:
- 人和月并不能相互转化,因为工程周期并不能随意更改。
- silver bullet更像倚天剑屠龙刀,无坚不摧,对软件开发造成的巨大障碍和困难都是所向披靡。然后现实中并不存在。
这本书开头讲了一些很轻松的话题:
编程是一种创造性的有趣活动。这种快乐首先来自于创造事物。其次,快乐来自于开发一些对他人有用的东西。这让我想到小孩子从小就有的,对拼装玩具的兴趣。而编程也像这个一样,他能将互相啮合的零部件组装在一起,让他们以一种精妙的方式运行。
而且编程是一种持续学习,且大部分时间,都是单纯的思考的脑力活动。就像诗人一样,程序员可以凭空利用自己的想象来建造自己的城堡。
然而这个职业也有,同样的也有一些烦恼。
完美主义在编程行业中备受推崇,但达到这个目标是非常困难的。另外持续与人交流,寻找bug,以及追求最新的技术,这些都造就了所谓的焦油坑,使从业人员深陷其中。
人月神话
在这个章节中,Brooks首先提出,
所有的编程人员都是乐观主义者,他们往往都相信,一切都将运作良好,每一项任务仅花费它所应该花费的时间。
然而现实往往不尽如人意,构建软件概念以后,在实现过程中往往会遇到许多困难,并且造成一定的延迟。
人月这个名词,是一个衡量劳动量的单位。它有一个很大的迷惑性,就是
“ 用人月作为衡量一项工作的规模,是一个危险和带有欺骗性的神话。”
在这种思维下,人员数量和时间看上去是可以置换的。然而在实际的工作中这是难以实现的,因为这种置换只有在人员之间不需要相互交流的情况下,这才有可能会成立。
一个最典型的例子就是Brooks原则:
“为进度落后的项目增加人手,只会使进度更加落后。”
Brooks他认为,一支优秀的软件开发团队应该是由一流人才组成的,小型精干的队伍。
曾经有一组针对具有经验的程序员,进行测量的调查。发现最好的和最差的表现在生产率上相差将近十倍。
然而对于一些大型项目来说,如此的人员配置,会使有真正意义的大型系统进度过慢。
这就造成了一种进退两难的境地,Mills为此提出了一个崭新的,具有创造性的解决方案。那就是建议把大项目分成若干个部分,每个部分由一支类似于外科手术人员构成的开发团队负责。
Mills的理念就是让编程进行 从个人艺术到公共视线 这样的观念转变,并且将所有的程序和数据看作团队的所有物,而非私人财产。
Brooks主张在系统设计中,概念完整性应该是最重要的考虑因素。在这种情况下,为了反映一系列连贯的设计思路,宁可省略一些不规则的特性和改进。
另外他认为
功能与概念复杂程度的比值,才是衡量系统设计的易用性的最终测试标准。
为了确保概念的完整性,他要求设计必须由一个人,或者非常少数互有默契的人员来实现。
这种理念付诸于大型项目中,就是将设计方法、体系结构方面的工作,与具体实现相分离,这是获得概念完整性的强有力方法。
而且为了达到这个目的,必须有人控制这些概念,这实际上是一种合理的专制统治。他相信依据和规则,对行业是有益的,正所谓“没有规矩不成方圆”。
结构师是计算机编程过程中一个很重要的角色,实际情况中,尽早和持续沟通能使结构师具有较好的成本意识,以及使开发人员获得对设计的信心,并且不会混淆各自的责任分工。但是这并不是说结构师能够支配开发人员,他能做的只是建议。
没有银弹
银弹是西方传说中,用于对付人狼的特效药。本书中,brook把进度落后,缺陷很多的软件系统比喻为人狼。并且断言:
在未来的十年内,无论在技术上还是管理方式上,都看不出来有任何突破性的进步,能够保证在十年内大幅度地提高软件生产率的可靠性和简洁性。
Brooks在这篇文章中提出了软件活动的两个概念,一个是根本任务,即打造软件实体的抽象概念.另外一个是次要任务,也就是通过编程实现这个软件概念。
这也就带来了根本困难和次要困难。根本困难在于此,抽象是人类的思维活动,而一个良好的软件系统,具有复杂度,一致性,可变性,不可见性等诸多困难。这些特性对抽象过程提出了很高的要求,而且没有太多的规则和模板可供开发人员参考。也就造成了软件开发中固有的困难。
而对于解决次要困难,可能需要等待辅助条件的进步,欣慰的是,已经逐渐出现了一些突破,例如高级编程语言,分时理念和统一编程环境。
面对这两种困难,Brooks在书中还提出了一些希望,具体有高级编程语言,面向对象编程,人工智能(包括其子领域专家系统),还有图形化编程,程序验证,IDE。
没有银弹后记感想
四年多年过去了,我们似乎仍然没有看到银弹的出现,软件业的整体生产率也只有提高了1倍,Brooks的断言一直成立。
但也没有必要灰心,说不定在不久以后,会在软件开发行业出现《三体》中的“降维打击”,这些“人狼”将会不战而亡。
网友评论