0. 為什么要閱讀開源代碼閱讀 Python 開源項(xiàng)目代碼主要有如下三個原因:
1. 要有目的的閱讀開源項(xiàng)目沒有目的的閱讀開源項(xiàng)目就是耍流氓,浪費(fèi)了時間,但是能學(xué)到的東西也很少。怎么樣根據(jù)自身情況去閱讀呢?
2. 優(yōu)秀的開源作者和工作中看別人代碼差不多,基本每個人、每個項(xiàng)目、每個團(tuán)隊都有自己寫代碼的風(fēng)格,比如變量命名風(fēng)格、某些語言特性使用方式、代碼規(guī)范要求、目錄風(fēng)格等,其實(shí)開源項(xiàng)目的作者也是一樣??创a,如看人「團(tuán)隊」
前 2 個是公認(rèn)的 Python 領(lǐng)域代碼寫的最好的、最有創(chuàng)意的工程師。 3. 初學(xué)者推薦閱讀項(xiàng)目初學(xué)者可以先閱讀一些代碼量比較少的,最好是單文件的項(xiàng)目:
(https://github.com/heroku-python/pip-pop)
(https://github.com/not-kennethreitz/envoy)
(https://github.com/kennethreitz/records)
(https://github.com/mitsuhiko/pluginbase)
(https://github.com/mitsuhiko/pipsi/)
(https://github.com/mitsuhiko/unp)
(https://github.com/chrisallenlane/cheat/)
(https://github.com/jek/blinker) 看代碼主要是了解別人寫代碼的方式,語法實(shí)踐這些內(nèi)容。看完之后,你可以針對這些項(xiàng)目能解決的問題自己寫個項(xiàng)目,寫完之后和上述項(xiàng)目去對比一下,看看哪些方面做的不好。 4. 進(jìn)階閱讀項(xiàng)目進(jìn)階的時候就要閱讀一些相對復(fù)雜的項(xiàng)目,它們能幫助你提升 Python 編程技巧:
除此之外 Web 開發(fā)者可以閱讀一些相關(guān)的項(xiàng)目:
5. 500 Lines推薦一個非常厲害的項(xiàng)目 GitHub - aosabook/500lines(https://github.com/aosabook/500lines): 500 Lines or Less, 它里面包含了 22 個由該領(lǐng)域的專家完成,用不到 500 行的代碼實(shí)現(xiàn)一個特定功能的子項(xiàng)目。連 Guido van Rossum 都親自來寫基于 asyncio 爬蟲了,Nick Coghlan、ajdavis 也出場了。 不要畏懼大家都經(jīng)常會感嘆 XXX 強(qiáng)大,YYY 流行,無形中你會把它放在一個不可觸及到的地位,感覺它很難,而令自己不敢去挑戰(zhàn)它。其實(shí)是人就會產(chǎn)出 bug,假如你發(fā)現(xiàn)它有問題,就應(yīng)該抓住機(jī)會去驗(yàn)證它。這個過程中,它的神秘感也就消失了,有過這么幾次經(jīng)驗(yàn)?zāi)憔陀行判牧?。其次是不要怕你提交?PR 被拒絕。這是非常正常的,我有很多 PR 是被拒絕的,尤其是給標(biāo)準(zhǔn)庫提交的 Patch,絕大多數(shù)都被拒絕了。 帶著問題去閱讀代碼這也是我認(rèn)為最有效的方式。這會讓你在閱讀時候有個主線,比較有針對性。 斷點(diǎn)調(diào)試在 Python 代碼中使用 pdb 一般不太好使,因?yàn)榇a復(fù)雜的話,這種斷點(diǎn)需要你使用多個 N 跳到對應(yīng)的位置,我一般都是先拋出異常,然后使用 pdb 的 善用文檔閱讀一個項(xiàng)目一開始會有點(diǎn)無從下手,那么就先好好這些內(nèi)容,它們一般都是作者表達(dá)這個項(xiàng)目的第一個入口。quickstart、tutorial 等內(nèi)容中的最小化的例子其實(shí)就是最好的閱讀入口,先去看這些引用的模塊和調(diào)用的對應(yīng)方法或者函數(shù)的對應(yīng)實(shí)現(xiàn),從下至上去閱讀。 理解作者的思考方式不同的項(xiàng)目要有不同的思考方式來閱讀,不要擰著自己的習(xí)慣去閱讀,這樣會很累,得嘗試接受別人的觀點(diǎn),甚至于改變自己。 閱讀項(xiàng)目的早期版本一些項(xiàng)目隨著時間演進(jìn)已經(jīng)非常復(fù)雜了,讀起來有難度,那么你可以回到項(xiàng)目的早期版本上,先去看相對簡單地版本,然后設(shè)置幾個時間點(diǎn)或者版本節(jié)點(diǎn),漸進(jìn)的來閱讀。 記憶并繪制項(xiàng)目架構(gòu)項(xiàng)目就是一堆代碼的組合,除了學(xué)習(xí)編程技巧,還要了解項(xiàng)目的架構(gòu)決策,這對于未來自己寫大型項(xiàng)目非常用用。這種理解越補(bǔ)充,你會對它就越來越清晰。 |
|
|