最近blog裡有很多人在談論模式(pattern)和架構(architecture),其中不乏剛入程式員行列的同學,目標都是希望提升自己的開發水平。由於擔心初學者過於看重模式,有舍本求末之嫌,特寫此文。
模式和招式
不知有多少程式員學過武術,其中有句話:“力不敵法,法不敵功”。意思是說:使蠻力敵不過會招法的,會招法敵不過基本功 厚實的。其實編程也是如此,如果放著基本功不練,拚命研究模式,最終只是一身花架子。
見過很多國內大型軟體企業程式員的代碼,很少有上乘表現的。主要原因我覺得和國情有關:
1)業務和編碼一把抓,結果編程技術平平,卻個個精通業務;2)急功近利,為趕工期不顧品質;其結果就是忽視基本功的學習和練習。
什麼是軟體領域的基本功?
Steve McConnell在《After the Gold Rush》一書中提到:
-- 一個人要成為某一領域的專家,大致需要五萬個知識點。在那些成熟的領域,通常需要10年才能獲得足夠的知識點。
-- 其中超過一半的知識點會隨著時間的流逝而廢棄,如C++、JAVA、Perl、HTML、LINUX、Microsoft Windows。
-- 剩下的那些被稱為Stable Core的,則會使你終生受用。
-- 哪些是軟體領域的Stable Core?
Software Requirements Engineering
Software Design
Software Construction
Software Testing
Software Evolution and Maintenance
Software Configuration Management
Software Quality Engineering
Software Engineering Management
Software Engineering Infrastructure
Software Enineering Process
-- 不用精通所有的上述領域,但至少所有的都要瞭解,同時要精通其中某一些。
基本功便是Stable Core中和我們工作內容相關的知識點。
試舉一些和編碼(Software Construction)相關的基本功:
. 標識符命名,變數類型選擇
. 好的編碼風格
. 基本的演算法,如表驅動、樹遍曆、排序等
. 基本的編程技巧,如Assert、Trace等
(這些基本功不能光知道不練)
程式員從哪裡入手?
有本老書一直覺得很受用:《Code Complete》(中文版《代碼大全》)
最近出了第二版,內容大致相同,是學習編碼(Software Constuction)基本功的寶典。
學習模式沒有什麼不好,但有個時機和火候的問題。就像練武術,先得從站樁、盤架子開始,基本功紮實後,再學招法是事半功倍。照我看,前三年不用專門學什麼模式。多寫代碼,多看代碼,不斷改進自己的代碼;到時自然水到渠成。