Java是一種平台,也是程式設計語言,如何學好程式設計不只適用於JAVA,對C++等其他程式設計語言也一樣管用。有程式高手認為,JAVA也好C也好沒什麼分別,拿來就用。為什麼他們能達到如此境界?我想是因為程式語言之間有共通之處,領會了程式設計的精髓,自然能夠做到一通百通。如何學習程式設計理所當然也有許多共通的地方。
1.1 培養興趣
興趣是能夠讓你堅持下去的動力。如果只是把寫程式當作謀生的手段的話,你會活的很累,也太對不起自己了。多關心一些行業趣事,多想想蓋茲。不是提倡天天做白日夢,但人要是沒有了夢想,你覺得有味道嗎?可能像許多深圳本地農民一樣,打打麻將,喝喝功夫茶,拜拜財神爺;每個月就有幾萬十幾萬甚至更多的進帳,憑空多出個"食利階層"。你認為,這樣有味道嗎?有空多到一些程式設計師論壇轉轉,你會發現,他們其實很樂觀幽默,時不時會冒出智慧的火花。
1.2 慎選程式設計語言
男怕入錯行,女怕嫁錯郎。初學者選擇程式設計語言需要謹慎對待。軟體開發不只是掌握程式語言了事,它還需要其他很多方面的背景知識。軟體開發也不僅限於某幾個領域,而是已經滲透到了各行各業幾乎每個角落。
如果你對硬體比較有興趣,你可以學習C語言/組合語言,進入硬體開發領域。如果你對電信的產業知識及網路比較熟悉,你可以在C/C++等之上多花時間,以期進入電信軟體開發領域。如果你對作業系統比較熟悉,你可以學習C/Linux等等,為linux核心開發/驅動程式開發/嵌入式開發打基礎。如果你想介入到應用範圍最廣泛的應用軟體開發(包括電子商務電子化政府系統)的話,你可以選擇J2EE或.NET,甚至LAMP組合。每個領域要求的背景知識不一樣。做應用軟體需要對資料庫等很熟悉。總之,你需要根據自己的特質來選擇合適你的程式語言。
1.3 要腳踏實地,快餐式的學習不可取
先分享一個故事。
有一個小朋友,他很喜歡研究生物學,很想知道那些蝴蝶如何從蛹殼裡出來,變成蝴蝶便會飛。有一次,他走到草原上面看見一個蛹,便取了回家,然後看著,過了幾天以後,這個蛹出了一條裂痕,看見裡面的蝴蝶開始掙扎,想抓破蛹殼飛出來。這個過程達數小時之久,蝴蝶在蛹裡面很辛苦地拼命掙扎,怎麼也沒法子走出來。這個小孩看著看著不忍心,就想不如讓我幫它吧,便隨手拿起剪刀在蛹上剪開,使蝴蝶破蛹而出。但蝴蝶出來以後,因為翅膀不夠力,變得很臃腫,飛不起來。
這個故事給我們的啟示是:欲速則不達。
浮躁是現代人最普遍的心態,能怪誰?也許是貧窮落後了這麼多年的緣故,就像當年的大躍進一樣,都想大步跨入共產主義社會。現在的軟體公司、客戶、政府、學校、訓練機構等等到處瀰漫著浮躁之氣。就拿筆者比較熟悉的深圳IT培訓行業來說吧,居然有的打廣告宣稱"參加培訓,100%就業",居然報名的學生不少,簡直是藐視天下程式設計師。社會環境如是,我們不能改變,只能改變自己,鬧市中的安寧,彌足珍貴。許多初學者C++/JAVA沒開始學,立刻使用VC/JBuilder,會使用VC/JBuilder開發一個HelloWorld程序,就忙不迭的向世界宣告,"我會軟體開發了",簡歷上也大言不慚地寫上"精通VC/JAVA"。結果到軟體公司面試時要嘛被三兩下打發走了,要嘛被駁的體無完膚,無地自容。到處碰壁之後才知道要捧起《C++程式設計思想》《JAVA程式設計思想》仔細鑽研,早知如此何必當初呀。
"你現在講究簡單方便,你以後的路就長了",好像也是佛經中的勸戒。
1.4 多實踐,快實踐
彭端淑的《為學一首示子侄》中有窮和尚與富和尚的故事。
從前,四川邊境有兩個和尚,一個貧窮,一個有錢。有一天,窮和尚對富和尚說:"我打算去南海朝聖,你看怎麼樣?"富和尚說:"這裡離南海有幾千里遠,你靠什麼去呢?"窮和尚說:"我只要一個水缽,一個飯碗就夠了。 "富和尚為難地說:"幾年前我就打算買條船去南海,可至今沒去成,你還是別去吧!在為租賃船隻籌錢,窮和尚卻已經從南海朝聖回來了。
這個故事可解讀為:任何事情,一旦考慮好了,就要馬上上路,不要等到準備周全之後,再去幹事情。假如事情準備考慮周全了再上路的話,別人恐怕捷足先登了。軟體開發是一門工程學科,注重的就是實踐,"君子動口不動手"對軟體開發人員來講根本就是錯誤的,他們提倡"動手至上",但別害怕,他們大多溫文爾雅,沒有暴力傾向,雖然有時候蓬頭垢面的一副"比爾蓋茲"樣。有前輩高人認為,學習程式設計的秘訣是:程式設計、程式設計、再編程,筆者深表贊同。不僅要多實踐,而且要快實踐。我們在看書的時候,不要等到你完全理解了才動手敲程式碼,而是應該在看書的同時敲程式碼,程式運行的各種情況可以讓你更快更牢固的掌握知識點。
1.5 多重參考程式碼
程式碼是軟體開發最重要的成果之一,其中滲透了程式設計師的思想與靈魂。許多人被《仙劍奇俠傳》中淒美的愛情故事感動,悲劇的結局更有一種不足。為什麼要以悲劇結尾?據說是因為寫《仙劍奇俠傳》的程式設計師失戀而安排了這樣的結局,他把自己的感覺融入遊戲中,卻讓眾多的仙劍迷扼腕嘆息。
多多參考程式碼例子,對JAVA而言有參考文獻[4.3],有API類別的原始碼(JDK安裝目錄下的src.zip檔),也可以研究一些開源的軟體或框架。
1.6 加強英文閱讀能力
對學習程式設計來說,不要求英文,但不能一點不會,。最起碼像JAVAAPI文件(參考文獻[4.4])這些東西還是要能看懂的,連猜帶懵都可以;旁邊再開啟一個"金山詞霸"。看太多了就會越來越熟練。在學JAVA的同時學習英文,一箭雙雕多好。另外好多軟體需要到英文網站下載,你要能夠找到它們,這些是最基本的要求。英語好對你學習有很大的幫助。口語好的話語更有機會進入管理階層,進而可以成為剝削程式設計師的"週扒皮"。
1.7 萬不得已才請教別人
筆者在ChinaITLab網校的線上輔導系統中解決學生問題時發現,大部分的問題學生稍做思考就可以解決。請教別人之前,你應該先回答以下幾個問題。
你是否在google中搜尋了問題的解決方案?
你是否查看了JAVAAPI文件?
你有沒有找過相關書籍?
你是否寫程式碼測試過?
如果回答都是"是"的話,而且還沒找到解決辦法,再問別人不遲。要知道獨立思考的能力對你來說很重要。要知道程式設計師的時間是很寶貴的。
1.8 多讀好書
書中自有顏如玉。比爾?蓋茲是個飽讀群書的人。雖然沒有讀完大學,但九歲的時候比爾?蓋茲就已經讀完了所有的百科全書,所以他精通天文、歷史、地理等等各類學科,可以說比爾?蓋茲不僅是當今世界上金錢的首富,而且也可以稱得上是知識的巨富。
筆者在給學生上課的時候經常會給他們推薦書籍,到後來學生實在忍無可忍開始抱怨,"天吶,這麼多書到什麼時候才能看完了","學軟體開發,感覺上了賊船"。這時候,我的回答一般是,"別急,什麼時候帶你們去看看我的書房,到現在每月花在技術書籍上的錢400元,這在軟體開發人員之中還只能夠算是中等的",學生當場暈倒。 (註:這部分學生是剛學軟體開發的)
對於在JAVA開發領域的好書在筆者另外一篇文章中會特別點評。文章可作為本文的姊妹篇。
1.9 使用適當的工具
工欲善其事必先利其器。軟體開發包含各種各樣的活動,需求收集分析、建立用例模型、建立分析設計模型、程式實作、調試程式、自動化測試、持續整合等等,沒有工具幫忙可以說是寸步難行。工具可以提高開發效率,讓軟體的品質更高BUG更少。組合稱手的武器。到飛花摘葉皆可傷人的境界就很高了,無招勝有招,手中無劍心中有劍這樣的境界幾乎不可企及。在筆者另外一篇文章中會特別闡述如何選擇合適的工具(該文章也可作為本文的姊妹篇)。
兩千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒進也不保守並非中庸之道,而是找尋學習軟體開發的正確路線與規律。
從軟體開發人員的生涯規劃來講,我們可以大致分為三個階段,軟體工程師→軟體設計師→架構設計師或專案管理師。不想當元帥的士兵不是好士兵,不想當架構設計師或專案管理師的程式設計師也不是好的程式設計師。我們應該努力往上走。讓我們先整理一下開發應用軟體需要學習的主要技術。
A.基礎理論知識,如作業系統、編譯原理、資料結構與演算法、電腦原理等,它們並非不重要。如不想成為電腦科學家的話,可以採取"用到的時候再來學"的原則。
B.一門程式語言,現在基本上都是物件導向的語言,JAVA/C++/C#等等。如果做WEB開發的話還要學HTML/Jav**ript等。
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.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公司的工程師打國際長途甚至飄洋過海來告訴你他寫的類該如何使用吧。他們只能提供文件給我們查看,JAVADOC文檔(參考文獻4.4)就是這樣的文檔,它可以說是程式設計師與程式設計師交流的文檔。
基本API指的是實現了一些底層功能的類,通用性較強的API,如字串處理/輸入輸出等等。我們又把它成為類別庫。熟悉API的方法一是多查JAVADOC文件(參考文獻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公司開發,在硝煙瀰漫的JAVAIDE大戰中,以其快速的版本更新擊敗IBM的VisualAgeforJAVA等而成就一番偉業。 IBM在VisualAgeforJAVA上已經無利可圖之下,乾脆將之貢獻給開源社區,成為Eclipse的前身,真所謂"柳暗花明又一村"。浴火重生的Eclipse以其開放式的插件擴展機制、免費開源獲得廣大程式設計師(包括幾乎所有的骨灰級程式設計師)的青睞,極具發展潛力。
3.1.6 學習軟體工程
對小型專案而言,你可能認為軟體工程沒太大的必要。隨著專案的複雜性越來越高,軟體工程的必要性才會反映出來。參見"軟體開發學習路線"小節。
3.2 學習要點
確立的學習路線之後,我們還需要總結一下JAVA的學習要點,這些要點在前文多多少少提到過,只是筆者覺得這些地方特別要注意才對它們進行匯總,不要嫌我婆婆媽媽。
3.2.1 勤查API文檔
當程式設計師編寫好某些類,覺得很有成就感,想把它貢獻給各位苦難的同行。這時候你要使用"javadoc"工具(包含在JDK)產生標準的JAVADOC文檔,供同儕使用。 J2SE/J2EE/J2ME的DOC文件是程式設計師與程式設計師溝通的工具,幾乎人手一份,除了菜鳥之外。 J2SEDOC文件官方下載位址:,你可以到google搜尋CHM版本下載。也可以線上查看:。
對待DOC文檔要像毛主席語錄,早上起床念一遍,吃飯睡覺前念一遍。
當需要某項功能的時候,你應該先查相應的DOC文檔看看有沒有現成的實現,有的話就不必勞神費心了直接用就可以了,找不到的時候才考慮自己實現。使用步驟一般如下:
●找特定的包,包一般依功能組織。
●找需要使用類,類命名規範的話我們由類的名字可猜出一二。
●選擇建構器,大多數使用類別的方式是建立物件。
●選擇你需要的方法。
3.2.2 查書/google->寫程式測試->查看原始碼->請教別人
當我們遇到問題的時候該如何解決?
這時候不要急著問別人,太簡單的問題,沒經過思考的問題,別人會因此而瞧不起你。可以先找書,到google中搜尋看看,絕大部分問題基本上就解決了。而像是"某些類別/方法如何使用的問題",DOC文檔就是答案。對某些知識點有疑慮是,寫程式碼測試一下,會讓你留下深刻的印象。而有的問題,你可能需要直接看API的源碼驗證你的想法。萬不得已才去請教別人。
3.2.3 學習開源軟體的設計想法
JAVA領域有許多原始碼開放的工具、元件、框架,JUnit、ANT、Tomcat、Struts、spring、Jive論壇、PetStore寵物店等等都多如牛毛。這些可是前輩留給我們的瑰寶呀。入寶山空手歸,你心甘嗎?對這些工具、框架進行分析,領會其中的設計思想,有朝一日說不定你也能寫一個XXX框架什麼的,風光一把。分析開源軟體其實是你提陞技術、提升實戰能力的便捷方法。
3.2.4 規範的重要性
沒有規矩,不成方圓。這裡的規範有兩層意義。第一層意義是技術規範,多到下載JSRXXX規範,多讀規範,這是最權威準確、最新的教材。第二層意義是程式規範,如果你使用了大量的獨特演算法,富有個性的變數及方法的命名方式;同時,沒給程式註釋,以顯示你的程式設計功底是多麼的深厚。這樣的程式碼別人看起來像天書,要理解談何容易,更別說維護了,必然會被無情地掃入垃圾堆。 JAVA編碼規格到此查看或下載,中文的也有,啊,還要問我在哪,請參考3.2.2節。
3.2.5 不限於JAVA
很不幸,很幸運,要學習的東西還有很多。不幸的是因為要學的東西太多多變,沒時間陪老婆家人或女朋友,導致身心疲憊,嚴重者甚至導致憂鬱症。幸運的是別人要搶你飯碗絕非易事,她們或她們需要付出很多才能達成心願。
JAVA不要孤立地去學習,需要綜合學習資料結構、OOP、軟體工程、UML、網路程式設計、資料庫技術等知識,用橫向縱向的比較聯想的方式去學習會更有效。如學習JAVA集合的時候找資料結構的書看看;學JDBC的時候複習資料庫技術;採取的依然是"需要的時候再學"的原則。
學習Java的同學注意了! ! !
學習過程中遇到什麼問題或想獲取學習資源的話,歡迎加入Java學習交流群:299541275 我們一起學習Java!
以上是學習Java的心得體會的詳細內容。更多資訊請關注PHP中文網其他相關文章!