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

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

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

我們并不建議所有的讀者都直接看最新的代碼,正確的姿勢(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ò)程中,我們都是以造輪子為目的展開的漾狼。所以在最開始的時(shí)候重慢,我需要一個(gè)可以工作,并且擁有我想要的功能的版本逊躁。

it-works-cms.png

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

pycharm-diff.jpg

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

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

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

版本號(hào)管理

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

linux-history.png

表格源自一本書叫《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羡疗;

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

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

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

示例

以Flask為例:

一夷家、先Clone它蒸其。

clone-flask.png

二、從Release頁(yè)面找到它的早期版本:

flask.png

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

flask-0.1.png

還是有點(diǎn)長(zhǎng)

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

flask-init.png

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

flask-init.png

五奶浦、接著,再回過(guò)頭去閱讀

  • 0.1版本
  • 踢星。澳叉。。
  • 最新的0.10.1版本
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斩狱,一起剝皮案震驚了整個(gè)濱河市耳高,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌所踊,老刑警劉巖泌枪,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異秕岛,居然都是意外死亡碌燕,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門继薛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)修壕,“玉大人,你說(shuō)我怎么就攤上這事遏考〈瑞” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵灌具,是天一觀的道長(zhǎng)青团。 經(jīng)常有香客問(wèn)我,道長(zhǎng)咖楣,這世上最難降的妖魔是什么督笆? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮诱贿,結(jié)果婚禮上娃肿,老公的妹妹穿的比我還像新娘。我一直安慰自己珠十,他們只是感情好料扰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著焙蹭,像睡著了一般晒杈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上壳嚎,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天桐智,我揣著相機(jī)與錄音,去河邊找鬼烟馅。 笑死说庭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的郑趁。 我是一名探鬼主播刊驴,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寡润!你這毒婦竟也來(lái)了捆憎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤梭纹,失蹤者是張志新(化名)和其女友劉穎躲惰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體变抽,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡础拨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绍载。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诡宗。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖击儡,靈堂內(nèi)的尸體忽然破棺而出塔沃,到底是詐尸還是另有隱情,我是刑警寧澤阳谍,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布蛀柴,位于F島的核電站,受9級(jí)特大地震影響边坤,放射性物質(zhì)發(fā)生泄漏名扛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一茧痒、第九天 我趴在偏房一處隱蔽的房頂上張望肮韧。 院中可真熱鬧,春花似錦旺订、人聲如沸弄企。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拘领。三九已至,卻和暖如春樱调,著一層夾襖步出監(jiān)牢的瞬間约素,已是汗流浹背届良。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留圣猎,地道東北人士葫。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像送悔,于是被迫代替她去往敵國(guó)和親慢显。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

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