想讀項目源碼?可爲什麼總是讀不下去?

本篇是專題《如何高效閱讀源碼》的第一篇,來聊一聊閱讀源碼的錯誤姿勢!以及本專題的內容及章節。

似曾相識的場景

你聽說Spring已經有一段時間了,它已經是Java企業級開發事實上的標準。你覺得自己應該讀一讀Spring的源碼,深入理解一下Spring的實現,這能使自己更好的使用Spring,同時也能提高自己項目設計和編碼能力。

於是你泡了一杯咖啡,從github上下載最新的Spring源碼,導入到IDE中,寫了一個demo,然後就開始debug。你一邊StepOver,一邊嘴裏嘟囔着「A類的a方法調用了B類的b方法,然後又調用了C類的c方法,然後又執行到了這裏」。嗯,很清晰嘛,喝口咖啡。咦,剛纔看到哪裏了?!沒辦法,只好重新debug!

「A類的a方法調用了B類的b方法,然後又調用了C類的c方法。。。。。。這裏是個接口,要執行的是子類,子類在哪裏呢」?你在IDEA裏按下ALT+F7,發現有幾十個實現,到底是哪個實現呢?你按下F7 StepIn想確認下。我去,一堆AOP的包裝方法,按了半天,就是進不到最終的類!

最後,好不容易找到了執行的類。咦,剛纔看的是什麼來着?!唉,算了,看不下去了,先來把王者吧!然後,就沒有然後了!!!
爲什麼你沒辦法把源碼讀下去呢?因爲你的方法不對

  • 不瞭解項目就讀源碼

  • 一上來就讀最新版本的源碼

  • 直接讀完整的源碼

  • 通過debug的方式閱讀源碼

我們一個個的來說!

不瞭解項目就讀源碼

首先,你瞭解項目了嗎?你有實際使用過項目嗎?你對項目的執行流程瞭解多少?如果你還沒有熟練的使用項目,那你就不要急着去讀項目源碼。
讀源碼需要在熟練使用的基礎上進行。爲什麼呢?

你想想你讀源碼的目的是什麼?你是希望能瞭解這個項目是如何設計實現的,代碼如何組織的,有哪些技巧或思路可以學習。但是你連項目都不瞭解,你怎麼去理解這個項目是怎麼設計的?

就像上面,你只知道Spring是目前企業級開發事實上的標準,但是你不知道原因,也不知道它解決了什麼問題,以及解決問題的方式。那你如何能理解代碼爲什麼要這麼寫?!假如你最終千辛萬苦的終於將Spring源碼讀完了,你也只知道Spring構建了Bean塞到了容器中,然後使用的時候獲取這個Bean,而不清楚深層次的用意。

一上來就讀最新版本的源碼

很多開源項目經歷了很多年,代碼量成指數級增長。版本越新,代碼量也就越多。以Spring來說,現在Spring已經到了5.*版本,從git上下載下來的spring-framework的源碼大小有200多兆,你能想象這得有多少代碼嗎?一上來就讀這種龐然大物,心裏不瘮得慌纔怪!

所以從相對老一點的版本入手,代碼量上會少很多,閱讀起來也會容易很多。但是版本也不能太老,太老的版本可能使用的技術已經過時了,讀了也沒有什麼太大的用處。

直接看完整代碼

雖然老版本的代碼量相對少一點,但是一個相對較大一點的項目的代碼量還是比較多的。比如Spring3的代碼量也已經很多了。
所以,無論是哪個版本的源碼,你都不應該看完整的代碼。那該怎麼去讀源碼呢?這就是本專題要解決的問題之一,在後面的章節中會進行詳細的講解。

通過debug的方式閱讀源碼

很多源碼分析的博客都是通過debug的方式來講述源碼。也有不少教讀源碼的文章,也是建議通過debug的方式來進行閱讀。但是,實際上通過debug的方式來閱讀源碼不是一個好方法,至少一上來就進行debug,是個很不好的習慣

大部分人應該都知道,人的記憶可以分爲「短時記憶」和「長時記憶」!對於「短時記憶」來說,一般正常人一次只能記憶7(加減2)個左右的無規律信息。對於通過debug進行源碼閱讀的方式,每一次的方法跟進,實際就是一次信息記憶,所以最多7次左右的StepOver,你就沒法記住所有的調用關係了。所以你就會出現看了後面忘了前面的情況。

同時像Spring這種使用了AOP的項目,由於在運行時有多層的代理,所以debug的層級更多,也就更加的難以閱讀了。
再加上衆多的子類實現,很容易就迷失在了一堆沒用的代碼中。

專題內容

既然已經知道了錯誤的閱讀源碼的方式,那正確的閱讀源碼的方式是什麼呢?這就是本專題的內容!
本專題包括四部分內容:

  • 錯誤的閱讀源碼的方式

  • 提高閱讀效率的方法

  • 高效閱讀源碼的步驟

  • 以及一個完整的演示實例

看完本專題,你將學會:

  • 一種高效閱讀源碼的方法

  • 理解閱讀源碼的目的是什麼

  • 理解設計模式的用途

  • 理解如何從架構層面看源碼

預備知識

爲了更好的理解本專題,你最好需要:

  • 至少掌握一門編程語言,本專題使用Java語言講解,故掌握Java語言最佳

  • 瞭解UML,本專題會繪製一些簡單的UML圖

  • 瞭解常用設計原則

  • 瞭解常用設計模式,瞭解設計原則和設計模式能更快的理解項目

  • 熟練使用一款IDE,本專題使用Intellij IDEA演示,故熟悉Intellij IDEA最佳

  • 熟練使用紙和筆或熟悉一款繪圖軟件,本專題使用draw.io進行繪圖

  • 熟練使用你需要閱讀源碼的項目,本專題使用JUnit進行講解,故熟練使用JUnit最佳

適用人羣

    • 想快速瞭解一個項目的源碼結構的開發人員

    • 想閱讀源碼,但是一直找不到方法,讀不下去的開發人員

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章