首頁>技術>

在技術職場中普遍存在如下幾種現象:

對待工作中所使用的技術不需要閱讀原始碼,只需在開發過程中能夠熟練運用就行看原始碼太費時間,而且容易忘記,如果從實際使用過程中出現的問題出發,針對性的閱讀原始碼,其學習效率會更高效,所以平時無需看原始碼。

對此我有著不同的理解,容我慢慢道來。

本文將從如下4個角度進行剖析:

原始碼閱讀的必要性原始碼閱讀技巧原始碼閱讀的三種境界原始碼閱讀的誤區1、原始碼閱讀必要性1.1 通用型基礎技術應該深入原始碼研究

在 JAVA 領域中筆者認為通用型基礎技術包含 JAVA 集合、Java併發(JUC)。這類技術是專案中使用的高頻技術,在合適的場景中選用合適的資料結構、選用合適的執行緒併發模型、合理控制鎖粒度等都能顯著提高應用程式的可用性、健壯性。

通用型技術正因為其具有普遍性,橫向對比更具代表性,職場面試時的可辨別性非常高,如何在高樣本中突出自己就顯得極為必要,透過閱讀原始碼,深刻理解其內部原理成為我們的不二法寶。

當然透過閱讀原始碼並不是知曉原理的唯一方法,但作為一個名程式設計師、直面程式碼,親自感受程式碼的魅力或許來的更加直接。

1.2 重點領域應深入原始碼研究

為了提高辨識度作為職場的我們應該打造自己的專屬標籤,即“亮點”。通常情況我們應該選擇在日常工作中使用的技術,在積累了豐富的使用經驗、線上故障排查經驗的前提下,應該深入研究其原始碼,成體系掌握該技術,從而對其更具掌控性,做到提前預判線上問題,規避大量線上故障,提升穩定性,助力業務降本增效。

原始碼閱讀確實很重要,但一定需要成體系研究,大部分人認為在處理問題時再根據具體問題去看原始碼,會更有針對性,覺得沒必要成體系看

不可否認這有其正確性的一面,從問題本身出發,看原始碼效率更快,“投入產出比”更高,隨著遇到的問題越來越多,對該技術理解也會越來越深,這個其實就是我們通常講的“經驗”。我覺得大部分情況下是可取的,這個過程其實是一個被動的過程,並且如果生產環節由於併發不高等因素,可能一年、兩年也不會出現一兩次故障,這樣就會造成經驗的積累會非常慢,從而使得工作了4、5年的朋友其競爭力還不如工作2,3年的重要原因,所以我的觀點是如果是想打造成自己的專屬亮點的話,我們還是需要主動透過閱讀其原始碼,成體系掌握其設計理念、實現原理,更好的打造自己的專屬亮點。

2、如何閱讀原始碼

既然閱讀原始碼非常有必要,那如何閱讀原始碼呢?筆者根據多年的原始碼閱讀經驗整理瞭如下方法論:

瞭解這款中介軟體的使用場景、以及架構設計中將承擔的責任。尋找官方文件,從整體上把握這款中介軟體的設計理念。搭建自己的開發除錯環境,執行官方提供Demo示例,為後續深入研究打下基礎。先主幹流程再分支流程,注意切割,逐個擊破。閱讀原始碼過程中帶著思考與質疑思維。

理解了其使用場景後,結合官方文件,嘗試理解該中介軟體需要解決的問題、並思考如何解決,思考過程中並不一定要求我們想出一個具體的答案,只是在真正步入原始碼閱讀時能更快感悟其程式碼含義。

當然在閱讀原始碼的過程中可能會到難題,遇到無法理解作者的實現意圖,特別是遇到一些自己不太熟悉的程式設計方式(例如位運算),此時通常有兩種解決方案

透過DEBUG,結合執行時資料,方便對程式碼的理解。從易到難,可以先嚐試閱讀一下JAVA集合框架的原始碼,提煉出一套自己的原始碼研究方法論。

原始碼閱讀其實最難的不是程式碼本身,也不是無法理解其設計理念,最難的是堅持,故在這裡借用筆者的座右銘與大家共勉:越努力越幸運,唯有堅持不懈。

3、原始碼閱讀的三層境界

接下來我想再結合筆者4年原始碼閱讀的歷程,談談我對原始碼閱讀的一些更深層次的理解,介紹一下筆者在各個階段閱讀原始碼所處的狀態。

原始碼閱讀的初級階段筆者的老粉絲們應該能感覺到筆者初期的原始碼閱讀文章,基本上是記流水賬,其最直觀的表現現象是對原始碼一樣一行加註釋,只關注底層實現細節,但並未形成更高層次認知,對其設計理念並未提煉與深度領悟。能提問、思考、並提煉隨著技術類文章的持續分享,筆者認識了很多大牛、發現與大牛交流的時候,一開始並不會說細節,而是講設計理念,這就要求我們在閱讀原始碼的時候多思考,並反問自己如果需要自己實現的話我們該如何著手,如何設計,帶著疑問去研究原始碼,透過對比,思考,會對其背後的理念有了更深刻的理解。思考、質疑、驗證其實無論是哪個開源框架都會存在BUG或者實現並不合理的地方,如果大家在閱讀原始碼的時候能夠思考並開始質疑其不合理性,並能透過驗證證明自己的觀點,然後與官方取得聯絡,交流,建Isuue,共同促進社群的發展,說明我們的能力、思考得到了極大的提升。

關於這一點,可以參考筆者對 Sentinel 對應熔斷實現機制進行的質疑與思考過程,其連結如下:Sentinel Dubbo 介面卡看限流與熔斷(實戰思考篇)

4、原始碼閱讀誤區

原始碼閱讀是手段,但一定不是目的。

我在面試過程中發現好多候選者在談到某一項技術時,首先不是介紹其原理,而是一下子具體到某個類啥的,這些類是如何如何工作等等,其實這是不太妥當的,原始碼閱讀的目的是主要是深入理解其設計理念、工作機制,方便我們在實際使用過程中對其成體系的認識,加強對它的駕馭能力,做到提前規避風險。

其次原始碼閱讀非常不建議一上來就直接DEBUG。如果一開始就使用DEBUG,很容易會迷失在程式碼的各個分支中,缺乏全域性視角,從而變得沒有頭緒,極大的增加了原始碼理解的難度,很容易讓我們半途而廢。

最後學習一門技術並一定要深入原始碼,特別是非主流,非重點打造的領域。對於此類我們通常只需根據閱讀官方文件,瞭解其使用場景、能解決什麼問題,理解其設計理念、工作機制,靈活運用解決具體問題即可。

5、總結

原始碼閱讀並不是目的,只是手段。對於通用型基礎技術諸如JAVA集合、併發、需重點打造為亮點的領域建議大家閱讀其原始碼,成體系深入細節掌握其工作機制,增強其駕馭能力,擁有提前規避風險的能力。

17
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 在生產環境中,你可以遵循的那些Kubernetes優秀實踐