阅读代码是程序员最重要的技能之一,我们每天都在读同事的代码或者第三方库的代码,那怎么高效的阅读代码呢?分享下我的源码阅读方法。

我的阅读源码的方法分为五步:

第一步,通过文档和测试用例了解代码的功能

阅读源码前要先了解代码的功能,可以通过文档或者测试用例,了解代码做了什么,输入和输出是什么。

了解功能是阅读源码的基础,后面才会有方向感。

第二步,自己思考功能的实现方式

知道了源码有啥功能之后,要先思考下如果自己实现会怎么做。有个大概的思路就行。

如果想不通可以看下源码用到了哪些依赖库,这些依赖库都有啥功能,再想下应该怎么实现。

如果还想不通也没关系,重要的是要先自己思考下实现方式。

第三步,粗读源码理清实现思路

你已经有了一个大概的实现思路,然后再去读源码,看下它是怎么实现的。和你思路类似的地方很快就可以掠过去,而且印象也很深,和你思路不一样的地方,通过读代码搞清楚它的实现思路。

这一步不用关心细节,知道某段代码是干啥的就行,关键是和自己的思路做 diff,理清它的整体实现思路。

第四步,通过 debugger 理清实现细节

粗读源码理清了实现思路之后,对于一些部分的具体实现可能还不是很清楚,这时候就可以通过 debugger 来断点调试了。

构造一个能触发该功能的测试用例,在关心的代码处打一个断点,通过 debugger 运行代码。

这时候你已经知道这部分代码是干啥的了,单步调试也很容易理清每一条语句的功能,这样一条语句一条语句的搞懂之后,你就很容易能把这部分代码的实现细节理清楚。

这样一部分一部分的通过 debugger 理清细节实现之后,你就对整体代码的思路和细节的实现都有了比较好的掌握。

第五步,输出文章来讲述源码实现思路

当你觉得对源码的实现有了比较好的掌握的时候,可以输出一篇文章的方式来讲述源码的整体思路。

因为可能会有一些部分是你没注意到的,而在输出的过程中,会进行更全面的思考,这时候如果发现了一些没有读到的点,可以再通过前面几步去阅读源码,直到能清晰易懂的把源码的实现讲清楚。这样才算真正的把代码读懂了。

这就是我觉得比较高效的阅读源码的方法。

总结

我阅读源码的方法分为五步:

  1. 通过文档和测试用例了解代码的功能

  2. 自己思考功能的实现方式

  3. 粗读源码理清实现思路

  4. 通过 debugger 理清实现细节

  5. 输出文章来讲述源码实现思路

这五步缺一不可:

  • 缺了第一步,不了解功能就开始读源码,那读代码会没有方向感

  • 缺了第二步,不经过思考直接读源码,理解代码实现思路的效率会降低

  • 缺了第三步,不理清整体思路就开始 debugger,会容易陷入细节,理不清整体的思路

  • 缺了第四步,不 debugger 只大概理下整体思路,这样不能从细节上真正理清楚

  • 缺了第五步,不通过输出文章来检验,那是否真的理清了整体思路和实现细节是没底的

当然,这是我个人阅读源码的方法,仅供参考。

高效阅读源码的五步速读法相关推荐

  1. 如何在 GitHub 上高效阅读源码?

    原文链接: 如何在 GitHub 上高效阅读源码? 之前听说过一个故事,一个领导为了提高团队战斗力,把团队成员集中起来,搞封闭开发,重点还是在没有网的条件下. 结果就是一个月过去了,产出基本为零. 我 ...

  2. 丁威: 优秀程序员必备技能之如何高效阅读源码(二更)

    @[toc](丁威: 优秀程序员必备技能之如何高效阅读源码(二更)) 消息中间件 我能熟练使用这个框架/软件/技术就行了, 为什么要看源码?" "平时不用看源码, 看源码太费时间, ...

  3. 也谈如何高效阅读源码

    CSDN前辈经验借鉴. 原文地址:http://blog.csdn.net/oncoding/article/details/4434315 源码阅读,自然是计算机学习的捷径之一,其重要性在此就不再赘 ...

  4. nacos 启动_【Nacos源码之配置管理 一】阅读源码第一步,本地启动Nacos

    前言 在我们去阅读Nacos源码之前,我们得先了解Nacos是干嘛的,以及怎么用,这样有利于我们更容易去理解源码; 查看Nacos的官方文档,我们知道Naocs主要有以下特性: 配置中心 服务注册与发 ...

  5. 关于我如何阅读源码这件事...

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源丨Oldpan博客 编辑丨极市平台 导读 阅读大厂的源码进行模仿和魔改其实是学习代码和规范自己的书 ...

  6. 【阅读源码系列】ConcurrentHashMap源码分析(JDK1.7和1.8)

    个人学习源码的思路: 使用ctrl+单机进入源码,并阅读源码的官方文档–>大致的了解一下此类的特点和功能 使用ALIT+7查看类中所有方法–>大致的看一下此类的属性和方法 找到重要方法并阅 ...

  7. 帮助阅读源码的8个技巧

    大家好,我是Z哥. 之前写了一篇关于阅读源码到底有多少价值的文章<阅读源码的真正价值>,反响还不错. 在文中我向你阐明了阅读源码5个价值. 面试 在工作中更快地上手新项目 给自己创造用新技 ...

  8. 阿里开发者们的第16个感悟:让阅读源码成为习惯

    2015年12月20日,云栖社区上线.2018年12月20日,云栖社区3岁. 阿里巴巴常说"晴天修屋顶". 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备. 所以社区特别 ...

  9. 初学者如何阅读源码?

    原文:How to read code – a primer[1] 原文作者:technikhil 译者:newbiewang 校对者:陈元 我喜欢编程,它也是我的工作,而且我很高兴能够将大部分的时间 ...

最新文章

  1. 【程序员趣味】用Python制作带字小人举牌
  2. 化解谷歌AI霸权的另一种思路?开发平台的生态围剿
  3. 【深度学习问题整理】
  4. php 立即释放session 去除其缓存,ThinkPHP关于session无法清除的一个小问题
  5. 机器学习数据集划分-训练集,验证集,测试集
  6. java发展过程中的重大事件
  7. 有机化学芳烃 芳香性
  8. Activity之间切换 以及传值
  9. Oracle入门(四)之查询基本信息
  10. H.264编解码标准的核心技术(提供相关流程图)
  11. Undo/Redo框架实现
  12. JS和JS是IE上JavaScript或JScript的缩写。
  13. kubernetes滚动更新
  14. 【SQL Server】入门教程-基础篇(一)
  15. 互联网在线地图平台对比分析
  16. Google sheet 设置下拉列表
  17. 计算机四级数据库分值分布,计算机四级数据库工程师考试成绩查询注意事项
  18. XCTF练习题---MISC---simple_transfer
  19. Android新浪微博授权提示:文件不存在 C8998 的终极解决方法
  20. LIN Bus | 一个应用广泛的串行通信协议

热门文章

  1. 高端又易学的vbs表白程序了解一下
  2. vue项目启动时报错 Error: listen EADDRNOTAVAIL: address not available 192.168.0.102:9003
  3. 是男人就下一百层游戏3D版实现
  4. Docsify使用之Markdown语法
  5. NFS-Ganesha框架学习
  6. 2016 远景能源-实习生-电话面试
  7. java计算机毕业设计人才招聘系统智能化管理MyBatis+系统+LW文档+源码+调试部署
  8. linux取消bios密码设置密码,简单五步设置BIOS密码使电脑更安全
  9. 在CSSPIN2009上的大会发言-支持软件过程改进的工具和实践
  10. 路由跟踪Tracert