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 介紹以及清晰的程式碼結構還是被很多熱愛技術的小夥伴喜歡。