Construction Method Reading Notes

我读《构建之法》

以前读过邹欣老师的几篇博客,觉得还是有些受用。这次看到邹欣老师出书,就赶热闹买了一本,看看软件从业者眼中的现代软件工程是什么样子。这本书我看的比较快,也没做笔记,今天有点时间,就把我认为比较有意思的一些点总结一下,对自己算是个交代。

这本书对于软件开发者的作用:不用读枯燥的课本,可以学习到现代软件工程的方方面面,结合自己的实际工作,查缺补漏,为成长成一位职业的、合格的开发者做好准备。如果你已经在软件领域从业多年,可以看看这些知识你是否大部分已经掌握并实践,对于软件开发和团队提升是否有帮助。

第1章 概论

提出了软件=程序+软件工程的概念;
普及软件开发涉及的子课题,如源代码管理、配置管理、质量保障、软件测试、需求分析、程序理解、软件维护、服务运营、软件生命周期、软件项目管理、用户体验、职业道德规范等等。
给出了软件工程的定义:

软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。

软件的特殊性:复杂性、不可见性、易变性、服从性、非连续性。
软件工程与计算机科学的关系,其中有一副对比图比较有用。
软件工程的知识领域:15个知识领域,参见SWEBOK 3.0 — 下载了这本书,可以浏览一下。
软件工程的目标:创造“足够好”的软件。

第2章 个人技术和流程

单元测试

好的单元测试的标准:在最低的功能/参数上验证程序的正确性、必须由最熟悉代码的人来写、单元测试后机器状态不变、要快、应该产生可重复、一致的结果、独立性、应该覆盖所有的代码路径、应该继承到自动测试的框架中、必须和产品代码一起保存维护。

效能分析工具

抽样和代码注入

个人开发流程

PSP以及书中没有提到的TSP(团队开发流程)

第3章 软件工程师的成长

个人能力的衡量和发展

其中讲了具体的衡量和发展的方法。

软件领域可以分为两个方面:一方面是技艺创新的大爆发,另一方面是坚持不懈的工程工作。包括软件的改善、维护和测试等,这一方面占了90-95%的比例。

软件工程的职业发展

职业发展-考级之路,职业成长-Steve McConnell版本(我个人比较喜欢的实践方法),职业成长-大公司版本,职业成长-自我评估(举例:即使是做CRUD需要的核心技能和扩展知识也不少,赞/P51)

技能的反面

那怎么提高技能呢?答案很简单,通过不断的练习,把哪些低层次的问题都解决了,变成不经过大脑的自动操作,然后才有时间和脑力来解决较高层次的问题。

第4章 两人合作

代码规范、代码复审、结对编程。有参考价值,后面部分涉及到软件工程师合作的一些技巧,不仅仅是技术问题。参见P79,如何正确地给予反馈。

第5章 团队和流程

非团队和团队。团队的特点:有一致的目标,一起完成;有各自的分工,互相依赖合作。

软件团队的模式

一窝蜂模式(呵呵),主治医师模式(IBM System 360),明星模式(不咋样),社区模式(Linux,OSS),业余剧团模式(培训项目),秘密团队模式(Macintosh,比较特殊),特工团队模式(网络安全服务),交响乐团模式(大公司普遍),爵士乐模式(即兴演出?),功能团队模式(Feature Team,应用广泛),官僚模式

开发流程

Code-and-Fix,瀑布开发(被误解的瀑布,参见P91;P94瀑布的适用范围),RUP,老板驱动的流程,渐进交付的流程

第6章 敏捷流程

这一章我觉得很有价值,篇幅不长,但是针对敏捷流程提出了一些问题,进行了一些讨论,但是对一些问题,作者也没有给出特别明确的答案。无论如何,敏捷不是银弹,在实施过程中存在的问题值得反思。可以再次阅读。

第7章 MSF

略。

第8章 软件需求

P158 NABC分析法不错,竞争性需求分析框架,更适合产品经理和创新。

第9章 项目经理

P183 PM的具体任务

第10章 典型用户和场景

Persona技术啊

第11章 ~ 第14章 过于基础,新观点不多 略

第15章 稳定和发布阶段

P295 事后诸葛亮会议(邹老师这个模板不错哦~) - 敏捷中的回顾 - Project中的Lesson&Learn

第16章 IT行业的创新

恩,创新是永恒的话题,不过不是软件工程的核心话题

第17章 人,绩效和职业道德

这章很重要,尤其对于管理者。需要再看一下最新版的《人件》。

—- OVER —-