上一篇我們快速的複習了閱讀原始碼的步驟,同時對比了JUnit3和JUnit4之間的差異。
本篇是《如何高效閱讀原始碼》專題的第十四篇,也是最後一篇,對專題內容做一次總結。
首先,專題第一篇文章描述了幾種不正確的閱讀原始碼的方式:
在不瞭解專案的情況下就去閱讀原始碼
直接就讀最新版本的原始碼
一行一行的讀完整的原始碼
通過debug的方式閱讀原始碼
這幾種方式之所以是錯誤的方式,是由於我們的記憶所決定的:我們的記憶可以分為「短時記憶」和「長時記憶」!對於「短時記憶」來說,一般正常人一次只能記憶7(加減2)個左右的無規律資訊。上面的四種方式實際就是在做無規律記憶。可沒有哪個專案的行數是7行左右的,所以上述閱讀原始碼的方式,是很難讀完專案原始碼的。
接著,專題第二篇提供了15種提高原始碼閱讀效率的小技巧:
瞭解作者開發專案的目的:知道了靶子,才知道方向
先熟練使用起來:先學會走,再去跑
閱讀官方檔案:最瞭解專案的還是作者本人,好好讀讀檔案
先理解概念:我們實際都是在通過概念來理解這個世界
瞭解版本技術背景:瞭解技術限制,版本迭代改變的不一定是需求,可能只是技術本身
沒必要讀最新版本的程式碼:新版本的功能多,但核心功能實際並沒有變化
不需要讀完所有的原始碼:少則幾萬,多則幾百上千萬行的程式碼量你能讀完?
多版本比較閱讀:瞭解版本間的差異,能更好的理解專案
自頂向下梳理:先梳理整體流程
自底向上歸納:總結很重要
先做減法,再做加法:先找出核心模型,基於核心模型擴充套件
從介面找關係:介面是對外協定,可以快速定位呼叫方
畫圖輔助閱讀:90%的資訊來源於視覺
設計模式輔助閱讀:理解設計模式能加速程式碼的理解
debug只是輔助:debug只是用來驗證梳理的流程是否正確
這15個小技巧的目的,就是在建立對目標專案的印象和模型。
最後,我們梳理了詳細的閱讀原始碼的步驟:
「HelloWorld的大用途:通過demo,構建黑盒模型」:我們解釋了什麼是黑盒模型以及如何通過demo來構建黑盒模型
「如何通過閱讀檔案,構建概念模型?」:我們解釋了為什麼要閱讀檔案;到哪裡去閱讀檔案以及如何閱讀檔案。同時闡述瞭如何構建概念模型,最後通過概念模型驗證和完善黑盒模型
「聚焦核心模組,少閱讀80%的「無用」程式碼」:我們解釋了為什麼要找核心模組以及定位核心模組的方法
「高效閱讀原始碼的關鍵:構建核心抽象模型」:我們解釋了什麼是抽象模型;為什麼要構建抽象模型,以及如何構建抽象模型。最後通過JUnit4演示如何構建抽象模型
「無需debug,通過抽象模型快速梳理程式碼核心流程」:我們演示瞭如何通過抽象模型來梳理核心流程
「通過對抽象模型和概念模型的整合,細化專案整體流程」:我們解釋了為什麼要繪圖;如何繪製核心流程圖;以及如何將抽象模型和概念模型進行整合
「模型的威力:基於模型,快速梳理原始碼」:我們解釋瞭如何確定呼叫類;並通過梳理呼叫類來完善專案流程。
「提出問題,解答問題!這才是理解程式碼設計的正確方法」:通過回答前面提出的問題,來理解程式碼的設計
「Spring是如何整合JUnit的?JUnit原始碼關聯延伸閱讀」:我們梳理了TestRunner的執行流程以及Spring如何整合JUnit
「同一專案、不同版本之間原始碼的閱讀」:通過對JUnit3原始碼的快速梳理複習了一遍前面的閱讀步驟,並對JUnit3和JUnit4進行比較。
從上面的流程,你會發現,我們實際是在:
不斷的對原始碼進行建模
再將模型代入到流程中,對流程進行細化
不斷的重複這兩個步驟,從核心模組到非核心模組一點點對流程進行細化完善,最終得到完整的專案流程。
讀原始碼是個主動探索的過程,需要不停的根據程式碼來構建你的流程模型。當你發現你在機械的跟著程式碼StepIn、StepOver的時候,不妨喝口咖啡、上個廁所、歇一歇,這樣反而能提高你閱讀原始碼的效率。
同時,你的基礎越紮實,閱讀原始碼的效率就越高,在「提出問題,解答問題!這才是理解程式碼設計的正確方法」一文中你應該深有體會,在熟悉設計模式的情況下,能快速的理解程式碼設計。相應的,如果你的演演算法知識紮實,你就能很快理解語言裡集合的設計;如果你的IO和並行知識紮實,你就能快速的理解Netty的設計、Redis的IO模型。
最後希望本專題提供的閱讀原始碼的方法能助你讀完第一個開源專案!