正確的學習方法不僅能夠讓你事半功倍,也能夠讓你更加接近真理。在這一系列的文章之初,我想首先說說學習一個開源架構的途徑。這些學習方法,不僅適用於
Struts2,我想同樣適用於許多其他的開源架構,比如說Spring,Hibernate等等。而這些學習方法,也是我個人的一些心得體會,希望對初
學者或者正在為學習開源架構犯愁的朋友帶來一些啟示。
閱讀、仔細閱讀、反覆閱讀每個開源架構內建的reference
這一點是學習一個架構最最重要,也是最最一開始需要做的事情。不是事實上,無數的程式員對此並不在意。程式員總是以種種理由不仔細閱讀reference:
1. 看英文文檔太吃力
應
該說閱讀英文文檔是每個程式員的基本素質之一,這就跟調程式需要耐心一樣。如果你連偵錯工具的耐心都沒有,那麼乘早放棄程式員這個行當吧。其實閱讀文檔,
尤其是英文文檔,也是程式員的基本素質,這個素質是一點一點積累培養起來的。所以,對於那些實在覺得吃力的朋友,我的建議是結合中文文檔一起看。好在滿江
紅的開源支援者為你精心做了許多很有價值的翻譯,例如Spring,Hibernate等都有對應的中文文檔。但是我依舊認為,看中文文檔,必須和英文文檔對照
,否則你就可能迷失在許多的語義不匹配上。
2. reference實在太厚而抓不住思路
耐心,耐心,還是耐心。從reference的品質而言,其實多數的開源架構的reference都是相當優秀的。尤其是Struts2,基本上都是一個一個的專題wiki文章拼起來的文檔。至於說到Spring,那隻能培養你的耐心了。
我之所以強烈推薦大家仔細閱讀開源架構內建的reference,主要基於以下的兩個原因:
1. 這些內建的reference多數出自這些開源架構的作者之手。你說還有誰能夠比他們自己更瞭解他們自己的產品呢?自己寫的程式,到底有哪些優點,如何使用,自己肯定是最最清楚的,所以要說到權威,不可能有任何的文檔比內建的reference更加權威。
2. 內建的reference幾乎很少犯錯,所以不會給你帶來什麼的誤導資訊。不僅如此,許多的reference已經為你總結了許多架構使用過程中的最佳實務。有那麼好的事情,為什麼我們不直接去看這些reference來獲得第一手的資料呢?
當然,很多人看reference會覺得很枯燥。沒關係,我的建議是,多看幾遍。第一遍,你可以採取scan的方式,目的是瞭解架構的大概。第二遍,挑重點的章節仔細閱讀,並且輔以一定的代碼實踐。第三遍,帶著碰到的問題閱讀,在文檔中尋找答案。
少讀、精讀網路教程,堅決不讀有價書籍
對於很多初學者來說,看reference這種方式他們的接受程度很低。相反的,他們反而會去轉向一些書籍和網路教程。針對這些學習材料,我就不得不帶著有色眼鏡去看待了。
目前市場上任何的有價書籍,我認為完全沒有閱讀的必要
。這些書籍的一大特點是貴,將花費你大量的銀子。而且這些書籍錯誤繁多,所挑出的樣本也基本上毫無實踐意義。更加可悲的是,這些書籍中的很多樣本,作者在寫的時候根本不動腦筋,也不會包含程式開發中的一些最佳實務,甚至會給很多讀者以:“程式就是這麼寫的”這樣的誤導。
網
絡上還有很多原版的教程,例如《XXX in Action》系列。《XXX in
Action》系列的書籍在市場上深受好評。這些系列的書籍我很多都讀過,我並不認為這一系列的叢書相對於架構內建的reference有什麼過人之處,
有某些地方的理解也帶有一些作者個人的感情色彩。其實每個人寫書或者寫文章都會帶上自己的感情色彩,這本不是什麼壞事,不過既然已經有了
reference,為什麼我們要捨近求遠呢?當然,不得不說,這個系列的書籍還是寫得相當不錯的,只是相對reference而言,不如
reference來的好了。
同時,網友也提到了很多網路教程。網路教程,尤其是中文的網路教程,基本上都是網友的經驗之談,也有寫成系列文章的。對於網路教程,我的意見是:少讀,精讀
。
因為網路教程是網友自發的,而我不得不說,許多網友寫的網路教程是一塌糊塗,誤導世人的。同時,也有很多網路寫的網路教程相當不錯,可以作為入門層級的參
考資料。但是對於初學者來說,根本很難分辨其中的好壞真偽。完全憑藉運氣去賭大小,押寶押對了就對了,押錯了就自認倒黴。所以,針對網路教程,最好是帶著
問題去讀,去搜尋你的答案,而不是當作樞紐文件來閱讀。
搭建環境運行每個開源架構內建的sample項目
我不知道有多少初學者真正的去跑過每個開源架構內建的sample項目。按照我的經驗來說,這絕對是一個學習的最佳途徑。
以
Struts2為例,Struts2的根目錄下有一個apps的目錄,裡面有struts2-blank-2.0.11.war,struts2-
showcase-2.0.11.war,struts2-portlet-2.0.11.war等war包。你只要把這些war包放到任何的
application
server的運行環境下即可運行。比如,你可以放到Tomcat的webapps目錄下,啟動Tomcat,你就可以直接存取到一個內建了眾多
Struts特性的項目了。
其實你可以從這些項目中獲得許許多多有用的資訊。不僅如此,一旦你在使用Struts2的某些特性的時候
發生了無法解決的困難,你往往也能從這些項目中找到一些問題的解決方案。更加能讓你放心的是,至少這些項目表達了Struts2的作者原本的意思,你只要
按照它的sample來寫代碼,總不會錯到哪裡去。
在這裡,我簡單舉例來說明你可以從這些項目中學到些什麼:
1.
如果你仔細學習struts2-blank-2.0.11.war這個項目,它可以告訴你如何搭建一個最最簡單的Struts2的項目;它還會告訴
你,Struts2至少需要依賴哪些jar包(請以後不要再為jar包錯誤而苦惱);同時,也給你做出了一些範例,web.xml怎麼
寫,struts.xml又怎麼寫。
2.
struts2-showcase-2.0.11.war這個項目,你則可以看到Struts2的特性的大雜燴,這對於你看reference是相當有幫
助的。比如說,你在看文檔時看到了"檔案上傳"的章節,那麼你就可以參考項目中的upload子目錄。相當於你一邊看文檔,一邊已經有一個現成的跑得通的
例子在這裡提供給你。這是不是要比那些所謂的網路教程更實際呢?
3. struts2-portlet-2.0.11.war則給出了在Portal環境下的Struts2的應用。
所以,綜合來說,架構內建的項目絕對是你學習的第一手資料,你基本上不需要捨近求遠得去找網路上別人寫的例子,原生態,不好嘛?
自己寫一個sample項目親身體驗
這一點其實不用我說,大家也應該明白。不過我還是見過不少的程式員,眼高手低。成天能夠和人吹牛說這個架構怎麼怎麼好,那個架構怎麼怎麼方便。讓他自己動手來用這些架構寫一段程式出來,手足無措,搞了半天,就是無法跑通。
所以,實踐是檢驗真理的唯一標準
。只有自己親自動手去實踐,才能說你真正掌握了某個技術,理解了某個架構。在編寫自己的sample項目時,你不妨就以最簡單的User的增刪改查作為你的業務情境,在實踐中不斷的重構你的代碼,從而提升自己的水平。
帶著問題debug開源架構的源碼
如果你對某個開源架構的使用已經比較熟練,對其內部的原理也基本清晰了。你或許會對其中的某些設計原理產生一些問題(或許僅對勤于思考的人有效)。這個時候,我認為你可以試圖去看一看開源架構的源碼。
我看開源架構的源碼的方式有些特殊,我喜歡在程式裡做debug,來看看在開源架構的內部,到底運行了哪些類,他們是如何執行的。我堅決反對逐個包逐個包的
去看源碼,這毫無意義。因為這相當於把一個肢體進行了分解,一個運行狀態良好的程式,你把它割裂開來,顯然什麼都讀不懂。在程式中debug源碼,你不僅
可以瀏覽到程式執行過程中的每個類,還能查看這些類的運行狀態。這才是閱讀源碼之道。