版權聲明:本文爲北京尚學堂原創文章,未經容許不得轉載。java
1.如何學習程序設計?程序員
Java是一種平臺,也是一種程序設計語言,如何學好程序設計不只僅適用於JAVA,對C++等其餘程序設計語言也同樣管用。有編程高手認爲,JAVA也好C也好沒什麼分別,拿來就用。爲何他們能達到如此境界?我想是由於編程語言之間有共通之處,領會了編程的精髓,天然可以作到一通百通。如何學習程序設計理所固然也有許多共通的地方。面試
1.1 培養興趣算法
興趣是可以讓你堅持下去的動力。若是隻是把寫程序做爲謀生的手段的話,你會活的很累,也太對不起本身了。多關心一些行業趣事,多想一想蓋茨。不是提倡每天作白日夢,但人要是沒有了夢想,你以爲有味道嗎?可能像許多深圳本地農民同樣,打打麻將,喝喝功夫茶,拜拜財神爺;每月就有幾萬十幾萬甚至更多的進賬,憑空多出個」食利階層」。你認爲,這樣有味道嗎?有空多到一些程序員論壇轉轉,你會發現,他們其實很樂觀幽默,時不時會冒出智慧的火花。spring
1.2 慎選程序設計語言數據庫
男怕入錯行,女怕嫁錯郎。初學者選擇程序設計語言須要謹慎對待。軟件開發不只僅是掌握一門編程語言了事,它還須要其餘不少方面的背景知識。軟件開發也不只僅侷限於某幾個領域,而是已經滲透到了各行各業幾乎每個角落。編程
若是你對硬件比較感興趣,你能夠學習C語言/彙編語言,進入硬件開發領域。若是你對電信的行業知識及網絡比較熟悉,你能夠在C/C++等之上多花時間,以期進入電信軟件開發領域。若是你對操做系統比較熟悉,你能夠學習C/Linux等等,爲Linux內核開發/驅動程序開發/嵌入式開發打基礎。若是你想介入到應用範圍最普遍的應用軟件開發(包括電子商務電子政務系統)的話,你能夠選擇J2EE或.NET,甚至LAMP組合。每一個領域要求的背景知識不同。作應用軟件須要對數據庫等很熟悉。總之,你須要根據本身的特色來選擇合適你的編程語言。設計模式
1.3 要腳踏實地,快餐式的學習不可取
先分享一個故事。
有一個小朋友,他很喜歡研究生物學,很想知道那些蝴蝶如何從蛹殼裏出來,變成蝴蝶便會飛。有一次,他走到草原上面看見一個蛹,便取了回家,而後看着,過了幾天之後,這個蛹出了一條裂痕,看見裏面的蝴蝶開始掙扎,想抓破蛹殼飛出來。這個過程達數小時之久,蝴蝶在蛹裏面很辛苦地拼命掙扎,怎麼也無法子走出來。這個小孩看着看着不忍心,就想不如讓我幫幫它吧,便隨手拿起剪刀在蛹上剪開,使蝴蝶破蛹而出。但蝴蝶出來之後,由於翅膀不夠力,變得很臃腫,飛不起來。
這個故事給咱們的啓示是:欲速則不達。
浮躁是現代人最廣泛的心態,能怪誰?也許是貧窮落後了這麼多年的緣故,就像當年的大躍進同樣,都想大步跨入共產主義社會。許多初學者C++/JAVA沒開始學,立馬使用VC/JBuilder,會使用VC/JBuilder開發一個HelloWorld程序,就忙不迭的向世界宣告,」我會軟件開發了」,簡歷上也大言不慚地寫上」精通VC/JAVA」。結果到軟件公司面試時要麼被三兩下打發走了,要麼被駁的體無完膚,無地自容。處處碰壁以後才知道捧起《C++編程思想》《JAVA編程思想》仔細鑽研,早知如此何須當初呀。更多精彩內容關注微信公衆號:北京尚學堂。
「你如今講究簡單方便,你之後的路就長了」,好象也是佛經中的勸戒。
1.4 多實踐,快實踐
彭端淑的《爲學一首示子侄》中有窮和尚與富和尚的故事。
從前,四川邊境有兩個和尚,一個貧窮,一個有錢。一天,窮和尚對富和尚說:」我打算去南海朝聖,你看怎麼樣?」富和尚說:」這裏離南海有幾千裏遠,你靠什麼去呢?」窮和尚說:」我只要一個水鉢,一個飯碗就夠了。」富和尚爲難地說:」幾年前我就打算買條船去南海,可至今沒去成,你仍是別去吧!」一年之後,富和尚還在爲租賃船隻籌錢,窮和尚卻已經從南海朝聖回來了。
這個故事可解讀爲:任何事情,一旦考慮好了,就要立刻上路,不要等到準備周全以後,再去幹事情。假如事情準備考慮周全了再上路的話,別人恐怕捷足先登了。軟件開發是一門工程學科,注重的就是實踐,」君子動口不動手」對軟件開發人員來說根本就是錯誤的,他們提倡」動手至上」,但別懼怕,他們大多文質彬彬,沒有暴力傾向,雖然有時候蓬頭垢面的一副」比爾蓋茨」樣。有前輩高人認爲,學習編程的祕訣是:編程、編程、再編程,筆者深表贊同。不只要多實踐,並且要快實踐。咱們在看書的時候,不要等到你徹底理解了才動手敲代碼,而是應該在看書的同時敲代碼,程序運行的各類狀況可讓你更快更牢固的掌握知識點。
1.5 多參考程序代碼
程序代碼是軟件開發最重要的成果之一,其中滲透了程序員的思想與靈魂。許多人被《仙劍奇俠傳》中悽美的愛情故事感動,悲劇的結局更有一種缺憾美。爲何要以悲劇結尾?聽說是由於寫《仙劍奇俠傳》的程序員失戀而安排了這樣的結局,他把本身的感受融入到遊戲中,卻讓衆多的仙劍迷扼腕嘆息。
多多參考代碼例子,對,也能夠研究一些開源的軟件或框架。
1.6 增強英文閱讀能力
對學習編程來講,不要求英語,但不能一點不會,。最起碼像JAVAAPI文檔這些東西仍是要能看懂的,連猜帶懵均可以;旁邊再開啓一個」金山詞霸」。看多了就會愈來愈熟練。在學JAVA的同時學習英文,一舉兩得多好。另外好多軟件須要到英文網站下載,你要可以找到它們,這些是最基本的要求。英語好對你學習有很大的幫助。口語好的話更有機會進入管理層,進而能夠成爲剝削程序員的」周扒皮」。更多精彩內容關注微信公衆號:北京尚學堂。
1.7 萬不得已才請教別人
大部分的問題學生稍作思考就能夠解決。請教別人以前,你應該先回答以下幾個問題。
你是否在google中搜索了問題的解決辦法?
你是否查看了JAVAAPI文檔?
你是否查找過相關書籍?
你是否寫代碼測試過?
若是回答都是」是」的話,並且尚未找到解決辦法,再問別人不遲。要知道獨立思考的能力對你很重要。要知道程序員的時間是很寶貴的。
1.8 多讀好書
書中自有顏如玉。比爾?蓋茨是一個飽讀羣書的人。雖然沒有讀完大學,但九歲的時候比爾?蓋茨就已經讀完了全部的百科全書,因此他精通天文、歷史、地理等等各種學科,能夠說比爾?蓋茨不只是當今世界上金錢的首富,並且也能夠稱得上是知識的鉅富。
筆者在給學生上課的時候常常會給他們推薦書籍,到後來學生實在忍無可忍開始抱怨,」天吶,這麼多書到何時才能看完了」,」學軟件開發,感受上了賊船」。這時候,個人回答通常是,」彆着急,何時帶大家去看看個人書房,到如今每個月花在技術書籍上的錢400元,這在軟件開發人員之中還只可以算是中等的」,學生當場暈倒。(注:這一部分學生是剛學軟件開發的)
1.9 使用合適的工具
工欲善其事必先利其器。軟件開發包含各類各樣的活動,需求收集分析、創建用例模型、創建分析設計模型、編程實現、調試程序、自動化測試、持續集成等等,沒有工具幫忙能夠說是步履維艱。工具能夠提升開發效率,使軟件的質量更高BUG更少。組合稱手的武器。到飛花摘葉皆可傷人的境界就很高了,無招勝有招,手中無劍心中有劍這樣的境界幾乎不可企及。更多精彩內容關注微信公衆號:北京尚學堂。
2.軟件開發學習路線
兩千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒進也不保守並不是中庸之道,而是找尋學習軟件開發的正確路線與規律。
從軟件開發人員的生涯規劃來說,咱們能夠大體分爲三個階段,軟件工程師→軟件設計師→架構設計師或項目管理師。不想當元帥的士兵不是好士兵,不想當架構設計師或項目管理師的程序員也不是好的程序員。咱們應該努力往上走。讓咱們先整理一下開發應用軟件須要學習的主要技術。
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.如何學習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公司的工程師打國際長途甚至飄洋過海來告訴你他編寫的類該如何使用吧。他們只能提供文檔給咱們查看,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文檔官方下載地址: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的時候複習數據庫技術;採起的依然是」須要的時候再學」的原則。
若是你的目標是就業,而且是高薪就業,那麼北京尚學堂是你正確的選擇。北京尚學堂一直在爲改變中國IT教育努力着。十年以來,北京尚學堂堅守「爲莘莘學子改變命運而講課」這份情懷,不忘初心。感謝你們的閱讀!