高效程序员的45个习惯
1. 敏捷——高效软件开发之道
- 个体和交互胜过过程和工具
- 可工作的软件胜过面面俱到的文档
- 客户协作胜过合同谈判
- 响应变化胜过遵循计划
强调团队合作,专注于具体可行的目标。开发需持续不断,切勿时续时断。
敏捷开发就是在一个高度协作的环境中,不断地使用反馈进行自我调整和完善。
工具箱:wiki,git,单元测试,自动构建
2. 态度决定一切
选定了要走的路,就是选定了它通往的目的地。
- 1 做事: Blame doesn't fix bugs.
- 2 欲速则不达: Beware of land mines. 防微杜渐 Don't code in isolation. Use unit tests.
- 3 对事不对人: Negativity kills innovation.
- 4 排除万难,奋勇前进: 发现问题解决问题
3. 学无止境
即使你已经在正确的轨道上,但如果只是停止不前,也仍然会被淘汰出局。
- 5 跟踪变化: 跟上技术变化的脚步
- 6 对团队投资: share knowledge & skills
- 7 懂得丢弃: Expensive mental models aren't discarded lightly. 打破习惯
- 8 打破沙锅问到底: 追根究底
- 9 把握开发节奏
4. 交付用户想要的软件
没有任何计划在遇敌后还能继续执行。
- 10 让客户做决定: Decide what you shouldn't decide.
- 11 让设计指导而不是操纵开发: Design should be only as detailed as needed to implement.
- 12 合理使用技术: Blindly picking a framework is like having kids to save taxes. Don't build what you can download.
- 13 保持可以发布: Checked-in code is always ready for action.
- 14 提早集成,频繁集成: Never accept big-bang integration.
- 15 提早实现自动化部署: QA should test deployment.
- 16 使用演示获得频繁反馈: Requirements are as fluid as ink.
- 17 使用短迭代,增量发布: Show me a detailed long-term plan, and I'll show you a project that's doomed.
- 18 固定的价格就意味着背叛承诺: A fixed price guarantees a broken promise.
5. 敏捷反馈
一步行动,胜过千万专家的意见。
- 19 守护天使: Coding feedback 编写能产生反馈的代码,使用自动化的单元测试。
- 20 先用它再实现它: Write tests before writing code. Test Driven Development (TDD). Good design doesn't mean more classes.
- 21 不同环境,就有不同问题: Automate to save time.
- 22 自动验收测试: 为核心的业务逻辑创建测试。
- 23 度量真实的进度: Focus on where you're going. Use backlog.
- 24 倾听用户的声音: 每一个抱怨的背后都隐藏了一个事实。
6. 敏捷编码
任何一个笨蛋都能够让事情变得越来越笨重、复杂、极端。需要天才的指点以及许多的勇气,才能让事情向相反的方向发展。
- 25 代码要清晰地表达意图: 清晰而非讨巧,可读性差的代码一点也不聪明
- 26 用代码沟通: Don't comment to cover up. 用注释沟通
- 27 动态评估取舍: No best solution. 性能 vs 便利性 vs 生产力 vs 成本 vs 上市时间
- 28 增量式编程: 在很短的编辑/构建/测试循环中编写代码。
- 29 保持简单: Simple is not simplistic.
- 30 编写内聚的代码: 让类的功能尽量集中,让组件尽量小。
- 31 告知,不要询问: Keep commands separate from queries. 不要抢别的对象or组件的工作。告诉它做什么,然后盯着自己的职责就好了。
- 32 根据契约进行替换: Use inheritance fro is-a; use delegation for has-a or uses-a. 通过替换代码来扩展系统,替换遵循接口契约的类,来添加并改进功能特性,需多使用委托而不是继承。
7. 敏捷调试
你也许会对木匠那毫无差错的工作印象深刻。但我向你保证,事实不是这样的。真正的高手只是知道如何亡羊补牢。
- 33 记录问题解决日志: Don't get burned twice.
- 34 警告就是错误
- 35 对问题各个击破: Prototype to isolate.
- 36 报告所有的异常: 处理或者向上传播所有的异常。
- 37 提供有用的错误信息
8. 敏捷协作
我不仅发挥了自己的全部能力,还将我所仰仗的人的能力发挥到极致。
- 38 定期安排会面时间: 使用立会(站着开的会议),时间不用太长,让团队快速达成共识。
- 39 架构师必须写代码: You can't code in PowerPoint.
- 40 实行代码集体所有制: 让开发人员轮换完成系统不同领域中不同模块的不同任务。
- 41 成为指导者: Knowledge grows when given.
- 42 允许大家自己想办法: 指给他们正确的方向,而不是直接提供解决方案。
- 43 准备好后共享代码: 不要提交尚未完成的代码。
- 44 做代码复查
- 45 及时通报进展与问题: 不要等着别人来问。
9. 尾声:走向敏捷
一灯能除千年暗,一智能灭万年愚。
- 只要一个新的习惯,就可以让团队发生巨大变化
- 拯救濒临失败的项目,需要引入一系列习惯
- 引入敏捷:管理者指南 (版本控制、单元测试、自动构建)
- 引入敏捷:程序员指南 (以身作则)