天天看點

如何以“正确的姿勢”閱讀開源軟體代碼

之前想過寫這篇文章,但是沒有想到一個好的内容、好的突破點。在《github 漫遊指南》指南裡,我們提到過《如何在github“尋找靈感(fork)”》,但是并不是關于閱讀源碼的好文章。

我們并不建議所有的讀者都直接看最新的代碼,正确的姿勢應該是:

clone某個項目的代碼到本地

檢視這個項目的release清單

找到一個看得懂的release版本,如1.0或者更早的版本

讀懂上一個版本的代碼

向後閱讀大版本的源碼

讀最新的源碼

最好的在這個過程中,可以自己造輪子來實作一遍。

閱讀過程

在我閱讀的前端庫、python背景庫的過程中,我們都是以造輪子為目的展開的。是以在最開始的時候,我需要一個可以工作,并且擁有我想要的功能的版本。

如何以“正确的姿勢”閱讀開源軟體代碼

緊接着,我就可以開始去實踐這個版本中的一些功能,并了解他們是怎麼工作的。再用git大法展開之前修改的内容,可以使用ide自帶的diff工具:

如何以“正确的姿勢”閱讀開源軟體代碼

或者類似于sourcetree這樣的工具,來檢視修改的内容。

在我們了解了基本的核心功能後,我們就可以向後檢視大、中版本的更新内容了。

開始之前,我們希望大家對版本号管理有一些基本的認識。

版本号管理

我最早閱讀的開始軟體是linux,而下面則是linux的release過程:

如何以“正确的姿勢”閱讀開源軟體代碼

表格源自一本書叫《linux核心0.11(0.95)完全注釋》,簡單地再介紹一下:

版本0.00是一個hello,world程式

版本0.01包含了可以工作的代碼

版本0.11是基本可以正常的版本

這裡就要扯到《gnu 風格的版本号管理政策》:

1.項目初版本時,版本号可以為 0.1 或 0.1.0, 也可以為 1.0 或 1.0.0,如果你為人很低調,我想你會選擇那個主版本号為 0 的方式;

2.當項目在進行了局部修改或 bug 修正時,主版本号和子版本号都不變,修正版本号加 1;

當項目在原有的基礎上增加了部分功能時,主版本号不變,子版本号加 1,修正版本号複位為 0,因而可以被忽略掉;

4.當項目在進行了重大修改或局部修正累積較多,而導緻項目整體發生全局變化時,主版本号加 1;

5.另外,編譯版本号一般是編譯器在編譯過程中自動生成的,我們隻定義其格式,并不進行人為控制。

是以,我們可以得到幾個簡單的結論:

我們需要閱讀最早的有核心代碼的版本

我們需要閱讀1.0版本的release

往後每一次大的release我們都需要了解一下

示例

以flask為例:

一、先clone它。

如何以“正确的姿勢”閱讀開源軟體代碼

二、從release頁面找到它的早期版本:

如何以“正确的姿勢”閱讀開源軟體代碼

三、 從上面拿到它的送出号8605cc3,然後checkout到這次送出,檢視功能。在這個版本裡,一共有六百多行代碼

如何以“正确的姿勢”閱讀開源軟體代碼

還是有點長

四、我們可以找到它的最早版本:

如何以“正确的姿勢”閱讀開源軟體代碼

然後檢視它的flask.py檔案,隻有簡單的三百多行,并且還包含一系列注釋:

如何以“正确的姿勢”閱讀開源軟體代碼

五、接着,再回過頭去閱讀

0.1版本

...

最新的0.10.1版本

繼續閱讀