如何阅读开源代码

注:总结了网上几篇高赞的文章后。写下的这篇如何阅读开源代码

为什么要阅读开源代码

  1. 提升自己

    阅读开源代码你能看见很多自己没有用过的语言特性,好的代码结构,以及一些代码规范

  2. 解决已知问题

    有时候自己或者公司的项目遇到困难了,不一定都要自己造轮子,尝试寻找开源方案也是一种选择

如何阅读开源代码

一 了解自己的需求

为什么要看,是学习别人的代码,还是因为用了他的代码,出了问题需要解决,还是说单纯的问了找工作去了解这个项目。

给自己定好需求才知道自己该了解这个项目到哪个程度。

  1. 如果是一心求学,那么我们应该深入的去了解。尽量吃透每一个模块。
  2. 如果是解决bug,我们梳理完大致的子模块流程,就可以开始寻找问题所在了。
  3. 如果是为了应付面试,我们甚至可以不用看项目先,先去找有没有别人总结好的文章,看看符不符合现在面试的要求即可。

二 准备工作

一上来就怼着某个函数某个文件看是很难一下子弄懂的。

  1. 先去看项目的README,查看项目的官网介绍。了解项目的背景以及解决了什么问题。
  2. 了解项目中运用的技术,知道出现的专业词汇是什么意思。
  3. 如果项目比较大,只用github看会很麻烦,建议git clone 拉下来用自己比较顺手的编辑器来阅读,例如我比较喜欢用vscode。
  4. 如果可以,尽量选版本低一些的,学起来会更加的轻松,等阅读完再去看看新版的也会更得心应手。
  5. 先准备一些书籍或者文档。英文的会更好,国内的很多时效性已经不够了。
  6. 如果有运行的环境,最好能够跑一跑项目的实例,一般在example或者demo目录下面。能够很快的有些许成就感。已经看到一些不曾见过的打印也对自己接下来的阅读更有信心。

三 开始阅读

当我们已经大致的梳理完了项目的整体结构,知道了项目中运用了哪些技术,有哪些专业词汇。

  1. 查看项目的文档,一般在doc目录下面。

    基本所有的项目都会配备文档,可能是md也可能是rst。而且这里面的文档大概率会比官网的文档时效性好。(起码我现在在看的cyclonedds是如此的)

  2. 了解各个模块的作用和直接的依赖关系,以及开放了哪些接口。

    每一个模块只有少数的接口开放,很快就能够知道这个模块对外提供什么样的能力。以及这个模块的作用。

  3. 如果你看的是c/c++的项目并且你对makefile或者cmake比较熟悉,能够看懂。那么我建议可以去看看项目的构建。其实这也是快速了解模块依赖关系的一种方法。

  4. 查看重要的数据结构,函数名。

    程序是数据结构和算法。数据结构可以看出一些设计者的思想和代码的架构。好的项目基本上看他的函数名就知道这里面做了什么。

  5. 先顾主,再顾旁。应该先梳理重要的流程,再去梳理其余的。

    例如我在看dds 是如何发送消息的时候,我明确了我是要看dds怎么发出去的。那么当遇到拼接消息,校验消息的代码。先都可以不管他。除非我是需要看他如何校验的。

  6. 添加自己的注释,以免你看了后面又忘了前面。

  7. 如果有条件,可以自己添加注释或者单步调试。没有什么比这个更让你记忆深刻了。

四 总结

阅读代码,特别是大型项目的代码。对大部分人来说是一件不算简单的事情。所以我们最好能够有所总结。好记性不如烂笔头。

  1. 可以写篇博客,画画流程图,类图或者写一个总结出来。
  2. 思考一下别人为什么这么写,他的设计是怎么样的,又是怎么想的。
  3. 思考一下我自己来实现这一套会如何实现,会不会考虑到这些问题。

五 最后

  1. 选择与你当前的编程技能与知识水平相当的项目。

    一上来就看linux内核实现。兴致勃勃的看了一会发现太困难就放弃了。又想看stl实现,发现全是下划线。又受不了放弃了。所以还是要慢慢深入,根据自己情况尽力而为。

参考(还有几篇找不到了):

为什么我们需要读源码 如何阅读开源代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值