如何學Java,我說點不太一樣的學習方式

如何學Java,我說點不太一樣的學習方式

首先聲明,這篇文章不是賣課程、介紹培訓班的廣告。

最近有不少讀者通過微信問我:小白應該怎麼學好 Java?

提問的人裏有在校大學生、有剛參加工作的、有想轉行做程序員的,還有一部分是最近找工作不順的。

現在行情不好,很多人都焦慮,但是光跟着焦慮不解決問題。作爲程序員,還不如靜下心來,少受干擾,專心提高自己。

繼續說回到學 Java 這個問題上來,網上 95% 以上的文章都是說介紹學習路線、Java書籍和視頻的。

學習路線無非就是:

Java:語法、面向對象、IO、集合、異常、多線程……
Java WEB:Tomcat、servlet、Struts、Spring……
持久化相關:MySQL、Hibernate、MyBatis……
…………
書籍、視頻說的比較多的有:

《Head First Java》、《Java 編程思想》、《Effective Java》……
畢向東、劉意等老師的視頻。
Java 家族成員太多,學個 Java 怎麼要學這麼多東西?

學習資料越收集越多,這要學到什麼年頭?很多人都是收藏從未停止,學習從未開始。

我今天就和大家說點不一樣的,我學 Java 中對我幫助最大的三段經歷。這三段經歷都是發生在我剛工作的前 5 年中,我個人認爲,程序員的前 5 年是技術突飛猛進的階段,這個階段非常重要。

經歷一:遇到了志同道合的好基友
這段經歷是從我工作之後第三個年頭開始的,因爲重要,所以先說。

那時候我跳槽去了一家新公司,在這家公司就幹了不到一年,如果不是因爲認識了兩個程序員,這段經歷幾乎都快忘記了。

這兩個程序員和我年齡相仿,都姓劉,爲了省事,後面統稱二劉吧。對我來說,如果用一個詞來形容他倆,就是:良師益友。

認識二劉之前,我覺得自己水平還可以:會寫 CRUD、JSP,會用 Struts,會扯幾個設計模式。現在看來,就是一個能熟練寫代碼的程序員而已,動手能力還湊合,腦子裏的知識不成體系。

從認識二劉的第一天起,就被全面碾壓。學校、專業的碾壓就不用說了,關鍵是從他們嘴中我聽了很多之前都沒聽過的名詞:敏捷開發、重構、結對編程、領域模型……

說實話,當初剛接觸這些的時候,我是很排斥的。舉幾個例子:

看到二劉結對編程,心想一個人幹活、一個人閒着,這不是偷懶嗎?
重構代碼:程序跑的好好的,我爲啥要改我的代碼?有重複代碼怎麼了?有重構的時間,還不如再實現倆新功能。
單元測試:代碼還寫不過來,哪有時間寫單元測試,再說了,不是有專門的測試嗎。
領域模型:別和我說什麼貧血不貧血,我的 JavaBean 裏就只有 getter、setter。
好在二劉足夠有耐心,對我不拋棄不放棄,反覆給我洗腦,終於讓我這個思想落後青年,接受了他們的思想,後面經常和他倆一起學習、實踐、交流。

學 Java 很辛苦,大部分人自制力差,一個人學容易偷懶。找幾個好基友一起學,確實提高快。在這裏要感謝一下當初二劉對我的幫助。

到現在我和二劉還是好朋友,跟他們一起學到的重構、DDD、TDD、架構模式這些思想,讓我受益至今。相比於Struts、Hibernate那些技術來說,這些更像是程序員的內功,內功不會很快過時。

經歷二:找到了組織——BJUG
如果說認識二劉是我上了一條賊船,那麼加入 BJUG 就是上了一艘航母。加入 BJUG 還是通過二劉,你看好基友是多麼重要。

舊文中提到過 BJUG 這個名字:
Beijing Java User Group的簡稱就是 BJUG。從名字就能看出來,是一羣在北京工作的 Java 程序員聚在一起的一個小團體。

BJUG 是一個非常活躍的技術社區,我們都有哪些活動呢?

最主要的活動是線下技術分享,分享基本都在週六下午,一下午能分享 2-4 個主題。

現在還能百度到當時的信息,給大家貼幾張圖。

從這幾張圖上,大家能看出了,我們當時分享的都是技術乾貨。在冰雲的熱心組織下,社區弄得還可以,成爲 Top 50 的 Java User Group。

除了技術分享,我們還一起翻譯資料、書籍。當然還少不了一起聚餐腐敗。

BJUG 不僅僅是一個技術社區,還是一個有愛的社區。曾經一名核心會員得了重症需要換骨髓,面對夥伴的不幸,大家捐款相助,爲夥伴的康復貢獻了綿薄之力。

可惜的是,BJUG 後期人變多了,人多了之後交流的質量我感覺反而降低了,後面慢慢活動越來越少了。現在看來,人多不一定是好事,小圈子反而更有效率。

當時在 BJUG 裏我好像沒做過主題分享,因爲不自信,都是充當聽衆,這也算一個遺憾吧。

不管怎麼說,BJUG 裏牛人非常多,我屬於那裏邊最菜的了。能跟那些牛人學多少東西,你們可以自己想象一下。

總之,經歷了二劉和 BJUG 的洗禮之後,後面幾年我找工作面試的時候,沒被技術面試卡住過。

