這個問題簡單,程序從哪里開始就哪里開始讀起。譬如,C 代碼,當然是從 main(),其他語言也是類似的。但閱讀的時候,要帶著問題去讀。
帶著最簡單的問題,開始閱讀源碼。
拿到一個別人寫的代碼,或多或少,細節(jié)有很多,不可能一開始就能把所有的細節(jié)都吃透,所以需要一個簡單的問題先把整個代碼系統(tǒng)的閱讀一遍,知道里面的整體框架是怎么樣的。譬如 Memcache/Redis 這種 key/value 系統(tǒng),當它們收到一個 set/get key 請求,是如何做相應的呢?整個服務是如何運作起來的?譬如 Django,當它拿到一個 HTTP 請求,是如何做相應的呢?帶著這些簡單的問題,瀏覽源代碼能更快了解它們的代碼框架是怎么樣的,對于之后繼續(xù)閱讀里面的模塊,也是非常有好處的。
讀源代碼,框架才是最先需要了解的,細節(jié)才是最重要的。
看到一個函數(shù), 首先要做的是知道這個函數(shù)到底做了什么, 而不是他底層是怎么實現(xiàn)的。這有點類似于英語中的閱讀理解,遇到文中陌生的單詞,首先是根據(jù)上下文來判斷它是什么意思,到最后真的不能理解再回頭拿字典去查單詞。
忽略變量聲明。好的開源 C 代碼會將所有變量提前聲明,即放在函數(shù)的開頭。實際上,沒必要例會這一大坨的變量,等遇到用到這個變量的時候自然就能懂得這個參數(shù)是用來做什么,而不用我們首次見到就猜測它的用處。 畫出函數(shù)的調(diào)用鏈,用自己認為最合適的圖表說明問題。有時候 Redis 里面的調(diào)用鏈比較長,經(jīng)常畫滿一張 A4 紙。在每個函數(shù)旁邊都標注它所完成的事情,這是收集線索的一個過程,可能會非常的枯燥。
我會在小冊子的最后推薦幾款源碼閱讀的軟件。