人月神话—这个色彩斑斓的名字,勾起了童年对神话故事热情的回忆,它像一个巧克力甜品一样吸引着人们去品尝。翻开书目,却大吃一惊,它并非是潘多拉的盒子,也不是达摩克利斯之剑。细细品读,人月神话,这个时间和人力的博弈,描绘了工程项目的美丽神话。我想,这个名字也许是作者对于工程化处理我们面临工程项目的渴望。
在读这本书时,我们不妨站在一个项目经理的角度,我们手上有大大小小的项目要完成,我们有大量工程人员或者我们只有几个员工,我们也没有无限的时间和资金设备,面对那些大大小小的项目,面对这些诸多的人力,金钱,时间的限制,甚至是技术的制约,我们如何充分利用我们仅有的资源去有效的完成我们的项目,这对于项目经理来讲是一种挑战。然而人月神话给了我们多多少少一些答案,它虽然是几十年前著作,现在却同样影响着我们前进的步伐。
站在项目经理的角度上,我们首先了解任务分配中的一些基本问题,人月,即通常用来计算软件的工作量,假设我们要做一个软件,这个软件估计有10万行代码,如果说一个人一月可以完成1万行代码,那么我们推出这个人十个月将完成这个软件。也就是说假如我们投入十个人一月就可以完成这个软件。这个看似合理的计算方式,暗示项目经理人员数量和时间是可以互相替换的。然而我们忘记了一个致命的问题:任务是否可以分割。如果对于一个项目,每个人独立完成,没有交流,没有互相影响,那么这个计算方式是合理的。但对于软件开发工作而言,并非如此,如果没有交流,就会像巴比伦塔一样变成失败。在软件开发中,如果一个项目进度落后了,简单的增加人手,会使进度更加落后,因为新的人手需要让有经验的职员培训,然后要重新分配任务等等,都会对项目进度产生很大的影响。同时项目经理要知道祸起萧墙,项目进度拖后最大的原因往往不是重要的事情,而是琐碎的小事,每一件小事耽误半天或者一天,小事多了,将使得项目的进度严重后拖。
对于项目经理来讲,在安排任务过程中一个很多年的经验法则为:1/3计划,1/6编码,1/4构建测试和早期系统测试,1/4系统测试,所有的构建已完成。我们会惊讶的发现编码时间只有1/6,而测试时间占到了整个系统开发的一半。对于一个开发人员,在编写代码中,我们会假设我们的代码不会出现什么问题,但是实际情况却并不是这样,我们会花费大量的时间进行调试修改,对于一个大型项目,单元测试和系统测试会牵涉到很多问题,因此在早期进度策划时,预留充足的测试时间,才不会在即将交付产品时让问题出现在客户和项目经理面前。
在一个项目的团队中,众多的人员工作职责的划分是非常重要的,对于一个项目,一千个人可能有一千个人的想法完成实现,那么如何才能让所有的工作人员都朝着一个方向高效的完成一个项目,这里需要谈到系统概念完整性这个概念,它要求系统只反映唯一的设计概念,用户所见到的技术说明来自于少数人的思想。一个系统,必须有一个清晰明确的概念模型,大家都在这个框架下工作,所有的创新发展都必须与基本的概念相吻合。具体的实现人员可以细化概念,但只有总设计者才有否定与发展基本概念的权力。概念的完整性要求设计必须由一个人或者非常少数互有默契的人员来实现。在整个软件开发过程中,困难的部分是概念的结构,如规格化、设计和测试等概念的结构,而不是概念的表述和实现概念,这就要就这些结构师们就有非凡的能力。*是中国改革开放的总设计师,在他设计的这个框架下,千千万万的人民一起来实现,朝着富强的目标迈进。我们的结构师要学习他的才智,才能让我们的产品朝着优秀的方面发展。
假设一个项目经理已经拥有行事规范,富有经验的结构师和许多编程实现人员,那么,他如何确保每个人听到,理解并实现结构师决策?一个必要的工具:文档化的规格说明—手册。手册是产品的外部规格说明,他描述和规定了用户所看见的每一个细节,同样的,它也是结构师主要的工作产物。手册不但要描述包括所有界面在内的用户可见的一切,它同时还要避免描述用户看不见的事物。后者是编程实现人员的工作范畴,而这里他的设计和创造自由是不应该被限制的。体系结构设计人员必须为自己描述的任何特性准备一种实现方法,但是他不应该试图支配具体的实现人员,实现人员在贵族的支配下同样需要拥有民主。
那么到这里我们什么都已经准备妥当,现在需要开发工程师按照规格说明文档开发系统,我们不得不提到的是开发工具,项目经理应该制定一套策略,并为通用工具的开发分配资源,与此同时,他还必须意识到对专业工具的需求,对这样工具的开发不能吝啬人力和物力。之后,开发工程师就可以展示大展身手,高效的完成任务。
项目经理还应该知道,对于软件编程产品来讲,程序向用户所呈现的面貌(文档)与提供给机器识别的内容同样重要,我们可以采用流程图或者自动文档化程序等等向用户展现我们的产品。
最后,人狼是传说中的妖怪,只有银弹才能杀死他。软件项目具有人狼的特性,因为软件项目也可能变成一个怪物,一个落后进度、超出预算、存在大量缺陷的怪物。软件系统的内在特性复杂性、一致性、可变性和不可见性表明软件天生就没有银弹。在社会的发展中,人们不断思考发展产生了银弹----软件工程,但是还要继续发展,只有这样才能杀死传说中的人狼。
那么我们这些新一代的未来计算机领域的主力军,能否拥有银弹,需要我们不断的学习,思考,创新和发明。