如何以“正確的姿勢(shì)”閱讀開源軟件代碼

所有讓你直接看最新源碼的文章都是在扯淡,你應(yīng)該從“某個(gè)版本”開始閱讀代碼。

之前想過寫這篇文章,但是沒有想到一個(gè)好的內(nèi)容、好的突破點(diǎn)。在《GitHub 漫游指南》指南里,我們提到過《如何在GitHub“尋找靈感(fork)”》,但是并不是關(guān)于閱讀源碼的好文章。

我們并不建議所有的讀者都直接看最新的代碼,正確的姿勢(shì)應(yīng)該是:

  • clone某個(gè)項(xiàng)目的代碼到本地
  • 查看這個(gè)項(xiàng)目的release列表
  • 找到一個(gè)看得懂的release版本,如1.0或者更早的版本
  • 讀懂上一個(gè)版本的代碼
  • 向后閱讀大版本的源碼
  • 讀最新的源碼

最好的在這個(gè)過程中,可以自己造輪子來實(shí)現(xiàn)一遍。

閱讀過程

在我閱讀的前端庫、Python后臺(tái)庫的過程中,我們都是以造輪子為目的展開的。所以在最開始的時(shí)候,我需要一個(gè)可以工作,并且擁有我想要的功能的版本。

it-works-cms.png

緊接著,我就可以開始去實(shí)踐這個(gè)版本中的一些功能,并理解他們是怎么工作的。再用git大法展開之前修改的內(nèi)容,可以使用IDE自帶的Diff工具:

pycharm-diff.jpg

或者類似于SourceTree這樣的工具,來查看修改的內(nèi)容。

在我們理解了基本的核心功能后,我們就可以向后查看大、中版本的更新內(nèi)容了。

開始之前,我們希望大家對(duì)版本號(hào)管理有一些基本的認(rèn)識(shí)。

版本號(hào)管理

我最早閱讀的開始軟件是Linux,而下面則是Linux的Release過程:

linux-history.png

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

  • 版本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;

  1. 當(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)一般是編譯器在編譯過程中自動(dòng)生成的,我們只定義其格式,并不進(jìn)行人為控制。

因此,我們可以得到幾個(gè)簡單的結(jié)論:

  • 我們需要閱讀最早的有核心代碼的版本
  • 我們需要閱讀1.0版本的Release
  • 往后每一次大的Release我們都需要了解一下

示例

以Flask為例:

一、先Clone它。

clone-flask.png

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

flask.png

三、 從上面拿到它的提交號(hào)8605cc3,然后checkout到這次提交,查看功能。在這個(gè)版本里,一共有六百多行代碼

flask-0.1.png

還是有點(diǎn)長

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

flask-init.png

然后查看它的flask.py文件,只有簡單的三百多行,并且還包含一系列注釋:

flask-init.png

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

  • 0.1版本
  • 。。。
  • 最新的0.10.1版本
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,057評(píng)論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,358評(píng)論 4 61
  • 為了維持愉快的婚姻關(guān)系,可能我們正在忽略一個(gè)敏感的問題? 首先,你得明白,是什么問題令你感到煩惱,然后,著手解決這...
    白語金言閱讀 182評(píng)論 2 3
  • 少更無措趣后知, 念緣不忘福珍兮。 三石悅?cè)蝗A文生, 眷待良辰應(yīng)美景。
    帥呢子閱讀 293評(píng)論 0 0

友情鏈接更多精彩內(nèi)容