摘要:只有能看懂代碼,你才能快速準確地定位代碼中的問題。要寫出很的代碼,少不了閱讀優秀的源碼。我們的論壇和答疑群里,有一些同學會查看并解答其他人的代碼問題。實際上,我覺得就是沒看懂你只是看懂了每一行代碼的意思,但并沒有理解整個代碼的設計。
編程,又被稱作“ 寫代碼 ”。這個說法有可能會帶來一點點誤解,讓人覺得如何“寫”是學習編程要解決的主要問題。但事實并非如此。盡管最終代碼要在鍵盤上敲出來,但這個過程在開發中的實際時間占比可能要遠遠小于你的預期。編寫之前的 設計 ,編寫之后的 調試 ,以及 閱讀 他人的代碼,這些會花費比“寫”更多的時間。
關于調試 debug,我們在上一篇文章 開發5分鐘,調試2小時 - 該如何debug? 里已經有所介紹。今天說說另一個事情: 讀代碼 。
為什么要讀代碼讀代碼通常有兩種原因:一是 開發過程中不得不去讀 ,二是 為了學習和提升編程能力 。
真實的開發中,很少有獨自開發的項目,大多數項目都是 多人合作開發 ,或多或少都需要閱讀別人的代碼,了解接口和具體實現等。在軟件公司里,你也極有可能 接手其他同事的代碼 ,這通常不是個令人愉快的事情,但也得硬著頭皮去讀。哪怕你跟同事分工明確,耦合度極低,也沒有接手“祖傳代碼”,那也免不了 使用一些第三方庫和框架 。當使用中遇到問題而文檔和搜索都無法解決的時候,讀其源碼是必須的。
開發中讀代碼大多數被動的。出于學習和提升的目的,主動讀代碼也很有必要。這也是我們今天討論的重點:
1. 提高編程能力 。學習都要從模仿開始做起,不管是入門時候閱讀教程里的示例代碼,還是進階階段閱讀優秀項目源碼,都是很好的學習方式。否則沒有標桿,僅憑自己悶頭寫,往往事倍功半。
2. 提高 debug 能力 。對代碼的閱讀,本身就是一種能力,是需要練習積累的。只有能看懂代碼,你才能快速準確地定位代碼中的問題。
3. 良好的代碼風格 。Python 是一門優美的語言, Readability counts (可讀性很重要)是寫在 Python 之禪 里的。“開發”不僅要寫可以執行的代碼,更是 要寫別人讀得懂的代碼 ,這對代碼的維護和擴展大有好處。要寫出很 pythonic 的代碼,少不了閱讀優秀的源碼。
4. 交流學習的機會 。閱讀別人代碼的同時,一定也伴隨著和其他開發者的交流討論,這對一個開發者的成長是很重要的。我們的論壇和答疑群里,有一些同學會查看并解答其他人的代碼問題。這個操作不僅是單純地幫助別人,對自己也是一種的提高。更進一步,你甚至可以通過閱讀代碼參與到一些 開源項目 ,與高手交流。
如何讀代碼既然讀代碼是有益且必要的,那么該如何讀代碼呢?這里給幾點建議:
1. 有目的的閱讀 。對于想通過閱讀源碼提升能力的同學,首先要明確自己的目標是什么。雖然讀源碼好處多多,但也不是人人都適合。在學習初期,還是應當 以系統學習為主 。否則連基本的語法、數據結構、函數、模塊都還不夠熟悉,直接看代碼只能是一臉懵逼。等到了可以讀源碼的程度,也要選擇 適合難度的代碼 ,以及 自己熟悉或感興趣的方向 開始閱讀, 在精不在多 。
2. 自上而下,由表及里 。如果你想閱讀一個外部庫的代碼,首先你應當去讀下它的文檔,了解它解決了什么問題,有哪些功能;然后再看看它的示例代碼,如何被使用;最后才是開始看源碼。閱讀的時候,先看項目的文件結構,有哪些功能模塊;再看類、函數的組織;最后再深入實現的細節。
3. 了解基本的設計模式 。設計模式不是具體的編程技術,卻普遍存在于開發之中。找本設計模式的教程學一學(推薦《Head First Design Pattern》),再閱讀代碼,你會更容易理解別人為什么這么設計。
4. 選個趁手的編輯器 。你不可能用記事本或者自帶的 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
-
上次我們的送書活動,征集了大家的許多代碼。在此列出一些還不錯的學生作品,有興趣的同學可自行關注交流:
小說閱讀微信小程序:https://github.com/moxier/BookApplet
工程師執業證書查詢(桌面版):https://paste.ubuntu.com/p/rV3sTfVJdp/
EOS的桌面版輔助工具:https://github.com/oraclechain/eosdevhelper
Python3.x+Fiddler抓取APP數據(blog里還有其他很多不錯的文章):https://segmentfault.com/a/1190000015571256
Maya綁定工具集:https://github.com/TDChina/Rigging-Tool
TensorFlow練習:https://github.com/difanyi/DeepLearning
恭喜被選中的 10 位同學。也感謝其他提交代碼同學的積極參與,這里不一一列出。沒有被選中也不用遺憾,項目本身就是你們給自己最好的獎勵。之后我們還會有類似的活動。希望可能在下次看到你們的進步。
下課!
════
其他文章及回答:
如何自學Python | 新手引導 | 精選Python問答 | 如何debug? | Python單詞表 | 知乎下載器 | 人工智能 | 嘻哈 | 爬蟲 | 我用Python | 高考 | requests | AI平臺
歡迎搜索及關注: Crossin的編程教室
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42533.html
摘要:上次翻過一篇我是如何在自學編程個月后找到工作的,是一個編程自學者的經驗之談。如果你想通過學習編程來改善你的生活,你不該總想著這些快速成功的案例。 有人問我, Reddit 是什么網站,我想了下說: 美國貼吧 。 但話說回來,關注了一陣子我發現,Reddit 上的討論真要比貼吧不知道高到哪里去了,甚至比不少知乎回答要有價值。而且感覺下面的討論氛圍也更好些。 我在上面關注了 learnpr...
摘要:年是云計算落地元年評判標準有兩個至頂網各位網友大家好,這里是第七屆中國云計算大會的現場,我們請來了青云黃允松接受采訪。你認為云計算發展這幾年是一個什么樣的變化黃允松我特別喜歡談論這種話題,我覺得其實到年一切都在預期中,但眼不見為虛。 在不久前在京舉辦的第七屆中國云計算大會上,連續三次參加大會的青云QingCloud CEO黃允松接受了ZD至頂網的視頻專訪,分享了他眼中的云計算市場、互聯...
摘要:是什么呀是一個和不太一樣的數據庫。懷疑是同時聯了四個集合的數據造成的。這本書的定位是和的應用,所以有意弱化了數據庫的搭建維護和底層優化。所以本書可能不適合數據庫工程師。 這篇文章沒有代碼,請放心閱讀。 程序員最寶貴的東西是生命,生命屬于程序員只有一次。一個程序員的一生應該這樣度過:當她回首往事的時候,她不會因為搭建環境浪費時間而悔恨,也不會因為集群無法運行而羞恥。這樣,在她開發的時候,...
摘要:是什么呀是一個和不太一樣的數據庫。懷疑是同時聯了四個集合的數據造成的。這本書的定位是和的應用,所以有意弱化了數據庫的搭建維護和底層優化。所以本書可能不適合數據庫工程師。 這篇文章沒有代碼,請放心閱讀。 程序員最寶貴的東西是生命,生命屬于程序員只有一次。一個程序員的一生應該這樣度過:當她回首往事的時候,她不會因為搭建環境浪費時間而悔恨,也不會因為集群無法運行而羞恥。這樣,在她開發的時候,...
閱讀 3550·2021-11-08 13:15
閱讀 2106·2019-08-30 14:20
閱讀 1385·2019-08-28 18:08
閱讀 976·2019-08-28 17:51
閱讀 1483·2019-08-26 18:26
閱讀 2988·2019-08-26 13:56
閱讀 1483·2019-08-26 11:46
閱讀 2586·2019-08-23 14:22