Java學習之路:不走彎路,就是捷徑(1)作者:_來源:中國Java技術網_原文地址_2006-3-140.引言在ChinaITLAB導師制輔導中,筆者發現問得最多的問題莫過於"如何學習編程?Java該如何學習?"
到時候再有人問起類似的問題,我可以告訴他(她),請妳去看看《Java學習之路》
拜讀過臺灣蔡學鏞先生的《Java夜未眠》,有些文章如《Java學習之道》等讓我們確實有***鳴,本文題目也由此而來
軟件開發之路是充滿荊棘與挑戰之路,也是充滿希望之路
Java學習也是如此,沒有捷徑可走
夢想像《天龍八部》中虛竹壹樣被無崖子醍醐灌頂而輕松獲得壹甲子功力,是很不現實的
每天仰天大叫"天神啊,請賜給我壹本葵花寶典吧",殊不知即使妳獲得了葵花寶典,除了受自宮其身之苦外,妳也不壹定成得了"東方不敗",倒是成"西方失敗"的幾率高壹點
"不走彎路,就是捷徑",佛經說的不無道理
1.如何學習程序設計?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網校的在線輔導系統中解決學生問題時發現,大部分的問題學生稍做思考就可以解決
要知道獨立思考的能力對妳很重要
要知道程序員的時間是很寶貴的
1
8多讀好書書中自有顏如玉
比爾?蓋茨是壹個飽讀群書的人
雖然沒有讀完大學,但九歲的時候比爾?蓋茨就已經讀完了所有的百科全書,所以他精通天文、歷史、地理等等各類學科,可以說比爾?蓋茨不僅是當今世界上金錢的首富,而且也可以稱得上是知識的巨富
筆者在給學生上課的時候經常會給他們推薦書籍,到後來學生實在忍無可忍開始抱怨,"天吶,這麽多書到什麽時候才能看完了","學軟件開發,感覺上了賊船"
(註:這壹部分學生是剛學軟件開發的)對於在Java開發領域的好書在筆者另外壹篇文章中會專門點評
該文章可作為本文的姊妹篇
1
9使用合適的工具工欲善其事必先利其器
軟件開發包含各種各樣的活動,需求收集分析、建立用例模型、建立分析設計模型、編程實現、調試程序、自動化測試、持續集成等等,沒有工具幫忙可以說是寸步難行
工具可以提高開發效率,使軟件的質量更高BUG更少
組合稱手的武器
到飛花摘葉皆可傷人的境界就很高了,無招勝有招,手中無劍心中有劍這樣的境界幾乎不可企及
在筆者另外壹篇文章中會專門闡述如何選擇合適的工具(該文章也可作為本文的姊妹篇)
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
1Java學習路線3
1
1基礎語法及Java原理基礎語法和Java原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當危險的
學習Java也是如此,必須要有紮實的基礎,妳才能在J2EE、J2ME領域遊刃有余
參加SCJP(SUN公司認證的Java程序員)考試不失為壹個好方法,原因之壹是為了對得起妳交的1200大洋考試費,妳會更努力學習,原因之二是SCJP考試能夠讓妳把基礎打得很牢靠,它要求妳跟JDK壹樣熟悉Java基礎知識;但是妳千萬不要認為考過了SCJP就有多了不起,就能夠獲得軟件公司的青睞,就能夠獲取高薪,這樣的想法也是很危險的
獲得"真正"的SCJP只能證明妳的基礎還過得去,但離實際開發還有很長的壹段路要走
3
1
2OO思想的領悟掌握了基礎語法和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文檔官方下載地址:
對待DOC文檔要像毛主席語錄,早上起床念壹遍,吃飯睡覺前念壹遍
當需要某項功能的時候,妳應該先查相應的DOC文檔看看有沒有現成的實現,有的話就不必勞神費心了直接用就可以了,找不到的時候才考慮自己實現
使用步驟壹般如下:●找特定的包,包壹般根據功能組織
●找需要使用類,類命名規範的話我們由類的名字可猜出壹二
●選擇構造器,大多數使用類的方式是創建對象
●選擇妳需要的方法
3
2
2查書/google->寫代碼測試->查看源代碼->請教別人當我們遇到問題的時候該如何解決?這時候不要急著問別人,太簡單的問題,沒經過思考的問題,別人會因此而瞧不起妳
可以先找找書,到google中搜壹下看看,絕大部分問題基本就解決了
而像"某些類/方法如何使用的問題",DOC文檔就是答案
對某些知識點有疑惑是,寫代碼測試壹下,會給妳留下深刻的印象
而有的問題,妳可能需要直接看API的源代碼驗證妳的想法
萬不得已才去請教別人
3
2
3學習開源軟件的設計思想Java領域有許多源代碼開放的工具、組件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛
這些可是前輩給我們留下的瑰寶呀
入寶山而空手歸,妳心甘嗎?對這些工具、框架進行分析,領會其中的設計思想,有朝壹日說不定妳也能寫壹個XXX框架什麽的,風光壹把
分析開源軟件其實是妳提高技術、提高實戰能力的便捷方法
3
2
4規範的重要性沒有規矩,不成方圓
這裏的規範有兩層含義
第壹層含義是技術規範,多到/docs/codeconv/,中文的也有,啊,還要問我在哪,請參考3
2
2節
3
2
5不局限於Java很不幸,很幸運,要學習的東西還有很多
不幸的是因為要學的東西太多且多變,沒時間陪老婆家人或女朋友,導致身心疲憊,嚴重者甚至導致抑郁癥
幸運的是別人要搶妳飯碗絕非易事,他們或她們需要付出很多才能達成心願
Java不要孤立地去學習,需要綜合學習數據結構、OOP、軟件工程、UML、網絡編程、數據庫技術等知識,用橫向縱向的比較聯想的方式去學習會更有效
如學習Java集合的時候找數據結構的書看看;學JDBC的時候復習數據庫技術;采取的依然是"需要的時候再學"的原則
4.結束語需要強調的是,學習軟件開發確實有壹定的難度,也很辛苦,需要付出很多努力,但千萬不要半途而廢
本文如果能對壹直徘徊在Java神殿之外的朋友有所幫助的話,筆者也欣慰了
哈哈,怎麽聽起來老氣橫秋呀?沒辦法,在電腦的長期輻射之下,都快變成小老頭了
最後奉勸各位程序員尤其是MM程序員,完成工作後趕快遠離電腦,據《胡播亂報》報道,電腦輻射會在白皙的皮膚上面點綴壹些小黑點,看起來鮮艷無比(轉載文章請保留出處:Java家())請問要掌握JAVA的輸入輸出,該怎麽學,學些什麽?