假設你想開始貢獻一個具有數千LOC的開源項目。我對你如何開始學習/黑客入侵新系統的方式/建議感興趣。如何閱讀源代碼學習如何使用大型系統?
回答
通過代碼瀏覽,尋找你認爲你知道發生了什麼的地方。仔細閱讀這些部分,看看你最初的想法是否成立,然後嘗試修改它,看看你是否可以改變它來做別的事情。
我建議稍微引導一下項目路線圖,以便您可以繼續發現新功能和錯誤修復的位置,以便您能夠以有意義的方式提供幫助。
此外,請閱讀文檔以及可能存在的任何旋轉文檔(功能規格,要求規格等)。這可以進一步幫助您更快地學習代碼繩索:)
找到一個您感覺舒適並且改變它的小地方。忽略其餘;你會在需要時瞭解它。不要因爲尺碼而感到不知所措;每個程序都是從第一行開始的,如果它不是以小的,獨立的位組織的,就不可能維護。所以你總是有一個利基。
如果您需要的書籍對我學習如何從代碼學習很有幫助,那麼我會查看Diomidis Spinellis的書籍Code Reading: The Open Source Perspective和Code Quality: The Open Source Perspective。
對於您的具體問題,我會從代碼閱讀開始。但都是好書。
精湛的參考...兩個月後,我覺得我的編程技巧已經提高! – 2013-07-23 16:29:08
學習的目的。我認爲如果你考慮到一些目標,你會學得最好 - 解決這個問題或者增加這個功能。開始尋找您需要進行更改的可能位置。向後跟隨控制線程以找出如何在代碼中達到該點。此外,對代碼進行「鳥瞰」視圖 - 查看佈局和結構。良好的代碼將具有描述性的名稱,告訴您需要每個類和方法。看看您是否可以識別實施模式並查看它們在何處/如何使用。不要在文檔中放置過多的文檔 - 文檔可能非常好,但它們通常與代碼實際上不同步。讓代碼本身成爲最好的文檔。
如果您對該項目非常熟悉,並且對您想要貢獻的內容有一些瞭解,那麼請獲取最新版本的代碼並進行您想要進行的更改。不要試圖一次消化全部代碼。尋找正在使用的模式和慣例並儘可能地遵守它們。
我更喜歡在IDE調試器中逐行執行代碼。嘗試訪問大型系統中的所有代碼是不現實的,但是我首先調試應用程序的啓動,然後轉到其他對應用程序來說很有意義/重要的代碼區域。
我將運行DOxygen對源代碼,所以我有一個可瀏覽的,可讀的,類級別的源視圖。它非常適合幫助你穿越龐大的代碼庫
我會建議找到一個功能,你真的想補充。
我以前只是真的看過別人的代碼,因爲我想添加的功能是我真正需要的。我認爲這是大多數開源項目開始的原因;填補需求。
羅布
- 獲取代碼建設和您的開發機器上運行。
- 找出如何使用該系統並熟悉所使用的庫。 (例如,如果您看到調用某些OpenGL庫的代碼,請熟悉該庫)請閱讀系統文檔。
- 然後我會找到一個基於某些輸入的代碼點。假設系統根據某些輸入生成輸出。我會找到啓動過程的方法。現在嘗試一步一步完成(可能會很痛苦),或者只是閱讀代碼,並嘗試獲得關於發生的事情的高級概述。
我發現第3步通常會變得非常複雜,這就是我如何閱讀代碼和學習系統如何工作的方向。
添加一個特徵可能是一個好主意,但是在一個大系統中,甚至可以弄清楚這個特徵是什麼會很痛苦。不僅如此,你編寫的任何學習系統的功能很可能最終會看起來像垃圾,因爲你不知道系統在哪裏以及如何運行。你想添加的功能當然可以引導你在#3的正確點,所以不要打折。
-s
謝謝你的回答。 Lot是有用的信息。
一些工具,我能想到的是:
- grep的
- CTAGS
- cscope的
- 的javadoc(JAVA)
- doxygen的(C,C++)
- LXR(軟件工具集索引和呈現源代碼庫)
有關有用工具的更多建議?
- 不要花太多時間在小細節上。
- 不要試圖在開始時瞭解整個系統。
- 重點是嘗試理解一個相對「獨立」的模塊或組件,它在過去被添加爲一個實體(功能)。這通常在您的大腦能力可以應付的大小限制內,因爲它是由其他人一次完成的一個模塊。
- 將更多零件或「零件」消化並組裝在一起後,您對整個系統的理解將會得到改善。
- 工具是非常有益的:使用Doxygen + GraphViz的,或如「理解」,呼叫和來電圖在Visual Studio中,「查找全部」和「查找所有引用」等
嘗試軟件對類圖進行反向工程。有一個功能可以從A到B的斷點,調試,逐步瀏覽並觀察通信,在紙上繪製鏈接和繼承。您也可以使用序列圖。這有助於我理解系統的特定功能。
- 1. 用於學習如何更好地讀取代碼的資源
- 2. 完全初學者如何閱讀源代碼?
- 3. 如何開始學習linux內核編程,編碼或閱讀?
- 4. 從開源代碼學習
- 5. 我如何學習solaris區域的默認系統編碼?
- 6. 如何使用joomla構建LMS(學習管理系統)?
- 7. 使用Python和的urllib2如何閱讀源代碼
- 8. 閱讀源代碼
- 9. 用PHP閱讀源代碼
- 10. 閱讀和學習Spark API?
- 11. 學習Clojure的閱讀core.clj
- 12. 學習管理系統使用php codeigniter?
- 13. 如何閱讀短信與出使用系統應用程序
- 14. 學習如何使用xe:dominoViewEntriesTreeNode
- 15. 學習如何使用Subversion
- 16. 爲學習目的而閱讀的良好Java代碼?
- 17. Kindle如何被用作源代碼閱讀工具?
- 18. 機器學習系統
- 19. 學習系統設計
- 20. 閱讀Xen源代碼
- 21. 如何分辨機器學習模型的學習型
- 22. 如何閱讀和學習T_SQL的執行計劃?
- 23. 從boost庫源代碼學習C++
- 24. 學習標準庫源代碼
- 25. 學習單聲道源代碼
- 26. 要學習如何在C#中開發時間表/預約系統的資源?
- 27. 如何閱讀python中的.000文件類型以進行機器學習?
- 28. 代碼堵塞練習 - 閱讀問題
- 29. 學習如何使用asp.net mvc使用ajax的資源?
- 30. 閱讀Linux系統
是: 第1步:將代碼導入一個體面的IDE 太瑣碎了? – 2008-12-02 14:16:56
伊恩你能在這個問題的答案中發佈這個,我想投票給你。 – 2008-12-02 14:24:01