这些年来,我只要做代码review,就一定会有人问,你为什么看代码那么快?很多时候,别人刚提交完代码,想要放松一下,我的检视意见已经来了。不管是几行代码也好,还是几百行代码也好,我总能及时给出反馈意见。而且,也总能找出问题的关键。

当然,看代码的速度还体现在阅读开源项目的能力上,看似不相干的两件事,本质上都体现出一个人的代码功底。

网上有很多提升阅读代码速度的方法,甚至还有人专门出了书,出了视频教程。其中有不少有用的技巧,而且很多我自己也在使用,比如阅读代码之前,要搞清楚项目结构,搞清楚哪儿是入口,哪儿是核心等等。再比如,要熟练掌握一个IDE工具,能在庞杂的代码之间进行灵活跳转,能熟练使用工具进行断点设置、断点回退、多线程调试等等。类似上述的经验or技巧有很多,这里不再赘述。

但我认为,最有效的技巧并不是以上这些。上述提到的只能算是经验,所谓经验,即是熟练或不熟练的区别。真正影响我们对源码掌控程度的,更多的应该是知识。所谓知识,会就是会,不会就是不会。所以,要想提升阅读代码的速度,必须先掌握相关的知识。那影响我们阅读代码速度的知识有哪些?

首先,是业务知识。

看代码之前,要明确知道代码提供了什么功能,或解决了什么问题。原本这该是一个常识。但在实际工作中,很多程序员并没有把常识应用于实践。一个系统,模块与模块之间一定存在某种联系,但大家更习惯于盯着自己的模块,对周边发生的事充耳不闻,以至在看别人或公共的代码时,只会抱怨看不懂。对应到开源项目,这个问题更是严重。大家总习惯于看一下README.md,就试图想要掌握整个源码。这无异于让一个古代人,去拆解一辆汽车,他就是把汽车拆成渣,也很难找到方向盘、发动机、变速箱。但若换成一个现代人呢,则很容易辨别。这种对汽车的认知,就是业务知识。

其次,是编程知识。

编程知识,包括语法和设计模式。一个个小小的语法,看似无关紧要,却最能消耗我们的精力。遇到不会的语法,需要一个个上网查,查的多了,一是很容易忘记初衷,再就是很容易让精力消耗殆尽。人一累,就容易关上电脑,安慰自己下次继续,从而导致效率极其低下。设计模式,也是同样道理。一个模式,你若会,则一眼洞穿事物本质,若不会,头发挠秃,也很难将逻辑捋顺。所以,学习源码,尽可能看自己熟悉的编程语言,即便不熟,看之前也尽可能先熟悉一下语法。至于设计模式,这么多年也就那20来种,10天看一个,半年的功夫也能学完。

再次,是阅读量。

看代码,跟看书一个道理。你的阅读速度取决于你对内容的熟悉度,你对内容的熟悉度取决于你的阅读量。即,阅读量决定阅读速度。不相信的话,可以翻一下小学课本,语文数学课本都行,看看你的阅读速度是多少?当然你会说,速度快是因为内容简单。当然不简单,当年你都能考满分吗?当年你能一目十行吗?现在快,是因为我们这些年一直在阅读,一直在做加减乘除运算,我们熟。所以没有必要每个字都看的清清楚楚。那,看代码也是同样道理。

以JAVA编程为例,如果你读、写JAVA的量非常有限,就知道个if else、while、do while、 for、switch...这些最基本的语法,那么你读JAVA源码根本就快不起来,源码的内容对你而言全是陌生的,什么是泛型?什么是序列化?什么是迭代器?什么是多线程编程?什么是AOP切面?什么是状态模式?什么是……?你们为什么写这么晦涩难懂的代码,好好写if else不香吗?

但如果你有丰富的JAVA编程经验,不但了解JAVA的各种语法,之前还系统学过23种设计模式,还多次在其他源码看到过每一种设计模式的应用场景,那你看任何一份JAVA源码都会一目十行。什么时候会停下来?遇到新的东西。例如,新的语法糖,同一设计模式解决了不同业务场景等等。

阅读代码是很需要些功底的,这个“底”构筑的越坚实,阅读代码时,越能大步向前。反之,每走一步,都要先伸出脚尖探探虚实,然后战战兢兢往前迈一小下。

我知道,许多人对这个答案并不满意。我也能理解,因为从点开这篇文章开始,大家就迫切希望得到一个快速提升的法门,没想到结果却是这样一个“慢效”的答案。知道这些又如何?对解决当前看代码慢的困境没有半毛钱帮助。

那么,我想告诉大家:

此时此刻的困境,一定是在遥远的过去就埋下了种子。

总幻想一个复杂的问题,在某一时刻得到秘籍式的当时当地的解决,从不考虑那些费时费力的方法,于是错过了每一个可以真正造成改变的时刻。因为放弃了过去的每一刻,所以现状没有任何改变。如果现在继续放弃,那么未来的每一刻也会重复此刻的困境。

苦李

祝好。

扫码关注李苦李公众号

李苦李公众号

添加新评论