如何去閱讀并學(xué)習(xí)一些優(yōu)秀的開(kāi)源框架的源碼?
網(wǎng)友解答: 謝邀,通過(guò)閱讀開(kāi)源代碼,可以學(xué)習(xí)其中的框架和模式、代碼技巧、算法等。但是經(jīng)常有些人拿到開(kāi)源代碼以后不知道如何下手,這里分享一下我的一些經(jīng)驗(yàn)。1.拿到代碼以后編譯運(yùn)行它,了解它
謝邀,通過(guò)閱讀開(kāi)源代碼,可以學(xué)習(xí)其中的框架和模式、代碼技巧、算法等。但是經(jīng)常有些人拿到開(kāi)源代碼以后不知道如何下手,這里分享一下我的一些經(jīng)驗(yàn)。1.拿到代碼以后編譯運(yùn)行它,了解它干什么的,實(shí)現(xiàn)了功能。
2.從入口點(diǎn)開(kāi)始閱讀,按照流程,了解這個(gè)軟件是怎么運(yùn)行起來(lái)的。
3.從整體上觀(guān)察這個(gè)軟件是有哪些模塊組成的,最好能畫(huà)一畫(huà)圖。
4.修改軟件的功能,并且能夠調(diào)試它。不能僅僅停留在閱讀代碼上,一定要改代碼,這樣才能增加對(duì)開(kāi)源代碼的理解。
5.做筆記,把這個(gè)開(kāi)源代碼實(shí)現(xiàn)的功能,實(shí)現(xiàn)方式、設(shè)計(jì)框架、模塊組織、以及代碼技巧等記錄下來(lái)。
網(wǎng)友解答:所有讓你直接看源碼的回答都是在扯淡,你應(yīng)該從“某個(gè)版本”開(kāi)始閱讀代碼。
我們并不建議所有的讀者都直接看最新的代碼,正確的姿勢(shì)應(yīng)該是:
clone某個(gè)項(xiàng)目的代碼到本地
查看這個(gè)項(xiàng)目的release列表
找到一個(gè)看得懂的release版本,如1.0或者更早的版本
讀懂上一個(gè)版本的代碼
向后閱讀大版本的源碼
讀最新的源碼
最好的在這個(gè)過(guò)程中,可以自己造輪子來(lái)實(shí)現(xiàn)一遍。
閱讀過(guò)程
在我閱讀的前端庫(kù)、Python后臺(tái)庫(kù)的過(guò)程中,我們都是以造輪子為目的展開(kāi)的。所以在最開(kāi)始的時(shí)候,我需要一個(gè)可以工作,并且擁有我想要的功能的版本。
緊接著,我就可以開(kāi)始去實(shí)踐這個(gè)版本中的一些功能,并理解他們是怎么工作的。再用git大法展開(kāi)之前修改的內(nèi)容,可以使用IDE自帶的Diff工具:
或者類(lèi)似于SourceTree這樣的工具,來(lái)查看修改的內(nèi)容。
在我們理解了基本的核心功能后,我們就可以向后查看大、中版本的更新內(nèi)容了。
開(kāi)始之前,我們希望大家對(duì)版本號(hào)管理有一些基本的認(rèn)識(shí)。
版本號(hào)管理
我最早閱讀的開(kāi)始軟件是Linux,而下面則是Linux的Release過(guò)程:
表格源自一本書(shū)叫《Linux內(nèi)核0.11(0.95)完全注釋》,簡(jiǎn)單地再介紹一下:
版本0.00是一個(gè)hello,world程序
版本0.01包含了可以工作的代碼
版本0.11是基本可以正常的版本
這里就要扯到《GNU 風(fēng)格的版本號(hào)管理策略》:
1.項(xiàng)目初版本時(shí),版本號(hào)可以為 0.1 或 0.1.0, 也可以為 1.0 或 1.0.0,如果你為人很低調(diào),我想你會(huì)選擇那個(gè)主版本號(hào)為 0 的方式;2.當(dāng)項(xiàng)目在進(jìn)行了局部修改或 bug 修正時(shí),主版本號(hào)和子版本號(hào)都不變,修正版本號(hào)加 1;3. 當(dāng)項(xiàng)目在原有的基礎(chǔ)上增加了部分功能時(shí),主版本號(hào)不變,子版本號(hào)加 1,修正版本號(hào)復(fù)位為 0,因而可以被忽略掉;4.當(dāng)項(xiàng)目在進(jìn)行了重大修改或局部修正累積較多,而導(dǎo)致項(xiàng)目整體發(fā)生全局變化時(shí),主版本號(hào)加 1;5.另外,編譯版本號(hào)一般是編譯器在編譯過(guò)程中自動(dòng)生成的,我們只定義其格式,并不進(jìn)行人為控制。
因此,我們可以得到幾個(gè)簡(jiǎn)單的結(jié)論:
我們需要閱讀最早的有核心代碼的版本
我們需要閱讀1.0版本的Release
往后每一次大的Release我們都需要了解一下
示例
以Flask為例:
一、先Clone它。
二、從Release頁(yè)面找到它的早期版本:
三、 從上面拿到它的提交號(hào)8605cc3,然后checkout到這次提交,查看功能。在這個(gè)版本里,一共有六百多行代碼
還是有點(diǎn)長(zhǎng)
四、我們可以找到它的最早版本:
然后查看它的flask.py文件,只有簡(jiǎn)單的三百多行,并且還包含一系列注釋。
五、接著,再回過(guò)頭去閱讀
0.1版本
。。。
最新的0.10.1版本