閱讀開源代碼
『壹』 如何閱讀開源項目代碼
基本功什麼的就不在此贅述,進入正題
1.運行
如果是一個工程的話,建議首先自己運行起來。只有運行起來看到效果之後才方便之後打斷點DEBUG調試。
過程之中也許涉及到各種環境啥的搭建,可能過程很苦逼,很耗耐心和意志。總之,沒有什麼困難能夠阻礙你,如果你真的想要去做的話。
2.入口點
找到程序的入口點,方便跟進。算是毛線球暗藏的那個線頭,找到之後只管拽就肯定能拆解。
3.把對的改錯,再想辦法繞開
個人沒有實踐過,不過日常開發過程中倒是經常碰到把對的改錯了。糾錯再改正的過程確實能夠讓自己對系統有更一步的了解,並且記憶深刻。
4.模塊化閱讀
將整體系統劃分成不同的模塊,再逐個解決。此處的意義不是具體一個項目功能模塊的意思,而更傾向於在抽象一層理解,如網路層,緩存層,持久化層……
5.個人化
換了一個詞表示「使用」,自己動手去使用,去實現,去架構。只有這么做了才能真正體會到自己哪裡還不會。
6.跟「人」溝通
其意義很重要,書籍上確實東西能夠起沉澱很多有意義的東東,但是很多實際使用過程中遇到的問題還需要向大神請教,途徑包括公司資源,包括外網論壇博客啥的。
以上主要是提供一個思路,經過自己這段時間的實踐,發現確實能給黑暗中的自己一個摸索的方向,並且有一定的效果。
另外還有幾點,不知道插在哪一步進行說明,就沒有總結在下面了
多思考,為什麼要寫成這樣,這樣寫有什麼好處。
注重Demo&Sample,很多使用上經驗可以學習。
閱讀代碼時最好分兩遍進行閱讀,第一遍主要熟悉代碼結構,了解流程,劃分模塊;第二遍再注意細節,分模塊的進行熟悉。
一定要記住的是,回味,總結,沉澱。只有轉化成為自己理解的東西之後,才能算學會了,時間才沒白費。
最後說一下,盡可能的在代碼中找答案。跟別人溝通(當然除了跟代碼作者本人溝通外)只能進行經驗的交流,別人所輸出的是經過他的理解和加工之後的,不見得一定是對的。
『貳』 如何閱讀開源代碼
通過閱讀開源代碼,可以學習其中的框架和模式、代碼技巧、演算法等。但是經常有些人拿到開源代碼以後不知道如何下手,這里分享一下我的一些經驗。
1.拿到代碼以後編譯運行它,了解它干什麼的,實現了功能。
2.從入口點開始閱讀,按照流程,了解這個軟體是怎麼運行起來的。
3.從整體上觀察這個軟體是有哪些模塊組成的,最好能畫一畫圖。
4.修改軟體的功能,並且能夠調試它。不能僅僅停留在閱讀代碼上,一定要改代碼,這樣才能增加對開源代碼的理解。
5.做筆記,把這個開源代碼實現的功能,實現方式、設計框架、模塊組織、以及代碼技巧等記錄下來。
以上,這些僅僅是我個人的經驗,希望可以幫組到您。
『叄』 如何閱讀程序源代碼
閱讀源代碼的第一個工具,就是你手中的code base。把它編譯出來,運行它,加log,試著修改一些數據和代碼,看看有什麼變化。
第二個重要的工具就是debugger,而debugger最重要的功能是獲取call stack。在你感興趣的use case里pause一下,在你不知道有什麼用的函數里加個斷點,顯示出來的call stack都能讓你對系統有更清晰的認識。
一個軟體系統就是一個小宇宙。別期待有什麼高明的文檔。要把自己當成探求自然真理的物理學家。
必須找好切入點。你要解決什麼問題。是要fix bug;還是要把這個系統和其它模塊集成;還是要增加新功能。物理學家沒有上來就研究整個宇宙的,必須選好分支。
如果你有一個猜想,但是又和你的目標關聯不太大,那就堅持這個猜想,直到出現明顯反例。物理學有很多這樣的例子,和數學不同,為了旁支猜想投入過多研究是不明智的。
如果有明顯證據證明你的某個旁支猜想大錯特錯,你就要放棄主要目標,暫時把解決旁支猜想作為主要目標。比如,你本來以為某個結構是LRU的cache,結果發現怎麼做都不對,那就先放棄原來的目標,專門研究這個結構的用途。
對於旁支猜想的不斷切換,要做好自己的task stack保留。在旁支猜想解決之後,要根據結論盡快回到上次中斷的任務。
復雜的軟體系統更像一個動物,待久了你會了解它的脾性。有些是通過邏輯,有些是通過感覺。玩車的尚且有這種感覺,我們玩的東西比車復雜上萬倍,就更不能對它缺乏感情投入。(這也是我不愛做企業開發的原因,我不愛養個爬行類當寵物,還是貓貓狗狗的親切。)
『肆』 如何閱讀源代碼
《通用源碼閱讀指導書》易哥 寫的一本書
『伍』 為什麼我們需要閱讀優秀開源軟體代碼
所幸的是,有相當多這類程序都開放了源代碼——它們也正是因此才得以在眾多聰明頭腦的協作下逐步達到今天的高度。開放源代碼,這意味著我們可以拆開每一顆螺釘,走近每一個零件,觀察每一個動作,觸摸每一根鏈條,轉動每一個齒輪(閱讀代碼,運行,調試)。我們可以像孩子一樣拆散它們,然後再拼到一起,可以擺弄它們的位置(修改)。在清楚一些時,我們可以把其中的一些零件用自己製作的替換掉(實驗),還可以把零件卸下來安在自己的機器里(復用)。
當然,最初我們很可能會被慎密而復雜的結構搞暈,但一旦開始漸漸理清它們的關系,我們會首先為那些按高品質行業標准打造的標准零件的規范贊不絕口(代碼規范,軟體包構建,介面設計),接著為那特殊零件賞心悅目的精湛工藝而驚嘆(語言技巧,數據結構/演算法的設計、選擇和實現,細節處理),然後為它們各司其職的明確分工和合理的安排而心服口服(模塊化設計,介面設計,代碼組織結構),其間我們會不斷得到零件上友好簡潔的標注的幫助(注釋和可讀性)。我們甚至會偶然為匠人們的幽默而捧服。有時我們會感到,那些聰明的傢伙在對我們微笑,用帶著一點挑釁卻又友好的語氣說道:"嘿,怎麼樣?我的代碼寫得不錯吧?你能寫得更好么?"
後來,我們會發現諸多不完美,其中有些被證明是我們理解的問題,但有些確實需要改進,那麼就動手吧,這時,我們可以恭喜一下自己——我們已經跟上了這些聰明黑客的節奏,並且開始融入其中。
如果我們對歷史版本進行考古,會有更多發現,我們會看到今天我們面前的強壯青年經歷過怎樣的幼稚,看到他的成長軌跡。這時將會明白,羅馬不是一天建成的,更不是一個人建成的,那些代碼中包含的是大量黑客多年積累的努力和智慧,每一次修改和重構都吸取了上一版本的教訓。今天宏偉光鮮的羅馬城下,壓著無數舊代碼的屍體,而大師們也是在經歷這些風雨後才成為大師。所以,優秀的開源軟體代碼所示範的手段,是歷史之浪淘出的黃金(也有些帶有古董的痕跡,但不影響代碼的質量)。如果我們不去吸取這些血淚澆灌的營養,或許就免不了重流前人流過的血淚了。
總結一下,通過閱讀優秀的開源軟體代碼,我們能夠
可以修改、重寫後通過運行、調試進行實驗
找到可復用的代碼用在自己的項目中
學到代碼編寫、軟體包構建等工程規范
學到語言技巧,數據結構/演算法的設計、選擇和實現,以及細節處理方法
學到模塊化設計方法和良好規范的代碼組織方法
學到良好的編程風格和注釋規范
理解編程理論和原則
了解軟體發展規律,吸取前人經驗教訓
對它們進行改進當然,還有最不重要,也是最重要的:滿足好奇心
『陸』 如何閱讀 Java 開源代碼
准備好環境,比抄如安裝好Eclipse,IDEA等你喜襲歡的集成開發環境
准備好Maven環境
創建一個項目,把你要研究的開源項目pom引入進來
使用maven把源代碼下載下來
寫一個簡單的例子使用開源代碼
分析從啟動開始,斷點調試,看看調用了哪些方法,每個方法是怎麼實現的
所有方法都斷點了一遍,你在這個過程中實際上已經了解了開源代碼是怎麼實現具體功能的了