《人月神话》读书笔记

Posted on 2018-09-17 20:36  zgcr654321  阅读(117)  评论(0)    收藏  举报

        在其他进行大规模工业生产的系统中,要加快产出速度或是增加产量,我们可以采用几种常见的方法:增加生产线数量、提升生产线的运行时间(比如工人三班倒)等等。总体来说,一旦只要有充分的人力和资金支持,在工业生产中,加快生产速度往往和投入的人力数量呈线性增长的关系。

  但软件开发工程则不同。这是一项系统性的工作。在这个工作中,各部分子系统的开发存在着大量前后次序关系和逻辑关系。在软件开发工程中,如果我们想加快产出速度(即提前完成某项工作),增加人力并不一定就能起到提速的作用。这是因为软件开发过程中,新增加的人手需要大量的培训和交流才能够胜任该软件开发的工作,而传统的工业生产线上工人仅需少量的培训就足以胜任生产线上的工作。这些培训和交流成为了额外的工作量,它们也是软件开发工程工作中的一部分。添加的人手越多,则这部分额外的工作量越多,最终会达到一个转折点——这个转折点上增加人手节省下来的时间等于培训和交流增加的时间。因此在软件开发工程中,开发团队人员的数量不是越多越好。事实上,项目经理更喜欢小型、精干的队伍。

  那么对于大型的软件开发工程,需要大量的人手,这种情况下又怎么避免上面的情况呢?Harlan Mills提供了一个崭新的、创造性的解决方案。他建议将大型项目分成许多个部分,而每个部分由一个外科手术式的团队来负责开发。这个外科手术式的团队中有以下几种重要角色:

  外科医生:也就是首席程序员,他负责设计和编写这部分的开发程序。同时,他也是与其他子部分团队的外科医生进行沟通和交流的最重要人物。

  副手:负责辅助外科医生的开发,他的主要作用是作为设计的思考者、讨论者和评估人员。

  管理员:外科医生不应该在开发以外的事情上浪费时间,这些事情由管理员来完成。

  编辑:负责整理外科医生的文档,并发布最终整理好的文档。

  秘书:管理员和编辑各需要一个秘书。

  程序职员:负责这个团队开发工作中的所有技术记录。

  工具维护人员:只有拥有自己的开发工具的团队需要这类人员。

  测试人员:对外科医生编写的代码,以及对整个产品进行测试。

  语言专家:,外科医生主要是系统设计者以及考虑系统的整体表现。而语言专家则寻找一种简洁、有效的使用语言的方法来解决复杂、晦涩或者棘手的问题。通常一个语言专家可以为两个到三个外科医生服务。

  通过上述团队内的角色分工,外科医生可以从其他杂事中解放出来,专心编写程序,而其他人员可以系统地整理和解决这些事情。这十种角色中,只有一道两种角色负责思考和开发产品部分,而其他七种角色负责解决其他方面的问题。这就大大缩小了软件开发工作中培训和交流的规模——只有负责思考和开发产品的人才有着大量地与其他子部分团队人员交流的需求。这样我们就实现了“可以让200人去解决问题,而仅仅需要协调20个人,即那些“外科医生”的思路。”。

 

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3