成為一名更好的程序員:如何閱讀源代碼
閱讀源代碼有許多益處。你會發(fā)現(xiàn)新的架構(gòu)(construct)和庫,與其他的代碼維護者產(chǎn)生共鳴,但最重要的是學(xué)會如何組織代碼,避免因內(nèi)部極其復(fù)雜而變得不可維護。
但是也有一個不好的地方,那就是閱讀源代碼太困難了。每當(dāng)我看到一個新的代碼庫(code base)時,這種讓人眩暈的感覺就充斥了我的大腦。我的內(nèi)心告訴我壓根不想趟眼前這趟渾水。
這是(希望是)正常的反應(yīng)。當(dāng)我們的大腦接觸過多的新東西,就會產(chǎn)生排斥。造物主賦予我們的這臺強大的模式匹配機器根本找不到規(guī)律。所有的抽象(abstraction)都是之前沒見過的,類的名稱也毫無印象。程序又到底是從什么地方開始執(zhí)行的?
對此,我能給出的一般性建議如下:1. 尋找并建立自己能夠理解的初步基礎(chǔ),通常就是主要的入口點(main entry point)。2. 從這個基礎(chǔ)開始,逐步探索主要功能。3. 記錄下自己的見聞。
從頭開始竅門就是給自己一個起點。我是這樣做的。我通過-h選項運行程序,并調(diào)用help命令。之后我復(fù)制其中一條help文檔字符串,以此為檢索詞搜索一遍代碼庫,找到這個幫助文檔所在地方。通常情況下,調(diào)用help命令之后你會發(fā)現(xiàn)離程序的主入口點很近了。
辨明輪廓找到主入口點之后,我會運行幾個文檔中提供的示例。然后,我會試著追蹤主要的代碼塊,大致了解下每個部分是如何連接起來的。
我會問自己,是否存在一個管理程序,負責(zé)調(diào)用一堆幫助函數(shù)和類?是不是有一些類是平級關(guān)系,相互之間輪流交換控制權(quán)?是不是有一個程序逐步執(zhí)行的主任務(wù)隊列?
了解全局有助于你理清小細節(jié)。如果你沒有理解程序的主流程就悶頭讀下去,那你很可能會被細枝末節(jié)搞得焦頭爛額。
勤做筆記我習(xí)慣直接在代碼中做筆記。做筆記的時候,我會使用特殊的注釋符(例如,使用#=>,而非常用的#),這樣可以將我自己的筆記與原作者注釋區(qū)分開來。
如果碰到巧妙的技巧、不易理解的流程、編程架構(gòu)(construct)的漂亮使用方式或者是其他任何你想牢記的內(nèi)容,務(wù)必要做筆記。如果你讀不下去了,你也可以做個記錄,提醒自己之后要回去再讀看不懂的部分。
通過寫下你的思緒,你實際上是在把那塊代碼變成你自己寫的。慢慢地,你就會開始在工作中自然地用上新掌握的那些架構(gòu)(construct)。
融匯貫通學(xué)習(xí)編程,是一個反復(fù)讀代碼和寫代碼的持續(xù)過程。只要你愿意接觸不同的風(fēng)格、代碼,最終你會形成自己的獨特視角和思維。
相關(guān)文章: