高效程序员的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. 尾声:走向敏捷

一灯能除千年暗,一智能灭万年愚。

  • 只要一个新的习惯,就可以让团队发生巨大变化
  • 拯救濒临失败的项目,需要引入一系列习惯
  • 引入敏捷:管理者指南 (版本控制、单元测试、自动构建)
  • 引入敏捷:程序员指南 (以身作则)