如何去阅读开源代码

 

“Hello,Let‘s go.”

为什么要去阅读开源代码

  1. 学习到一些小技巧
  2. 借鉴别人的实现思路
  3. 更深入地了解有助于更好地发现使用中的问题
  4. 针对自己的项目对开源代码进行友好地改进
  5. 阅读开源代码可以提升自己代码质量

在阅读之前需要做什么

  1. 了解该代码解决什么问题
  2. 了解如何使用该代码
  3. 对相关的技术知识有一定的了解

如何去阅读

1. 选择正确的版本阅读,

开源代码经过多年的积累,作者从单一功能开始做起,后来往往包含了太多的功能和使用的小技巧,如果你一开始不是很熟悉的话,你可能第一眼就会很懵逼,而如果你从最初的发行版代码或者你能够看懂的发行版开始阅读,并以此向后版本阅读,你会有种原来造个轮子也不是那么困难。特别推荐这篇文章,我在一开始阅读的过程中也参考了该文章中的方式。 如何以“正确的姿势”阅读开源软件代码

2. 结合demo,在恰当的时候log一下

Demo

每一个开源项目应该都会提供Demo的,里面通常包含一些常见用法,或者一些用法的简单介绍;结合Demo你至少可以再一次认识该项目以及其使用和解决了什么问题。而或许有些demo还跑不起来,这个时候就需要你去用已有知识解决问题,往往在这个解决问题的过程中你会有些额外的发现与认识。

Log

Log是你在测试或者调试代码过程中的一些打印标记,而把log和断点结合起来,会让你对代码执行时长和代码执行顺序有个准确的了解。log告诉你什么时候调用,断点可以看到断点处以后接着调用哪些函数,了解了这些调用时机就可以辅助我们理解代码。

3. 第一次阅读不要太纠结细节

很多时候你会纠结代码中细微巧妙的实现,然后在纠结过程中耽误了很多时间,这样往往会导致效率低下,而且容易引起阅读疲劳,所以更好的做法就是第一遍阅读大致了解下就可以,能够了解到整体的构架或者框架设计更好,如果能够画出辅助图也更好,没有必要去深究具体的细节。

4. 在了解了整体架构的情况下看具体实现

熟能生巧,想要一遍阅读就弄明白整个开源项目,除非你有过人的代码天赋,在上一点的基础之上还要再来一遍,这一遍最好认真些,然后对照自己画过的辅助图去看看具体实现。

5. 把大模块拆成小模块

其实大部分开源代码都有一个共同特点,模块化,一个小模块往往只实现一两个功能,所以这样分成小模块看起来更快速理解,也更容易让你清晰认识。而如果你总是以一个整体去看代码,以一个系统的眼光去看的话你往往会混乱你的大脑,结果只是效率低下,很快又忘了。

6. 在阅读的同时自己动手去写相关的实现

好记性不如烂笔头,如果仅仅是看懂的话你会很快忘记,而且阅读开源代码也不是一时半刻能够全部弄懂。这个时候就需要你在自己理解的基础上实现它。或者你能够换一种思路来实现,这样更好。

7. 不要太相信网上别人写的代码解析一类的

很多别人的代码解析文章,都很不错,不过这些可能都是别人消化过之后的东西,他能够理解多少你我都说不清楚,可能很深,也可能很浅,也可能会有理解偏差,如果你盲目相信而自己不去深究,可能你对该代码也有错误的认识,再加上你从该作者那里吸收消化了又少了一点,所以最后导致你还是似懂非懂,可能别人和别人交流的时候你能够说出来个四四五五,但终究还是理解不深。

8. 善用搜索

你在阅读的过程中难免遇到难题,那就直接去搜索吧。Google一下,你所有的难题可能都能够搜索到,实在搜索不到,你还是可以给作者发邮件的。

一些方法

  1. 对源代码写一点注解。
  2. 看issues,可能帮助你快速理解作者为什么这么设计。
  3. 和别人交流,这可能是检验你消化了多少代码的最佳方式。
  4. 画流程图,阅读的时候画一画图还是很有帮助的

关于Readme

大部分开源代码都是放在Github上的,一份开源代码你最先接触它的就是readme,通常readme中会告诉你怎么去安装、怎么去使用、以及一些其他的信息。我个人觉得可以看下这篇文章,他告诉我们如何去写一个开源项目的readme,如何编写开源项目的 README 文档明白了如何去写,那么阅读起来就可以直接略过次要,直接跳跃到主要信息。

一点建议

  1. 不鼓励额外造轮子
  2. 建议提issues或者pull request
  3. 对作者怀有感恩
  4. 有更好的想法建议联系作者
  5. 怀着好奇心

在阅读一个开源项目之后写一篇文章,记录下自己的理解与体会,不久后你可以再翻开看看,或许自己有了新的理解,对自己的知识体系也会有所完善。这里也就解释了为什么那么多人喜欢写文章,或者并不是特意写出来,而是记录自己的学习的过程,或许对一些新手有一点指导和帮助,不过更多的是自己以后看到时有个对比。

额外话

学习是一个漫长的过程,过程就需要坚持,阅读开源代码也是一样,一旦你完成了第一份代码的阅读,并从中学到一些东西以后你会发现第二份、第三份会越来越顺畅。不过前提是你全面认识,并深刻理解了。希望对大家技术提高有一点点帮助,我也是算是总结下经验,毕竟自己也正在阅读代码中,真心从开源代码学到很多东西。而且自己也有计划写一些代码解析,希望对你有用。

—— vsccw 于 2017.02