The Pragmatic Programmer Quick Reference Guide
[ 注重實效的程序員之快速參考指南]
1. 關心你的技藝
Care about your craft!
2. 思考!你的工作
Think, about your work
3. 提供各種選擇,不要找蹩腳的藉口
Provide options, Don’t make lame excuses
4. 不要容忍破窗戶
Don’t live with broken windows
5. 作變化的催化劑
Be a catalyst for change
6. 記住大圖景
Remember the big picture
7. 使質量程爲需求問題
Make quality a requirements issue
8. 定期爲你的知識資產投資
Invest regularly in your knowledge portfolio
9. 批判地看待你讀到的和聽到的
Critically analyze what you read and hear
10. 你說什麼和你怎麼說同樣重要
It’s both what you say and the way you say it
11. 不要重複你自己
Don’t repeat yourself
12. 讓複用變得更容易
Make it easy to reuse
13. 消除無關事務之間的影響
Eliminate effects between unrelated things
14. 不存在最終決策
There are no final decisions
15. 用曳光彈找到目標
Use tracer bullets to find the target
16.爲了學習而製作原型
Prototype to learn
17. 靠近問題領域編程
Program close to the problem domain
18. 估算,以避免發生意外
Estimate to avoid surprises
19. 通過代碼對進度表進行迭代
Iterate the schedule with the code
20. 用純文本保存知識
Keep knowledge in plain text
21. 利用命令shell的力量
Use the power of command shells
22. 用好一種編輯器
Use a single editor well
23. 總是使用源碼控制
Always use source code control
24. 要修正問題,而不是指責
Fix the problem, not the blame
25. 調試時不要恐慌
Don’t panic when debugging
26. 選擇沒有問題
“Select” is not broken. Ps. OS、編譯器或者第三方庫很少有Bug,問題常出在應用中
27. 不要假定,要證明
Don’t assume it, prove it.
28. 學習一種文本操縱語言
Learn a text manipulation language
29. 編寫能編寫代碼的代碼
Write code that writes code
30. 你不可能寫出完美的軟件
You cann’t write perfect software
31. 通過合約進行設計
Design by contracts
32. 早崩潰
Crash early
33. 用斷言避免不可能發生的事情
Use assertions to prevent the impossible
34. 將異常用於異常的問題
Use exception for exceptional problems
35. 要有始有終
Finish what you start
36. 使模塊之間的耦合減至最少
Minimize coupling between modules
37. 要配置,不要集成
Configure, don’t integrate
38. 將抽象放進代碼,細節放進元數據
Put abstractions in code, details in metadata
39. 分析工作流,以改善併發性
Analyse the workflow to improve the concurrency
40. 用服務設計
Design using services
41. 總是爲併發而設計
Always design for concurrency
42. 將視圖和模型分離
Separate views from model
43. 用黑板協調工作流
Use blackboard to coordinate workflow
44. 不要靠巧合編程
Don’t program by coincidence
45. 估算你算法的階
Estimate the order of your algorithms
46. 測試你的估算
Test your estimates
47. 早重構,常重構
Refactor early, Refactor often
48. 爲測試而設計
Design to test
49. 測試你的軟件,否則你的用戶就得測試
Test your software, or your users will
50. 不要使用你不理解的嚮導代碼
Don’t use the wizard code you don’t understand
51. 不要蒐集需求,挖掘他們
Don’t gather requirements, dig for them
52. 和用戶一起工作,象用戶一樣思考
Work with a user to think like a user
53. 抽象比細節活得長久
Abstractions live longer than details
54. 使用項目詞彙表
Use project glossary
55. 不要在盒子外面思考,要找到盒子
Don’t think outside the box, find the box
56. 等你準備好再開始
Start when you are ready
57. 對有些事情,做勝於說
Some things are better done than described
58. 不要作形式方法的奴隸
Don’t be a slave to formal methods
59. 昂貴的工具未必能做出良好的設計
Costly tools don’t produce better designs
60. 圍繞功能組織團隊
Organize teams around functionality
61. 不要使用手工流程
Don’t use manual procedures
62. 早測試,常測試,自動測試
Test early, Test Often, Test automatically
63. 要通過全部測試,編碼纔算完成
Coding aren’t done till all the tests run
64. 通過蓄意破壞,測試你的測試
Use saboteurs to test your testing
65. 測試狀態覆蓋,而不是代碼覆蓋
Test state coverage, not code coverage
66. 一個bug只抓一次
Find a bug once
67. 英語就是一門編程語言
English is just a programming language
68. 把文檔建在裏面,不要拴在外面
Build document in, don’t bolt it on
69. 溫和地超出用戶的期望
Gently exceed your users’ expectation
70. 在你的作品上簽名
Sign your work