java學習到了瓶頸期,要怎麼樣才能進階?

語言: CN / TW / HK

這篇回答沒有長篇大論的 Java 進階學習路線推薦,作為純靠自學獲得大廠 offer 的過來人,給幾點建議:

1、一定要動手實踐

2、避免貨物崇拜編程

3、提高系統設計能力

4、造輪子

5、深入學習,學會總結沉澱

當然也是需要紮實的基礎的,例如先瞭解java的基礎

1、一定要動手實踐

學習任何一門編程語言非常重要的一點就是:“動手實踐”。

如果沒辦法獲得企業級真實的項目經驗的話,你可以通過下面幾種方式來做項目。

實戰項目視頻/專欄

在網上找一個符合自己能力與找工作需求的實戰項目視頻或者專欄,跟着老師一起做。

跟着老師做的過程中,你一定要有自己的思考,不要淺嘗輒止。對於很多知識點,別人的講解可能只是滿足項目就夠了,你自己想多點知識的話,對於重要的知識點就要自己學會去深入學習。

實戰類開源項目

Github 或者碼雲上面有很多實戰類別項目,你可以選擇一個來研究,為了讓自己對這個項目更加理解,在理解原有代碼的基礎上,你可以對原有項目進行改進或者增加功能。

\  

一定要記住: 不光要做,還要改進,改善。不論是實戰項目視頻或者專欄還是實戰類開源項目,都一定會有很多可以完善改進的地方。

我在下面會詳細介紹我們可以從哪些方面來優化項目。

從頭開始做

自己動手去做一個自己想完成的東西,遇到不會的東西就臨時去學,現學現賣。

這個要求比較高,我建議你已經有了一個項目經驗之後,再採用這個方法。如果你沒有做過項目的話,還是老老實實採用上面兩個方法比較好。

2、避免貨物崇拜編程

何為貨物編程?

維基百科是這樣解釋的:

貨物崇拜編程(Cargo Cult Programming)是一種計算機程序設計中的反模式,其特徵為不明就裏地、儀式性地使用代碼或程序架構。貨物崇拜編程通常是程序員既沒理解他要解決的 bug、也沒理解表面上的解決方案的典型表現。

簡單來説,貨物編程就是我們不明就理地使用各種框架/優秀實踐(比如設計模式)/軟件架構,最後把項目搞得像個四不像。

列舉一些我身邊發生過的實際的例子吧!

  • 看到一些比較火的框架就直接套用在自己的項目上,而不知道這個框架究竟能解決項目上的什麼問題?是否適合項目?有沒有什麼風險?
  • 學習了某個設計模式/工程實踐之後,不顧項目實際情況,刻意使用在項目上!
  • 直接複製從網上(比如 Stack Overflow )找到的代碼,只要運行 OK 就好。
  • 看到一些比較火的概念就魔怔了,比如前兩年開始爆火的中台概念。

3、提高系統設計能力

有哪些考察系統設計能力的問題

不論是面試應屆生還是高級開發,系統設計能力是大部分面試官會重點關注的對象。比如面試官可能會問題你:

  • 如何設計一個 RPC 框架?消息隊列?
  • 如何設計一個秒殺系統?
  • 如何設計一個排行榜?
  • 如何設計一個視頻網站?有哪些需要注意的地方?(比如如何解決大文件上傳問題、如何保證視頻的安全性)
  • 如何設計微博 Feed 流?
  • ......

這些問題都是非常能夠考驗你的工程能力的,相比於理論性的題目,這種問題的細節點較多,要更難準備一些。

如何提高系統設計能力

想要提供系統設計能力,需要我們的刻意訓練。那到底該怎麼訓練呢?

簡單説説我自己的看法,歡迎大家補充:

  1. 多對你做過的系統進行復盤總結,思考一下這個系統有哪些需要改進/完善的地方。
  2. 多進行系統設計實戰,比如你可以多問問自己:“如果讓你去設計 xx 系統,你該怎麼做?”。你最好把這個系統設計的過程記錄下來,以便後續再完善改進。

系統設計不一定非要我們實際寫代碼去實現,系統設計好了之後,寫代碼並不是什麼難事。我這樣説並不是代碼實踐不重要,只是每個人的精力都有限,你應該把你的精力用在最值得你投入時間的地方。

4、造輪子

何為造輪子

在編程領域,你可以把造輪子中的“輪子”簡單地理解為各種框架、標準庫或者軟件。

造輪子説的就是我們對現有的各種框架、標準庫或者軟件進行改進或者重新創造一個類似的。就比如説已經有了現成的任務調度框架,你自己又創造了一個更滿足自己需求的任務調度框架。

不知道何時起,“重複造輪子”被大家看作是一個很傻叉的行為。我卻不是這麼認為的!在我看來,不論是對於個人還是公司,亦或是技術本身來説,造輪子都有其重要的意義存在。

雖然,造輪子很有意義。但是,有一點不可否認的是:我們在實際項目開發中,會從成本、穩定性、成熟度等方面優先考慮使用比較可靠的開源項目。

另外,我們不是每個人能夠寫出一個被廣泛使用的框架或者標準庫。這個需要堅持,也需要我們長期積累的經驗。我認識到的很多優秀開源庫的作者,他們大部分都是工作中遇到一個問題,現有的開源庫沒辦法很好地解決,最後自己經過很長時間才寫出來的。比如安全框架 sureness 的作者,自己在使用 shiro 的時候,不太滿意,就花了 2 年多寫了這個框架。再比如 sa-token 這個項目的作者公司的項目需要用到踢人下線、賬號封禁等功能,現有的權限認證框架沒有現成的功能,於是他就自己寫了這個框架。

那造輪子會為我們帶來什麼呢?

為什麼要造輪子

從個人角度來説

第一,造輪子能夠非常有效地提高自己的系統編程能力。

我之前在搞懂了 RPC 的原理之後,就自己動手寫了一個簡單的 RPC 框架。我的 RPC 框架肯定是無法和 Dubbo 這類已經這麼成熟的相提並論。但是,在自己去寫 RPC 框架的時候,更加加深了自己對於 RPC 框架的認識。實現的過程中,遇到了很多問題,解決問題的過程中也提高了自己的編程能力。

第二,造輪子可以提高自己的影響力。

那我自己來説,我寫的建議一個建議的 RPC 框架 guide-rpc-framework 雖然功能很簡陋,但是,憑藉這詳細的 README 介紹以及清晰的代碼結構還是被很多熱愛技術的小夥伴喜歡。