1. 程式人生 > >如何有效的學習開原始碼

如何有效的學習開原始碼

導讀:對於開發者來說,社群裡豐富的開原始碼其實是筆極為寶貴的財富。如果能充分利用好開放原始碼的資源,不僅可以掌握多種程式設計方法,提高實踐能力,還能獲得好的思想,激發程式設計靈感。開原始碼怎麼學以及怎樣才能學好是大家經常關注的話題,日前,在問答網站知乎上,有人丟擲了“如何更有效地學習開源專案的程式碼?”的話題,眾技術好手各抒己見,CSDN軟體研發頻道對本文內容進行了整理,方便大家學習與參考。

盛大創新研究院研究員 莊表偉:學習開源 儘可能在程式碼裡找答案

莊表偉提供了以下9個建議:

1.在下載原始碼之後,首先要跑起來,編譯通過、正常執行;

2.在你覺得最有可能執行到的地方,設定斷點或者丟擲異常,這樣,就能夠找到一個專案在正常執行時的入口點;

3.從入口點所在的那個原始檔開始閱讀,逐步把握整個專案是如何啟動起來;

4.隨便改點程式碼,看看會不會報錯,如果報錯,會從哪裡報錯;

5.試著把報錯遮蔽、修復、或者繞開;

6.嘗試理解一個系統的內部結構,多少組成部分,主線模組是哪些?輔助模組是哪些?

7.從實際需要出發,修改這個專案,滿足自己的某一個小的需求。(注意在此之前,儘量不要在網路上找答案);

8.看看相關的討論與心得,是否與自己的理解相一致;

9.提交bug fix或者某個新的功能程式碼。

在學習開源的過程中,有幾個方面會獲得大量收穫,1.架構與模式;2.開源社群常見的一些慣用法;3.相關領域的結構與演算法。

總結一點:學習開源,儘可能在程式碼裡找答案,而不是在程式碼之外找答案,那些都是二手的,而且很可能不準確。

網際網路評論員 朱曉陽:從簡單做起 理論聯絡實踐

朱曉陽對此發表了兩點看法:首先,從簡單做起。剛開始的時候學習一些領域內基礎理論,然後找一些簡單的東西去實現,不能一開始就去找開源專案。建議大家經常動手寫一些小程式,如改進宿舍網路登入客戶端等。積小成多,能顯著提高自己的程式設計能力。其次,學習的知識一定要和自己生活或工作有聯絡,這樣才會有樂趣或動力。

網際網路評論員孫竟:先構想一個想做的專案

首先,構想一個想做的專案(比如論壇、部落格、微博等);然後,思考需要什麼功能,應該怎麼去實現,儘可能包括各種細節,有必要時記錄下來;最後,去找個類似的開源應用,看看它是怎麼實現的,和你的想法有什麼差異,有什麼可以學習或需要改進的地方。

網際網路草根hqman我的5個建議:1.反覆地使用軟體,熟釋軟體的組成檔案和軟體功能,注意IE位址列內的地址變化;2.開啟資料庫檔案或存放資料的XML檔案,參照資料字典瞭解各個表和欄位的資料含意;如果沒有資料字典,就執行軟體輸入資料,參照所輸入的資料,瞭解各個表和欄位的資料含義;3.利用Visio進行反向工程,將類圖抽出來;4.研究類之間的關係,註釋各個類的屬性和方法,弄清程式的整體框架;5.另開一個專案,按照軟體開發的流程,將程式碼分段複製進新的專案,進行編譯除錯,關注一些實現細節,學習一些程式設計的技巧。

在讀研究生張偉:在校學生空閒時間多參加一下比賽

張偉的建議是大家在空閒時間多參加一些比賽。一個完整的專案,不管再小,只要做完了,就會有收穫。多看一些比較大的開源專案原始碼,每次看完後都會受益匪淺。從網上成熟的開原始碼裡,可以學到很多的設計思想。他認為,從專案入手,以專案為驅動,可激勵自己進步。當然,是否一定需要看開原始碼,這將取決於個人的興趣和需要。

畫出程式流程圖 理解程式流程思想

CSDN部落格專家i_like_cpp曾在CSDN分享了《如何將原始碼學好》的博文,對此,他給出了四點建議:1. 畫出整個程式的流程圖,理解整個程式流程的思想。畫流程圖的方式更讓人很直接的理解程式的整體流程,而不會被程式碼所幹擾,讓程式設計師總體上把握整個程式;2. 對流程各節點(函式或過程)的理解,流程的每一節點是構成整個流程的不可缺少的部份;3.再把流程和流程各節點串起來理解整個程式,可能的話最好寫出讀書筆記;4. 如果想深刻的學習到原始碼的精髓所在,請寫一個相近的程式進行操練。理解了這個程式並不表明掌握了這個程式,只有在操練一個相近的程式時,才知道你到底理解了多少,掌握了多少。

編後語:

原始碼的學習是一個從整體到不斷細化的過程,是一個極為繁瑣的過程同時也是一個不斷認清事物本源的過程。本文總結的原始碼的學習經驗,希望對您有所幫助。