读程序设计实践
風格
全局變量用具有描述意義的名字,局部變量用短名字。
保持一致性。
函數采用動作性的名字。
要準確。
以縮行形式顯示程序結構。
使用表達式的自然形式。
利用括號排除歧義。
分解復雜的表達式。
要清晰。
當心副作用。
使用一致的縮行和加括號風格。
為了一致性,使用習慣用法。
用 else-if 處理多路選擇。
避免使用函數宏。
給宏的體和參數都加上括號。
給神秘的數起個名字。
把數定義為常量,不要定義為宏。
使用字符形式的常量,不要用整數。
利用語言去計算對象的大小。
不要大談明顯的東西。
給函數和全局數據加注釋。
不要注釋不好的代碼,應該重寫。
不要與代碼矛盾。
澄清情況,不要添亂。
界面
隱蔽實現的細節。
選擇一小組正交的基本操作。
不要在用戶背后搞小動作。
在各處都用同樣方式做同樣的事。
釋放資源與分配資源應該在同一層次進行。
在低層檢查錯誤,在高層處理。
只把異常用在異常的情況。
排錯
尋找熟悉的模式。
檢查最近的改動。
不要兩次犯同樣錯誤。
現在排除,而不是以后。
取得堆棧軌跡。
鍵入前仔細讀一讀。
把你的代碼解釋給別人。
把錯誤弄成可以重現的。
分而治之。
研究錯誤的計數特性。
顯示輸出,使搜索局部化。
寫自檢測代碼。
寫記錄文件。
畫一個圖。
使用工具。
保留記錄。
測試
測試代碼的邊界情況。
測試前條件和后條件。
使用斷言。
做防御性程序設計。
檢查錯誤的返回值。
以遞增方式做測試。
首先測試最簡單的部分。
弄清所期望的輸出。
檢驗那些應當保持的特征。
比較相互獨立的實現。
度量測試的覆蓋面。
自動回歸測試。
自動計時測量。
使用輪廓程序。
集中注意熱點。
畫一個圖。
使用更好的算法或數據結構。
讓編譯程序做優化。
調整代碼。
不要優化無關緊要的東西。
收集公共表達式。
用低代價操作代替高代價操作。
鋪開或者刪除代碼。
緩存頻繁使用的值。
寫專用的存儲分配程序。
對輸入輸出做緩沖。
特殊情況特殊處理。
預先算出某些值。
使用近似值。
在某個低級語言里重寫代碼。
使用盡可能小的數據類型以節約存儲。
不存儲容易重算的東西。
可移植性
盯緊標準。
在主流中做程序設計。
警惕語言的麻煩特性。
用多個編譯系統試驗。
使用標準庫。
只使用到處都能用的特征。
避免條件編譯。
把系統依賴性局限到獨立文件里。
把系統依賴性隱藏在界面后面。
用正文做數據交換。
數據交換時用固定的字節序。
如果改變規范就應該改變名字。
維護現存程序與數據的相容性。
不要假定是 A S C I I。
不要假定是英語。
全局變量用具有描述意義的名字,局部變量用短名字。
保持一致性。
函數采用動作性的名字。
要準確。
以縮行形式顯示程序結構。
使用表達式的自然形式。
利用括號排除歧義。
分解復雜的表達式。
要清晰。
當心副作用。
使用一致的縮行和加括號風格。
為了一致性,使用習慣用法。
用 else-if 處理多路選擇。
避免使用函數宏。
給宏的體和參數都加上括號。
給神秘的數起個名字。
把數定義為常量,不要定義為宏。
使用字符形式的常量,不要用整數。
利用語言去計算對象的大小。
不要大談明顯的東西。
給函數和全局數據加注釋。
不要注釋不好的代碼,應該重寫。
不要與代碼矛盾。
澄清情況,不要添亂。
界面
隱蔽實現的細節。
選擇一小組正交的基本操作。
不要在用戶背后搞小動作。
在各處都用同樣方式做同樣的事。
釋放資源與分配資源應該在同一層次進行。
在低層檢查錯誤,在高層處理。
只把異常用在異常的情況。
排錯
尋找熟悉的模式。
檢查最近的改動。
不要兩次犯同樣錯誤。
現在排除,而不是以后。
取得堆棧軌跡。
鍵入前仔細讀一讀。
把你的代碼解釋給別人。
把錯誤弄成可以重現的。
分而治之。
研究錯誤的計數特性。
顯示輸出,使搜索局部化。
寫自檢測代碼。
寫記錄文件。
畫一個圖。
使用工具。
保留記錄。
測試
測試代碼的邊界情況。
測試前條件和后條件。
使用斷言。
做防御性程序設計。
檢查錯誤的返回值。
以遞增方式做測試。
首先測試最簡單的部分。
弄清所期望的輸出。
檢驗那些應當保持的特征。
比較相互獨立的實現。
度量測試的覆蓋面。
自動回歸測試。
建立自包容測試。
自動計時測量。
使用輪廓程序。
集中注意熱點。
畫一個圖。
使用更好的算法或數據結構。
讓編譯程序做優化。
調整代碼。
不要優化無關緊要的東西。
收集公共表達式。
用低代價操作代替高代價操作。
鋪開或者刪除代碼。
緩存頻繁使用的值。
寫專用的存儲分配程序。
對輸入輸出做緩沖。
特殊情況特殊處理。
預先算出某些值。
使用近似值。
在某個低級語言里重寫代碼。
使用盡可能小的數據類型以節約存儲。
不存儲容易重算的東西。
可移植性
盯緊標準。
在主流中做程序設計。
警惕語言的麻煩特性。
用多個編譯系統試驗。
使用標準庫。
只使用到處都能用的特征。
避免條件編譯。
把系統依賴性局限到獨立文件里。
把系統依賴性隱藏在界面后面。
用正文做數據交換。
數據交換時用固定的字節序。
如果改變規范就應該改變名字。
維護現存程序與數據的相容性。
不要假定是 A S C I I。
不要假定是英語。
總結