之所以看《快速软件开发》,这本书,是源自一个网友的评论:“还能说什么,虽然书里没有敏捷,也没有单元测试,更没有AOP/SOA等时髦名词,但是这绝对不影响这本书的价值!其实我一直觉得,国内那么多小软件公司,搞什么RUP/XP/SOA/AOP,其实好好看看这本书,没有什么项目做不成的~”
虽然上软件工程这门课才半年不到,但是也读过不少关敏捷式开发的书,虽然每本书的质量都很好,但不得不说太专业了,尤其是对于一个小小的计算机专业学生来说,在我看来,那些书可能更适合有经验的项目主管来研究,但是这本书不一样,他面面俱到,但却又深入浅出,虽然没办法学其全部,但是仍然给我不少收获。
在此我分为几个大类来记述以下我的心得:
总体策略
- 避免典型错误
- 打好开发基础
- 管理风险,以避免灾难发生
- 采用面向进度的实践
这四个策略共同支撑了项目的最佳进度。
开发进度的思维
软件项目有四个重要的维:人员、过程、产品和技术。人员完成任务要么快、要么慢;过程调节人员的时间,或者是铲除一个一个绊脚石;产品以一个自我完善的形式定义,或者是以阻碍人员达到最好效果的形式定义;技术促成或者阻碍开发的实现。
为使开发速度最快,你必须充分发挥这四个维度的作用。任何一维都很重要。
- 四维中人的因素是第一位的,但我们经常把技术摆在第一位,这也就是我们的项目往往不能成功的原因之一。
- 时间、成本、质量总是矛盾的。我们必须清楚委托人优先考虑的是哪个指标。
- 在保证质量的前提下,加快开发进度才是正确的途径。
- 避免鲁莽编码(code-like-hell)。
人员
人员的选择
- 用更少更好的人
- 使任务与人员的技能和动机相匹配
- 帮助人员自我实现,而不是强制地把他推到他最有经验或最需要他的岗位上
- 人员选择应强调人员间的互补与协调性
- 应尽快排除或替换不称职的人员
人员激励
没有比人员激励更能提高员工效率,且适用于任何不同组织、不同项目和不同人员。
过程
- 避免返工
- 质量保证
- 开发基础,使用标准软件工程实践,避免项目失控
- 风险管理,避免灾难
- 资源目标
- 生命周期计划
- 面向客户的开发,明确谁是你的客户
产品
- 产品规模,产品规模与开发进度是程几何比例的
- 产品特性,平衡对性能、内存占用、稳定性、可靠性等特性的要求,选择战役目标,避免设置太多优先级束缚开发人员的手脚
技术
- 采用高效率的语言、工具。
这一点让我感同身受,不要拘泥于传统要敢于学习新技术,有时候要懂得取舍,例如做深度学习开发算法阶段用PYTHON要比用C++快速的多,当然可能C++效率更高,但是这个可以放到部署时再考虑。
协同
- 人员、过程、产品与技术之间存在协同问题。统一组织范围内的编码标准。