一個好的程式運行沒有瑕疵,沒有臭蟲。到底是什麼內在的因素使然呢?其實這並不神秘,我們只需要偶爾用點心思提醒自己,無論是使用C/C++、C#、Java、Basic、Perl、COBOL 還是 ASM 進行編碼,所有好的編碼無不顯示出同樣的特點:簡潔 、易讀、模組性、分層、設計、效率、優雅和明晰。
簡潔意味著你能用五行完成的代碼,就不要用十行。這需要你額外的努力去簡化,但不要過分以至讓代碼晦澀難懂。組織,實現和設計的簡潔,可以使你的代碼更可靠,遠離Bug,不出錯。
易讀就是要讓別人能讀懂你的代碼。需要寫好注釋,遵循變數命名規範,不要自作聰明的任意命名。例如“taxrate”就比“tr”要好。
模組性是說你的程式像宇宙萬物一樣。這個世界是由分子組成的,而分子是由原子,電子,核子,夸克和謊言(如果你相信的話)組成。同樣,好的大型系統程式是由一些小的部分組成,而這些小的部分則由更小的 構件塊組成。你可以寫一個只有最準系統的文字編輯器:移動,插入和刪除。正如原子可以以各種奇妙的方式組合,組件可以被重用一樣。
分層讓你的程式從內部看起來像一塊夾心蛋糕。應用程式建立在架構之上,而架構建立在作業系統之上,而作業系統又建立在硬體之上。即使是在應用程式內部,仍然需要分層,比如:檔案-檔案-視圖-架構(File-Document-View-Frame)等。高層會對低層進行調用(調用下行,響應上行)。低層永遠都不會知道上面的高層是什麼。如果Doc直接調用Frame,事情就會變的很糟糕。模組和分層是通過API來定的,API對它們的邊界進行限定。由此看來,設計是非常關鍵的。
設計意味著在你的程式建立之前,需要花時間對它進行很好的設計。畢竟,早期的認真構思比後期的費力調試要合算得多。一個值得稱道的準則是用一半的時間進行設計。你需要有一份功能說明書(描述程式做什麼)和一份開發計劃。所有的API必須書寫成檔。
效率意味著你的程式運行快而且代價小。不會引起檔案以及資料連結等的冗餘。它僅僅做它應該做的。有序地進行載入與卸載。在函數層面上,你總是可以在測試中不斷的進行最佳化。但在更高的層次,對效能你必須有很好的計劃。
優雅和美一樣,你很難去描述,但卻很容易識別。優雅是彙集了簡潔,高效和華麗而創造出的一種感覺。比如:
int fact( int n ){return n==0 ? 1 : n * fact(n-1);}
明晰是所有其它特性中最重要的一個。電腦為創造比物理硬體複雜的多的軟體系統提供了可能性。編程最大的挑戰就是管理複雜性。簡潔、易讀、模組化、分層、設計、效率和優雅都是非常好的達到明晰的 途徑,專門用來對付複雜性。明晰的編碼、明晰的設計、明晰的目的。在每一個層面上,你必須真正理解你所做的一切,否則就是不明晰。一個不好的程式之所以失敗,通常不是由於缺少編碼技巧,而是沒有一個明確的目標。這就是為什麼設計是最重要的原因。它讓你誠實,如果你不能寫下來,你不能向他人解釋,你就沒有真正明白你所做的事情。