编程,又被称作“写代码”,“敲代码”。
这个说法有可能会带来一点点误解,让人觉得如何“写”是学习编程要解决的主要问题。但事实并非如此。尽管最终代码要在键盘上敲出来,但这个过程在开发中的实际时间占比可能要远远小于你的预期。编写之前的设计,编写之后的调试,以及阅读他人的代码,这些会花费比“写”更多的时间。
今天跟大家聊聊“读代码”这件事。
为什么要读代码?
读代码通常有两种原因:一是开发过程中不得不去读,二是为了学习和提升编程能力。
真实的开发中,很少有独自开发的项目,大多数项目都是多人合作开发,或多或少都需要阅读别人的代码,了解接口和具体实现等。在软件公司里,你也极有可能接手其他同事的代码,这通常不是个令人愉快的事情,但也得硬着头皮去读。哪怕你跟同事分工明确,耦合度极低,也没有接手“祖传代码”,那也免不了使用一些第三方库和框架。当使用中遇到问题而文档和搜索都无法解决的时候,读其源码是必须的。
开发中读代码大多数是被动的。出于学习和提升的目的,主动读代码也很有必要。这也是我们今天讨论的重点:
1. 提高编程能力。学习都要从模仿开始做起,不管是入门时候阅读教程里的示例代码,还是进阶阶段阅读优秀项目源码,都是很好的学习方式。否则没有标杆,仅凭自己闷头写,往往事倍功半。
2. 提高 debug 能力。对代码的阅读,本身就是一种能力,是需要练习积累的。只有能看懂代码,你才能快速准确地定位代码中的问题。
3. 良好的代码风格。代码可读性很重要。“开发”不仅要写可以执行的代码,更是要写别人读得懂的代码,这对代码的维护和扩展大有好处。要写别人读得懂的代码,少不了阅读优秀的源码。
4. 交流学习的机会。阅读别人代码的同时,一定也伴随着和其他开发者的交流讨论,这对一个开发者的成长是很重要的。在一些论坛或答疑群里,查看并解答其他人的代码问题,不仅是单纯地帮助别人,对自己也是一种的提高。更进一步,你甚至可以通过阅读代码参与到一些开源项目,与高手交流。
如何读代码?
既然读代码是有益且必要的,那么该如何读代码呢?这里给几点建议:
1. 有目的地阅读。对于想通过阅读源码提升能力的同学,首先要明确自己的目标是什么。虽然读源码好处多多,但也不是人人都适合。在学习初期,还是应当以系统学习为主。否则连基本的语法、数据结构、函数、模块都还不够熟悉,直接看代码只能是一脸懵逼。等到了可以读源码的程度,也要选择适合难度的代码,以及自己熟悉或感兴趣的方向开始阅读,在精不在多。
2. 自上而下,由表及里。如果你想阅读一个外部库的代码,首先你应当去读下它的文档,了解它解决了什么问题,有哪些功能;然后再看看它的示例代码,如何被使用;最后才是开始看源码。阅读的时候,先看项目的文件结构,有哪些功能模块;再看类、函数的组织;最后再深入实现的细节。
3. 了解基本的设计模式。设计模式不是具体的编程技术,却普遍存在于开发之中。找本设计模式的教程学一学(推荐《Head First Design Pattern》),再阅读代码,你会更容易理解别人为什么这么设计。
4. 选个趁手的编辑器。你不可能用记事本或者一些自带的不好用的 IDE 来阅读源码。熟练跳转函数定义、跳转函数调用、查找、断点等操作,你才能愉快地阅读源码。另外说句,折叠代码是个好功能,会让你更清晰地观察代码结构。
5. 尝试动手修改。看代码是单向的,更好的方式是边看边改,哪怕仅仅是一些简单的输出也好。脑中设想下某段代码的作用,通过修改运行验证你的想法,这样的交互可以锻炼你对代码的理解,会比你简单地看一遍再照抄一遍好很多。
6. 默写,对比。当你认为自己理解代码之后,把它关掉,自己实现一遍,完成后再与原代码进行对比。很多同学说,代码能看懂,就是自己写不出来。实际上,你只是看懂了每一行代码的意思,但并没有理解整个代码的设计。从简单的代码做起,重复这样的过程。
读哪些代码?
说了那么多,到底该读哪些代码?
1. 教程里的代码。新手不要急于求成,想一口吃成个大胖子。市面上评分较高的教程书籍,里面的代码都不会太差。认定一本后,从头到尾的示例代码都认真地阅读、理解、运行(要手打不要复制)。这是最简单最有效的方式,然而却并不是人人都能做到。依然有不少人宁愿相信只看几期在线视频就能学会。
2. 看官方示例的代码。大多数优秀项目都提供了详尽的文档,包含 Quick Start、Tutorial 之类的新手引导。在学习初期,这些代码就是很好的例子。
3. 看编程语言的内置代码。如果你用了趁手的编辑器,可以很方便跳转或直接查看编程语言自身的代码。比如前文截图中就是我们常用的 random.py 的代码,可以从此类单文件代码看起。
4. 优秀的第三方库。这类有很多,不过难度对初学者来说可能有一点高,可在进阶时考虑。
以上就是对于“读代码”的一些经验和建议,希望对你有所帮助。