紮實的基礎知識+正確的方法是快速閱讀原始碼的關鍵

2022-06-11 06:00:54

上一篇我們快速的複習了閱讀原始碼的步驟,同時對比了JUnit3和JUnit4之間的差異。

本篇是《如何高效閱讀原始碼》專題的第十四篇,也是最後一篇,對專題內容做一次總結。

首先,專題第一篇文章描述了幾種不正確的閱讀原始碼的方式:

  • 在不瞭解專案的情況下就去閱讀原始碼

  • 直接就讀最新版本的原始碼

  • 一行一行的讀完整的原始碼

  • 通過debug的方式閱讀原始碼

這幾種方式之所以是錯誤的方式,是由於我們的記憶所決定的:我們的記憶可以分為「短時記憶」和「長時記憶」!對於「短時記憶」來說,一般正常人一次只能記憶7(加減2)個左右的無規律資訊。上面的四種方式實際就是在做無規律記憶。可沒有哪個專案的行數是7行左右的,所以上述閱讀原始碼的方式,是很難讀完專案原始碼的。

接著,專題第二篇提供了15種提高原始碼閱讀效率的小技巧:

  • 瞭解作者開發專案的目的:知道了靶子,才知道方向

  • 先熟練使用起來:先學會走,再去跑

  • 閱讀官方檔案:最瞭解專案的還是作者本人,好好讀讀檔案

  • 先理解概念:我們實際都是在通過概念來理解這個世界

  • 瞭解版本技術背景:瞭解技術限制,版本迭代改變的不一定是需求,可能只是技術本身

  • 沒必要讀最新版本的程式碼:新版本的功能多,但核心功能實際並沒有變化

  • 不需要讀完所有的原始碼:少則幾萬,多則幾百上千萬行的程式碼量你能讀完?

  • 多版本比較閱讀:瞭解版本間的差異,能更好的理解專案

  • 自頂向下梳理:先梳理整體流程

  • 自底向上歸納:總結很重要

  • 先做減法,再做加法:先找出核心模型,基於核心模型擴充套件

  • 從介面找關係:介面是對外協定,可以快速定位呼叫方

  • 畫圖輔助閱讀:90%的資訊來源於視覺

  • 設計模式輔助閱讀:理解設計模式能加速程式碼的理解

  • debug只是輔助:debug只是用來驗證梳理的流程是否正確

這15個小技巧的目的,就是在建立對目標專案的印象和模型。
最後,我們梳理了詳細的閱讀原始碼的步驟:

從上面的流程,你會發現,我們實際是在:

  • 不斷的對原始碼進行建模

  • 再將模型代入到流程中,對流程進行細化

不斷的重複這兩個步驟,從核心模組到非核心模組一點點對流程進行細化完善,最終得到完整的專案流程。

讀原始碼是個主動探索的過程需要不停的根據程式碼來構建你的流程模型。當你發現你在機械的跟著程式碼StepIn、StepOver的時候,不妨喝口咖啡、上個廁所、歇一歇,這樣反而能提高你閱讀原始碼的效率。

同時,你的基礎越紮實,閱讀原始碼的效率就越高,在「提出問題,解答問題!這才是理解程式碼設計的正確方法」一文中你應該深有體會,在熟悉設計模式的情況下,能快速的理解程式碼設計。相應的,如果你的演演算法知識紮實,你就能很快理解語言裡集合的設計;如果你的IO和並行知識紮實,你就能快速的理解Netty的設計、Redis的IO模型。

最後希望本專題提供的閱讀原始碼的方法能助你讀完第一個開源專案!