## 第4章 關鍵的構建決策
> // checklist For Major Construction Practices
> 核對表:主要的構建實踐
### 編碼
- 你有沒有確定,多少設計工作將預先進行,多少工作在鍵盤上進行(在編寫代碼的同時)?
- 你有沒有規定諸如名稱、注釋、代碼格式等”編碼約定“?
- 你有沒有規定特定的由軟件架構確定的編碼實踐,比如如何處理錯誤條件、如何處理安全性事項、對于類接口有哪些約定、可重用的代碼遵循哪些標準、在編碼時考慮多少性能因素等?
- 你有沒有找到自己在技術浪潮中的位置,并相應調整自己的措施?如果必要,你是否知道如何”深入一種語言去編程“,而不受限于語言(僅僅”在一種語言上編程”)?
### 團隊工作
- 你有沒有定義一套集成工序–即,你有沒有定義一套特定的步驟,規定程序員在把代碼checkin(簽入)到主源碼(代碼庫)中之前,必須履行這些步驟?
- 程序員是結對編程,還是獨立編程,或者這二者的某種組合?
### 質量保證
- 程序員在編寫代碼之前,是否先為之寫測試用例?
- 程序員會為自己的代碼寫單元測試嗎(無論先寫還是后寫)?
- 程序員在check in 代碼之前,會用調試器單步跟蹤整個代碼流程嗎?
- 程序員在checkin代碼之前,是否進行集成測試(integration-test)?
- 程序員會復審或檢查別人的代碼嗎?
### 工具
- 你是否選用了某種版本控制工具?
- 你是選定了一種語言,以及語言的版本或編譯器版本?
- 你是否選擇了某個編程框架,或者明確的決定不使用編程框架?
- 你是決定允許使用非標準的語言特性?
- 你是否選定并擁有了其他將要用到的工具—編輯器、重構工具、調試器、測試框架、語法檢查器等?
### 中文要點:
- 每種編程語言都有其優點和弱點。要知道你使用的語言的明確優點和弱點。
- 在開始編程之前,做好一些約定(convention)。“改變代碼使之符合這些約定”是近乎不可能的。
- “構建的實踐方法”的種類比任何單個項目能用到的要多。有意識地選擇最適合你的項目的實踐方法。
- 問問你自己,你采用的編程實踐是對你所用的編程語言的正確響應,還是受它的控制?請記得“深入一種語言去編程”,不要僅“在一種語言上編程”。
- 你在技術浪潮中的位置決定了哪種方法是有效的——甚至是可能用到的。確定你在技術浪潮中的位置,并相應調整計劃和預期目標。
### English Key Points:
- Every programming language has strengths and weaknesses. Be aware of the specific strengths and weaknesses of the language you’re using.
- Establish programming conventions before you begin programming. It’s nearly impossible to change code to match them later.
- More construction practices exist than you can use on any single project.Consciously choose the practices that are best suited to your project.
- Your position on the technology wave determines what approaches will be effective—or even possible.Identify where you are on the technology wave, and adjust your plans and expectations accordingly.