不管路走了多远,错了就要重新返回。此书以比为引,写出软件开发过程中,敏捷开发的重要性,敏捷一词被解释为轻量级。而敏捷开发指的是在高度协作的环境中,不断地使用反馈进行自我调整和完善。
首先讲的是态度,团队协作重要的是做事,即解决问题,面对问题时要先想解决问题,而不是归因,指责,多说:我能帮你做些什么,这在团队协作中尤为重要;欲速则不达,一味地快速修复而不去反思总结往往会使代码陷入混乱,要保持代码的清晰度,避免代码没人看的懂。不独立编码,让团队人阅读代码,以及多做单元测试,有一定的用处;对事不对人,在对待你认为错误的观点时询问提出顾虑,而不是对人本身进行指责。即所谓的引导性提问。设立最终期限,仲裁人,支持已经做出的决定也对团队协作有一定的帮助;要有勇气做自己认为正确的事情,"去给猫系铃铛"。
    其次讲的是学习,第一要跟踪变化,即关注最新的语言和技术,跟上技术变化的步伐,多阅读参加交流会议,了解最新的行情。第二要对团队投资,即将自己的技术,知识与团队中的人分享,"午餐会议"是一个很好的交流大家意见的方式。第三要勇于丢弃旧的过时的技术,打破旧习惯。例如过去耗费十人年开发的j2ee,使用php一个月就可以完成,要敢于丢弃旧技术。第四要多问为什么,多想和问题相关的部分。像医生一样工作,如果考虑的不够全面,就很容易"误诊"。最后要把握开发节奏,尽量用整块的时间去做一块的事情。
    接下来讲如何交付出用户想要的软件,想要做出用户满意的软件,在一些需求的问题上,多让客户做决定。设计应该是指导而不是操纵开发,不要在前期做大量的设计,要让编程人员也有一定的设计的权利。要根据需要选择技术,考虑框架的解决力,维护成本等,不要盲目的选择技术框架。保持软件随时在可发布状态,防止你提交的代码破坏整个系统,所以可以在本地进行运行测试。早期就要集成,频繁集成,这样可以解决小问题,避免风险和隐患。提早进行自动化部署。多给客户演示,频繁获得反馈,修正开发过程。而迭代开发是指在小且重复周期里完成开发任务,分析,设计,实现,测试,和获得反馈。使用短迭代,增量发布,不要固定价格。
    接下来讲的是敏捷反馈,学会用单元测试(Junit,nunit,httpunit等),先用它再实现它,测试先行,即在编码之前,先写测试。在不同的环境下,就有不同的问题,在多个平台进行测试,安装持续集成系统。自动验收测试像是协作的单元测试,让用户不必学习编码的情况下,根据自己需要进行添加更新修改数据。度量自己真实的进度,倾听用户的声音,对于每一个用户的抱怨,找出真相,解决问题。
    说到敏捷编码,即代码编写的一些规范,代码要轻晰的表达意图。规范变量名,加注释等使编码变得清晰。利用代码进行沟通,先阅读注释,再阅读代码,有助于理解程序。考虑性能,便利性,生产力成本和上市时间等,如果性能足够,就要把注意力放在其他因素上。编程要使用增量式编程,在很短的编辑,构建测试循环中编写代码。开发可以工作的,最简单的解决方案,不要使用高难度的技术,编写内聚的代码,让类的功能尽量集中,让组件尽量小。面向对象,告知,不要询问,像信息传递,而不是函数调用。通过替换遵循接口契约的类,来添加并改进功能特性,多使用委托而不是继承。
    最后讲了代码的调试和团队的协作。记录解决问题的日志,警告就是错误,要把警告消除。通过单元测试,对各个问题进行逐个击破。向上报告所有的异常,提供有用的错误信息。在团队协作上,定期安排会面时间,架构师必须要实际编写代码,要实行代码的集体所有制,大家一起共享解决问题。成为指导者,分享知识,给别人解决问题的机会,允许他们自己想办法。准备好后再共享代码,要做代码复查,即时通告和交流问题。
掌握了这些习惯,会在软件开发过程中有更高的效率。可以极大提升自己,成为真正优秀的程序员。