原文:http://blog.csdn.net/myan/archive/2006/05/25/754239.aspx
今天跟一些朋友在信件里討論C++的使用。一個還在學習C++的朋友,認為要把重點放在虛函數、多態性、STL上。我認為學習的時候這樣考慮肯定是對的,但是真正開發的時候,不能因為你掌握了OO、generic這些先進武器,就非要用上這些東西,以示區別不可。謹慎合理地使用語言的機制是開發良好C++程序的關鍵,至少在心態上是關鍵。
下面是信件內容的摘選:
你寫C++的時候,一定要想清楚,你是在做基礎設施還是在應用。如果是基礎設施,比如類庫、框架、底層功能的class wrapper,那么可以允許你大膽地使用C++中的各種技巧,關鍵的要求是你得暴露出來一個clean的interface,讓別人好用。這一點并不容易,特別是有的時候你覺得很好用的接口人家就覺得很別扭。所以比較省心的做法就是把接口設計成流行的風格。比如模仿STL的風格,模仿Java的風格,模仿COM的風格,甚至模仿MFC的風格,可能都比你自己發明一種新風格要“好用”。
可是做應用開發的時候,手就要把緊點,別自鳴得意地濫用高級技巧。應用開發很大程度上受基礎設施的制約,總的來說,使用函數、POD對象、concrete class,從framework中派生出來的class,再加上一點點用來節省打字的template,足以滿足應用開發的需要。特別是當你的下面沒有很完備的class library或者framework的時候,千萬不要一邊寫應用,一邊又想著怎么讓自己的這些東西“為萬世開太平”,那樣的話很容易就會把程序結構作的過于復雜。最后往往是應用沒寫好,也沒有可復用性。以前我沒有經驗的時候,最容易犯的錯誤就是這個。
做基礎設施的開發,那叫“設計”,是要為以后考慮的,為了長遠利益可以犧牲眼前的進度、簡單性。可是做應用,那眼前利益是第一位的,你先把手頭的東西又快又穩地run起來,才談得上以后有復用的可能。眼前的東西作的一塌糊涂,說里面有的模塊設計得超級棒,絕對能復用,你自己都不相信。代碼要一絲不茍,該寫注釋寫注釋,該寫assert寫assert,該怎么樣怎么樣,不能因為想著“反正也就是一錘子買賣”就馬馬虎虎。至于能不能復用,那是以后的事情。所謂Design for today, code for tomorrow,就是這個意思。