《人月神话》阅读报告

《人月神话》阅读报告
文章图片


中国科学技术大学
13级软设3班
毛安然
SA13226347
原创作品版权所有转载请注明出处


《人月神话》是软件领域具有深远影响力的经典著作,不同的社会经验、人生观、思考方式对于读此书的心得也不一样,书中有相当多好的观点,这里只将对我来说感触最深的部分以及我的理解记录下来。


0、人几乎就是一切
本书的大部分文章讲述软件工程管理方面,很少涉及技术问题。和另一著作 《人件》所表达的观点相似,软件工程行业的主要问题实质上更侧重于社会学而不是科学技术。对于人的关注、激励和培养问题的研究非常有价值。


1、人月神话
人月常常被用来衡量工作量,它暗示人和时间是可以互换的。事实上人并不是工具,“人多力量大”的想法是具有欺骗性的神话。Brook法则指出向滞后的软件项目追加人手会使得进度更迟缓。向软件项目中增派人手从三个方面增加了项目必要的总体工作量:任务重新分配本身和所造成的工作中断、培训新人员以及额外的相互沟通。简单的试图以增加人手来缩短项目周期是不可行的。
另外缺乏合理的时间进度是造成项目滞后的最主要原因,关于项目的进度分配,作者的经验是计划1/3、编码1/6、构件测试1/4以及系统测试1/4。


2、外科手术队伍
优秀程序员和较差程序员之间生产率的差异可以非常之大,但是他们的工资的差异却不会这么大,另外需要协作沟通的人员数量影响着开发成本,这两点意味着系统应该由尽可能少的优秀人员来开发。一拥而上的开发方法成本高,效率也低,OS/360就是一个例子。
通过由一位首席程序员来完成问题的分解,整个队伍的结构类似于外科手术队伍,外科医生了解所有的设计和实现,确保了工作概念上的完整性。队伍中观点的不一致可以由外科医生单方面来同一,使得整个队伍可以达到客观的一致性,另外,团队中剩余人员职能的分工是高效的关键,这使简单的交流模式成为可能。
《人月神话》阅读报告
文章图片



3、概念完整性和结构师
概念完整性是产品质量的核心,优秀的产品需要为用户提供一个条理分明的概念模型。模型描述了应用,实现应用的方法以及用来指明操作和各种参数的用户界面使用策。但是大型项目需要很多人力,为了确保队伍的概念模型一致性,需要委派一个角色来全职的代理用户,体现用户的利益,向用户解释使用的产品概念模型,这个角色即结构师,显然结构师的角色和经理截然不同。
另外对于大型系统,有必要由一位主结构师把系统分解成子系统,每个子系统有自己的结构师,他必须就体系结构向主结构师汇报。


4、为什么巴比伦塔会失败?
巴比伦塔项目拥有清晰的目标,充足的人力、材料,足够的时间和技术,项目的失败是因为缺乏两个方面--------交流,以及交流的结果--------组织。同样,大型项目中的交流如果出现障碍,同样会造成进度灾难、功能的不合理和系统缺陷。
两个领导角色:产品负责人、技术主管,所需要的技能非常不同,其中,技术主管的沟通交流在团队中是首要的。在小型队伍中,产品负责人和技术主管可以是同一个人。在真正的大型项目中,作者认为产品负责人作为管理者是更合适的安排。

5、提纲挈领
对于部分技术出生的项目经理,写文档是一件被动的事,是一件彻头彻尾令人生厌的事情,而且是毫无必要和令人分心的。但是每份文档的准备过程可以实现集中考虑,使各种讨论意见明朗化。否则,项目往往会处于无休止的混乱状态中。
首先,书面记录决策是必要的。只有记录下来,分歧才会明朗,矛盾才会突出,人们才能从令人迷惑的现象中得到清晰、确定的策略。第二,文档能够作为同其他人的沟通渠道。项目经理的基本职责是使每个人都向着相同的方向前进,他的主要工作是沟通,文档能极大减轻他的负担。最后,项目经理的文档可以作为数据基础和检查列表。通过周期性的回顾,他能清楚项目的状态,以及需要更改和调整的重点。
过去的我对于文档的写作很不耐烦,认为很占用时间和精力,不得不承认这本书对于我的观念有了很大的冲击。我必须有所改变。


