前言
有经验的开发者都清楚,我们大多数情况下都是基于别人的框架和系统来开发代码。
比如开发一个应用,是基于OS来开发;开发一个游戏基于一个游戏引擎来开发;进入到公司里面以后开发一个业务逻辑也是基于公司的框架代码来开发。
正因为如此,阅读别人的代码,就显得非常重要。
1 学会阅读代码的好处有哪些?
用好别人的代码,能节约成本,而阅读代码强,就是用好的关键
我们把别人写好的,成熟的代码用到项目中能节约很多开发成本,缩短项目的周期,所以用好别人的代码变的很重要。
你能快速地把第三方开源代码用到项目当中,把一个模块移植过来,这些都能节约大量成本。
能做到这些,就需要有阅读代码的能力和功底。
阅读代码能力强,就能快速从别人的代码里找到使用的方法,并把内在的逻辑串联起来。
别人问我为什么那么快就会用一个框架和库,我告诉他就是源于阅读代码,阅读代码的接口组织布局等。
2 阅读别人的代码,能学习到很多设计技巧和模式
我们都喜欢看名人故事,听名人访谈,想通过名人的一些故事来学习一些东西。
对于程序员而言,学习大师的开发技巧,不是看大师的Blog和故事,而是阅读大师写的代码。
比如Linus是如何设计内核把成千上万的设备驱动管理起来的等等,这些思想我们都可以学习。
在阅读大师写的代码的同时,自己也能领会到很多代码智慧与设计哲学。
3 阅读别人的代码,更容易让我们掌握相关的知识
当我们有了某个领域或模块的一些基础知识,就需要更好结合实践来把知识理解透彻。
比如我们学习多媒体的时候,IDCT反离散余弦变换等,结合ffmepg一遍视频编码解码流程,一遍结合ffmeg来阅读与学习,能加深对知识点的理解与掌握;比如我们学习设计线程池的知识,结合线程池的代码来学,更容易让我们把问题分析的更透彻。
4 阅读别人的代码能让我们积累很多代码工具模块
阅读不同代码时,我们可以从代码框架里面获取写的好的代码模块用到我们的项目中,比如红黑树。我一般就使用linux内核的红黑树,链表这些经典高效的数据结构都来自于一些经典的代码库。
每每发现好的代码的时候,我都会把它们记录起来,以后可以用到自己的项目框架体系中。
如何阅读代码
要阅读一个庞大的代码或代码库,弄懂里面的内部逻辑,并很好的掌握他们用到项目中并不是一件简单的事情,那么如何搞懂搞透一个代码库呢?
代码相关的编程语言一定要过关,能清楚的在脑袋里面执行代码
编程语言的核心机制一定要熟悉,这个是阅读别人代码的第一个关键的点。
如果很多语法在你的脑子里面都不熟悉,看不懂,那么能读懂别人的代码几乎是不可能的。
阅读代码的时候,每行代码跑出一个什么样的结果,要在脑子里面做到心中有数。
阅读代码要善于处理整体与局部的关系,先建立全局观
阅读代码时,首先基于函数、模块等先把整个逻辑捋清楚,再去看具体的实现细节。
逻辑流程最好是通过函数名字,模块名字等来判断,先把整体的流程搞明白再深入进去代码细节,不要一开始就深入细节,这样你没有一个全局观念。
阅读代码时要学会用脑图记录起来整个的流程,一边阅读一边把逻辑捋清楚。捋清完逻辑后,就对哪些环节,哪些入口就有了比较清晰的认识,然后结合数据和打印,把整个流程验证一遍。
阅读代码一定要先找好入口,找出阅读的线索
做任何事情要从一个入口开始,入口找的好,后续就会很顺利。
比如我们代码从main开始跑起,那么你从main函数开始,就能把整个的逻辑看清楚,所以找到一个合适的入口是非常重要的。
有时候有些代码不像从main函数开始那么简单,可能有多个接口和入口,那么我们就可以把它们作为线索来进行分析。把整个代码框架里面的代码分成几条代表性的线索,每次带着这些线索去阅读,把内部的结构和流程搞明白。
阅读代码要学会搜索,从搜索的结果中找到逻辑
比如我们看到一个函数or类,,我们想要看看整个都怎么使用,通过这个函数,把整个流程找出来。那么我们就要从定义在哪里,调用在哪里都过一遍。
你可以采用搜索的办法,把项目里面所有的代码都搜索一遍。
搜索出来结果以后,就知道在哪些地方调用了,然后一个一个分析,一个一个看,找出逻辑与线索。
有时候我们的变量被赋值给其他的人,这个时候要搜索其他的,所以一个好的代码搜索阅读工具是非常必要的,我这边用的比较多的是sublime 和source Insight, 一般大项目我都用source Insight。
开始阅读代码之前一定要具备相关的基础知识
开始阅读代码之前还是要准备好自己的知识认知,如果自己什么相关知识都没有就去阅读代码,搞不出来是正常的。
还是要先积累相关的知识、基本概念再去阅读别人的源码。
具备了相关的知识以后,脑袋里面基本就知道这个事情大致是怎么完成的,你再去阅读代码,你就能很轻松的读懂了。
比如要你读懂一个地图编辑器的工具代码,如果有做地图编辑器的步骤和思路,就可以带着思路去找代码。
比如地图数据如何编辑生成?生成后的格式是怎么样的?格式生成后数据如何读取的?读取到哪里?寻路的时候采用什么算法?寻路的路径出来后,怎么控制在路径上行走的?
带着这些问题去阅读地图编辑器的代码,就能掌握好整个代码框架库。虽然不是你写的,但还是比较清楚的。
总之阅读好别人的代码取决你的基础、知识体系、以及耐心,并非一下就能提升,需要在代码阅读中不断总结,阅读更多代码以及积累更多的行业知。
希望大家坚持下来,因为那决定了你能否走到系统分析师架构师,这个级别阅读代码是一个很重要的分水岭。
不知不觉,《我的设计之道》迎来了完结的时刻。
感谢所有朋友给予的关注和支持。
结束并不意味着消散,我认为恰恰是一种新生。
在未来的日子里,我将依然会在此分享各种有关游戏开发技术方面的观点文章,希望新老朋友持续留意收看。
今天的分享就到这里,下期再见。