如何閱讀大型代碼庫?

jopen 11年前發布 | 6K 次閱讀 代碼

  英文原文:Reading Large Codebases

  Casey 問我:“對于新手,有什么有針對性的訣竅來閱讀大型代碼庫嗎?”

  碰巧,我認為這是一個非常好的問題。我覺得想要成為一個優秀的開發者,閱讀代碼庫并弄清清楚內部是怎么回事的能力非常重要。在你的職業生涯中你會中途加入一個現有的項目并被要求迅速融入進去。或者,甚至更難,會有一個項目丟給你讓你自己一個人搞清楚。

  最壞的情景就是你被帶入一個項目,要你替換掉讓工程運行失敗的“那些肆無忌憚的*雜種”,并且讓工程運行起來。不過更常見的情景是你被要求維護 一個已經離職的員工寫的代碼庫。最后,當然,如果你用了任何開源的項目,很大的可能是被要求“你可以擴展它讓它也能做這個功能嗎?”亦或者你只是好奇。

  尤其是新手程序員,我強烈建議閱讀代碼庫,看看以下我是怎么做的,然后你需要實際的去閱讀代碼。

  當我接觸到新的代碼庫時,我常常忽略文檔和表面的細節。目的是摒棄先入為主的關于它怎么運行的想法。我試圖從文件結構上找出項目的結構。僅僅這個就能告訴你很多,我常常試圖找出它的結構。這是整個系統的核心嗎?它是怎么分割的?等等。

  之后我會找到最底層的代碼然后開始閱讀。我常常用字典序來讀。找到一個文件,讀完它,然后讀下一個文件。我盡量記錄下來關于這些東西是如何連接 在一起的(你可以在博客里找到關于記筆記的例子),但我做的最多的找到對這個代碼的感覺。有很多代碼常常是項目風格的一部分,比如預處理檢查,日志記錄, 抓取錯誤等等。你可以先了解這部分內容,之后就可以忽略它們閱讀有趣的部分。

  我通常不在某一點上閱讀太深,我會試圖宏觀的找到感覺。比如:這個文件通過調用Y和Z返回了X,但在這個點上閱讀每一個細節對我來講并不真的重 要。哦對了,我還記錄筆記,很多筆記。往往它們不是真的筆記而更像是問題清單,在這里我理解的越多,加入的問題和寫入的回答也就更多。在閱讀完我能找到的 最底層代碼之后,我會做一個縱向的比較。這是最讓我能弄清楚事情是如何布局和工作的。這就意味著下一次我來看這部分的時候,對于代碼結構我會有更好的想 法。

  接下來,我會找有意思的部分。系統當中對我有意思的部分而不是被我束之高閣的部分。

  這部分內容很多,但其實要做的并不多。我僅僅是通讀一遍代碼首先找到結構,之后我會認真研讀獨一無二的部分并找出他們是如何寫的。

  在這期間,尤其是遇到難點的時候,我會試圖尋找任何文檔(只要有的話)。對于這一點,我應當首先知道代碼是如何組織的,這樣我才能更快的閱讀文檔。

  原作者注:我一開始只寫了肆無忌憚,不過這樣更有趣。

  翻譯: 伯樂在線 - 孑良 譯文鏈接: http://blog.jobbole.com/51973/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!