我的程式設計師之路:自學Java篇

序章

時光疾馳,從事IT行業已兩年有餘。 16年11月開始自學Java,從此開啟自學之路,後來實習期自學大數據、python、爬蟲等,最終成長為一名平凡的程式設計師。回首望去,一路上的過往歷歷在目,有初學Java掌握皮毛後的沾沾自喜,也有遇到問題無法解決時的埋頭絕望。曾在學校的夜晚洋洋洒洒寫下筆記百十行,只為記住一個知識點。也曾實習期凌晨,走在公司到站牌昏暗燈光揮灑的馬路上,唱著自己喜歡的南山南慶祝著成長。

你問我自學累么,我會告訴你不累,因為自學路上收穫了很多。你問我自學孤獨么,我會告訴你不孤獨,感謝這條路上曾有那麼多幫助我的人。

很久之前就想以自己的經歷為題材,記錄一下關於自己的自學之路。在知乎和球球群里,也遇到很多和我當初一樣對電腦充滿著渴望但又迷茫的童鞋。希望通過簡單的文字形式,可以幫助到一些人。

誰的青春不迷茫

我不是學霸,曾只是沉溺遊戲之人。亦非出身名校,只是一名專升本的學生。大學之前雖是被老師寄予厚望的少年,但在大學生活里最終活成了自己曾經最討厭的樣子。

我讀過三年專科、兩年本科。高考失利沒有選擇復讀,大一開學因病住院,回來跟不上學習節奏開始自暴自棄、隨波逐流。遊戲,荒廢了三年的青春。

後來為了逃避離校實習,報考了專升本。剛開始的日子敷衍了事,當有一天可能從學霸的一個眼神或著一句話里,感受到了一種俯視。從那時,我開始自學數學、數據結構、作業系統、微機原理、C語言專升本科目,最後通過專升本。

專升本結束後的假期里,試圖找過電腦相關的工作,皆無功而返,只能回家等待開學。那時的心裡,也不知道有沒有為以後埋下一顆渴望的種子。

人生會讓你有想要保護的人,也會讓你有努力的動力,或許來源於別人對你的態度,亦或許是為了生活。

Java自學之路

環境真的會影響到一個人。

16年9月,正式開啟了本科兩年的生活。我曾以為我的舍友和我一樣,專科打打遊戲混混日子。後來才知道來自各個高校的舍友,皆為省賽免考入學。因為經常參加省賽,彼此之間也互相認識。從那時,我感到了來自身邊前所未有的壓力。

我本應該躲在角落,感受弱者的黑暗。但我的舍友,沒有因為我技術菜而孤立我。那時我對Java比較感興趣,他們給我找了Java影片,教我做筆記。從那時,我開始晚上在宿舍自學Java。對於Java我算是零基礎,專科的Java課基本上都在玩手機,而且書上的知識不足以用於工作。所以自學是很好的一個選擇。

有時候也會一起網一開黑,但大多數的時候都是拒絕他們,他們也開玩笑說我不合群,說我偷偷學習不和他們打遊戲。我只會日常統一回復:我要是免考我早就不學了。其實,他們一直也在學習,一直參加比賽,一直考證,我也隨著他們的腳印一路向前。

就這樣,本科的第一年堅持看Java影片,基本兩個小時以上,當然偶爾也會偷懶。同時跟著影片敲程式碼,敲到自己理解為止。也一直在做筆記,什麼都記,只要能讓自己看懂。

看看剛開始做的Java筆記。

筆記

回過頭來看這些自學路上留下的腳印,雜亂無章,已然幫助不大,但那份初衷和努力,永遠激勵著自己。

時至今日,你問我是否停止了學習Java?沒有,一直在學習。

你問我自學給我帶來了什麼?一個好的學習習慣和一份收入尚可的工作。

自學方法

找一套系統的學習影片 + 敲程式碼 + 做筆記 + 堅持

影片教程我看的是Java300集,做筆記之前用的是OneNote,現在用的有道雲筆記。在學習的過程中,要養成多問為什麼和獨立思考的習慣,形成一套完全屬於自己的編程思路。

堅持學習,堅持獲取新的知識。電腦是一條學無止境的路。

Java大家庭

在自學Java的過程中,我將Java簡單地分為以下幾類。

Java基礎

面向對象、數據類型、集合(List/Map/Set)、I/O、異常、反射、序列化、設計模式、JDBC資料庫、網路編程、設計模式等。

JavaWeb

servlet、request、response、cookie、session、Ajax、資料庫連接池、文件上傳下載等。

此刻就不得不提和JavaWeb配套的練手項目了,也是大家熟悉的,萬眾期待的:淘淘商城。商城類的練手項目集初學者寵愛於一身,是各大Java初學者web知識串燒的必備利器。

Spring全家桶

Spring、SpringMVC、MyBatis、SpingBoot。

前三者就是傳說中SSM框架。Spring負責管理bean、SpringMVC負責處理請求,Mybatis負責資料庫操作。但是SSM框架配置文件太多,Springboot簡化了很多配置,自從有了Springboot,我就再也不用SSM框架了,就是這麼喜新厭舊。

微服務、分散式

springcloud、dubbo。我沒有系統地學過Springcloud和dubbo,只是搞過一次項目,了解了一下註冊中心、網關、熔斷降級、swagger等。

深入理解JVM

<深入理解Java虛擬機>這本書看了很多遍,別問多少遍,問就是三遍。

第一遍(剛開始學Java):感覺很NB,就是看不懂。

第二遍(剛開始實習):花非花,霧非霧,似懂非懂!

第三遍(工作一年):某一天我懂了!也會整理一些自己的理解寫出來。

多執行緒、NIO

買了<Java並發編程的藝術>、<Java高並發程式設計>、<Java並發編程實戰>來學習多執行緒,這三本書看沒看完我就不說了,該懂得人都懂。

NIO主要跟著影片學習了Netty。

擴展

Maven:依賴管理;Git:項目程式碼版本管理,等等。根據自己需要,可以學學大數據、Redis啥的。

至此揚帆起航

本科第一年,驅散了曾經被遊戲籠罩三年的迷霧,穩打穩紮的學了一年的Java。第二年找到了Java的實習工作。

我是在學完Java、JavaWeb和Spring開始的實習。實習期一年,在實習前期,利用下班時間學完了SSM框架、Springboot等,通過參與項目學習了多執行緒和JVM(實習篇會著重寫一下)。

自學四年,努力在電腦這條路上前行,四年之中很多的夜晚只與學習為伴。不是任何的努力都能立見結果,但是要堅持總會有閃光的一天。雖然最後沒有按照軌跡成為一名正兒八經的Java後端,但卻通過Java一步步成為了一名大數據開發。

知乎問題匯總

1. 看書入門Java可以么

個人拙見,看書真的不適合Java入門,而適合Java進階。為什麼這麼說呢?書籍會因為篇幅或者排版問題,不會把每個知識點寫的那麼詳細,而影片里老師會將自己一些獨特技巧教給你,這是書里學不到的。而且看書很難引起你敲程式碼的慾望,學習Java一定要敲程式碼!

2. Java程式碼使用記事本編輯

剛開始學習Java的童鞋喜歡用記事本來編寫程式碼,使用java和javac命令來運行,於是導致各種拼寫錯誤或者標點符號問題,這裡建議使用eclipse或者IDEA來編寫程式碼,這樣可以避免最基本的錯誤,從而降低學習難度。

之前我在知乎回答類似問題的時候,一個童鞋說:剛學Java不用記事本手寫程式碼,而使用這些帶有提示功能的編輯器,那麼以後讓你手寫程式碼怎麼辦。duck放心,別說遇不到手寫程式碼的情況,就算真的遇到了,敲了那麼久的程式碼,public static void main(String[] args)這些程式碼還手寫不出來?Java就50多個關鍵字,根本無需記憶。真正需要記住的是程式碼實現思路和邏輯。

3. Java學到什麼程度可以工作

基本上學完Java基礎、web、SSM就可以工作了。但是找到工作不意味著停止學習,在大型項目的開發中,jvm和多執行緒都是必備知識。

4. Java沒有未來?

任何程式語言都會有屬於他的的未來,真正沒有未來的是人的本身。一個人從事Java開發,但只停留於之前掌握的Java知識,不深入學習,也不隨著技術的發展不斷提升自己,何談未來?Java雖然熱度會被其他語言超越,但是目前難以被替代。

5. 自學兩月毫無進展,放棄?

Java是一門比較整體性的語言,各個部分知識緊密聯繫。所以學習Java是一個拼圖的過程。我剛開始自學的時候,面向對象的概念都沒搞懂,隨著後面不斷學習,某一天豁然開朗。既然下了學Java的決定,跨過了最難的部分,為何不再堅持一下呢?學習Java就像練就絕世武功,都是長年累月的積累和厚積薄發的升華。

6. 大四學習Java晚么

官方回答:任何時候學習Java都不晚。但實話說,大四學習Java真的不晚,只要肯下功夫,找對方法,堅持下來,完全可以在上半年自學,下半年去實習。

7. Java只適合理科生或聰明之人?

一句話:Java適合努力之人。

8. 學歷重要麼

不是必須,但很必要,目前大部分Java開發要求都是本科起步,而且很多公司專科只能進入外包。

9. 關於Java培訓

經濟允許 + 想要速成 + 抗壓能力強可以選擇,具體下一篇文章會寫。

期待下次相遇

此文記錄了我大學自學Java的一些經歷與感悟,不論你認為是天生聰慧運氣使然,亦或笨鳥先飛大器晚成,都希望能幫助到你。

18年畢業後,留在了一個小城市,雖未身處BAT互聯網頂端,但亦自知不可自棄仍需努力,讓自己走得更遠。在學習大數據、Python的同時,也一直堅持著Java的學習。對Java保持著感激之心,不斷探索讓自己成長。後續會根據自己的實際經歷寫一下關於培訓以及實習的文章,講述一下如何在實習期成為了一名大數據開發。

期待下次相遇。


寫的都是日常工作中的親身實踐,處於自己的角度從0寫到1,保證能夠真正讓大家看懂。

文章會在公眾號 [入門到放棄之路] 首發,期待你的關注。

公眾號