如何閱讀大型程式碼庫?
Casey問我:“對於新手,有什麼有針對性的訣竅來閱讀大型程式碼庫嗎?”
碰巧,我認為這是一個非常好的問題。我覺得想要成為一個優秀的開發者,閱讀程式碼庫並弄清清楚內部是怎麼回事的能力非常重要。在你的職業生涯中你會中途加入一個現有的專案並被要求迅速融入進去。或者,甚至更難,會有一個專案丟給你讓你自己一個人搞清楚。
最壞的情景就是你被帶入一個專案,要你替換掉讓工程執行失敗的“那些肆無忌憚的*雜種”,並且讓工程執行起來。不過更常見的情景是你被要求維護一個已經離職的員工寫的程式碼庫。最後,當然,如果你用了任何開源的專案,很大的可能是被要求“你可以擴充套件它讓它也能做這個功能嗎?”亦或者你只是好奇。
尤其是新手程式設計師,我強烈建議閱讀程式碼庫,看看以下我是怎麼做的,然後你需要實際的去閱讀程式碼。
當我接觸到新的程式碼庫時,我常常忽略文件和表面的細節。目的是摒棄先入為主的關於它怎麼執行的想法。我試圖從檔案結構上找出專案的結構。僅僅這個就能告訴你很多,我常常試圖找出它的結構。這是整個系統的核心嗎?它是怎麼分割的?等等。
之後我會找到最底層的程式碼然後開始閱讀。我常常用字典序來讀。找到一個檔案,讀完它,然後讀下一個檔案。我儘量記錄下來關於這些東西是如何連線在一起的(你可以在部落格裡找到關於記筆記的例子),但我做的最多的找到對這個程式碼的感覺。有很多程式碼常常是專案風格的一部分,比如預處理檢查,日誌記錄,抓取錯誤等等。你可以先了解這部分內容,之後就可以忽略它們閱讀有趣的部分。
我通常不在某一點上閱讀太深,我會試圖巨集觀的找到感覺。比如:這個檔案通過呼叫Y和Z返回了X,但在這個點上閱讀每一個細節對我來講並不真的重要。哦對了,我還記錄筆記,很多筆記。往往它們不是真的筆記而更像是問題清單,在這裡我理解的越多,加入的問題和寫入的回答也就更多。在閱讀完我能找到的最底層程式碼之後,我會做一個縱向的比較。這是最讓我能弄清楚事情是如何佈局和工作的。這就意味著下一次我來看這部分的時候,對於程式碼結構我會有更好的想法。
接下來,我會找有意思的部分。系統當中對我有意思的部分而不是被我束之高閣的部分。
這部分內容很多,但其實要做的並不多。我僅僅是通讀一遍程式碼首先找到結構,之後我會認真研讀獨一無二的部分並找出他們是如何寫的。
在這期間,尤其是遇到難點的時候,我會試圖尋找任何文件(只要有的話)。對於這一點,我應當首先知道程式碼是如何組織的,這樣我才能更快的閱讀文件。
*原作者注:我一開始只寫了肆無忌憚,不過這樣更有趣。
原文連結: Ayende Rahien 翻譯: 伯樂線上 - 孑良
相關文章
- 轉_如何閱讀程式碼
- 如何閱讀大型前端開源專案的原始碼前端原始碼
- 如何組織大型 Rust 程式碼庫Rust
- 如何閱讀他人的程式程式碼[轉]
- 也談如何閱讀程式原始碼原始碼
- 搭建大型原始碼閱讀環境——使用 OpenGrok原始碼
- 閱讀程式碼就像閱讀猶太法典
- 如何閱讀Java原始碼?Java原始碼
- 如何閱讀框架原始碼框架原始碼
- 如何閱讀jdk原始碼?JDK原始碼
- 如何快速閱讀原始碼原始碼
- 如何閱讀開原始碼原始碼
- leveldb 程式碼閱讀三
- dreambooth程式碼閱讀boot
- [譯] 如何心平氣和地閱讀程式碼
- 如何閱讀別人的C/C++程式碼C++
- 個人閱讀 程式碼大全的閱讀與提問
- PostgreSQL 原始碼解讀(3)- 如何閱讀原始碼SQL原始碼
- 初學者如何閱讀原始碼?原始碼
- 如何高效閱讀Github原始碼Github原始碼
- 【原始碼閱讀】AndPermission原始碼閱讀原始碼
- 命名&可閱讀的程式碼
- TaxoRec部署與程式碼閱讀
- C庫原始碼閱讀(快速定位原始碼)原始碼
- 如何閱讀原始碼–Koa為例原始碼
- 如何閱讀一份原始碼?原始碼
- 如何閱讀原始碼--Koa為例原始碼
- underscore 的原始碼該如何閱讀?原始碼
- 如何閱讀JAVA 位元組碼(一)Java
- 做一個程式碼閱讀器
- 程式碼大全 閱讀與提問
- 程式碼大全2閱讀筆記筆記
- 如何在 GitHub 上高效閱讀原始碼?Github原始碼
- 如何高效的閱讀hadoop原始碼?Hadoop原始碼
- 如何閱讀java專案的原始碼Java原始碼
- 如何閱讀大型前端開源專案的原始碼,授人以魚不如授人以漁前端原始碼
- 教你如何閱讀Oracle資料庫官方文件Oracle資料庫
- 如何閱讀 Paper