我們一直談論「寫代碼」,但你會「讀代碼」嗎?

編程,又被稱作“寫代碼”。這個說法有可能會帶來一點點誤解,讓人覺得如何“寫”是學習編程要解決的主要問題。但事實並非如此。儘管最終代碼要在鍵盤上敲出來,但這個過程在開發中的實際時間佔比可能要遠遠小於你的預期。編寫之前的

設計,編寫之後的調試,以及閱讀他人的代碼,這些會花費比“寫”更多的時間。

關於調試 debug,我們在上一篇文章 開發5分鐘,調試2小時 - 該如何debug? 裡已經有所介紹。今天說說另一個事情:讀代碼

為什麼要讀代碼

讀代碼通常有兩種原因:

一是開發過程中不得不去讀

二是為了學習和提升編程能力

真實的開發中,很少有獨自開發的項目,大多數項目都是多人合作開發,或多或少都需要閱讀別人的代碼,瞭解接口和具體實現等。在軟件公司裡,你也極有可能接手其他同事的代碼,這通常不是個令人愉快的事情,但也得硬著頭皮去讀。哪怕你跟同事分工明確,耦合度極低,也沒有接手“祖傳代碼”,那也免不了

使用一些第三方庫和框架。當使用中遇到問題而文檔和搜索都無法解決的時候,讀其源碼是必須的。

開發中讀代碼大多數被動的。出於學習和提升的目的,主動讀代碼也很有必要。這也是我們今天討論的重點:

1. 提高編程能力

學習都要從模仿開始做起,不管是入門時候閱讀教程裡的示例代碼,還是進階階段閱讀優秀項目源碼,都是很好的學習方式。否則沒有標杆,僅憑自己悶頭寫,往往事倍功半。

2. 提高 debug 能力

對代碼的閱讀,本身就是一種能力,是需要練習積累的。只有能看懂代碼,你才能快速準確地定位代碼中的問題。

3. 良好的代碼風格

Python 是一門優美的語言,Readability counts(可讀性很重要)是寫在 Python 之禪

裡的。“開發”不僅要寫可以執行的代碼,更是要寫別人讀得懂的代碼,這對代碼的維護和擴展大有好處。要寫出很 pythonic 的代碼,少不了閱讀優秀的源碼。

我們一直談論“寫代碼”,但你會“讀代碼”嗎?

4. 交流學習的機會。閱讀別人代碼的同時,一定也伴隨著和其他開發者的交流討論,這對一個開發者的成長是很重要的。我們的論壇和答疑群裡,有一些同學會查看並解答其他人的代碼問題。這個操作不僅是單純地幫助別人,對自己也是一種的提高。更進一步,你甚至可以通過閱讀代碼參與到一些開源項目,與高手交流。

如何讀代碼

既然讀代碼是有益且必要的,那麼該如何讀代碼呢?這裡給幾點建議:

1. 有目的的閱讀

對於想通過閱讀源碼提升能力的同學,首先要明確自己的目標是什麼。雖然讀源碼好處多多,但也不是人人都適合。在學習初期,還是應當以系統學習為主。否則連基本的語法、數據結構、函數、模塊都還不夠熟悉,直接看代碼只能是一臉懵逼。等到了可以讀源碼的程度,也要選擇

適合難度的代碼,以及自己熟悉或感興趣的方向開始閱讀,在精不在多

2. 自上而下,由表及裡

如果你想閱讀一個外部庫的代碼,首先你應當去讀下它的文檔,瞭解它解決了什麼問題,有哪些功能;然後再看看它的示例代碼,如何被使用;最後才是開始看源碼。閱讀的時候,先看項目的文件結構,有哪些功能模塊;再看類、函數的組織;最後再深入實現的細節。

3. 瞭解基本的設計模式

設計模式不是具體的編程技術,卻普遍存在於開發之中。找本設計模式的教程學一學(推薦《Head First Design Pattern》),再閱讀代碼,你會更容易理解別人為什麼這麼設計。

你不可能用記事本或者自帶的 IDLE 來閱讀源碼。熟練跳轉函數定義、跳轉函數調用、查找、斷點等操作,你才能愉快地閱讀源碼。另外說句,

摺疊代碼是個好功能,會讓你更清晰地觀察代碼結構。這些 PyCharm 都可以給你,相關介紹可在公眾號對話裡回覆關鍵字 pycharm

我們一直談論“寫代碼”,但你會“讀代碼”嗎?

5. 嘗試動手修改

看代碼是單向的,更好的方式是邊看邊改,那怕僅僅是一些簡單的輸出也好。腦中設想下某段代碼的作用,通過修改運行驗證你的想法,這樣的交互可以鍛鍊你對代碼的理解。譬如我們的教程裡有個 pygame 做的打飛機遊戲,有些同學看了就會想,我能不能把子彈改成三排,能不能把敵機改成會左右移動等等。這樣就會比你簡單地看一遍再照抄一遍好很多。

6. 默寫,對比

當你認為自己理解代碼之後,把它關掉,自己實現一遍,完成後再與原代碼進行對比。很多同學跟我說過,代碼能看懂,就是自己寫不出來。實際上,我覺得就是沒看懂:你只是看懂了每一行代碼的意思,但並沒有理解整個代碼的設計。從簡單的代碼做起,重複這樣的過程。

讀哪些代碼

說了那麼多,到底該讀哪些代碼?

1. 教程裡的代碼

新手不要急於求成,想一口吃成個大胖子。市面上評分較高的教程書籍,裡面的代碼都不會太差。認定一本後,從頭到尾的示例代碼都認真地閱讀、理解、運行(要手打不要複製)。這是最簡單最有效的方式,然而卻並不是人人都能做到。依然有不少人寧願相信只看幾期在線視頻就能學會。

2. 看官方示例的代碼

大多數優秀項目都提供了詳盡的文檔,包含 Quick Start、Tutorial 之類的新手引導。在學習初期,這些代碼就是很好的例子。比如我們之前文章 這個男人讓你的爬蟲開發效率提升8倍 裡介紹過的 requests 庫,它的文檔就很清晰,還是中文的。

3. 看 Python 的內置代碼

如果你用 PyCharm 之類的 IDE,很方便跳轉或直接查看 Python 自身的代碼。比如前文截圖中就是我們常用的 random.py 的代碼。可以從此類單文件代碼看起。

4. 優秀的第三方庫

這類有很多,不過難度對初學者來說可能有一點高,可在進階時考慮。依然是推薦下大神 Kenneth Reitz的項目,不僅僅是 requests,例如他的 records、envoy 等小項目也是值得一讀的。另外有個經典項目叫做 500 line or less,都是不超過 500 行的小項目,地址: http://aosabook.org/blog/

5. 關於代碼風格,先讀一讀這份指南:

https://pythonguidecn.readthedocs.io/zh/latest/writing/style.html#code-style

以上就是關於讀代碼的一些建議。從簡單的代碼做起,貴在堅持。希望對各位有所幫助。


分享到:


相關文章: