想快速成為編程高手?這個技巧必不可少!
譯文【51CTO.com快譯】 經(jīng)過這幾年的編程學習,我認為想要提升編碼水平的***途徑就是多看、多寫,然而閱讀別人的代碼也確實是快速提升代碼水平的一個技巧。在今天的文章中,我將與大家探討如何閱讀別人編寫的代碼。如果大家已經(jīng)擁有這種良好習慣,那么這些建議也許能夠進一步改善您的學習效果。
我要明確地表述這種方式的好處:
-
1.如果大家希望能顯著提升編程技能,則需要閱讀其他人的代碼。
-
2.如果大家愿意一試,相信我,這絕對能夠帶來相當直觀的提升效果。
如果您還沒有,請別猶豫,馬上嘗試吧。
一、讀什么代碼?
這個問題非常重要,但同時也難以解答。我無法簡單告訴大家應該閱讀哪些代碼,因為要根據(jù)個人條件而定。但我接下來,會給出一些宏觀層面的指導意見。
1.閱讀相關性高的代碼
***的起點就是閱讀您正在使用的插件或者庫中的代碼。
- 您喜愛的WordPress插件代碼。
- 您經(jīng)常使用的Ruby gem代碼。
- 您不斷重復使用的jQuery插件代碼。
這些都是良好的學習素材。由于已經(jīng)熟悉其公共API,因此了解其內(nèi)部工作原理會變得更加簡單。另外,作為代碼用戶,大家也可以為項目添加文檔、實現(xiàn)新功能或者以其它方式作出貢獻。
2.閱讀令您印象深刻的代碼
我還記得自己***次看到280 Slides時的感受,用“印象深刻”這個詞來形容絕對不夸張。接著我就去了解該站點的驅(qū)動代碼源自開源Cappuccino項目,之后我將這些知識牢記心中,并在我以后的道路也受益很多。相信在大家的從業(yè)經(jīng)歷中,也一定會見到過令您印象深刻的代碼,如果,它屬于開源項目,請務必認真研究并將其融入自己的應用開發(fā)當中。
3.閱讀您所尊敬的人編寫的代碼
如果大家已經(jīng)擁有一定開源軟件編寫經(jīng)歷,那么無疑已經(jīng)結(jié)識了不少值得膜拜的大牛。我們可以認真閱讀他們編寫的代碼,并在贊嘆之余借此充實自己的頭腦。當然,即使沒有,想要找到理想的學習對象也絕非難事。
4.閱讀您能夠切實理解的代碼
很多有冒險精神的朋友,可能更喜歡直接投身于Ruby on Rails、Drupal或者jQuery等大型項目當中。但我個人的建議,是大家***能先從易于理解的代碼入手。
大型項目的活動組件太多,大家可能掙扎于概念當中而無法快速汲取經(jīng)驗。這種混亂會導致沮喪,甚至在理解當中消磨了自己的學習熱情。這時如果先挑選小型項目進行閱讀,會讓您能夠立刻掌握業(yè)務邏輯,并專注于研究其中的技術細節(jié)。
二、如何閱讀
說到這里,新的問題來了——我們該如何閱讀代碼?我擁有比較豐富的閱讀代碼的經(jīng)驗,所以下面我要與大家分享自己的一點心得。
閱讀代碼,應該是既需要廣度也需要深度
廣度:看的是代碼的整體架構(gòu),比如模塊劃分與組織,設計模式的運用等等
深度:挑選自己感興趣的模塊,深入理解學習他的具體實現(xiàn)
1.著眼于宏觀
假設大家已經(jīng)了解了所要閱讀代碼的宏觀作用。如果還沒有,那我建議大家通過網(wǎng)站、教程、文檔乃至其它來源先弄清手頭這些代碼的基本用處。
我認為***步應該是著眼于項目結(jié)構(gòu)。根據(jù)您所選擇的實際代碼庫規(guī)模,這***步的實際強度也有所區(qū)別,不過一般來講應該不會耗費太多時間。
首先,關注文件結(jié)構(gòu)。大家可以使用TextMate等擁有文件夾層級視圖的編輯器作為輔助手段。上圖所示即為一份清晰的Twitter Ruby gem視圖。
這一步的目的是熟悉源代碼。了解哪些文件包含/要求/加載其它文件,主體代碼在哪里,是否使用了命名空間等等。了解了這些基本情況下,開始深入細節(jié)。
2.記錄下您的發(fā)現(xiàn)
閱讀代碼不應該是一種被動的行為。我建議大家隨時添加評論,記錄下您的假設并總結(jié)您理解中的程序流程。您***次閱讀后的結(jié)論可能類似下面這種形式:
- # I think this function is called after 'initialize'
- # What does this equation even do?
- # Pretty sure this variable loses scope after line 17
而在理解了整個進程后,您可以清理掉這些評論,或者寫下更有意義且更為準確的意見。
3.進行測試
希望您選定的項目擁有測試套件。如果沒有,大家可以直接跳過此章節(jié)(或者另選一個包含測試套件的項目)。
將測試作為代碼閱讀起點非常重要,因為其中記錄了代碼所應完成的既定目標。而且無論代碼質(zhì)量多高,查看測試結(jié)果都能幫助我們更清晰地理解原程序員的意圖。在閱讀時,確保測試套件能夠正常運行,這將保證您當前的開發(fā)環(huán)境配置正確。
4.執(zhí)行、變更、再執(zhí)行
誰說閱讀代碼就沒法動手參與?大家可以嘗試改動現(xiàn)有項目再重新調(diào)整,從而真正理解其設計思路。大家不妨添加一項小功能,或者設置更為廣泛的日志記錄機制,從而輸出各個階段的代碼。如此一來,我們的閱讀過程就更像是參與一場冒險,而非面對一本晦澀的小說。相信我,這種方法非常有效。
5.重復再重復
在讀完一套代碼庫后,選擇另一套繼續(xù)進行。您閱讀過的代碼越多,您的學習速度就越快,并越能夠享受這種愉快的學習方式。
三、從哪里入手
我個人的閱讀代碼旅程始于GitHub。找個適合自己的項目,馬上開始學習——GitHub是一座巨大的寶庫,感謝開源精神讓我們擁有如此珍貴的資源可供利用!
原文標題:One Sure-Fire Way to Improve Your Coding
原文作者:Jerod Santo
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】