倘若不是在软件工程课堂上结识这本书,凭自己在软件开发和编程领域仅有的那点知识,着实想象不到这是一本讲述软件开发和软件工程管理的名作,可能是真的被《人月神话》这个书名搞懵了吧。带着满满的疑惑走进这本书和这本书的作者,对“人月”、项目人员体系结构、项目进度安排、项目管理中的一些经历过实际项目开发检验的正确的结论有了初步的了解,对于任何一个刚刚步入软件开发这个行业的程序猿来说,阅读《人月神话》无疑可以在一些易犯错误的地方给大家敲响警钟,让大家少走弯路。
1.关于作者和作者开发的项目
作者Frederick P. Brooks,Jr是北卡罗来纳大学 Kenan-Flagler 商学院的计算机科学教授,他在查布尔希尔创立了计算机科学系。Brooks 被认为是“IBM 360系统之父”,他担任了 360 系统的项目经理,以及 360 操作系统项目设计阶段的经理。凭借在上述项目的杰出贡献,他、Bob Evans 和 Erich Bloch 在 1985 年荣获了美国国家技术奖(National Medal of Techology)。早期,Brooks 曾担任 IBM Stretch 和 Harvest 计算机的体系结构师。
其中,IBM为国际商用机器公司(International Business Machines Corporation),于1911年创立于美国,为计算机产业长期的领导者,在大型/小型机和便携机(ThinkPad)、超级计算机、UNIX、服务器方面领先业界,它于2004年将个人电脑的相关业务转给了联想集团,在2018年1月17日公布的全球科技公司100强的名单中,IBM排名4位。IBM System360是一种通用计算机系统,它建立了通用计算机家族的概念,用一个严格兼容的计算机家族代替了五个IBM产品计算机产品线,以后几乎所有的计算机研制和开发都以此系统为基准,标志着人类从原子能时代进入信息时代。IBM Stretch是多任务处理方面的先驱,Harvest则是IBM公司在STRETCH的基础上,为美国国家安全局特制的,比STRETCH还大两倍。
2.关于“人月”
“人月”指项目预估和进度安排中使用的工作量单位,比如一个项目需要3个人耗费四个月的时间,衡量这个项目的工作量就用12人月表示。在本文中,作者认为“用人月作为衡量一项工作的规模是一个危险和带有欺骗性的神话,它暗示着人员数量和时间是可以相互 替换的。”人数和时间可以互换的情况仅限于任务完全可分解且人员不需要交流的情况,否则对于任务不完全分解或人员关系复杂的项目,在进度滞后的情况下,采用增加人手的方法来赶进度反而会起到相反的作用。在文中分析项目滞后的原因时,我不禁想起了拖延症的问题,每次都抱着乐观主义心态,自己在脑海里设想了一个最理想最顺畅最节约时间的解决方案,然后在每天完不成任务的时候再自我安慰:“事情简单的很,今天不干也能完成”,然后就变成了每次都为了赶Deadline痛不欲生。制定合理的计划,留出足够的时间余量,提高工作效率,严格按照时间进度完成每一项任务,才能王道!
3.关于产品设计的概念完整性和一致性
在写项目申请书时,经常会遇到两个问题。其一,不同的人负责项目申请书的不同部分,最后在整合到一起时往往会让人产生项目需求和功能不完全对应的感觉,整个项目明显有拼凑的痕迹,显得不伦不类;其二,在决定产品实现什么功能时,往往会很贪心的把所有功能都往上加,最后产品没有针对性,更没有特色。在一个项目不可避免的要由多人合作完成时,成员之间的相互沟通、产品功能需求手册的制定、项目领导者对建议的决定权显得尤为重要。产品需求功能手册尽可能详细的记录了产品实现的要求,但在具体操作实验过程中,还是会有各种疑问出现,也会有各种好的意见与建议,这时候需要负责不同功能模块的成员有及时有效的沟通,项目领导者对好的决策建议有拍板就定的魄力和决心。设计产品时最重要的是学会做减法,学会根据市场需求,找到产品的主要研发点,围绕某一个或某几个关键问题,设计一款有针对性的产品,在实际应用中真正解决问题,而不是把各种不同型号的产品简单相加。产品的成功设计离不开概念的完整性和一致性,他不仅在整个产品开发过程中起指导作用,而且在产品开发出来推广到市场之后,也影响着用户体验和用户反馈。
4.关于编程的乐趣和苦恼
编程给我最大的感觉是程序化的逻辑思维,例如用程序员的思维描述烧开水这件事,首先需要明确基本对象:水壶、炉子、水,然后是初始状态 :水壶在桌子上、水壶是空的、炉子没开,最后描述烧水过程:拿起空水壶,移动到目标位置接满水,把水壶移动到炉子上,打开炉子,等待,检查水壶状态,蒸汽很多则关闭炉子烧水结束,没有很多蒸汽则继续等,继续检查,完毕。不仅仅在编程,逻辑清晰在处理其他任何问题中都是很关键的。再者,软件开发要有追求完美的品质,软件开发出来是面向广大用户的,软件运行或者人机交互界面有任何问题都会体现在用户使用率上,用户不会为不方便使用的软件买单,为了使开发出来的软件抓住用户,软件开发者必须在软件的各个方面精益求精,按照最方便用户操作的方式进行设计