如何熟悉一個開源項目

? ? 轉自:http://www.blogjava.net/killme2008/archive/2012/05/22/378885.html


你有個任務,需要用到某個開源項目;或者老大交代你一個事情,讓你去了解某個東西。怎么下手呢?如何開始呢?我的習慣是這樣:


1.首先,查找和閱讀該項目的博客和資料,通過google你能找到某個項目大體介紹的博客,快速閱讀一下就能對項目的目的、功能、基本使用有個大概的了解。

2.閱讀項目的文檔,重點關注類似Getting started、Example之類的文檔,從中學習如何下載、安裝、甚至基本使用該項目所需要的知識。

3.如果該項目有提供現成的example工程,首先嘗試按照開始文檔的介紹運行example,如果運行順利,那么恭喜你順利開了個好頭;如果遇到問題,首先嘗試在項目的FAQ等文檔里查找答案,再次,可以將問題(例如異常信息)當成關鍵詞去搜索,查找相關的解決辦法,你遇到了,別人一般也會遇到,熱心的朋友會記錄下解決的過程;最后,可以將問題提交到項目的郵件列表,請大家幫你看看。在沒有成功運行example之前,不要嘗試修改example。

4.運行了第一個example之后,嘗試根據你的理解和需要修改example,測試高級功能等。

5.在了解基本使用后,需要開始深入的了解該項目。例如項目的配置管理、高級功能以及最佳實踐。通常一個運作良好的項目會提供一份從淺到深的用戶指南,你并不需要從頭到尾閱讀這份指南,根據時間和興趣,特別是你自己任務的需要,重點閱讀部分章節并做筆記(推薦evernote)。

6.如果時間允許,嘗試從源碼構建該項目。通常開源項目都會提供一份構建指南,指導你如何搭建一個用于開發、調試和構建的環境。嘗試構建一個版本。

7.如果時間允許并且有興趣,可以嘗試閱讀源碼:
(1)閱讀源碼之前,查看該項目是否提供架構和設計文檔,閱讀這些文檔可以了解該項目的大體設計和結構,讀源碼的時候不會無從下手。
(2)閱讀源碼之前,一定要能構建并運行該項目,有個直觀感受。
(3)閱讀源碼的第一步是抓主干,嘗試理清一次正常運行的代碼調用路徑,這可以通過debug來觀察運行時的變量和行為。修改源碼加入日志和打印可以幫助你更好的理解源碼。
(4)適當畫圖來幫助你理解源碼,在理清主干后,可以將整個流程畫成一張流程圖或者標準的UML圖,幫助記憶和下一步的閱讀。
(5)挑選感興趣的“枝干”代碼來閱讀,比如你對網絡通訊感興趣,就閱讀網絡層的代碼,深入到實現細節,如它用了什么庫,采用了什么設計模式,為什么這樣做等。如果可以,debug細節代碼。
(6)閱讀源碼的時候,重視單元測試,嘗試去運行單元測試,基本上一個好的單元測試會將該代碼的功能和邊界描述清楚。
(7)在熟悉源碼后,發現有可以改進的地方,有精力、有意愿可以向該項目的開發者提出改進的意見或者issue,甚至幫他修復和實現,參與該項目的發展。

8.通常在閱讀文檔和源碼之后,你能對該項目有比較深入的了解了,但是該項目所在領域,你可能還想搜索相關的項目和資料,看看有沒有其他的更好的項目或者解決方案。在廣度和深度之間權衡。

? ? 以上是我個人的一些習慣,我自己也并沒有完全按照這個來,但是按照這個順序,基本上能讓你比較高效地學習和使用某個開源項目。

轉載于:https://www.cnblogs.com/bugchecker/archive/2013/01/30/3041587.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260053.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260053.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260053.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

離散序列卷積c語言,數電實驗一離散卷積的C語言編程.ppt-資源下載在線文庫www.lddoc.cn...

數電實驗一 離散卷積的C語言編程.ppt實驗一 離散卷積的C語言編程實驗,DSP實驗室,實驗性質,綜合設計性實驗,實驗目的,1 了解和認識常用的各種信號; 2 掌握卷積的定義和計算方法; 3 掌握在計算機中生成以及繪制信號序列圖的方法。,實驗原理,離散時間系統中…

三個數差的平方公式推導過程_平方差公式證明推導過程及運用詳解(數學簡便計算方法之一)...

?平方差公式是小學奧數計算中的常用公式。通常寫為:a-b(ab)x(a-b)它的幾何方法推導過程是這樣的:如下圖所示,四邊形ABCD和四邊形DEFG為正方形,邊長分別為a和b,求陰影部分面積。純手繪顯然,陰影部分面積有2…

zabbix簡單介紹(1)

zabbix概念是一個基于WEB界面的提供分布式系統監控以及網絡監視功能的企業級的開源解決方案。zabbix監控途徑zabbix agentsnmp agentipmi agent(硬件)agentless monitoring(無agent的監控)web monitoring 監控web頁面,下載(速度),響應,認證等(web本身的服務狀態)database monit…

c語言集合除去相同元素,使用C語言去掉字符串集合重復元素

有一種最直接的方法可以去掉一個集合中重復的元素,這種方法據說就是“交給下面去做”,然而有時候,你自己動手去做一下也是不錯的。如果交給下面去做,最直接的選擇就是使用map,在java中,我們有HashMap&#…

Zynq7000系列之芯片引腳功能綜述

