如何有效的阅读开源代码

阅读开源代码,一上来就陷入技术细节是大忌!!!

 

一、初步了解

1、看一遍官网介绍文档(啃英文文档)

开源项目背景,采用了什么技术?解决了什么问题?优点是什么?缺点是什么?

尽量看官网英文的资料,从时效性和内容准确性上都要比中文技术博客的内容要好的多。

重点关注下Get Started和Example之类的文档

2、了解代码目录结构

在下载源代码之后,先看下代码目录组织结构,可先从示例代码或测试代码入手。

如base代表基础库,net代表网络库,demo/example代表示例代码,tests:测试代码

docs:文档目录(类图,流程图,活动图,业务知识相关资料等)

 

二、安装部署,运行(很重要!)

好的开源项目,其文档都比较完备,安装部署文档一般会在README中,甚至提供rpm安装包和docker镜像

将程序运行起来!!!

将程序运行起来!!!

将程序运行起来!!!

程序运行起来有,我们就有了直观感受。

玩起来,嗨起来,搭建成功后必须装逼起来,哈哈

重要的事说三遍,程序运行起来,首先是便于从全局上体会项目的功能,其次方便下断点调试,修改代码,再调试,查看是否符合修改的预期;最后,方便截图,截牛逼的图去吹牛逼,333~

 

三、运行简单Example例子

example目录:例子目录,先通过例子上手学会如何使用此开源项目

安装部署好项目,成功运行并体会项目功能后,从总体转到局部example例子

简单的入门例子,抛开了复杂的处理细节和高级特性,便于尽快熟悉项目的主干和核心模块。

简单例子都遇到问题,可用邮件列表、社区、Issue来解决遇到的问题。

熟悉简单例子的过程中,对于有疑问的地方先记录下问题,后面带着问题去阅读源代码解决心中疑问

熟悉简单例子后,也可阅读些高级点的例子,或手动修改代码看看例子是否能正常运行?

如果公司使用的开源项目实在没有example例子,可考虑自己根据公司需求编写一个demo例子

 

四、耐心看文档,看单元测试用例

一个好的开源项目是有完善的文档的,比如百度开源的RPC框架brpc

docs目录:

编译入门指南,代码的风格文档,程序的命令操作手册,程序中采用的第三方库

类图,流程图,活动图,架构图,设计文档

业务相关基础知识介绍文档

项目技术细节详细介绍

阅读这些文档可以了解该项目的大体设计和结构,读源码的时候不会无从下手。

务必要耐心好好的看,多看多实践多思考,少BB

 

test目录:测试目录,学习下单元测试是如何写的

通过看单元测试用例,可了解到某个类或某个组件是如何使用的?

 

五、尽情的玩耍

各种玩:

执行example中的例子查看效果,也可以修改example中的例子来验证自己的想法。

修改test目录中的代码,看看测试代码是否能通过

比如nDPI项目,开始玩时,可以只加载一个插件,玩熟练后可以加载N个插件;

开源项目配置文件也有很多可以玩的地方,尽情的玩,但是千万别在线上环境玩!!!!

先学会如何使用,然后再去从源代码角度理解原理的东西。

 

六、阅读源代码

开始阅读源代码,有以下方法:

1、抓主干

阅读源代码时,尝试理清一次正常运行的代码调用路径,这可以通过debug来观察运行时的变量和行为。

 

2、挑选感兴趣的“分支”来阅读

比如你对网络通讯感兴趣,就阅读网络层的代码,深入到实现细节,如它用了什么库,采用了什么设计模式,为什么这样做等。如果可以,debug细节代码。

 

3、代码中添加日志和打印

修改源码加入日志和打印可以帮助你更好的理解源码。

 

4、画图梳理源代码逻辑

适当画图来帮助你理解源码,在理清主干后,可以将整个流程画成一张流程图或者标准的UML图,帮助记忆和下一步的阅读。

 

七、解决遇到的问题

相信经过前面三个阶段,你已经是各种玩,各种瞎折腾,心里还是有很多疑问吧?

这个功能真牛逼,是如何实现的呢?

我的配置文件为什么没有生效呢?

程序为什么被我搞挂了呢?

我添加的打印为什么没有被执行?

打印的值为什么不符合我的预期?

好!很好!带着这些你心里的问题,去源代码中找答案吧

1.先总体后局部,把握好主体逻辑代码,然后再逐层深入下去

一上来就陷入太多的实现细节是大忌!!!

2.熟悉主体逻辑后,你大概能知道你感兴趣的代码处于整个项目中的什么模块,什么文件,什么类中

是个什么样的处理流程,定位到具体代码,一行行的分析它

这个过程会持续一段时间,今天你感兴趣这个问题,明天感兴趣那个问题。

3.带着问题去看代码,一个系统实现了什么功能,为什么要实现这些功能,是基于什么业务场景?

如果要我来实现一套类似的系统,我会如何来考虑问题,如何来实现这套系统?

然后再看看别人是如何实现的,找到两者之间的差距,并不断缩小之间的差距。

 

八、写笔记记录想法,促进思考和总结

1.记录解开问题谜团的过程

2.记录下开源代码中好的设计思想,好的代码技巧,以及任何你觉得好的东西

3.画整个程序的流程图,有利于理解程序的整个流程,而不被代码的细节所干扰。

4.坚持记录源代码学习笔记,记笔记能够有助于更深入的思考,以前很多问题只是浅层思考,不够深入

 

九、仿写项目

如果感觉自己对于项目理解的还不到位,我推荐一个笨方法,抄项目代码,抄着抄着你就懂了。

如果想进一步深刻的学习到源代码的精髓,可以仿写一个相近的程序进行操练。

理解了这个程序并不表明掌握了这个程序,只有在操练一个相近的程序时,才知道你到底理解了多少,掌握了多少

 

十、教给他人

当自己对项目的方方面面都很熟悉后,可以在B站上开直播,将自己所学的知识传授给他人。

你可能感兴趣的:(职场生涯,阅读开源项目方法)