經歷三:擼幾萬行代碼
終於可以把時間調回到我剛工作的頭兩年了。

我的大學一般般,非 985、211,我也不是計算機專業的,大四參加了一個 Java 培訓班。參加培訓班之前的計算機水平:QQ 熟練、紅警精通。

培訓半年之後的水平也不咋地,畢業之後能找到程序員的工作,主要因爲趕上了好時候,那時候缺程序員啊,大學剛擴招,哪有現在這麼多畢業生,而且大學還沒教 Java。大部分培訓機構還在教網頁三劍客,能教 Java 的老師就很少。

有了培訓班的基礎,我工作之後也能湊合幹,不過還有太多太多不會的知識,不會就學唄。

最開始我學習靠看書,看《Java 編程思想》,也不知道是書太難了,還是翻譯的太晦澀了,看書真看不懂啊,書又厚,我看了幾個月愣是一遍都沒看完,經常是看了後面忘了前面。

後來我乾脆就把書扔一邊去了,直接擼代碼!

起初是擼簡單的,擼各種常用類、常用方法的例子,這樣方便以後拿起來就用。另外,擼的多了,慢慢攢出了自己的一套工具類,包括String、數組、日期、類型轉換等等這些的,在三方工具類沒有普及之前,這套工具類陪了我很多年。估計很多老程序員,都有一套自己積累的工具類。

後來是擼項目代碼,當時找的是著名的 PetStore 項目,雖然是個示例項目,項目很小,但是麻雀雖小五臟俱全。最開始是看一行寫一行,照着抄代碼。抄了 n 遍之後,感覺都會了,然後自己默寫,磕磕絆絆默寫出來之後,根本跑不起來,一堆 bug。解決完 bug,能跑起來了,下一步就是把自己寫的代碼和原始代碼作比較,看看差異在哪,琢磨人家爲什麼要那麼寫。

擼了一定數量代碼之後,我再回過頭去看書,可能以前看不懂的,突然就明白了。

印象最深的一個事是,當初第一次抄完抽象類的代碼,我壓根就不知道還有抽象類這一說,我以爲一度懷疑這個類沒寫完整,會編譯不通過……

總的來說,擼代碼對我度過小白階段來說,非常非常重要。

我感覺學 Java,除了學知識,還離不開動手實踐。上面寫的我擼代碼的方式,也不一定適合所有人,每個人情況不一樣,大家參考就好。

其他補充
除了個人經歷,再補充幾點學習技巧:

補充1:看大廠的開發規範
例如阿里的《Java 開發手冊》,是阿里巴巴集團技術團隊的集體智慧結晶和經驗總結。

看這目錄:

分爲編程規約、異常日誌、單元測試、安全規約、MySQL數據庫、工程結構、設計規約七個維度,再根據內容特徵,細分成若干二級子目錄。另外,規約依次分爲強制、推薦、參考三大類。在延伸信息中,“說明”對規約做了適當擴展和解釋;“正例”提倡什麼樣的編碼和實現方式;“反例”說明需要提防的雷區,以及真實的錯誤案例。

真的是大廠的智慧結晶和經驗總結,新人看完可以少踩很多坑!

補充2:找到學習重點
Java 全家桶包括的東西太多,對小白來說一個難點就是:不知道學習重點。

學習重點就是那些在招聘需求、面試問題中高頻出現的。

把主要精力放在學重點上,剩下的可以慢慢學,學習是一個長期的過程,別想着一口吃成胖子。

另外,對小白來說,太複雜、太高級的可以先知道個大概,不用奢望一下學得很透。就像我們和小朋友說“等你以後長大了,慢慢就懂了”一個道理。

還有,有些知識可以不用學了,例如Swing、JSP現在幾乎沒人用了,學這個就是浪費時間。就連Struts、Hibernate現在用的也少了,學習的優先級也往後放。

補充3:資料不用貪多
不要盲目收集資料,收集太多資料你也看不完,更多是自我安慰。

資料在精不在多,遇到好的資料,該花錢就花錢,對自己學習不要摳門。有的資料、課程也不貴,少下一次館子、少買件衣服、少看一場電影就有了。花錢買了別人的經驗,省了自己的時間。

但是,花錢也別盲目,現在濫竽充數的老師、培訓太多。

總結
這篇文章寫了很多個人經歷,我覺得只有親自經歷的,自己驗證有效的,纔好意思推薦給你們。

經歷裏,我特意打亂時間順序,按照學習效果來寫的。

強烈建議你們找到身邊的學習圈子。如果沒有現成的,你是不是可以組建一個?大家一起學習、一起分享、一起寫代碼看代碼。

圈子人數不用多,十個人以內就挺好的。

這個圈子,不是微信裏面學習交流羣(我加了不少羣,大部分消息沒啥價值,慢慢成了死羣),最好都在一個城市的,能一起線下約活動。

有了圈子,除了技術提高,對你以後跳槽也有好處。

除了圈子,學 Java 要多敲代碼,不用只是聽和看。

寫到這裏,我突然想到了學習金字塔:

看完這個圖,用什麼方式去學 Java,你心裏就有譜了吧。

就說這麼多吧,希望對你有幫助。

原文地址https://www.cnblogs.com/siyuanwai/p/12793922.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章