論新手該如何學習java?
由於我國高等教育制度教材陳舊,加上java自身發展不過十年左右的時間,還有一個很重要的原因就是java這門語言更適合商業應用,所以高校里大部分博士老師們對此語言的了解甚至不比本科生多。
在這種環境下,很多人對java感到茫然,不知所措,不懂java能做什麼。
即便知道了java很有用,也不清楚該從哪裡入手。
所以就有了java入門難,這一說法。
一. 思考一下
學習Java之前,先別急,靜下心來好好想想:
1)你對學習Java是否有興趣?
2)你是否能靜下心來堅持不懈地學習?
嗯,這是個容易但又絕對不應該忽略的問題,你確信自己對Java感興趣、而且又有吃苦的準備,那你才可能學好Java!如果具備這兩點條件,就請繼續往下看……
二. 準備一下
請不要把你的學習Java之路和其它計算機技術分開看待,技術的聯繫往往是千絲萬縷的,你應該掌握一些學習Java所涉及的基礎知識,對於 「CLASSPATH要怎麼設置啊」、「跪求JDK下載地址」等等問題,你不該問,因為Internet上太多答案了,甚至換個角度說,你是不是還不適合直接學習編程?
1)買本Java學慣用書。
JDK 6正式版剛剛推出,市面上你暫時買不到JDK 6的書籍,但我仍推薦你買一本適合入門的、較新JDK版本的Java書籍,那麼,你現在選擇一本講述JDK 5的入門書籍還是有條件的。我可以推薦一些入門書,但是我不打算這麼做,因為合我口味的,不一定適合你。但無論如何,《Thing In Java》絕對不應該作為你入門Java的第一本書籍!
記住,網路上學習Java的資源很多,但基本不夠系統,擁有一本Java入門書籍,是你系統學習Java的基礎。
2)準備Java學習環境。
準備你的學習環境,很簡單,安裝JDK 6,然後用類似UltraEdit、EditPlus的文本編輯器配置你的學習環境,Internet上有很多關於如何配置的文章。初學Java,不建議用IDE工具,通過一行行的敲代碼,你會碰到很多問題,只有這樣,你才能學會怎樣解決問題,並加深自己對Java的理解。掌握一種編程工具,比如說Eclipse。
準備好後,開始進入激動人心的Java學習里程吧!
3. Java基礎學習之路
學習Java的過程雖然辛苦些,但又是處處有精彩!學習過程中的心態一定要保持專一,網上關於語言間的「PK」到處都是,別被浮躁影響!認準了Java,你就堅持!克服心魔,恆心最終會給你回報的。
Java的體系分為Java SE、Java EE和Java ME(JDK 5.0以前分別叫J2SE、J2EE和J2ME),Java的敲門磚就是Java SE了,也就是你要入門學習的內容,不論你日後是選擇哪個體系領域作為發展方向,你都得從Java SE起步。
學習Java SE,打好Java基礎;如果想學Java EE,對於AWT、Swing是否要學習呢,我個人是覺得還是要知道其所以然的,特別是其事件處理模式,我強烈建議初學者一定要弄清楚,其他具體的開發就不一定要全面掌握了,畢竟AWT、Swing方面的內容足夠用幾本大部頭的書才能描述詳盡;當然,如果你的工作就是做 AWT、Swing開發,那就另當別論了。
I/O、Thread都是基礎之一。
三: 要動手去寫去練
無論如何,請堅持不懈的動手實驗!
學習Java要動手,僅僅是看和聽是不能夠學好編程的。總有同學會問我這樣的問題,說:"老師我上課都聽懂了,可是怎麼一動手就沒有任何思路呢?" 對此,我一般都會說不要著急,如果你只是上一兩節聽懂就想行雲流水的話,那老師這些年的鍛煉真是白費了,這麼多年的苦練才能略有些行雲流水的感覺,你一朝一夕就想自己能夠達到,不是太奢侈了嗎?
作為編程的過來人想一下,當年自己學編程的時候是什麼時候有思路的呢?至少也是照貓畫虎畫了一段時間之後吧,我本人是在某一個領域畫虎畫了上萬行代碼的時候才慢慢有自己思路的。就像寫作文,要有自己思路總是一般來說要經過幾個階段,首先學習辭彙,然後學習造句,然後大量閱讀別人的文章,自己模仿著寫一些,逐漸的經驗積累,才能形成自己的思路。學編程,恐怕也得慢慢的來吧,只是看一看、聽一聽視頻,是不足以學好編程的。
所以,動手吧,跟著做,一行一行的跟著敲,一個項目敲完了,比如坦克,再試著加一些自己的功能,按照自己的思路敲一些代碼,收穫遠比干聽大的多。
如果遇到,暫時對於一些思路不能理解的同學,我一般都會勸告說,動手寫,先寫代碼,量變會引起質變的。而這種質變的確發生過不少次。
提醒一句,要理解代碼思路之後再跟著敲 ,背著敲,千萬不要左邊擺著別人的程序,右邊自己一個一個字母的寫,這就不再是程序員了,成了打字員了。
紙上得來終覺淺,所以:別問那麼多,別想那麼多,動手寫吧。
四: 要事為先,別鑽牛角尖
對待人生的任何事情都要:抓大放小,要事為先!對於一個以前從來沒有接觸過java的人,java無疑是龐大的,似乎每個領域都可以拓展開來都是一片開闊地,每一個領域要想深入接觸到每一個細節所耗費的精力都是巨大的。這個時候大家都胸懷壯志,兩眼發光的盯著每一個嶄新的知識點,遇見了任何一個知識點都恨不得摳的清清楚楚,明明白白。 難道這有什麼不對嗎?我的意見是,這樣並沒什麼大毛病,但是學習效率太低了!我們推薦的學習方式是,抓大放小,要事為先。比如說學習J2SE的時候,學到GUI這一章,有的同學認為,既然學到這兒了,我們去把SWING細細的了解一遍吧;還有的同學,遇到了在Linux下的Shell編程,就恨不得把Shell先學成專家才肯,或者是才敢,繼續往下學習;有沒有過這樣的感覺,一本書的上冊沒有學好,覺著下冊心裡也沒底兒,甚至非要把上冊複習一遍才敢繼續學習。如果你也是這樣,要去看看心理醫生啦,沒準兒會有潔癖的毛病。 任何事情都要追求完美才敢繼續往後進行,是一種性格缺陷大膽的放棄一些東西吧,有失才有得,把自己有限的、寶貴的精力用在對於就業直接相關的地方,這才是最有效率的學習方式!等你參加工作,有了可持續發展的事業動力和經濟基礎,有時間有精力閑的沒事兒乾的時候,再去研究那些其它吧。曾經有一個故事,說得是產能和產量的關係。一個人喜歡讀書,讀了一輩子,無所不通,這時候要做任何工作都可以,他的產能到了極致,但是,他老了,即便每天產出大量的東西也不能維持多久了,一輩子的產量並沒有多少。另一個人直接工作,忙,天天在機器旁日復一日,做了一輩子,沒時間學習和進修,可以想像,產量能有多大呢。人的一生,要鍛煉產能,也要及時產出,引擎要轉,也要停下來加油,這兩者平衡的越好,你的貢獻和產量就會越大。如果鑽研的東西和產能目標(或者說近期的產能目標)無關的話,要捨得放手。所以,對於SWING,暫時先扔在一邊吧。對於shell,對於各種協議過於詳細的細節,對於喜歡的遊戲編程,對於javascript各種華而不實的效果,都暫時和它們分別吧。一切和我們的直接工作目標關聯不大的東西,扔在一邊或者弄清楚到足夠支持下一步的學習就可以了。 那這樣豈不是妨礙我成為通曉各種細節的高手了嗎?我一向不認為一個人掌握了很多很多知識點的細節就是高手了,一個人如果告訴你,回字有四種寫法,你會認為他是高手嗎? 毫不客氣的說,現在我們所教授的所有知識細節在網上或書中都可以找到,只要你肯花時間花精力去動手試,去鑽研,沒有什麼不能掌握的。struts、spring你能掌握嗎?當然能!但是如果把時間花在spring的各種細節的研究上,花在研究中國企業應用不廣泛地的spring mvc上,這個精力就太浪費了,而且學習的積極性會受到打擊,誰願意整天泡在細節的蜘蛛網中掙扎不出來呢?誰願意天天經歷風雨卻總是不能見到彩虹呢?蓋房子,要先建骨架,再談修飾。畫山水,要先畫結構,再談潤色。認識一台結構複雜的機器,應該首先認清楚脈絡,然後再逐步認識每一個關節。為了應付從小學到大學的考試,我們背了各種各樣的不應該提前掌握的細節,同時也養成了見到細節就摳的學習習慣。而現在,是到改改的時候了。 請在合適的時間,做合適的事情吧。把時間和精力花在作項目上面,花在寫作品以及鍛煉解決問題的能力上面吧,這是邁向高手的正確的而且快速的方向。 我一直不認為一個課程提供了很多很多的細節就是優秀的價值高的課程了,掌握必要的細節,這個不含糊,至於其他,或者通過視頻給出(這樣可以給出更多的細節,但是不佔上課時間,課上只講重要的、必要的細節知識),或者在掌握了自學的能力後自己能夠查出,這才是正途。當你看書到某個地方暫時不理解的時候的,暫時放手吧,追求一些行雲流水、自然而然的境界吧,只是不要停下前進的腳步,不要被大路旁邊的支根末節干擾了你前進的行程,項目,真實的項目,這才是目的,就在不遠的前方。 陶淵明讀書,叫做「不求甚解」,但他是大詩人。諸葛亮讀書,總是「觀其大略」,但他是大政治家。作研究的,是在確定了方向之後才詳細的研究深入的東西。到了廬山,脈絡形狀扔在一邊,盯著一棵棵小草、一粒粒石子的看,怎麼樣才能識得「真面目」?作為應用型的人才,是研究回字的n種寫法還是抓緊時間向著主要應用的方向努力,請自己作出抉擇。 以項目驅動自己的學習吧,當把握了技術的脈絡之後再去補充細節的研究,是正途。這輩子就不研究其他的方向了嗎?當然要研究!但是在將來合適的時間再說吧。 所以,抓大放小,要事為先!
五: 問題解決之道
既然是學習,就不可能不遇到問題。 既然是學習,就沒有方便的和老師探討的機會。 那麼,遇到問題之後,環境配不通,程序調不過,運行不正常,遇見這些惱人的問題的時候,該怎麼辦呢? 首先我要恭喜你,遇見問題,意味著你又有漲經驗的機會了,每解決一個問題,你的JAVA經驗值就應該上升幾百點,問題遇到的越多,知識提升的越快。 但是總是解決不了也是很惱人的,怎麼辦呢? 我一般要求我們的學生都是這樣來進行的。 當你遇到一個問題的時候:
1:要仔細的觀察錯誤的現象,是的,要仔細 有不少同學的手非常快,在編譯一個程序的時候,報了一大堆的錯誤,掃了一眼之後就開始盯著代碼一行一行的找,看清什麼錯誤了嗎?沒有!有的時候安裝軟體出問題了,一個對話框彈出來說出錯了,馬上舉手問老師:「不得了了,出錯了,出錯了」。 「什麼錯誤?」 「還沒看呢?」 這都是典型的不上心的方法!請記住,學習編程並不是一件很容易的事情,自己首先要重視,要用心才可以。在開發中,仔細觀察出錯信息,或者運行不正常的信息,是你要做的第一件事。讀清楚了,才能在以後的步驟中有的放矢,哭了半天,總要知道哭的是誰才成。 這裡又分三種情況: A:錯誤信息讀懂了,那麼請進入2步:要仔細思考問題會出在哪些環節 B:沒讀懂,愣是一點沒看懂,進入第4步吧:google C:讀了個半懂,有些眉目但是不太能確定,第2步和第4步結合著來。
2:要仔細思考問題會出在哪些環節(重要) 當你讀懂了一個問題之後,要好好的思考這個問題可能會在哪些環節上出錯。 一輛汽車從總成品線上下來,車門子關不上! 哪錯了?你怎麼查? 當然是順著生產線一站一站的查下來。 程序也是一樣的,也是一系列語句完成後產生的結果。 寫一個網路程序,總是發現伺服器端列印不出接收的數據,有幾個環節會出錯?仔細分析這個現象的環節: 客戶端產生數據->按「發送」按鈕->發送到伺服器->伺服器接收到後列印 這幾個環節都有可能會出錯: 有可能客戶端根本就沒產生數據,有可能發送按鈕按下去後根本就沒發出去,或者發出去的不是你產生的東西,或者根本就沒連接網路,或者發送出去伺服器沒有接收到,或者接收到之前就列印了等等等等。 學著去這樣仔細的分析程序的環節和這些環節可能會產生的問題,你的經驗值定然會大幅度快速的提升,這樣做很累人,但是一件事情如果做下來一點都不累的話,這個東西還有價值嗎?在網頁A輸入了一個人的名字,提交到B,首先存儲到資料庫,然後再讀出來,發現亂碼!怎麼辦?當然是分析環節: 客戶輸入->HTTP發送->B接收->存儲到資料庫->讀出->展現到網頁 每個環節都可能出問題,怎麼才能知道哪裡出的問題?繼續往下讀。
4:如果還不行,百度或google吧 還查不出來?恭喜你,你遇到的錯誤是值得認真對待的錯誤,是會影響你學習生涯的錯誤,問一下google或者百度吧。照著下面的方法查查看。 一般來講,搜索引擎可以搜到各種知識點,我曾經跟同學們開玩笑說:「學會了怎麼google或者baidu,其實沒必要跟老師學了,自己全都搞懂了,沒有必要找個老師來給你培訓了。」當然,只是玩笑,培訓的作用有三個: A:系統化知識 B:真實項目鍛煉經驗 C:少走彎路,節省時間 如何查搜索引擎? 先精後粗,首先先進行盡量精確的查找,比如一個錯誤,SocketException,你懷疑它是在connect()方法出的問題,那麼當然是選這樣的關鍵詞java connect SocketException 先中後英,本著以解決問題為主的想法,練習英文還是先放在一邊吧,首先應該在中文網頁中查詢,還不行的話,搜索英文的吧。有很多東西就像一層窗戶紙,遠看灰濛濛怪唬人的,你壯著膽子一捅,它就破了。閱讀英文的書籍就是如此,不是想像中的那麼困難:)寧可在沙場上戰死,也不能被嚇死不是嗎:) 信息篩選,搜索出來的結果不見得能夠完全匹配,建議大家多閱讀前幾頁的搜索結果,多打開幾個網頁看看,不過,我的經驗是超過3頁一般就沒意義了,所以超過3頁還沒有找到合適的答案,或許應該調整一下關鍵詞,或者放粗整個搜索的結果了。 經常的進行知識難點的查詢,如果一個問題牽扯的面比較廣,就乾脆到網上搜索一些相關的專題,比如「java 亂碼 mysql」 「oracle 創建用戶」等等,如果有必要,不要犯懶,勤動手寫一些小小的測試程序,來弄明白知識點的細節。這也是漲知識的重要的途徑。
5:什麼?還不行?那麼就BBS吧 如果實在還不行,就到BBS上面問一問高手吧。 到哪個BBS上? google或者百度不就行了么?關鍵詞「java論壇」「java bbs」 然後在搜索結果里好好的看看那些活動頻繁的論壇,以後就是你經常光顧的地方了。CSDN論壇首頁就很不錯。 向別人提問是非常需要技巧的!曾經有人問我這樣的問題:「請問如何才能學好java呢?」這個要求太泛泛了。還有人給我一段代碼甚至jar包也寄過來,然後說老師的我的代碼中有個錯誤您幫我查查。我沒有辦法去花大量的時間建立環境去調試一個還不知道存在不存在的錯誤! 還有人在BBS上問這樣的問題:「是否有人能幫我完成一個完整聊天的程序?請幫我寫一個登陸模塊吧!」 這個要求有些過分了,有人幫你做是你的運氣,沒有人幫你是正常反應。 向別人提問,應該首先確定你已經做了自己應該做的事,簡單說是我前面列舉的1,2,3,4步你都作過了,然後再求助於人。不要沒有經過認真思考就草率的向別人提問,自己也不會有長足進步的。 那我該怎麼樣向別人提問呢? 在google或百度搜索《提問的智慧》,你會找到答案。 在這裡我給出一個鏈接網頁鏈接,磨刀不誤砍柴功,先花點時間去閱讀一下吧。 得到別人的回答,要懂得感恩。不需要去寫信感謝,不需要支付費用,不需要那些花言巧語,做到下面這一點就夠了: 當你逐步成為高手的時候,要回答別人在論壇上提出的問題,有時間有精力的前提之下!
6:還解決不了?問老師吧,這個只能是在你參加了培訓的前提下了。
六: 項目的自學現在就業競爭的激烈程度已經遠遠高於當年了,記得我當年畢業時,一個會編程的畢業生站到台上,大聲問道:「我會ASP,月薪5000有沒有人要?」 台下的企業馬上嘩的舉起一大片手:"我要我要!"。那時,沒有任何項目經驗也會有人提供學習的機會。這種好日子恐怕一去不復返了(有些誇張,但無疑當時找一份不錯的工作是比現在要容易的多)。而現在,即便是各種必要的知識你掌握的差不多了,但還有一座大山橫在你的面前,那就是——項目經驗。 有經驗的程序員都知道,學習編程的最有效率的方式,恐怕就是把你扔到一個項目組,連滾帶爬的做下一兩個項目來,你馬上會發現所有的知識點全都連到一起了,不再是分散的,而是形成一個整體了。那種感覺是僅僅深入鑽研知識點而不寫真實項目的人所不能體會的。一個項目就是一根繩子可以把大片的知識串到一起。 如果想鍛煉實際開發的能力而不僅僅是背誦或者了解一些知識點,如果想成為真正的好手而不僅僅是背誦「回」字有幾種寫法,那麼,作項目吧! 目前,各種編程的知識點變得越來越容易掌握,按照JAVA自學之路 五:問題解決之道中的各種辦法也可以逐步積累自己知識的廣度和深度,那現在什麼才能夠體現水平的不同?當然是項目經驗。 在前面基礎知識的積累之下,我們要開發項目來積累自己的開發經驗。如開發以下項目:
1:Chat & Tank系列2:BBS3:Shopping(近期公布) 那麼如果自學我們應該怎麼樣才能學習項目的開發呢?一個比較有效的辦法是,可以在現有項目的基礎上做的更深入一些,比如在你按照視頻完成了BBS之後,可以增加一些其他的功能,例如註冊/積分/精華/搜索/貼圖等等,在完成了Shopping之後,可以增加一些評論/排行/統計/存貨等等方面的業務邏輯,嘗試用自己的技術將他們作出來,這樣既積攢了項目經驗,又記住了知識點。那麼如何才能確定我要寫什麼樣的業務邏輯呢?應該講這對於一個初學者是非常困難的,一些簡單的系統,比如說BBS、Shopping、圖書管理等等,它們的業務邏輯很容易確定,去瀏覽和參考一些現成系統的功能,很容易就能了解了。但是對於商用的大型系統,光是了解業務邏輯本身就會花費大量的精力,如果有時間有精力有財力的話,還是建議考慮一下培訓吧,這樣經驗的積累和薪水的提升會更快,從以前的統計數據看非常容易就可以回收這筆投資。如果條件不允許,那麼就按照上面的方法來學習項目吧,不要因為暫時不能接觸更大型更深入的項目而氣餒,記住:機會總是青睞有準備的頭腦,努力吧。
未完待續。。。。。(java學習路線圖)
六. 小結
永遠記住:自始至終,實踐是學習Java技術歷程中極其重要的一環。脫離了實踐,是學不好技術的!
Java學習、實踐之路依然沒有捷徑,況且一步步走來,要學的東西很多,勤奮是金!
善於利用Internet上眾多的資源,多吸取些別人的經驗。
目前關於Java的爭論很多,如「Java正走下坡路」、「Ruby必將取代Java」等論點甚囂塵上,但正如我前面所言,這是一種浮躁的表現,Java的前景非常好,特別是Java開源以後!就讓他們去吵去吧,掌握了Java,你就掌握了當前最火的技術。
「梅花香自苦寒來」,當你掌握了紮實的Java開發基礎,你就能把手中的這把「屠龍刀」、「倚天劍」舞得風聲水起!那時,你一定會有一種成就感。
※Java初學者最全的基礎問題及答案匯總
※幾分鐘讓你了解 WEB、UI、JAVA!
※Java其實很簡單 表達式
※其實Java很簡單 之基本套路
※Java 多態
TAG:java吧 |
※Linux新手入門怎麼學?0基礎是否適合學習Linux?
※ScienceDaily 告訴你,如何讓孩子從新手到流利的閱讀習得
※Vintage手袋PK全新手袋,你會怎麼選? 【新手袋圖鑑】
※Anitama新聲 新手村的大Boss
※新手入門必學之Python 語法
※劉遄:讓新手更有效的學習linux技術
※Opus Magnum新手操作教程
※新手必讀系列:實例解讀TensorFlow
※新手不會畫眼妝?Angelababy同款眼妝適合你
※Vintage手袋PK全新手袋,你會怎麼選?新手袋圖鑑
※魅力值max!Megahouse《海賊王》女帝全新手辦來襲!
※Vintage手袋PK全新手袋,你會怎麼選?「新手袋圖鑑」
※TensorFlow手把手教你概率編程:TF Probability內置了開源教材,新手友好
※新手游《Idola Phantasy Star Saga》預約活動開啟
※聽說Prada榮宅crossover中國藝術家,不背著新手袋打卡怎麼行?
※Python Web開發:教你如何解放路由管理,新手教程!
※Flatpak 新手指南
※乾貨分享:亞馬遜新手賣家該如何優化Listing
※Android Q beta 2 新手勢,新彈窗
※新手入門:一步一步教你如何安裝PaddlePaddle