首先聲明,這篇文章不是賣課程、介紹培訓(xùn)班的廣告。
最近有不少讀者通過微信問我:小白應(yīng)該怎么學好 Java?
提問的人里有在校大學生、有剛參加工作的、有想轉(zhuǎn)行做程序員的,還有一部分是最近找工作不順的。
現(xiàn)在行情不好,很多人都焦慮,但是光跟著焦慮不解決問題。作為程序員,還不如靜下心來,少受干擾,專心提高自己。
繼續(xù)說回到學 Java 這個問題上來,網(wǎng)上 95% 以上的文章都是說介紹學習路線、Java書籍和視頻的。
學習路線無非就是:
- Java:語法、面向?qū)ο?、IO、集合、異常、多線程……
- Java WEB:Tomcat、servlet、Struts、Spring……
- 持久化相關(guān):MySQL、Hibernate、MyBatis……
- …………
書籍、視頻說的比較多的有:
- 《Head First Java》、《Java 編程思想》、《Effective Java》……
- 畢向東、劉意等老師的視頻。
Java 家族成員太多,學個 Java 怎么要學這么多東西?
學習資料越收集越多,這要學到什么年頭?很多人都是收藏從未停止,學習從未開始。
我今天就和大家說點不一樣的,我學 Java 中對我?guī)椭畲蟮娜谓?jīng)歷。這三段經(jīng)歷都是發(fā)生在我剛工作的前 5 年中,我個人認為,程序員的前 5 年是技術(shù)突飛猛進的階段,這個階段非常重要。
經(jīng)歷一:遇到了志同道合的好基友
這段經(jīng)歷是從我工作之后第三個年頭開始的,因為重要,所以先說。
那時候我跳槽去了一家新公司,在這家公司就干了不到一年,如果不是因為認識了兩個程序員,這段經(jīng)歷幾乎都快忘記了。
這兩個程序員和我年齡相仿,都姓劉,為了省事,后面統(tǒng)稱二劉吧。對我來說,如果用一個詞來形容他倆,就是:良師益友。
認識二劉之前,我覺得自己水平還可以:會寫 CRUD、JSP,會用 Struts,會扯幾個設(shè)計模式。現(xiàn)在看來,就是一個能熟練寫代碼的程序員而已,動手能力還湊合,腦子里的知識不成體系。
從認識二劉的第一天起,就被全面碾壓。學校、專業(yè)的碾壓就不用說了,關(guān)鍵是從他們嘴中我聽了很多之前都沒聽過的名詞:敏捷開發(fā)、重構(gòu)、結(jié)對編程、領(lǐng)域模型……
說實話,當初剛接觸這些的時候,我是很排斥的。舉幾個例子:
- 看到二劉結(jié)對編程,心想一個人干活、一個人閑著,這不是偷懶嗎?
- 重構(gòu)代碼:程序跑的好好的,我為啥要改我的代碼?有重復(fù)代碼怎么了?有重構(gòu)的時間,還不如再實現(xiàn)倆新功能。
- 單元測試:代碼還寫不過來,哪有時間寫單元測試,再說了,不是有專門的測試嗎。
- 領(lǐng)域模型:別和我說什么貧血不貧血,我的 JavaBean 里就只有 getter、setter。
好在二劉足夠有耐心,對我不拋棄不放棄,反復(fù)給我洗腦,終于讓我這個思想落后青年,接受了他們的思想,后面經(jīng)常和他倆一起學習、實踐、交流。
學 Java 很辛苦,大部分人自制力差,一個人學容易偷懶。找?guī)讉€好基友一起學,確實提高快。在這里要感謝一下當初二劉對我的幫助。
到現(xiàn)在我和二劉還是好朋友,跟他們一起學到的重構(gòu)、DDD、TDD、架構(gòu)模式這些思想,讓我受益至今。相比于Struts、Hibernate那些技術(shù)來說,這些更像是程序員的內(nèi)功,內(nèi)功不會很快過時。
經(jīng)歷二:找到了組織——BJUG
如果說認識二劉是我上了一條賊船,那么加入 BJUG 就是上了一艘航母。加入 BJUG 還是通過二劉,你看好基友是多么重要。
舊文中提到過 BJUG 這個名字:
Beijing Java User Group的簡稱就是 BJUG。從名字就能看出來,是一群在北京工作的 Java 程序員聚在一起的一個小團體。
BJUG 是一個非?;钴S的技術(shù)社區(qū),我們都有哪些活動呢?
最主要的活動是線下技術(shù)分享,分享基本都在周六下午,一下午能分享 2-4 個主題。
現(xiàn)在還能百度到當時的信息,給大家貼幾張圖。
從這幾張圖上,大家能看出了,我們當時分享的都是技術(shù)干貨。在冰云的熱心組織下,社區(qū)弄得還可以,成為 Top 50 的 Java User Group。
除了技術(shù)分享,我們還一起翻譯資料、書籍。當然還少不了一起聚餐腐敗。
BJUG 不僅僅是一個技術(shù)社區(qū),還是一個有愛的社區(qū)。曾經(jīng)一名核心會員得了重癥需要換骨髓,面對伙伴的不幸,大家捐款相助,為伙伴的康復(fù)貢獻了綿薄之力。
可惜的是,BJUG 后期人變多了,人多了之后交流的質(zhì)量我感覺反而降低了,后面慢慢活動越來越少了?,F(xiàn)在看來,人多不一定是好事,小圈子反而更有效率。
當時在 BJUG 里我好像沒做過主題分享,因為不自信,都是充當聽眾,這也算一個遺憾吧。
不管怎么說,BJUG 里牛人非常多,我屬于那里邊最菜的了。能跟那些牛人學多少東西,你們可以自己想象一下。
總之,經(jīng)歷了二劉和 BJUG 的洗禮之后,后面幾年我找工作面試的時候,沒被技術(shù)面試卡住過。
經(jīng)歷三:擼幾萬行代碼
終于可以把時間調(diào)回到我剛工作的頭兩年了。
我的大學一般般,非 985、211,我也不是計算機專業(yè)的,大四參加了一個 Java 培訓(xùn)班。參加培訓(xùn)班之前的計算機水平:QQ 熟練、紅警精通。
培訓(xùn)半年之后的水平也不咋地,畢業(yè)之后能找到程序員的工作,主要因為趕上了好時候,那時候缺程序員啊,大學剛擴招,哪有現(xiàn)在這么多畢業(yè)生,而且大學還沒教 Java。大部分培訓(xùn)機構(gòu)還在教網(wǎng)頁三劍客,能教 Java 的老師就很少。
有了培訓(xùn)班的基礎(chǔ),我工作之后也能湊合干,不過還有太多太多不會的知識,不會就學唄。
最開始我學習靠看書,看《Java 編程思想》,也不知道是書太難了,還是翻譯的太晦澀了,看書真看不懂啊,書又厚,我看了幾個月愣是一遍都沒看完,經(jīng)常是看了后面忘了前面。
后來我干脆就把書扔一邊去了,直接擼代碼!
起初是擼簡單的,擼各種常用類、常用方法的例子,這樣方便以后拿起來就用。另外,擼的多了,慢慢攢出了自己的一套工具類,包括String、數(shù)組、日期、類型轉(zhuǎn)換等等這些的,在三方工具類沒有普及之前,這套工具類陪了我很多年。估計很多老程序員,都有一套自己積累的工具類。
后來是擼項目代碼,當時找的是著名的 PetStore 項目,雖然是個示例項目,項目很小,但是麻雀雖小五臟俱全。最開始是看一行寫一行,照著抄代碼。抄了 n 遍之后,感覺都會了,然后自己默寫,磕磕絆絆默寫出來之后,根本跑不起來,一堆 bug。解決完 bug,能跑起來了,下一步就是把自己寫的代碼和原始代碼作比較,看看差異在哪,琢磨人家為什么要那么寫。
擼了一定數(shù)量代碼之后,我再回過頭去看書,可能以前看不懂的,突然就明白了。
印象最深的一個事是,當初第一次抄完抽象類的代碼,我壓根就不知道還有抽象類這一說,我以為一度懷疑這個類沒寫完整,會編譯不通過……
總的來說,擼代碼對我度過小白階段來說,非常非常重要。
我感覺學 Java,除了學知識,還離不開動手實踐。上面寫的我擼代碼的方式,也不一定適合所有人,每個人情況不一樣,大家參考就好。
其他補充
除了個人經(jīng)歷,再補充幾點學習技巧:
補充1:看大廠的開發(fā)規(guī)范
例如阿里的《Java 開發(fā)手冊》,是阿里巴巴集團技術(shù)團隊的集體智慧結(jié)晶和經(jīng)驗總結(jié)。
看這目錄:
分為編程規(guī)約、異常日志、單元測試、安全規(guī)約、MySQL數(shù)據(jù)庫、工程結(jié)構(gòu)、設(shè)計規(guī)約七個維度,再根據(jù)內(nèi)容特征,細分成若干二級子目錄。另外,規(guī)約依次分為強制、推薦、參考三大類。在延伸信息中,“說明”對規(guī)約做了適當擴展和解釋;“正例”提倡什么樣的編碼和實現(xiàn)方式;“反例”說明需要提防的雷區(qū),以及真實的錯誤案例。
真的是大廠的智慧結(jié)晶和經(jīng)驗總結(jié),新人看完可以少踩很多坑!
補充2:找到學習重點
Java 全家桶包括的東西太多,對小白來說一個難點就是:不知道學習重點。
學習重點就是那些在招聘需求、面試問題中高頻出現(xiàn)的。
把主要精力放在學重點上,剩下的可以慢慢學,學習是一個長期的過程,別想著一口吃成胖子。
另外,對小白來說,太復(fù)雜、太高級的可以先知道個大概,不用奢望一下學得很透。就像我們和小朋友說“等你以后長大了,慢慢就懂了”一個道理。
還有,有些知識可以不用學了,例如Swing、JSP現(xiàn)在幾乎沒人用了,學這個就是浪費時間。就連Struts、Hibernate現(xiàn)在用的也少了,學習的優(yōu)先級也往后放。
補充3:資料不用貪多
不要盲目收集資料,收集太多資料你也看不完,更多是自我安慰。
資料在精不在多,遇到好的資料,該花錢就花錢,對自己學習不要摳門。有的資料、課程也不貴,少下一次館子、少買件衣服、少看一場電影就有了?;ㄥX買了別人的經(jīng)驗,省了自己的時間。
但是,花錢也別盲目,現(xiàn)在濫竽充數(shù)的老師、培訓(xùn)太多。
總結(jié)
這篇文章寫了很多個人經(jīng)歷,我覺得只有親自經(jīng)歷的,自己驗證有效的,才好意思推薦給你們。
經(jīng)歷里,我特意打亂時間順序,按照學習效果來寫的。
強烈建議你們找到身邊的學習圈子。如果沒有現(xiàn)成的,你是不是可以組建一個?大家一起學習、一起分享、一起寫代碼看代碼。
圈子人數(shù)不用多,十個人以內(nèi)就挺好的。
這個圈子,不是微信里面學習交流群(我加了不少群,大部分消息沒啥價值,慢慢成了死群),最好都在一個城市的,能一起線下約活動。
有了圈子,除了技術(shù)提高,對你以后跳槽也有好處。
除了圈子,學 Java 要多敲代碼,不要只是聽和看。
寫到這里,我突然想到了學習金字塔:
看完這個圖,用什么方式去學 Java,你心里就有譜了吧。
就說這么多吧,希望你能轉(zhuǎn)發(fā)、點在看,說不定和你日后一起學習的好基友會看到這篇文章。
特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:



長按訂閱更多精彩▼

如有收獲,點個在看,誠摯感謝
免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!