信盈达—您身边的嵌入式&人工智能专家
全国免费咨询热线:400-8788-909

大牛程序员分享:如何阅读源码

时间:2019-06-24 00:00:00 来源:信盈达 作者:信盈达

对于一个有追求的程序员来说,源码可谓是必读不可。但是事实上,阅读源码却是一件令人头疼的事情,尤其是阅读别人写的代码,往往比看自己的还要犯愁。

IT界有一句影响深远的话是:Read The Fucking Source Code这句话既体现了阅读源码的重要性,也说明了阅读源码对于程序员来说确实是一件令人头疼的事。

然而,阅读源码又是十分重要的。通过阅读别人的代码我们可以看出作者的实现途径,方法,思想,经常看优秀的源码,你也可以灵活应用不同的途径实现同一效果。

阅读源码的重要性,大家可以从前端工程师的等级分类来理解,大概可以分以下几种:

1、新手:关注任务本身,调包侠,只知道怎么用;

2、高级新手:开始进行任务相关的数据分析,数据预处理,以及参数调优;

3、胜任者:注重特征工程,总结各种算法的适用条件;

4、精通者:深入理解算法的原理,熟悉开源项目的源码;

5、专家:提出算法改进的建议,创造新的算法。

很多人说“选择大于努力”,小渡认为“认知决定选择”,不同程序员的认知层次不同,也导致了技术水平不同。

如果想要持续进步,就要学习更高层次的认知,提前关注和储备相应的内容。他山之石,可以攻玉,阅读源码最大的好处就是可以开拓思维,程序员想更好地提升自己,这篇高效阅读源码的干货可要认真阅读哦。

那么我们该如何阅读源码呢?

首先是要明确目的

比如想研究某个算法的实现,抑或想参考实现并用其他语言二次开发,这个最初的动机会帮助你持续下去,直到实现目的。

在这个过程中,你还需要学会深挖源码。当你第一次深入成熟的代码库时,你可能感觉自己不像开发人员。你可能更像是考古学家、私人调查员或圣经学者。这很好,因为你有一大堆事情需要处理。

如果你有幸能够从一开始就接触使用版本控制的代码库,那么就该庆祝一下。你可以访问丰富的元数据,这将使你理解的不仅仅是代码,还包括上下文,都会容易很多。

其次是合理的步骤

还是“先走通再细究”的思路,比如一读文档、二写demo、三熟悉使用。具体的算法源码调试呢,在自顶向下地理清代码组织关系后,可以先从main函数入手,然后打断点,搞清楚重点函数的流转过程。

这个环节中注意阅读规范十分重要,规范是新的注释。阅读单元规范,以确定什么功能和模块是被支持的以及哪些边界情况要被处理。阅读集成规范,以了解用户如何与应用程序进行交互,以及应用程序支持哪些工作流程。

最后是能坚持不懈

很多人最开始都是决心很大,并制定计划,但在阅读源码过程中,难免会出现代码看不下去,心情烦躁的情况,这个时候,更要坚持,日拱一卒,功不唐捐。

在阅读源码中,你可能会发现一些永远不会使用的函数,或者你可能会发现从未使用过的整个文件。你可能会发现在几年来没有被碰过的注释掉的代码(gitblame)。不要迟疑,不要花太多时间去思考,不要害怕去掉这些东西。

如果代码是由于某种原因出现的,会有人在代码评审中标记该代码。你的行为还会减少下一个读者的心理开销。

最后的最后,小渡再啰嗦一句,你看源码不要一直抓着细节不放

这一点,你搞不懂,跳过,看一下段内容。先把架构搞熟。看懂其他的后,在反过来看前面的。你会恍然大悟,原来是这样设计的!实在不行,还可以多画点类图。在结合注释,英文注释看不懂,就百度翻译。没注释,就看方法名字。看不懂单词,同样的翻译。根据一个方法的名字,应该就能看出来它的作用。

很多时候你看不懂源码的原因很简单,其实就是因为你学习的知识少,比如,你经常使用的ifelse等,别人可能包装成了设计模式。本来几行代码搞定的,变成设计模式后,多了好几个类。没办法,好的架构就是容易扩展,为了高度可定制化而生的。作为程序员,你应该尽早放下那种只为完成功能的思想。

记住这些事情,当你发现自己周围一片荒芜时,不要感到不舒服。阅读源码,不要指望它是一个线性过程,并且不要期望理解全部的100%。注意重要的细节,知道如何挖掘你的问题的答案,你会发现自己能很快理解。

千里之行,始于足下,让我们追随大牛的脚步,一起奋斗吧!


转自:公众号duing