微信读书vscode插件_跟我一起读源码 – 如何阅读开源代码
閱讀是最好的老師
在學(xué)習(xí)和提升編程技術(shù)的時候,通過閱讀高質(zhì)量的源碼,來學(xué)習(xí)專家寫的高質(zhì)量的代碼,是一種非常有效的提升自我的方式。程序員群體是一群樂于分享的群體,因此在互聯(lián)網(wǎng)上有大量的高質(zhì)量開源項(xiàng)目,閱讀這些項(xiàng)目的源碼,對于提升自我是很有幫助的。但是很多人不知道怎么開始,看著一個又一個的開源項(xiàng)目,面對一大推的代碼,容易迷失方向,跟我一起讀源碼系列就是希望讀者能夠跟著筆者的思路,完成源碼項(xiàng)目的閱讀,并從這個過程中學(xué)會:如何動手讀源碼
從源碼中學(xué)習(xí)源碼作者的編程思路
如果剛好庫對于你的工作學(xué)習(xí)有幫助,通過閱讀深入了解該庫的使用
1. 源碼項(xiàng)目選擇
讀者肯定知道GitHub平臺上有無數(shù)的高質(zhì)量開源項(xiàng)目,那具體選擇哪一個或者哪一些來閱讀呢,如何才能選擇到適合自己的源碼項(xiàng)目,我們認(rèn)為要從幾個方面來考慮:跟學(xué)習(xí)一門知識一樣,教材都應(yīng)該是由淺入深,由易到難,讀源碼也是一樣,要選擇適合自己難度的項(xiàng)目來開始
我們要了解源碼實(shí)現(xiàn)的功能,這里并不要求自己是這個功能領(lǐng)域的專家,而是說對該項(xiàng)目解決的問題或提供的功能要有一定的認(rèn)識,用白話說的話,就是知道這個庫在干什么
互聯(lián)網(wǎng)上有很多實(shí)現(xiàn)同一個功能的開源項(xiàng)目,編碼質(zhì)量也會參差不齊,選擇高質(zhì)量的代碼才能達(dá)到提升自我的目的,而低質(zhì)量的代碼反而會讓我們的水平下降,跟讀書一樣,只有讀好書才能有收獲。筆者經(jīng)驗(yàn)是,善用互聯(lián)網(wǎng),在選擇一個開源項(xiàng)目之前,先關(guān)注一下幾個方面GitHub 的 Star個數(shù),會代表一個項(xiàng)目的受歡迎程度,一般越受大家歡迎的項(xiàng)目,除了項(xiàng)目將問題解決的很好,將功能實(shí)現(xiàn)的很好外,也代表了項(xiàng)目的編碼質(zhì)量
關(guān)注源碼的作者,一般高質(zhì)量的開源項(xiàng)目作者在業(yè)界都比較有口碑的
關(guān)注文檔的豐富程度,一般文檔較為豐富的項(xiàng)目,代碼質(zhì)量也會比較高,當(dāng)然反過來文檔內(nèi)容少的項(xiàng)目,代碼質(zhì)量并不一定低。另外如果文檔豐富,對于我們閱讀代碼來說也會有很大的幫助,或許很多我們不理解的地方,在文檔里邊可以找到解釋
在文章的后邊我們會推薦一些高質(zhì)量的Python開源項(xiàng)目,另外,我們這個文章系列后續(xù)的文章中也會選擇不同難度的源碼項(xiàng)目跟大家一起閱讀。
2. 閱讀工具選擇
雖然叫閱讀源碼,但是由于代碼的特殊性,不同于圖書,我們可以通過運(yùn)行源碼來輔助我們理解代碼是怎么執(zhí)行的。因此一個單純的源碼編輯器是不足以幫助我們很好很高效的閱讀代碼的。
一個好的代碼閱讀工具鏈應(yīng)該包含下邊幾個功能點(diǎn):能夠使用代碼索引,關(guān)鍵詞高亮,代碼片段預(yù)覽等等功能輔助用戶快速的搜索和定位類,實(shí)例,函數(shù),變量。
調(diào)試功能,在遇到我們不理解的代碼片段的時候,最有效的辦法就是通過運(yùn)行它,觀察代碼使用到的變量,數(shù)據(jù)結(jié)構(gòu),以及代碼的輸入輸出,因此能夠設(shè)置斷點(diǎn),并可以觀察變量,調(diào)用路徑的調(diào)試功能對閱讀代碼是非常有幫助。
代碼的另一個特殊性是代碼是變化的,也是可以比較的,因此在使用跟你選擇的源碼項(xiàng)目相同的版本控制軟件(Git, SVN或其他,大部分情況是Git)以外,一個可以用來比較不同版本之間代碼變化的工具也是很有幫助的,術(shù)語一般叫diff tool。
針對上邊幾個功能點(diǎn),讀者可以先檢視一下自己平時用來編碼的工具有沒有涵蓋這些功能,并且用起來很順手。
針對Python而言,筆者推薦使用VS Code官方的Python插件 作為調(diào)試器,可以提供斷點(diǎn),單步以及變量觀察功能
Kite作為代碼索引插件,Kite是一個基于機(jī)器學(xué)習(xí)的智能的代碼補(bǔ)全和索引插件,并支持VS Code
Git 客戶端可以選擇 Fork,界面優(yōu)雅,免費(fèi),而且支持全平臺
代碼比較工具可以選擇 Beyond Compare,這個是我使用過眾多diff tool里邊做的最好的一個
除了閱讀代碼本身需要使用的工具之外,我們還可以使用其他的工具輔助我們對代碼的理解,比如,我們有時候需要將數(shù)據(jù)結(jié)構(gòu),調(diào)用關(guān)系,或者繼承關(guān)系畫出來,以便更好的讀懂代碼。
在這里給大家推薦一個網(wǎng)頁版的支持框圖,UML圖的通用繪圖工具,該工具是免費(fèi)的:
https://app.diagrams.net/
3. 閱讀方法
選擇好了代碼和工具,那么怎么閱讀代碼呢,閱讀代碼最重要的是要嘗試去理解別人的設(shè)計(jì)思想,這是最重要的原則,所以在閱讀的過程中要一直審視,重復(fù)問自己作者這樣寫的目的是什么。
除了最重要的這個原則外,我們還要做到下邊幾個方面:要對將要閱讀的源碼項(xiàng)目有一定的了解,知道該項(xiàng)目解決了什么樣的問題,實(shí)現(xiàn)了 什么樣的功能,了解深入程度視具體的項(xiàng)目復(fù)雜度而定,但是一定要確保你將項(xiàng)目文檔中的的教程部分都仔細(xì)的閱讀過了,同時教程中的例子也跟著做過了。
跟源碼交互,新建測試源碼文件,當(dāng)遇到有不懂的代碼的時候,可以在測試源碼中調(diào)用不懂的代碼部分,這樣就可以通過調(diào)試斷點(diǎn)的方式來輔助閱讀。你甚至還可以嘗試修改源碼,看看你的修改會帶來什么樣的影響。
理解源碼中的數(shù)據(jù)結(jié)構(gòu),有句古話叫程序等于數(shù)據(jù)結(jié)構(gòu)加算法,可想而知數(shù)據(jù)結(jié)構(gòu)對于代碼的重要,不夸張的講,理解了數(shù)據(jù)結(jié)構(gòu)就理解了50%的代碼。因此在閱讀代碼的同時,將數(shù)據(jù)結(jié)構(gòu)按照自己的理解畫下來,雖然一開始并不一定是完全正確的,但是可以隨著閱讀的深入不停的修改,直至自己完全理解。
帶著問題閱讀,時刻要問自己,作者這里為什么要這么設(shè)計(jì),另外也要提出一些開腦洞的問題,比如說看到一個dict的訪問,你可以問自己說,如果有一個非法的key過來了,這個程序會如何應(yīng)對,說不準(zhǔn)你可以發(fā)現(xiàn)源碼中的一個bug,亦或是能夠掌握一種異常處理的技巧。
做筆記,好記性不如爛筆頭,跟學(xué)習(xí)其他知識一樣,做好筆記可以幫我們以后鞏固知識,另外,在閱讀稍微大一點(diǎn)的源碼項(xiàng)目的時候,我們不可能在幾個小時或者幾天時間內(nèi)讀完,閱讀這樣的項(xiàng)目是一個長期持續(xù)的過程,我們需要筆記幫我們回憶我們已經(jīng)理解的部分。代碼的好處就是可以在源碼中做注釋,所以一般我們以注釋的形式做好代碼閱讀筆記。
理清依賴關(guān)系,包括外部和內(nèi)部,大一點(diǎn)的項(xiàng)目都會是模塊化設(shè)計(jì),同時也不可避免的需要依賴于一些外部的庫,因此理清楚模塊之間的依賴關(guān)系對于讀懂源碼也是相當(dāng)重要的。對于Python來說,有一點(diǎn)比較好的就是Python的模塊其實(shí)就是文件夾,我們只需要理解了文件夾結(jié)構(gòu)就能比較好的理解內(nèi)部模塊的分類,同時結(jié)合代碼中的import和類繼承關(guān)系,就可以很好地理解內(nèi)部模塊的依賴了,對于外部模塊,我們更多的是通過import和類繼承來理清關(guān)系。
Python酷的這個《跟我一起讀源碼》是一個專題,本篇文章主要是從方法論的角度介紹一下如何開始讀源碼,在后續(xù)的文章中我們將選擇一些不同難度的Python開源項(xiàng)目跟讀者一起把源碼閱讀方法應(yīng)用起來。
4. 高質(zhì)量項(xiàng)目推薦
最后,Python酷來推薦一些高質(zhì)量的Python開源項(xiàng)目,里邊有很簡單的單文件項(xiàng)目,也有較為復(fù)雜的大項(xiàng)目,這些項(xiàng)目都是公認(rèn)的值得一讀的代碼項(xiàng)目,大家可以參考一下:
其實(shí)正如文章開頭所說,高質(zhì)量的Python開源項(xiàng)目多如牛毛,大家可以結(jié)合自己的興趣和業(yè)務(wù)方向,選擇跟自己最相關(guān)的開源項(xiàng)目,因?yàn)楫吘怪灰阏娴男枰褂媚硞€庫,或者對某某方面的技術(shù)很感興趣的時候閱讀它的代碼才會有意義。這里僅僅給不知道如何開始的讀者提供一些參考。
初級項(xiàng)目:
進(jìn)階項(xiàng)目:https://github.com/mitsuhiko/flask: Flask是一個小型Web框架,有很大的用戶基礎(chǔ),代碼也是相當(dāng)?shù)膬?yōu)雅
大型項(xiàng)目:
如果你的學(xué)習(xí)工作中需要用到某一些領(lǐng)域的重量級的Python庫,那么他們也是很好的閱讀資源,如果能啃下來,無論是對業(yè)務(wù),對算法,還是對于編碼能力都會有巨大的提升,這里簡單列幾個:
最后,希望大家持續(xù)關(guān)注《跟我一起讀源碼》系列文章,讓我們共同站在巨人的肩膀上成長。
掃碼關(guān)注微信公眾號,或用電腦訪問網(wǎng)頁以獲取更好的閱讀體驗(yàn):https://pythonlibrary.net/
總結(jié)
以上是生活随笔為你收集整理的微信读书vscode插件_跟我一起读源码 – 如何阅读开源代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谈谈对python 和其他语言的区别_谈
- 下一篇: 自动化测试框架cucumber_自动化测