轉自:https://www.zhihu.com/question/19637879/answer/51507188設計模式
如何快速學習一個開源項目源碼?網絡
你有個任務,須要用到某個開源項目;或者老大交代你一個事情,讓你去了解某個東西。怎麼下手呢?如何
開始呢?個人習慣是這樣:架構
1.首先,查找和閱讀該項目的博客和資料,經過google你能找到某個項目大致介紹的博客,快速閱讀一下就
能對項目的目的、功能、基本使用有個大概的瞭解。單元測試
2.閱讀項目的文檔,重點關注相似Getting started、Example之類的文檔,從中學習如何下載、安裝、甚至
基本使用該項目所須要的知識。學習
3.若是該項目有提供現成的example工程,首先嚐試按照開始文檔的介紹運行example,若是運行順利,那麼
恭喜你順利開了個好頭;若是遇到問題,首先嚐試在項目的FAQ等文檔裏查找答案,再次,能夠將問題(例如
異常信息)當成關鍵詞去搜索,查找相關的解決辦法,你遇到了,別人通常也會遇到,熱心的朋友會記錄下
解決的過程;最後,能夠將問題提交到項目的郵件列表,請你們幫你看看。在沒有成功運行example以前,不
要嘗試修改example。測試
4.運行了第一個example以後,嘗試根據你的理解和須要修改example,測試高級功能等。google
5. 在瞭解基本使用後,須要開始深刻的瞭解該項目。例如項目的配置管理、高級功能以及最佳實踐。一般
一個運做良好的項目會提供一份從淺到深的用戶指南,你並不 須要從頭至尾閱讀這份指南,根據時間和興
趣,特別是你本身任務的須要,重點閱讀部分章節並作筆記(推薦evernote)。debug
6.若是時間容許,嘗試從源碼構建該項目。一般開源項目都會提供一份構建指南,指導你如何搭建一個用於
開發、調試和構建的環境。嘗試構建一個版本。設計
7.若是時間容許而且有興趣,能夠嘗試閱讀源碼:
(1)閱讀源碼以前,查看該項目是否提供架構和設計文檔,閱讀這些文檔能夠了解該項目的大致設計和結
構,讀源碼的時候不會無從下手。
(2)閱讀源碼以前,必定要能構建並運行該項目,有個直觀感覺。
(3)閱讀源碼的第一步是抓主幹,嘗試理清一次正常運行的代碼調用路徑,這能夠經過debug來觀察運行時
的變量和行爲。修改源碼加入日誌和打印能夠幫助你更好的理解源碼。
(4)適當畫圖來幫助你理解源碼,在理清主幹後,能夠將整個流程畫成一張流程圖或者標準的UML圖,幫助
記憶和下一步的閱讀。
(5)挑選感興趣的「枝幹」代碼來閱讀,好比你對網絡通信感興趣,就閱讀網絡層的代碼,深刻到實現細
節,如它用了什麼庫,採用了什麼設計模式,爲何這樣作等。若是能夠,debug細節代碼。
(6)閱讀源碼的時候,重視單元測試,嘗試去運行單元測試,基本上一個好的單元測試會將該代碼的功能
和邊界描述清楚。
(7)在熟悉源碼後,發現有能夠改進的地方,有精力、有意願能夠向該項目的開發者提出改進的意見或者
issue,甚至幫他修復和實現,參與該項目的發展。調試
8.一般在閱讀文檔和源碼以後,你能對該項目有比較深刻的瞭解了,可是該項目所在領域,你可能還想搜索
相關的項目和資料,看看有沒有其餘的更好的項目或者解決方案。在廣度和深度之間權衡。
以上是我我的的一些習慣,我本身也並無徹底按照這個來,可是按照這個順序,基本上能讓你比較高效地
學習和使用某個開源項目。
原文:如何熟悉一個開源項目?