java學習之道 --- 如何學習java?

燦若星辰丶發表於2018-08-08

最近一直在重新學習java的基礎,也寫了一系列的部落格(重新認識java系列)。很榮幸得到了許多同學的反饋。其中有許多人是初學者,來問我一些問題,也有一些是已經有過一定的基礎,看了我的部落格,也有了一些新的認知,來和我討論。當然,大部分人都是在問我怎麼學習,自己不知道該怎麼學了,讓我出個主意啥的,真正討論問題的並且加了我好友的,大概只有兩個吧。因為總有人陸陸續續的加我並且問我怎麼學習啊啥的,一個一個回覆同樣的內容我覺得沒有什麼必要,所以在這裡總結一下,方便自己也方便大家。

前排提示:我不是什麼大神,有n年經驗的大牛。我只是一個在校本科生。不保證我說的都是對的,但是我所說的,都是我自己的親身經歷。不保證對所有人都適用,具體情況,請大家自行斟酌~

java的方向

有一些初學者在學java,但是卻不知道學了java可以做什麼。我來粗略的總結一下。

做桌面程式

桌面程式,就是我們平常使用的客戶端。由於java是一門跨平臺的語言,所以用java寫的桌面程式天生就是跨平臺的。但是,不得不說,awt和swing做一個桌面程式實在是太痛苦了,javafx也不咋地。所以,除非你神經大條或者只是想學習瞭解一下。不建議這條路。

做遊戲

在我的印象裡。。用java寫的遊戲只有mc。。。我知道肯定還有別的,但是應該都不怎麼出名吧(也有可能是我孤陋寡聞)。所以,很明顯,這也不是一條有前途的路,除非你也能寫個mc出來。現在做遊戲還是c++,lua,js,c#多一點吧。講道理我也不太熟,但是我知道,用java寫遊戲不靠譜。

寫服務端

這是學java的三個最好的選擇之一。現在大型的網站基本上都是用java寫的。雖然現在服務端百花齊放,php,nodejs,go,ror,python都在搶這一塊的飯碗,但是java還是有很大的競爭力的。不信?bat現在在春招,你去看一下崗位,都有招java的,但是其他的呢?反正我是沒看到。。

當然,我這不是在說java無敵,宇宙第一,而是說,java在服務端的前景還是很好的。

唯一的不好就是,學的人有點多,初級程式設計師滿地跑,沒有一定的實力還是不怎麼好混的。不過,我感覺現在java服務端找工作還好。。反正我找個實習兩天就找到了(大概是我要求不高。。)

android

這個就是最好的選擇之二了。不多說了,有google爸爸支援,android未來n年還是死不了的。雖然現在也可以用kotlin開發,google也在推自己的dart語言。但是java的地位還是無法撼動的。

遺憾的是,聽說最近android不怎麼好找工作。當然,我只是聽說,畢竟我不是專業的。

嵌入式

n年前,還是直板手機的年代。我記得有的手機支援java。。可以安裝字尾為.jar的軟體。當時覺得這種手機牛比的不得了。因為我在用這種手機之前一直在用辣雞國產,那種叫斯凱平臺的?忘了名字了,反正用鍵盤輸入*#220807#,就可以召喚神龍的那種手機。。。。

扯遠了,當時那種支援java的手機,就是使用的一種叫做javame的技術。javame就是一種輕量級的java,可以在移動裝置(手機,汽車車載裝置,機頂盒什麼的)執行java程式。

不過現在javame差不多也死絕了吧,不清楚。。反正我沒接觸過,哈哈哈。

大資料

這是最後一個我推薦的方向。都說現在是資料時代。各種大資料技術層出不窮。目前處理大資料的技術有python,java,R等。雖然說java沒有絕對的優勢,但是也是一大霸主。不服?hadoop就是用java實現的,還用多說什麼麼?

要學習什麼內容

先宣告一下。我接下來的建議,都是針對在校的大學生或者有充足的時間的轉行的人的。對於那些想要快速轉行,然後找到工作的可能不是很合適,因為我的建議或者說經驗是需要很多時間的。

首先,不管你以後選擇什麼方向。基礎永遠都是最重要的!!!不要覺得自己看了一套視訊,或者看完一本入門的書,能寫個簡單的程式碼就叫學會了。你還差的很遠。工作好幾年的人也不敢說對java基礎瞭如指掌。所以,鞏固基礎不分時間段,你的職業生涯的任何時刻,都應該鞏固基礎。並且,基礎不只是java的知識,還有一些基本的演算法,資料結構,計算機網路,計算機組成原理等。

所以,第一要學的,是基礎!(要不斷的學)

其次,現在網際網路每天都在不斷前進。無論是網站還是app都需要有服務端才能執行的起來(單機的和靜態網站還是不多的)。所以,不管你以後會不會從事java後臺的工作,我覺得了解一下還是很有好處的。而且,一般的大學應該也會開javaweb這門課吧。

所以,我覺得每個學java的人,在時間充足的情況下,可以去學習javaweb。當然,如果你本來就是想往這個方向發展的,那就更不用說了。

最後,我推薦大家瞭解一下大資料。為什麼呢?現在是一個大資料的時代,無論你是否要往這個方向發展,多瞭解一些總是有好處的。分散式檔案系統,分散式資料庫,負載均衡等前沿技術多接觸接觸總是好的。

所以,我也建議大家可以多瞭解一些大資料方面的知識。

當然,以上是我個人的見解。每個人都應該有各自的人生規劃,你也可以按照自己的規劃來。

怎麼學習

其實,我主要是想說這一部分。每個人都有自己的學習方式,我來分享一下我的。

大一

這個時候,剛剛接觸計算機,你可能什麼都不懂,聽課也是一臉懵逼,什麼for迴圈,if語句,噁心的不得了。這個時候你要做的不是抱怨,而是去努力的尋找樂趣。因為你已經入了這個坑了,除非你轉專業,否則你是擺脫不了它的。

怎麼尋找樂趣呢?我覺得,程式設計最大的魅力,就是當你成功的時候的那種發自內心的成就感。不知道大家還記不記得第一次寫helloworld的時候,各種出錯—分號寫成中文的了,大括號少了一個—但是最後終於成功的輸出了結果的那種喜悅。

對於一個剛剛接觸程式設計的人,我覺得,寫遊戲是最容易獲得成就感的。這裡給大家推薦一個之乎專欄— 做遊戲,學程式設計(C語言)。專欄的作者,通過讓一些學生做遊戲來學習c語言。我覺得這個一個很好的學習方式,即有挑戰性,又可以培養出成就感。

大學的入門語言差不多都是c或者c++吧。。如果不是,你也可以參考一下專欄裡的小遊戲,然後用你自己的語言試著寫一下。

