《人月神话》笔记

《人月神话》读毕。十年前,我在读本科,当时看完后印象不深。现在有了一定工作经验后,读起来颇多共鸣与收获。

软件开发是个大坑

软件开发的乐趣在于:

1. 以上帝视角创造一个事物

2. 做出对他人有用的东西

3. 用零部件组装出一个能够运行的系统

4. 持续学习

5. 程序很灵活。基于纯粹的思考,可以轻松地做各种实验。

软件开发的痛苦在于:

1. 必须完美。计算机难以成容错。代码中很小的错误,就能造成很大的问题。

2. 由他人设定目标,工作严重依赖于他人的资源,信息,以及成果。

3. 修改bug枯燥而耗时,而且修复bug会导致新的bug,收敛过程很长。

4.开发时间有限。如果太慢,那么产品完成后就已经过时。

5. 软件开发人员越多,沟通和学习时间就越长,出错概率也越大,于是平均每人的生产率就越多。

从代码到完整的产品,需要做很多工作,包括规范化,编写文档,集成测试,修改bug等等。这些工作是编写代码时间的8倍。

缺乏合理的进度安排,是项目进度落后的最主要原因,它的严重程度大于其他因素的总和。项目越晚期增加人手,项目进度就越不可控,所以要对项目进度有清醒认识,加入要趁早,最好预先算清楚。

对于项目进度规划,作者的经验法则是:

- 1/3计划

- 1/6编码

- 1/4 构件测试和早期系统测试

- 1/4 系统测试(所有的构件已完成)

经验之谈

作者提倡一个软件团队应该有一个架构师,兼任产品负责人,保证软件整体的“概念完整性”,即保证软件是一个风格一致的整体,而不是七拼八凑的混合物。这样的软件,用户容易使用,团队成员容易理解。

作者告诫架构师不要过度设计,添加过多不必要的功能,增加软件复杂度,增加项目严重延期的风险。

作者强调文档很重要,测试很重要,需要尽早开始,做到极致。

作者认为,软件的数据结构比流程更重要。根据清晰的数据结构,很容易推导出程序流程。

软件开发中,唯一不变的就是变。软件结构越复杂,修改风险越大。

软件变更应当一步一个脚印,某次增加少量功能,并且充分测试。跟现在的敏捷开发思想类似。

软件开发应当规划尽量多的,明确定义的里程碑,这样项目成员随时能了解项目进度,尽力避免延期。

没有银弹

软件开发工作分为两部分:

- 根本任务:设计软件复杂的概念结构。

- 次要任务:写代码。

作者提出,由于次要任务只占软件开发中1/9到1/6的时间,而各种编程语言,软件管理方法,主要提供次要任务的效率;因此软件开发效率在十年内无法得到数量级的提升。

作者的观点基本正确,只有一点错了:现在软件框架,可复用组件比当时增加许多,云计算也蓬勃发展,所以我们开发软件时,很多设计工作和代码开发工作都可以省略。现在开发一些常见的软件,效率已经大幅提升。

作者提出改善软件开发效率的方法有:

1. 快速创建原型,及时确认需求细节,避免返工

2. 逐渐迭代版本,不憋大招

3. 招聘和培养杰出的设计人员,人才比工具,流程重要得多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容