今天我读完了人月神话这本书,读完这本书后我的感受是一个项目的完成是非常困难的,编程在项目中不是最重要的,一个项目能否完成受很多因素的影响。
首先接着上一篇继续写,第十一章未雨绸缪讲的是要做一个试验性系统来实验,之后再做正式的系统,这个我感觉和其他行业一样,都是有实验产品和正式产品,这两种产品之前的差别往往很大。前文说过,几乎所有软件工程师都是乐观主义者,但是在软件制作过程中,需要为变更计划系统、计划组织架构,因为第一个开发的系统可能对于大多数项目并不合用,它可能太慢、太大,而且难以使用。
第十二章干将莫邪讲的是工具的使用,每个团队应该有一名工具管理员,这个角色管理所有通用工具,能指导他的客户——老板使用工具,同时他还能编制老板需要的专业工具。
在团队中,项目经理应该制定一套策略,并为通用工具的开发分配资源,同时也需要意识到专业工具的需求。开发系统的队伍需要自己的目标机器,进行调试开发工作,安排一位成员专门维护这个东西,保证机器上的标准软件是及时更新和实时可用的。目标机器的需求是一种特殊曲线,先很低,然后爆发使用,然后平缓。
第十三章整体部分讲的是如何开发一个可以运行的系统?如何测试系统?如何将经过测试的一系列构件集成到 已测试过、可以依赖的系统?首先详尽的体系结构工作可以使产品更加易于使用,而且更容易开发,且BUG不容易产生。构件单元调试包括四个步骤:本机调试、内存转储、快照、交互式调试。系统集成调试是软件系统开发过程中出乎意料的困难部分,它包括:使用经过调试的构件单元、搭建充分的测试平台、控制变更、一次添加一个构件、阶段化定期变更。
第十四章祸起萧墙如何使意外的影响降低。制作进度表有利于控制项目的进程,进度表上的每一件事被称为“里程碑”,里程碑必须是具体的、特定的和可度量的时间,能进行清晰地定义,因为如果里程碑定义的非常明确,以至于无法自欺欺人时,程序员很少会就里程碑弄虚作假。当项目的进度遇到麻烦事,项目经理不会马上报告老板,而是会自己想办法弥补进度,把麻烦藏起来。
第十五章另外一面讲的是文档和程序,对于软件产品,文档和程序同样重要,即使是给程序员自己用的东西也必须有一些辅助,因为长时间不改之前的代码,会忘。。每个用户都需要一段对程序进行描述的文字,程序的文档包括:目的、环境、范围、实现功能和使用方法、输入输出格式、操作指令、选项、运行时间、精度和校验。
第十六章没有银弹和第十七章再论没有银弹,银弹在这里是指一种快速有效的方案解决软件的所有的开发过程。软件内在特性包括:复杂度,一致性,可变性,不可见性。现在没有银弹,可能未来银弹存在的希望:新的高级语言,面向对象编程,人工智能,专家系统,自动化编程,图形化编程,程序自验证,新的计算机环境和工具,工作站。
通过整本书的阅读,我知道开发一个软件,要有合理的时间进度,开发人员要少而精,概念完整性必须考虑在内,要尽量做到尽早交流和持续沟通。同时,文档形成了关键的枢纽,每个项目管理的工作都围绕着它们运转,它们是经理们的主要个人工具。即使是一个小型项目,都会要求书写相关文档,对每个关键文档的维护提供了状态监督和预警机制并且本身就可以作为检查列表或者数据库。阅读完这本书后,我学习到了很多知识,这些知识在我大学期间可能使用不到,但当我进入工作阶段,这些知识一定会让我受益终生。