咱们一直谈论“写代码”,但你会“读代码”吗?

编程,又被称做“写代码”。这个说法有可能会带来一点点误解,让人以为如何“写”是学习编程要解决的主要问题。但事实并不是如此。尽管最终代码要在键盘上敲出来,但这个过程在开发中的实际时间占比可能要远远小于你的预期。编写以前的设计,编写以后的调试,以及阅读他人的代码,这些会花费比“写”更多的时间。html

关于调试 debug,咱们在上一篇文章 开发5分钟,调试2小时 - 该如何debug? 里已经有所介绍。今天说说另外一个事情:读代码python

为何要读代码

读代码一般有两种缘由:一是开发过程当中不得不去读,二是为了学习和提高编程能力git

真实的开发中,不多有独自开发的项目,大多数项目都是多人合做开发,或多或少都须要阅读别人的代码,了解接口和具体实现等。在软件公司里,你也极有可能接手其余同事的代码,这一般不是个使人愉快的事情,但也得硬着头皮去读。哪怕你跟同事分工明确,耦合度极低,也没有接手“祖传代码”,那也免不了使用一些第三方库和框架。当使用中遇到问题而文档和搜索都没法解决的时候,读其源码是必须的。github

开发中读代码大多数被动的。出于学习和提高的目的,主动读代码也颇有必要。这也是咱们今天讨论的重点:编程

1. 提升编程能力。学习都要从模仿开始作起,不论是入门时候阅读教程里的示例代码,仍是进阶阶段阅读优秀项目源码,都是很好的学习方式。不然没有标杆,仅凭本身闷头写,每每事倍功半。ubuntu

2. 提升 debug 能力。对代码的阅读,自己就是一种能力,是须要练习积累的。只有能看懂代码,你才能快速准确地定位代码中的问题。小程序

3. 良好的代码风格。Python 是一门优美的语言,Readability counts(可读性很重要)是写在 Python 之禅里的。“开发”不只要写能够执行的代码,更是要写别人读得懂的代码,这对代码的维护和扩展大有好处。要写出很 pythonic 的代码,少不了阅读优秀的源码。segmentfault

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 aosabook.org/blog/

5. 关于代码风格,先读一读这份指南:

pythonguidecn.readthedocs.io


-

上次咱们的送书活动,征集了你们的许多代码。在此列出一些还不错的学生做品,有兴趣的同窗可自行关注交流:

小说阅读微信小程序:github.com/moxier/BookA

工程师执业证书查询(桌面版):paste.ubuntu.com/p/rV3s

EOS的桌面版辅助工具:github.com/oraclechain/

Python3.x+Fiddler抓取APP数据(blog里还有其余不少不错的文章):segmentfault.com/a/1190

Maya绑定工具集:github.com/TDChina/Rigg

TensorFlow练习:github.com/difanyi/Deep

恭喜被选中的 10 位同窗。也感谢其余提交代码同窗的积极参与,这里不一一列出。没有被选中也不用遗憾,项目自己就是大家给本身最好的奖励。以后咱们还会有相似的活动。但愿可能在下次看到大家的进步。


下课!


════

其余文章及回答:

如何自学Python | 新手引导 | 精选Python问答 | 如何debug? | Python单词表 | 知乎下载器 | 人工智能 | 嘻哈 | 爬虫 | 我用Python | 高考 | requests | AI平台

欢迎搜索及关注:Crossin的编程教室