很多人做了很久的FPGA,知道怎么去給信號分配引腳,卻對這些引腳的功能及其資源限制知之甚少;在第一章里對Zynq7000系列的系統框架進行了分析和論述,對Zynq7000系列的基本資源和概念有了大致的認識,然而要很好地進行硬件…

python模擬購物車購物過程_python實現購物車+ATM機 第五天

模擬實現一個ATM 購物商城程序1.額度 15000或自定義2.實現購物商城,買東西加入 購物車,調用信用卡接口結賬3.可以提現,手續費5%4.每月22號出賬單,每月10號為還款日,過期未還,按欠款總額 萬分之5 每日計息5…

C#使用Cookie方法

代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> //寫入protected void Button1_Click(object sender, EventArgs e){HttpCookie cookienew HttpCookie("MyCook");//初使化并設置Cookie的名稱DateTime…

智能手機計步算法c語言實現,【轉載】智能手機計步器算法的實現

現在的智能手機嵌入了一些微小的傳感器,比如重力傳感器、光傳感器、聲音傳感器等。如何有效地利用這些傳感器來開發一些應用,是一個值得深入研究的課題。比如開發醫療健康的應用、運動量監視器等。本文采用htc Touch Pro智能手機的重力傳感器來開發一款監…

vue點擊按鈕怎么跳轉圖片_vue-router組件里面點擊一個按鈕跳轉到一個新的組件該怎么實現...

展開全部直接修改地址欄中的路由地址即可:{{msg}}var testLogin Vue.component("login",{template:這是我的登錄頁面})var testRegister Vue.component("register",{template:這是我的注冊頁面})//配置路由詞典//對象數組const myRoutes [//…

Arduino教程資料匯總(8月22日悄悄跟新了一下)

http://www.geek-workshop.com/thread-985-1-1.html 本帖最后由 迷你強 于 2013-8-31 12:36 編輯 F-101 arduino基礎套件使用資料 Arduino入門教程--課前準備--Arduino驅動安裝及1.0 IDE菜單介紹Arduino入門教程--第一課--板載Led閃爍實驗Arduino入門教程--第二課--第一次面包板…

HTML5/CSS3系列教程:HTML5 區域(Sectioning)的重要性

日期:2013-2-4 來源:GBin1.com 不管你以前在web頁面布局中如何稱呼它們 - “區域”還是“塊”,我們一直都在布局中將頁面分成可視的不同區域。但真正的問題在于我們并沒有使用任何正確的工具來實現。一般情況下我們使用典型的網格來劃分頁頭…

CoreAnimation —— CAReplicatorLayer(拷貝圖層)

2019獨角獸企業重金招聘Python工程師標準>>> CAReplicatorLayer是一個layer容器,會對其中的subLayer進行一些差異處理(它的子layer都可以拷貝) 屬性: //拷貝的次數 property NSInteger instanceCount; //是否開啟景深效…

c語言用數組寫密碼程序,想程序高手求助--用C語言來編輯一個輸入密碼的程序...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓/*--------實現密碼的隱式輸入-----------------*/inputpw(char *password,int len) /*len為密碼長度*/{int i0; /*密碼數組索引值,同時也表示記錄已顯示*的數目*/char ch;fflush(stdin); /*清洗流,以防妨礙密碼正確輸入…

ps流 轉發_RTP協議全解析(H264碼流和PS流)(轉)

[LeetCode] Arranging Coins 排列硬幣You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...使用Jenkins可持續集成maven項目首先下載最新的Jenkins的war包,放在tomcat的webapps的目錄下,然后運行,例…

android 接收短信代碼,短信接收功能實現的代碼

其中包含了widget必備的要素以及對應文件分別為:appwidgetprovider--------------------------SmsWidget.javawidget的config--------------------------SmsWidgetConfig.javawidget引發的app-------------------------SmsAider.javaappwidgetproviderinfo---------…

使用MeanJS Yeoman Generator

1、首先全局安裝該生成器 sudo npm install -g generator-meanjs 2、為項目創建一個路徑 mkdir xmen && cd xmen 3、創建app yo meanjs 根據提示,輸入應用名,描述,關鍵詞,是否創建crud例子。。 4、運行app sudo NODE_ENVd…

Entity Framework With Oracle

雖然EF6都快要出來了,但是對于Oracle數據庫,仍然只能用DB first和Model First來編程,不能用Code First真是一個很大的遺憾啊。 好了,廢話少說,我們來看看EF中是如何用DB first和Model First來對Oracle編程的。 首先我們…

(三)Maven倉庫介紹與本地倉庫配置

1.Maven本地倉庫/遠程倉庫的基本介紹 示意圖: 本地倉庫是指存在于我們本機的倉庫,在我們加入依賴時候,首先會跑到我們的本地倉庫去找,如果找不到則會跑到遠程倉庫中去找。對于依賴的包大家可以從這個地址進行搜索:http…

大數據時代下的遷移學習_繼深度學習后,下一個熱點技術是遷移學習

最早提出大數據時代到來的是知名咨詢公司麥肯錫,麥肯錫稱:“數據,已經滲透到當今每一個行業和業務職能領域,成為重要的生產因素。人們對于海量數據的挖掘和運用,預示著新一波生產率增長和消費者盈余浪潮的到來。”其實…

手機廣告投放(phone advertising)唯一標識

手機標示,為了識別用戶,方面advertising。 使用設備id,相當于暴露用戶隱私。慢慢已不允許使用。、 (長時間跟蹤用戶無異于暴露用戶隱私,雖然大量數據適合興趣建模,廣告個性化推薦。但復雜多樣會降低總體的準…