选定了要走的路,就是选定了它通往的目的地。
-----HarryEmerson Fosdick(美国基督教现代主义神学家)
1. 做事(work for outcome)
指责不能修复bug
Blame doesn’tfix bugs
2. 欲速则不达(quick fixes become quicksand)
防微杜渐
Beware of landmines
无需孤立的编码
Don’t code inisolation
使用单元测试
User unit tests
3. 对事不对人( criticize ideas not people)
消极扼杀创新
Negativity killsinnovation
4. 排除万难,奋勇前进(damn the torpedoes go ahead)
5. 跟踪变化( keep up with change)
6. 对团队投资(invest in your team)
7. 懂得丢弃( know when to unlearn)
根深蒂固的习惯不可能轻易的丢弃掉
Expensive mentalmodels aren’t discarded lightly
8. 打破沙锅问到底(question until you understand)
9. 把握开发节奏(feel the rhythm)
10. 让客户做决定(let customers make decisions)
决定什么不该决定
Decide what youshouldn’t decide
11. 让设计指导而不是操纵开发(let design guide not dictate)
设计满足实现即可,不必过于详细
Design should beonly as detailed needed to implement
战略设计与战术设计
Strategic versustactical design
12. 合理地使用技术(justify technology use)
盲目的为项目选择技术框架,就好比是为了少交税而生孩子
Blindly pickinga framework is like having kids to save taxes
不需开发你能下载到的东西
Don’t build whatyou can download
13. 保持可以发布(keep it releasable)
提交的代码应该随时可以行动
Checked-in codeis always ready for action
14. 提早集成,频繁集成(integrate early integrate often)
绝不需做大爆炸式的集成
Never accept big-bangintegration
15. 提早实现自动化部署(automate deployment early)
质量保证人员应该测试部署过程
QA should testdeployment
16. 使用演示获得频繁反馈(get frequent feedback using demos)
需求就像是流动着的油墨
Requirements areas fluid as ink
17. 使用短迭代,增量发布(use short iterations release in increments)
18. 固定的价格就意味着背叛承诺( fixed prices are broken promises)
固定的价格就是保证需背叛承诺
A fixed priceguarantees a broken promise
19. 守护天使( put angels on you shoulders)
编写能产生反馈的代码
Codingfeedback
20. 先用它再实现它( use it before you build it)
编码之前,先写测试
Write testsbefore writing code
好的设计并不意味着需要更多的类
Good designdoesn’t mean more classes
21. 不同的环境,就有不同的问题(different makes a difference)
使用自动化会节省时间
Automate to savetime
22. 自动验收测试(automate acceptance testing)
23. 度量真实的进度( measure real progress)
专注于你的方向
Focus on whereyou’re going
24. 倾听用户的声音( listen to users)
25. 代码要清晰地表达意图( program intently and expressively)
26. 用代码沟通(communicate in code)
无需用注释来包裹你的代码
Don’t comment tocover up
27. 动态评估取舍(actively evaluate trade-offs)
没有最佳的解决方案
No best solution
28. 增量式编程(code in increments)
29. 保持简洁( keep it simple )
简单不是简陋
Simple is notsimplistic
30. 编写内聚的代码(write cohesive code)
31. 告知,不要询问(tell don’t ask)
将命令与查询分离开来
Keep commentseparate from queries
32. 根据契约进行替换(substitute by contract)
33. 记录问题解决日志(keep a solutions log)
不需在同一处跌倒两次
Don’t get burnedtwice
34. 警告就是错误(warnings are really errors)
35. 针对问题各个击破(attack problems in isolation
用原型进行分离
Prototype toisolate
36. 报告所有的异常(report all exceptions)
37. 提供有用的错误信息(provide useful error messages)
38. 定期安排会面时间(schedule regular face time)
39. 架构师必须写代码(architects must write code)
40. 实行代码集体所有制(practice collective ownership)
41. 成为指导者(be a mentor)
42. 允许大家自己想办法(allow people to figure it out)
43. 准备好后在共享代码(share code only when ready)
44. 做代码复查(review code)
45. 及时通报进展与问题(keep others informed)