Spring原始碼學習系列-----學習緣由
知識經濟時代,知識、技術、工具的更迭速度愈發的快,而對於IT行業來說,軟體開發領域所運用的技術更迭速度更是快得令人瞠目結舌。在這樣一個快速更迭的環境中,企業及個人如何保持自己的核心競爭力而不被時代所淘汰,是值得每一個自然人和法人深思的問題。就我自己近一年半研發經驗而言,不斷學習是保持程式設計師核心競爭力最為重要的因素。可是在這個知識爆炸的時代,除了站在金字塔頂端的極少數科研人員,我等常人是不可能驅動時代潮流走向的。我們唯一能做的就是緊跟時代潮流,以積極的態度擁抱變化和創新,不斷地告誡自己讓自己走出舒適區成長起來。這裡就可能會有一個認知誤區,很多人覺得緊跟時代潮流就是什麼最熱我就學習什麼,表面上看這種認知沒毛病,可結合實際情況一分析,這種認知或是行為可謂絲毫經不起推敲。就拿java企業級開發(javaee)使用的主流技術來說,在spring問世之前,企業鍾愛ejb,當spring framework被祭出時,ejb立馬被一干企業拋棄掉,自ejb被拋棄之時spring framework統治了javaweb開發領域直至今日。可就在兩三年前,springboot橫空出世,當國內很多企業還熱衷於spring framework時,springboot早已風靡於國外大大小小的企業。通過比較兩個專案在github上的star數,就可窺見springboot在javaee領域中的受歡迎程度已然超過了傳統的spring framework,而基於springboot的為微服務框架springcloud更是獲得越來越多的企業對於分散式開發需求的青睞。從時間維度來看,在javaee領域,從ejb到spring framework再到springboot、springcloud,兩種技術之間的時間間隔越來短,更迭速度越來越快,我不不知道下一個風靡業界的技術或框架叫什麼,但我知道它遲早會到來,或許有的人還沉浸於spring framework未開發帶來的各種便利時,又一個超越springboot的新框架已然誕生並開始席捲業界。
既然javaee領域的技術框架更迭如此之快,難道我們真的“緊跟潮流”?什麼技術流行我們就學習什麼?我看未必。我覺得人的經歷是有限的,而知識和技術又是沒有邊際的,所以無論如何在人的有效學習週期內也不可能將知識一網打盡。因此,我們必須將寶貴的學習時間花費在最值得的經典上面。OK,那什麼是經典呢?我在這裡談談自己對於經典的理解,所謂經典,就是那些不會隨著時代的進步而被淘汰的事物。就好比數理界那些被證明的定理、文學界大家們的經典著作一樣,無論時代如何變遷,這些經典不僅不會被淘汰、發生貶值,甚至會受到越來越多人的追捧和升值。在計算機領域,計算機網路、計算機作業系統、資料結構與演算法、計算機組成原理等,作為經典這些課程是每一個程式設計師不可預設的知識。就拿當今最為流行的人工智慧、區塊鏈、物聯網來說,沒有深厚的計算機基礎知識(經典)作為支撐,很難在這些熱門領域內獲得較好的發展,這些熱門領域不僅需要從業人員擁有深厚的演算法功底,更需要從業人員對於資料結構有深刻的見解。所以勸誡那些想要一蹴而就的同行們,把心沉下來,踏踏實實地學完經典,再選擇一個感興趣的熱門行業才是真正的捷徑。
從17年開始我的java後端研發生涯開始,就一直使用spring相關框架進行開發,無論是做簡單的單機專案,還是做紛繁複雜的分散式開發,都始終繞不過spring全家桶。javaee主流開發框架的發展軌跡來看,spring framework是在ejb的基礎上進行的革新,springboot是基於spring framework發展而來,而火爆的springcloud又直接依賴於springboot。稍微深入瞭解一下就會發現,每一個後面的框架無非就是對既有框架進行的封裝、抽象,將複雜重複而重複的工作交由程式自己完成,使用者只需要把注意力放到實現自己業務邏輯即可。表面看來,這對開發人員非常友好,可是我覺得對於稍微有點追求的程式設計師來說,光會用框架是遠遠不夠的,弄懂框架技術背後的架構、思想、原理才是最重要的。就我短暫的開發經驗而言,我認為spring framework就是javaee開發領域中的經典,無論從(架構、思想、原理、程式碼風格、受歡迎程度等)哪個角度來看,其在javaee領域中的地位都是不可撼動的。
既然已經認可了其經典地位,那接下就是如何理解、學習經典了。對於軟體研發領域,我覺得閱讀優秀框架的原始碼是程式設計師學習工作生涯中不可或缺的一部分。像spring framework之類的優秀的原始碼,不僅有著極為清晰架構層次,其優雅的程式碼風格,對於諸多設計模式的靈活運用,都是非常值得程式設計師深究的。
說了這麼多廢話,最後總結一下就兩點:第一、spring framework是javaee領域中不可替代的經典,值得新老程式設計師們深究一番;第二、閱讀優秀框架的開原始碼,對於程式設計師提升程式碼功底工程素養極為有益。下一節將正式進入spring framework原始碼的學習,敬請期待。