Java學習之路:不走彎路,就是捷徑(2)
來源:互聯網
上載者:User
2.軟體開發學習路線
兩千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒進也不保守並非中庸之道,而是找尋學習軟體開發的正確路線與規律。
從軟體開發人員的生涯規劃來講,我們可以大致分為三個階段,軟體工程師→軟體設計師→架構設計師或專案管理師。不想當元帥計程車兵不是好士兵,不想當架構設計師或專案管理師的程式員也不是好的程式員。我們應該努力往上走。讓我們先整理一下開發應用軟體需要學習的主要技術。
A.基礎理論知識,如作業系統、編譯原理、資料結構與演算法、電腦原理等,它們並非不重要。如不想成為電腦科學家的話,可以採取"用到的時候再來學"的原則。
B.一門程式設計語言,現在基本上都是物件導向的語言,Java/C++/C#等等。如果做WEB開發的話還要學習HTML/JavaScript等等。
C.一種方法學或者說思想,現在基本都是物件導向思想(OOA/OOD/設計模式)。由此而衍生的基於組件開發CBD/面向方面編程AOP等等。
D.一種關係型資料庫,ORACLE/SqlServer/DB2/MySQL等等
E.一種提高生產率的IDE整合式開發環境JBuilder/Eclipse/VS.NET等。
F.一種UML建模工具,用ROSE/VISIO/鋼筆進行建模。
G.一種軟體過程,RUP/XP/CMM等等,通過軟體過程來組織軟體開發的眾多活動,使開發流程專業化正常化。當然還有其他的一些軟體工程知識。
H.專案管理、體繫結構、架構知識。
正確的路線應該是:B→C→E→F→G→H。
還需要補充幾點:
1).對於A與C要補充的是,我們應該在實踐中逐步領悟編程理論與編程思想。新技術雖然不斷湧現,更新速度令人眼花燎亂霧裡看花;但萬變不離其宗,編程理論與編程思想的變化卻很慢。掌握了編程理論與編程思想你就會有撥雲見日之感。物件導向的思想在目前來講是相當關鍵的,是強勢技術之一,在上面需要多投入時間,給你的回報也會讓你驚喜。
2).對於資料庫來說是獨立學習的,這個時機就由你來決定吧。
3).程式設計語言作為學習軟體開發的主線,而其餘的作為輔線。
4).軟體工程師著重於B、C、E、D;軟體設計師著重於B、C、E、D、F;架構設計師著重於C、F、H。
3.如何學習Java?
3.1 Java學習路線
3.1.1 基礎文法及Java原理
基礎文法和Java原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當危險的。學習Java也是如此,必須要有紮實的基礎,你才能在J2EE、J2ME領域遊刃有餘。參加SCJP(SUN公司認證的Java程式員)考試不失為一個好方法,原因之一是為了對得起你交的1200大洋考試費,你會更努力學習,原因之二是SCJP考試能夠讓你把基礎打得很牢靠,它要求你跟JDK一樣熟悉Java基礎知識;但是你千萬不要認為考過了SCJP就有多了不起,就能夠獲得軟體公司的青睞,就能夠擷取高薪,這樣的想法也是很危險的。獲得"真正"的SCJP只能證明你的基礎還過得去,但離實際開發還有很長的一段路要走。
3.1.2 OO思想的領悟
掌握了基礎文法和Java程式運行原理後,我們就可以用Java語言實現物件導向的思想了。物件導向,是一種方法學;是獨立於語言之外的編程思想;是CBD基於組件開發的基礎;屬於強勢技術之一。當以後因工作需要轉到別的物件導向語言的時候,你會感到特別的熟悉親切,學起來像喝涼水這麼簡單。
使用物件導向的思想進行開發的基本過程是:
●調查收集需求。
●建立用例模型。
●從用例模型中識別分析類及類與類之間的靜態動態關係,從而建立分析模型。
●細化分析模型到設計模型。
●用具體的技術去實現。
●測試、部署、總結。
3.1.3 基本API的學習
進行軟體開發的時候,並不是什麼功能都需要我們去實現,也就是經典名言所說的"不需要重新發明輪子"。我們可以利用現成的類、組件、架構來搭建我們的應用,如SUN公司編寫好了眾多類實現一些底層功能,以及我們下載過來的JAR檔案中包含的類,我們可以調用類中的方法來完成某些功能或繼承它。那麼這些類中究竟提供了哪些方法給我們使用?方法的參數個數及類型是?類的構造器需不需要參數?總不可能SUN公司的工程師打國際長途甚至飄洋過海來告訴你他編寫的類該如何使用吧。他們只能提供文檔給我們查看,Java DOC文檔(參考文獻4.4)就是這樣的文檔,它可以說是程式員與程式員交流的文檔。
基本API指的是實現了一些底層功能的類,通用性較強的API,如字串處理/輸入輸出等等。我們又把它成為類庫。熟悉API的方法一是多查Java DOC文檔(參考文獻4.4),二是使用JBuilder/Eclipse等IDE的代碼提示功能。
3.1.4 特定API的學習
Java介入的領域很廣泛,不同的領域有不同的API,沒有人熟悉所有的API,對一般人而言只是熟悉工作中要用到的API。如果你做介面開發,那麼你需要學習Swing/AWT/SWT等API;如果你進行網路遊戲開發,你需要深入瞭解網路API/多媒體API/2D3D等;如果你做WEB開發,就需要熟悉Servlet等API啦。總之,需要根據工作的需要或你的興趣發展方向去選擇學習特定的API。
3.1.5 開發工具的用法
在學習基礎文法與基本的物件導向概念時,從鍛煉語言熟練程度的角度考慮,我們推薦使用的工具是Editplus/JCreator+JDK,這時候不要急於上手JBuilder/Eclipse等整合式開發環境,以免過於關注IDE的強大功能而分散對Java技術本身的注意力。過了這一階段你就可以開始熟悉IDE了。
程式員日常工作包括很多活動,編輯、編譯及構建、調試、單元測試、版本控制、維持模型與代碼同步、文檔的更新等等,幾乎每一項活動都有專門的工具,如果獨立使用這些工具的話,你將會很痛苦,你需要在堆滿工具的工作列上不斷的切換,效率很低下,也很容易出錯。在JBuilder、Eclipse等IDE中已經自動整合編輯器、編譯器、調試器、單元測試工具JUnit、自動構建工具ANT、版本控制工具CVS、DOC文檔產生與更新等等,甚至可以把UML建模工具也整合進去,又提供了豐富的嚮導協助產生架構代碼,讓我們的開發變得更輕鬆。應該說IDE發展的趨勢就是整合軟體開發中要用到的幾乎所有工具。
從開發效率的角度考慮,使用IDE是必經之路,也是從一個學生到一個職業程式員轉變的裡程碑。
Java開發使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等幾種;而Eclipse、JBuilder佔有的市場份額是最大的。JBuilder在近幾年來一直是Java整合式開發環境中的霸主,它是由備受程式員尊敬的Borland公司開發,在硝煙瀰漫的Java IDE大戰中,以其快速的版本更新擊敗IBM的Visual Age for Java等而成就一番偉業。IBM在Visual Age for Java上已經無利可圖之下,乾脆將之貢獻給開源社區,成為Eclipse的前身,真所謂"柳暗花明又一村"。浴火重生的Eclipse以其開放式的外掛程式擴充機制、免費開源獲得廣大程式員(包括幾乎所有的骨灰級程式員)的青睞,極具發展潛力。
3.1.6 學習軟體工程
對小型項目而言,你可能認為軟體工程沒太大的必要。隨著項目的複雜性越來越高,軟體工程的必要性才會體現出來。參見"軟體開發學習路線"小節。
3.2學習要點
確立的學習路線之後,我們還需要總結一下Java的學習要點,這些要點在前文多多少少提到過,只是筆者覺得這些地方特別要注意才對它們進行匯總,不要嫌我婆婆媽媽啊。
3.2.1勤查API文檔
當程式員編寫好某些類,覺得很有成就感,想把它貢獻給各位苦難的同行。這時候你要使用"Javadoc"工具(包含在JDK中)產生標準的Java DOC文檔,供同行使用。J2SE/J2EE/J2ME的DOC文檔是程式員與程式員交流的工具,幾乎人手一份,除了菜鳥之外。J2SE DOC文檔官方:http://Java.sun.com/j2se/1.5.0/download.jsp,你可以到google搜尋CHM版本下載。也可以線上查看:http://Java.sun.com/j2se/1.5.0/docs/api/index.html。
對待DOC文檔要像毛主席語錄,早上起床念一遍,吃飯睡覺前念一遍。
當需要某項功能的時候,你應該先查相應的DOC文檔看看有沒有現成的實現,有的話就不必勞神費心了直接用就可以了,找不到的時候才考慮自己實現。使用步驟一般如下:
●找特定的包,包一般根據功能組織。
●找需要使用類,類命名規範的話我們由類的名字可猜出一二。
●選擇構造器,大多數使用類的方式是建立對象。
●選擇你需要的方法。
3.2.2 查書/google->寫代碼測試->查看原始碼->請教別人
當我們遇到問題的時候該如何解決?
這時候不要急著問別人,太簡單的問題,沒經過思考的問題,別人會因此而瞧不起你。可以先找找書,到google中搜一下看看,絕大部分問題基本就解決了。而像"某些類/方法如何使用的問題",DOC文檔就是答案。對某些知識點有疑惑是,寫代碼測試一下,會給你留下深刻的印象。而有的問題,你可能需要直接看API的原始碼驗證你的想法。萬不得已才去請教別人。
3.2.3學習開源軟體的設計思想
Java領域有許多原始碼開放的工具、組件、架構,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛。這些可是前輩給我們留下的瑰寶呀。入寶山而空手歸,你心甘嗎?對這些工具、架構進行分析,領會其中的設計思想,有朝一日說不定你也能寫一個XXX架構什麼的,風光一把。分析開源軟體其實是你提高技術、提高實戰能力的便捷方法。
3.2.4 規範的重要性
沒有規矩,不成方圓。這裡的規範有兩層含義。第一層含義是技術規範,多到http://www.jcp.org下載JSRXXX規範,多讀規範,這是最權威準確最新的教材。第二層含義是編程規範,如果你使用了大量的獨特演算法,富有個性的變數及方法的命名方式;同時,沒給程式作注釋,以顯示你的編程功底是多麼的深厚。這樣的代碼別人看起來像天書,要理解談何容易,更不用說維護了,必然會被無情地掃入垃圾堆。Java編碼規範到此查看或下載http://Java.sun.com/docs/codeconv/,中文的也有,啊,還要問我在哪,請參考3.2.2節。
3.2.5 不局限於Java
很不幸,很幸運,要學習的東西還有很多。不幸的是因為要學的東西太多且多變,沒時間陪老婆家人或女朋友,導致身心疲憊,嚴重者甚至導致抑鬱症。幸運的是別人要搶你飯碗絕非易事,他們或她們需要付出很多才能達成心愿。
Java不要孤立地去學習,需要綜合學習資料結構、OOP、軟體工程、UML、網路編程、資料庫技術等知識,用橫向縱向的比較聯想的方式去學習會更有效。如學習Java集合的時候找資料結構的書看看;學JDBC的時候覆習資料庫技術;採取的依然是"需要的時候再學"的原則。