6、未雨绸缪
对于大多数项目,第一个开发的系统并不合用。它可能太慢、太大,而且难以使用,或者三者兼而有之。要解决所有的问题,除了重新开始以外,没有其他的办法,即开发一个更灵巧或者更好的系统,系统的丢弃和重新设计可以一步完成,也可以一块块地实现,所有大型系统的经验都显示,这是必须完成的步骤。新的系统概念或新技术会不断出现,必须构建一个用来抛弃的系统,即使是最优秀的项目经理,也不能在最开始解决这些问题。
将原型发布给用户,可以获得时间,但是它的代价高昂。对于用户,使用极度痛苦;对于重新开发的人员,分散了精力;对于产品,影响了声誉,即使最好的再设计也难以挽回名声。因此,为舍弃而计划是必要的。
为了变更组建团队比为变更进行设计更加困难。当系统发生变化时,管理机构也需要调整,管理人员和技术人才应当具有互换性。然而其中的障碍是社会性的,通常管理人员认为高级人员太“有价值”,舍不得让他们从事实际的编程工作,为了克服这个问题,一些实验室如贝尔实验室废除了所有的职位头衔,每个专业人士都是“技术人员中的一员”。高层管理人员必须时刻做好技术和情感上的准备。这是对观念上的冲击,组建外科手术队伍式的软件开发团队试图清除那些会剥夺他创造性工作的乐趣的社会障碍。
对于一个广泛使用的程序,其维护总成本通常是开发成本的40%或更多。另外成本受用户数目的影响很大。用户越多,所发现的错误也越多。另外bug数量和发布时间的函数是先下降后上升的,这是由于用户对于系统的使用达到了新的熟练水平,他们开始运用新的功能。
《人月神话》阅读报告
文章图片


另外一个基本问题是缺陷修复总会以25%-50%的机率引入新的bug,所以整个过程是前进两部,后退一步。理论上,在每次修复之后,必须重新运行先前所有的测试用例。从而确保系统不会以更隐蔽的方式被破坏。另外设计实现的人员越少、接口越少、产生的错误也就越少。
系统软件开发是减少混乱度的过程,所以它本身是处于亚稳态的。软件维护是提高混乱度的过程,即使是最熟练的软件维护工作,也只是放缓了系统退化到非稳态的进程。

7、祸起萧墙
一天一天的进度落后是难以识别、不容易防范和难以弥补的。需要严格的进度表控制大型项目。进度表中的每一项必须是划分明确、边界明显没有歧义的里程碑。模糊的里程碑会彻底碾碎小组的士气,慢性进度的偏离同样也是士气的杀手,必须要关心每一天的滞后,这是大灾祸的基本组成元素。
当一线经理发现计划偏离时,往往不会向老板汇报这个令人沮丧的消息。但是每个老板都需要了解开发状态的真相。两种方法必须被采用。一种是减少角色冲突和鼓励状态共享,老板必须规范自己,不对项目经理可以解决的问题作出反应,否则势必会压制信息的公开,当项目经理了解到报告给老板不会导致惊慌,那么他就会逐渐提交真实的结果,另一种是拥有了解状态真相的评审机制。

8、没有银弹
人狼是民间传说中的恐怖怪物,它们可以完全出乎意外地从熟悉的面孔变成可怕的怪物,而银弹是消灭人狼的一种最有效的子弹。软件项目具有一些人狼的特性,常常看似简单明了的东西,却有可能变成一个落后进度、超出预算、存在大量陷阱的怪物。作者认为如果将软件开发看成人狼,将提高软件开发效率的方法看成银弹,在未来十年,没有任何单独的软件工程进展可以使软件生产率有数量级的提高(引自1986年的版本),使得软件成本像计算机硬件成本一样迅速降低。
作者认为Ada、面向对象编程、人工智能、专家系统、“自动”编程、图形化编程、程序验证等虽然在一定程度上提高了软件开发的效率,但是始终不可能成为银弹,不能有魔术般的提高。软件的特性本身导致了不大可能有任何的银弹。

9、软件工程的未来
软件工程的焦油坑在将来很长一段时间内会继续时人们举步维艰,无法自拔。软件系统可能是人类创造中最错综复杂的事物,只能期待人们在力所能及的或者刚刚超越力所能及的范围内进行探索和尝试。这个复杂的行业需要:进行持续的发展;学习使用更大的要素来开发;新工具的最佳使用;经论证的工程管理方法的最佳应用;良好判断的自由发挥以及能够使我们认识到自己不足和容易犯错的-----上帝所赐予的谦卑。


10、额外的话

常常有讨论说在我们国家的这个行业,不可能一辈子做技术,30岁就需要向管理层转型。我想说的如同本书中所述,管理人员更加需要对技术的精益求精,管理人员必须时刻做好技术和情感上的准备,管理团队或者亲自参与开发工作,做管理不该和做技术割裂,做技术不该成为非管理的代名词,这是观念上的障碍。当然并不是每个人都对技术有着十年如一日的追求精神。如果一个人缺乏对于行业、对于技术的热爱,很难想象他会成为一名优秀的行业管理者。身为学生的我们必须明白,我们一辈子都得是学生。
【《人月神话》阅读报告】作为一名有一年肤浅工作经验的程序员,作为一名重新回到学校由文科转向理科的学生,作为一名对技术疯狂热爱的求学者,我很庆幸自己能够成为为数不多的找到自己喜欢的工作方向的人,未来的人生对我来说充满期待和乐趣。

    推荐阅读