高效阅读源码的五步速读法
阅读代码是程序员最重要的技能之一,我们每天都在读同事的代码或者第三方库的代码,那怎么高效的阅读代码呢?分享下我的源码阅读方法。
我的阅读源码的方法分为五步:
第一步,通过文档和测试用例了解代码的功能
阅读源码前要先了解代码的功能,可以通过文档或者测试用例,了解代码做了什么,输入和输出是什么。
了解功能是阅读源码的基础,后面才会有方向感。
第二步,自己思考功能的实现方式
知道了源码有啥功能之后,要先思考下如果自己实现会怎么做。有个大概的思路就行。
如果想不通可以看下源码用到了哪些依赖库,这些依赖库都有啥功能,再想下应该怎么实现。
如果还想不通也没关系,重要的是要先自己思考下实现方式。
第三步,粗读源码理清实现思路
你已经有了一个大概的实现思路,然后再去读源码,看下它是怎么实现的。和你思路类似的地方很快就可以掠过去,而且印象也很深,和你思路不一样的地方,通过读代码搞清楚它的实现思路。
这一步不用关心细节,知道某段代码是干啥的就行,关键是和自己的思路做 diff,理清它的整体实现思路。
第四步,通过 debugger 理清实现细节
粗读源码理清了实现思路之后,对于一些部分的具体实现可能还不是很清楚,这时候就可以通过 debugger 来断点调试了。
构造一个能触发该功能的测试用例,在关心的代码处打一个断点,通过 debugger 运行代码。
这时候你已经知道这部分代码是干啥的了,单步调试也很容易理清每一条语句的功能,这样一条语句一条语句的搞懂之后,你就很容易能把这部分代码的实现细节理清楚。
这样一部分一部分的通过 debugger 理清细节实现之后,你就对整体代码的思路和细节的实现都有了比较好的掌握。
第五步,输出文章来讲述源码实现思路
当你觉得对源码的实现有了比较好的掌握的时候,可以输出一篇文章的方式来讲述源码的整体思路。
因为可能会有一些部分是你没注意到的,而在输出的过程中,会进行更全面的思考,这时候如果发现了一些没有读到的点,可以再通过前面几步去阅读源码,直到能清晰易懂的把源码的实现讲清楚。这样才算真正的把代码读懂了。
这就是我觉得比较高效的阅读源码的方法。
总结
我阅读源码的方法分为五步:
通过文档和测试用例了解代码的功能
自己思考功能的实现方式
粗读源码理清实现思路
通过 debugger 理清实现细节
输出文章来讲述源码实现思路
这五步缺一不可:
缺了第一步,不了解功能就开始读源码,那读代码会没有方向感
缺了第二步,不经过思考直接读源码,理解代码实现思路的效率会降低
缺了第三步,不理清整体思路就开始 debugger,会容易陷入细节,理不清整体的思路
缺了第四步,不 debugger 只大概理下整体思路,这样不能从细节上真正理清楚
缺了第五步,不通过输出文章来检验,那是否真的理清了整体思路和实现细节是没底的
当然,这是我个人阅读源码的方法,仅供参考。
高效阅读源码的五步速读法相关推荐
- 如何在 GitHub 上高效阅读源码?
原文链接: 如何在 GitHub 上高效阅读源码? 之前听说过一个故事,一个领导为了提高团队战斗力,把团队成员集中起来,搞封闭开发,重点还是在没有网的条件下. 结果就是一个月过去了,产出基本为零. 我 ...
- 丁威: 优秀程序员必备技能之如何高效阅读源码(二更)
@[toc](丁威: 优秀程序员必备技能之如何高效阅读源码(二更)) 消息中间件 我能熟练使用这个框架/软件/技术就行了, 为什么要看源码?" "平时不用看源码, 看源码太费时间, ...
- 也谈如何高效阅读源码
CSDN前辈经验借鉴. 原文地址:http://blog.csdn.net/oncoding/article/details/4434315 源码阅读,自然是计算机学习的捷径之一,其重要性在此就不再赘 ...
- nacos 启动_【Nacos源码之配置管理 一】阅读源码第一步,本地启动Nacos
前言 在我们去阅读Nacos源码之前,我们得先了解Nacos是干嘛的,以及怎么用,这样有利于我们更容易去理解源码; 查看Nacos的官方文档,我们知道Naocs主要有以下特性: 配置中心 服务注册与发 ...
- 关于我如何阅读源码这件事...
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源丨Oldpan博客 编辑丨极市平台 导读 阅读大厂的源码进行模仿和魔改其实是学习代码和规范自己的书 ...
- 【阅读源码系列】ConcurrentHashMap源码分析(JDK1.7和1.8)
个人学习源码的思路: 使用ctrl+单机进入源码,并阅读源码的官方文档–>大致的了解一下此类的特点和功能 使用ALIT+7查看类中所有方法–>大致的看一下此类的属性和方法 找到重要方法并阅 ...
- 帮助阅读源码的8个技巧
大家好,我是Z哥. 之前写了一篇关于阅读源码到底有多少价值的文章<阅读源码的真正价值>,反响还不错. 在文中我向你阐明了阅读源码5个价值. 面试 在工作中更快地上手新项目 给自己创造用新技 ...
- 阿里开发者们的第16个感悟:让阅读源码成为习惯
2015年12月20日,云栖社区上线.2018年12月20日,云栖社区3岁. 阿里巴巴常说"晴天修屋顶". 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备. 所以社区特别 ...
- 初学者如何阅读源码?
原文:How to read code – a primer[1] 原文作者:technikhil 译者:newbiewang 校对者:陈元 我喜欢编程,它也是我的工作,而且我很高兴能够将大部分的时间 ...
最新文章
- 【程序员趣味】用Python制作带字小人举牌
- 化解谷歌AI霸权的另一种思路?开发平台的生态围剿
- 【深度学习问题整理】
- php 立即释放session 去除其缓存,ThinkPHP关于session无法清除的一个小问题
- 机器学习数据集划分-训练集,验证集,测试集
- java发展过程中的重大事件
- 有机化学芳烃 芳香性
- Activity之间切换 以及传值
- Oracle入门(四)之查询基本信息
- H.264编解码标准的核心技术(提供相关流程图)
- Undo/Redo框架实现
- JS和JS是IE上JavaScript或JScript的缩写。
- kubernetes滚动更新
- 【SQL Server】入门教程-基础篇(一)
- 互联网在线地图平台对比分析
- Google sheet 设置下拉列表
- 计算机四级数据库分值分布,计算机四级数据库工程师考试成绩查询注意事项
- XCTF练习题---MISC---simple_transfer
- Android新浪微博授权提示:文件不存在 C8998 的终极解决方法
- LIN Bus | 一个应用广泛的串行通信协议
热门文章
- 高端又易学的vbs表白程序了解一下
- vue项目启动时报错 Error: listen EADDRNOTAVAIL: address not available 192.168.0.102:9003
- 是男人就下一百层游戏3D版实现
- Docsify使用之Markdown语法
- NFS-Ganesha框架学习
- 2016 远景能源-实习生-电话面试
- java计算机毕业设计人才招聘系统智能化管理MyBatis+系统+LW文档+源码+调试部署
- linux取消bios密码设置密码,简单五步设置BIOS密码使电脑更安全
- 在CSSPIN2009上的大会发言-支持软件过程改进的工具和实践
- 路由跟踪Tracert