1. 程式人生 > >不是廣告--如何學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,會扯幾個設計模式。現在看來,就是一個能熟練寫程式碼的程式設計師而已,動手能力還湊合,腦子裡的知識不成體系。 從認識二劉的第一天起,就被全面碾壓。學校、專業的碾壓就不用說了,關鍵是從他們嘴中我聽了很多之前都沒聽過的名詞:**敏捷開發、重構、結對程式設計、領域模型……** 說實話,當初剛接觸這些的時候,我是很排斥的。舉幾個例子: 1. 看到二劉結對程式設計,心想一個人幹活、一個人閒著,這不是偷懶嗎? 2. 重構程式碼:程式跑的好好的,我為啥要改我的程式碼?有重複程式碼怎麼了?有重構的時間,還不如再實現倆新功能。 3. 單元測試:程式碼還寫不過來,哪有時間寫單元測試,再說了,不是有專門的測試嗎。 4. 領域模型:別和我說什麼貧血不貧血,我的 JavaBean 裡就只有 getter、setter。 好在二劉足夠有耐心,對我不拋棄不放棄,反覆給我洗腦,終於讓我這個思想落後青年,接受了他們的思想,後面經常和他倆一起學習、實踐、交流。 學 Java 很辛苦,大部分人自制力差,一個人學容易偷懶。找幾個好基友一起學,確實提高快。在這裡要感謝一下當初二劉對我的幫助。 到現在我和二劉還是好朋友,跟他們一起學到的重構、DDD、TDD、架構模式這些思想,讓我受益至今。相比於Struts、Hibernate那些技術來說,這些更像是程式設計師的內功,內功不會很快過時。 # 經歷二:找到了組織——BJUG 如果說認識二劉是我上了一條賊船,那麼加入 BJUG 就是上了一艘航母。加入 BJUG 還是通過二劉,你看好基友是多麼重要。 舊文中提到過 BJUG 這個名字: Beijing Java User Group的簡稱就是 BJUG。從名字就能看出來,是一群在北京工作的 Java 程式設計師聚在一起的一個小團體。 BJUG 是一個非常活躍的技術社群,我們都有哪些活動呢? 最主要的活動是線下技術分享,分享基本都在週六下午,一下午能分享 2-4 個主題。 現在還能百度到當時的資訊,給大家貼幾張圖。 ![](https://imgkr.cn-bj.ufileos.com/2a31861a-8b7a-40ce-9590-cf4dbb0b8fd6.png) ![](https://imgkr.cn-bj.ufileos.com/a525cd04-9875-4ebb-9b2d-683b6d6b2d96.png) ![](https://imgkr.cn-bj.ufileos.com/7745b860-8868-46fc-be46-ad601de528c4.png) 從這幾張圖上,大家能看出了,我們當時分享的都是技術乾貨。在冰雲的熱心組織下,社群弄得還可以,成為 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 開發手冊》,是阿里巴巴集團技術團隊的集體**智慧結晶和經驗總結**。 看這目錄: ![](https://imgkr.cn-bj.ufileos.com/6874fca8-6364-4256-a0db-f6c9c3c9283b.png) 分為程式設計規約、異常日誌、單元測試、安全規約、MySQL資料庫、工程結構、設計規約七個維度,再根據內容特徵,細分成若干二級子目錄。另外,規約依次分為強制、推薦、參考三大類。在延伸資訊中,“**說明**”對規約做了適當擴充套件和解釋;“**正例**”提倡什麼樣的編碼和實現方式;“**反例**”說明需要提防的雷區,以及真實的錯誤案例。 ![](https://imgkr.cn-bj.ufileos.com/5ec2d93a-29f4-440d-b55d-5624b444d377.png) 真的是大廠的智慧結晶和經驗總結,新人看完可以少踩很多坑! ## 補充2:找到學習重點 Java 全家桶包括的東西太多,對小白來說一個難點就是:不知道學習重點。 學習重點就是那些在招聘需求、面試問題中高頻出現的。 把主要精力放在學重點上,剩下的可以慢慢學,學習是一個長期的過程,別想著一口吃成胖子。 另外,對小白來說,太複雜、太高階的可以先知道個大概,不用奢望一下學得很透。就像我們和小朋友說“等你以後長大了,慢慢就懂了”一個道理。 還有,有些知識可以不用學了,例如Swing、JSP現在幾乎沒人用了,學這個就是浪費時間。就連Struts、Hibernate現在用的也少了,學習的優先順序也往後放。 ## 補充3:資料不用貪多 不要盲目收集資料,收集太多資料你也看不完,更多是自我安慰。 資料在精不在多,遇到好的資料,該花錢就花錢,對自己學習不要摳門。有的資料、課程也不貴,少下一次館子、少買件衣服、少看一場電影就有了。花錢買了別人的經驗,省了自己的時間。 但是,花錢也別盲目,現在濫竽充數的老師、培訓太多。 # 總結 這篇文章寫了很多個人經歷,我覺得只有親自經歷的,自己驗證有效的,才好意思推薦給你們。 經歷裡,我特意打亂時間順序,按照學習效果來寫的。 強烈建議你們找到身邊的學習圈子。如果沒有現成的,你是不是可以組建一個?大家一起學習、一起分享、一起寫程式碼看程式碼。 圈子人數不用多,十個人以內就挺好的。 這個圈子,不是微信裡面學習交流群(我加了不少群,大部分訊息沒啥價值,慢慢成了死群),最好都在一個城市的,能一起線下約活動。 有了圈子,除了技術提高,對你以後跳槽也有好處。 除了圈子,學 Java 要多敲程式碼,不用只是聽和看。 寫到這裡,我突然想到了學習金字塔: ![](https://imgkr.cn-bj.ufileos.com/d4d820e4-7100-46b1-a8ec-aa1d473a2c70.png) 看完這個圖,用什麼方式去學 Java,你心裡就有譜了吧。 就說這麼多吧,希望對你有幫助。 ![](https://imgkr.cn-bj.ufileos.com/016049a7-941c-4de4-82ad-e59c1c791b