但是,我要重點說的是。寫遊戲其實是一件很有挑戰性的事。有的人也許會在一開始就陷入困境,不知道如何繼續下去。這個時候,如果你能堅持下去,多問問老師,學長,百度,google,把問題解決,那你以後肯定會很優秀。如果你放棄了,不要灰心,因為並不是所有的人都適合通過遊戲來培養興趣,你也可以通過做一些acm的題來提高自己。每個學校應該都有相關的網站吧。如果沒有的話,可以去浙大的看看。(來我們學校的也行。。。http://cpp.zjut.edu.cn 或者 http://acm.zjut.edu.cn) 。做一些自己能力範圍之內的題,也可以提高自己的興趣。

當然,這些只是針對一部分同學,畢竟很多人其實對程式碼無感。。根本耐不下性子去寫程式碼。對於這部分同學,我建議去學習html 和 css。因為它們入門超級簡單,是用來寫網頁的。沒有c語音那麼複雜的邏輯,幾個標籤,幾個css就可以設計出一個精美的網頁,我想這也會很有成就感吧。


大一的這一年,是打基礎,培養興趣的一年。不需要你有多麼大的成就,寫出多麼厲害的程式。只要你能夠培養出興趣,並且願意在程式設計這條路上走下去,那麼你的任務就算完成了。

所以,這一年,你要做的,就是培養興趣,讓自己愛上程式設計(最基本的要求)。

大二

假設你現在已經喜歡上程式設計了。但是一般大一隻會學一門語言(預設c/c++,不要問我為什麼,因為我就是這麼學的。。)。所以你可能只是寫了幾個小遊戲,寫了個小管理系統或者刷了一些題。你不滿足於現狀,你想做一些更有意思,更好的東西。同時,這個時候,學校應該也開了java課了。(如果沒開,你就自學。畢竟這篇文章講的是java,主角再不登場就沒有多少露臉的機會了)。

寫在前面:大二要做的,是拓寬你的廣度!!!廣度!!

首先,你要好好學java。可能學校的進度是一個學期。但是我建議大家用一個月的時間學完。因為有了c和c++的基礎,java其實很容易就學會了(入門級學會)。更好的情況是,你在大一結束的那個暑假,就抽時間先搞定java基礎。這樣當開學的時候,別人還沒接觸java,而你可以驕傲的和別人說,你都學完了。成就感滿滿的。

那麼,怎麼學java基礎呢?我的建議是視訊為主,入門書為輔,自己跟著寫程式碼。

看書其實是一件很枯燥的事情,如果你初學java,只是看書的話可能配置一個環境變數就要搞好久,這會打擊你的自信心。不要小看配置環境變數這個過程。我記得當時兩天配不好環境變數最後讓我幫忙的人可不少。但是視訊就好多了,因為老師會親自演示給你看,你會少走很多彎路,並且也比書有趣多了。

書為輔,是因為老師不可能記得所有的知識,總會有疏漏的地方或者講得不太好的地方,這個時候 書就可以派上用場了。看完一節課的視訊,然後關掉視訊,自己寫一遍相應的程式碼,出錯了自己先試試能不能解決,是在不能的話,再看一遍視訊,直到跑通。然後去看看書裡對這部分知識的講解,加深印象,查漏補缺。

這裡的重點是,一定要自己寫一遍程式碼。你看的時候覺得自己會了,可是大部分時間,你一寫全是錯誤。所以一定要自己寫。並且,在你初學的時候,不要使用編譯器(eclipse idea NetBeans等),就使用notepad++這種型別的編輯器就可以。

這套流程最大的缺點就是耗時比較久,但是效果是很好的。java裡有很多都和c/c++一樣的,比如一些語句什麼的,如果你已經掌握的很好了,直接忽略掉這些也是可以的,這就看你自己的情況了。

推薦一些學習資料(後面會給出)。

  • 視訊: 畢向東,馬士兵,韓順平的視訊都挺好的。口碑也都不錯,不信可以自己去百度一下。我看的畢向東的,講的挺有趣的。但是每個人口味不一樣,你可以多下載幾套,都聽一下,然後選一套自己喜歡的。
     
  • 書籍:入門推薦《head first java 》。head first 是一個系列,這系列書最大的特點是圖文並茂和案例驅動,讓讀書的過程不那麼的枯燥。《瘋狂java講義》據說也挺不錯的,但是我沒有看過,不做評價。
     
  • 編輯器推薦:notepad++ 免費,小巧。初學者夠用了,直接百度下載就好。sublime , vs code, atom 也可以,挑一個自己喜歡的就好。

一個月,幹掉java基礎!這是你大二首先要做的事。

前面說過,這一年,你要做的是拓寬自己的廣度。什麼意思呢?就是說,你要儘可能的去多接觸一些技術,多學一些知識,因為你以後很難再找到這麼多你可以自由支配的時間了。

java基礎搞定。接下來,學習java web。

你要知道,優秀的人永遠都走在大部隊的前面。不要學校安排什麼你就學什麼,學校不安排你就不學。事實上有的老師講的不是很好,大學裡真正有用的知識,都是自己學的。所以,接下來要做的是自學java web。

依舊是視訊+書+寫程式碼。

java web更重要的是實踐。我當時學的時候的書就是學校的教材。。我是基本沒看書的。就跟著視訊一步一步來,有問題就google。在大二上學期結束的時候,完成javaweb的學習。

因為需要和前臺做一些互動,所以免不了要學一點前端的知識(html + css + js)。在正式學習web之前,先學點前端知識(資料都準備好了,自取不謝)。然後按部就班的學習javaweb。

這個過程中,遇到的問題千奇百怪,我記得我當時一個小問題google了一天都沒能解決,最後才知道是jar包版本的問題。。所以,遇到問題是很正常的,遇到很難解決的問題也是很正常的,只要你肯問,肯查總能解決。

好了,你現在已經有了自己寫一個小網站的能力了(醜點無所謂)。接下來就厲害了。去參加比賽!進實驗室!做專案!沒有什麼比做一個專案更能提高水平了。

所以,你大二下的任務就是儘可能的去做專案,依次來鞏固你學的技術。可以參加一些比賽,或者加入實驗室,或者尋求老師的幫助。總之,你要做專案!

除此之外,你需要繼續擴充套件你的視野。前端(不是你之前學的簡單的html!),python,android,ios,cocos。。。只要是你感興趣的,就去接觸一下,不需要你學的多厲害,也不需要你完全掌握。只是為了讓你的視野更加開闊,知道原來還有這麼多技術,原來還可以這樣。

大二的一年,你需要學會java和javaweb,並且至少做一個拿得出手的專案。同時,儘可能的提高你的視野。當你覺得你一無所知,你還是個菜鳥,這一年的任務就完成了。

大三

這是很關鍵的一年,因為這一年你將決定是否考研。考研的我就不管了。。接下來是針對準備一畢業就工作的同學的。

寫在前面:這一年,你要做的,是深度!

通過大二一年的努力,你的廣度已經足夠了。並且在這個過程中,你應該也找到了自己最感興趣的方向,如果沒有,那就繼續研究java吧,總比你不知道學什麼好。無論怎樣,這一年,你的重心都應該放在一條路上。以java為例。

首先,鞏固基礎!

這是最重要的。怎麼做呢?進階書籍+看部落格+寫總結+寫開源專案。

這個階段的視訊不是很多,也沒有必要了。直接看書+看部落格+開源專案,最後再總結就夠了。我舉個例子,比如,我現在要學設計模式,我買一本《head first 設計模式》然後一個模式一個模式的學,每學一個模式,看一遍書,然後google一下這個模式,看幾篇高質量部落格,結合書和部落格自己寫一個總結,甚至可以自己寫一個部落格專欄,讓後來者也能享受到你的學習成果。同時,可以好好整理一下自己學習過程中的程式碼,放到github上,最好可以試著封裝一下這個模式,讓其他人更方便的使用這個模式。當你收穫一個又一個的star時,你會非常有成就感的。

上面是學習的大致方式。學完了,怎麼檢查自己有沒有學好呢?給大家提供一個網站牛客網,你開啟就知道怎麼用了。

基礎都包括什麼呢?

  • 物件導向的思想。
  • java常用類。
  • 集合框架。
  • io
  • nio
  • 多執行緒併發
  • 設計模式
  • 演算法
  • jvm
  • 計算機網路
  • spring
  • orm框架
  • 。。。

每個知識點,不只是要會用,更要能理解一下底層的原理,有必要的話可以看看jdk原始碼或者框架原始碼。

推薦一波資料。

  • 《java程式設計思想》《java核心技術》《head first 設計模式》《設計模式之禪》《java併發程式設計實戰》《重構 改善既有的程式碼設計》《演算法導論》

你要知道,bat等大廠每年會有兩次招聘,一次春招,在每年3-5月,一次秋招8-10月。春招是招實習生的,秋招是招正式員工。所以,如果你想進這些公司,就要提前做好準備。至少,上面的那些基礎你是必須得都掌握的。

大三這一年,要讓你的深度足夠,有能力的可以繼續延伸自己的廣度。這個階段,最忌諱的是朝三暮四。早上看python,下午發現go很有趣,看了一下午go,晚上聽說R很厲害,又去研究R了。千萬不要這樣!不要成為各個領域的雜牌軍,你現在要做的,是在一個方向有一些建樹。

大四

實習。。。

實習的話我能給的建議不多,雖然我的實習經歷還蠻多的。但是畢竟不是混跡職場多年的人,就不亂說了。

找工作,待遇,環境挺重要的。但是我覺得,這個公司的技術棧,行業背景也是很重要的。我實習的三家公司是三個不同的行業,所以我知道,不同的行業差距還是很大的。有的公司招聘的時候會要求你在這個行業有過經驗啥的。所以,行業背景還是有必要注意一下的。同時,為了自己為了的前途,一定要問清楚公司的技術棧!

當然:作為一個有抱負的人,畢業設計一定要向著優秀髮展!並且依舊要不斷提高自己的水平。這個時候,學什麼可能得根據公司的需求來了,但是,永遠不要停止學習!

學習資料

這裡放一些學習資料:https://github.com/CleverFan/awesome-java-datum 。簡單的總結了一下,還有很多沒放上去。最近公司的事情和挑戰杯的比賽搞得我有點頭大。。忙完這陣會都放上去的。大家可以先收藏著。。

總結

大一:培養興趣
大二:橫向發展,廣度優先
大三:縱向發展,深度優先
大四:選好方向,不斷提高自己

事實上,大二結束以後就可以試著去找工作了(我就是),這個階段,不要在意工資什麼的,只要有機會你就去,一定會有收穫的。如果你不知道學什麼了,有一個很雞賊的方法,就是可以多去參加一些面試,多投簡歷,面試中一定會有你不會的問題,然後你就知道學什麼了吧?(面試過了,可以不去的嘛。。。)

在你的學習過程中,你會遇到很多的bug,我建議大家把每個解決bug的過程都記錄下來。因為同一個問題,你可能會遇到好幾次,整理bug,不僅僅是為了下次遇到能快速解決問題,而且可以養成一種歸納整理的習慣。可以寫成部落格,也可以以筆記的形式記錄,比如有道雲筆記等,gitbook也是一個好東西~


我現在是一個大三的學生,經驗和經歷都有限。所以我也不確定我的學習方式,以及我的看法是不是正確的。但是這些都是我現在正在用的方式。所以我把它分享出來。如果有哪裡說得不好或者不對,請路過的大神指點一下。感激不盡。

如果你還需要其他的資料,或者想和我一起學習。歡迎加群281440885。加群請備註,來自部落格。剛剛建的,裡面只有幾個人,都是學生~

很晚了。。先寫這些。有時間再補充,歡迎大家批評指正。

轉自http://blog.csdn.net/qq_31655965

相關文章