如何提高閱讀源代碼的能力?


壓力


建議你看一本《代碼閱讀方法和實踐》(code reading),教會你怎樣去閱讀源代碼。


我也頭疼這件事。但至少有幾個方向可能有幫助:

第一,搞清項目結構。這會幫你建立大局觀,分清主次。比如,哪兒是程序入口,哪兒是測試用例,哪兒是核心功能,哪兒是第三方庫。在此基礎上你還可以建立抽象,比如某行調用了一個解析 json 的函數,但是這函數的具體實現你暫時不關心,你只知道這裡用這個介面做了這件事。

第二,建立運行和調試環境。一般的運行環境,至少可以讓你觀察到輸入輸出之間的關係,調試環境則更加細緻,每一步的輸入輸出關係你都可以看到。遇到比較晦澀的東西,調試的做法有可能幫你理解這塊兒代碼想幹什麼。反過來,在你了解這塊兒代碼的目的之後,很可能你就可以通過搜索引擎找到具體實現的解釋,然後你來決定你要關心到什麼程度的細節。

第三,熟悉常見的設計模式。比如你看到Creator可以想到工廠相關的模式或者其他構造實例的模式,看到Subscribe可以想到觀察者,看到Instance可以想到單例或類似單例的模式。這可能能幫你理解作者的抽象意圖,以及他想在什麼維度保留靈活性。

多看多寫自不必說,祝題主早日隨性遨遊於代碼的海洋。


讀代碼的能力和寫代碼的能力是相輔相成的。所以,要提高讀代碼的能力,首先要多寫多練。

面對一些大的項目的代碼時,最好先看一下項目的設計文檔,知道這個項目在做啥事兒實現了什麼功能,主要功能是什麼。

還有一點,去看一下項目用到了什麼技術。比如用到了什麼工具包,用到了什麼別的項目的代碼等等。可以先搜索一下,看這些工具包應該怎樣使用,這樣當我們看到引用工具包的相關代碼時就會覺得很輕鬆。

最後一點,看代碼一定要先從主要功能開始看起。從入口函數開始按圖索驥一步步往下推。看代碼的時候應該採取廣度優先的策略。也就說遇到一個新的函數時,不要先看它具體的實現,而是應該先試圖弄清楚這個函數要幹什麼事兒,與別的模塊有什麼關係。


找一個好的IDE;

找一個好的debugger(如果IDE不自帶debugger);

把每一個module視為一個人,這個「人」給其他「人」提供服務和數據,試著在紙上把這些「人」畫出來,以及他們之間的聯繫


書讀百遍,其義自現。

最笨的方法,但行之有效。


架構:熟悉常用的技術框架,分析一個項目的源碼要從整個架構出發,明白解決方案中每一個項目的功能和相互依賴關係。

重構:提高重構代碼的能力,因為項目核心代碼都是精簡高效的,想要看懂不同人寫的代碼,不容易。

分析:業務邏輯分析能力,閱讀源碼之前要明白項目的功能需求,別幾個函數繞個彎就出不來了。

耐心:這個其實最重要,

代碼質量決定你的閱讀效率


找點簡單的demo來看,之後敲,運用就好了


學好英文 !


多寫 + 過幾年


從框架開始到細節


推薦閱讀:

怎麼評價歐陽乾的最後進化?
微軟源碼丟失了會怎麼樣?
jQuery 是庫(library)還是框架(framework)?
android怎樣破解已使用加殼技術的APP?
如何閱讀程序源代碼?

TAG:編程 | 開源 | 源代碼 |