如何真正读懂开源代码?
Posted 黑马程序员官方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何真正读懂开源代码?相关的知识,希望对你有一定的参考价值。
用拼图、搭积木的心态来学习源码,如果你想了解它们是怎么组装在一起的,那你就需要把它分解成每一小块,再去弄清楚每一个模块是如何实现的,整体架构是怎样的。
关于源码阅读的三层境界:
初级:记流水账——初期的源码阅读文章基本上是记流水账,例如对源码一行行加注释,只关注底层实现细节,但并未形成更高层次认知,对其设计理念没有提炼与深度领悟。
中级:能提问、思考、提炼——要求我们在阅读源码的时候多思考,并反问自己如果自己实现的话该如何着手,如何设计,带着疑问去研究源码。通过对比,思考,会对其背后的理念有了更深刻的理解。
高级:思考、质疑、验证——不管是什么代码,都会存在BUG或者实现并不合理的地方,如果大家在阅读源码的时候能够深入思考, 合理质疑,并能通过验证证明自己的观点,说明我们的能力、思考得到了极大的提升。
第一:阅读前的准备
为了有效地阅读源码,你可以准备好下面这些工具:
- 编辑器:你需要一个可以熟练使用的编辑器,这能让你拥有快速搜索关键字或变量名、、查找函数的引用和定义等
- Git工具:掌握基本的Git或其他版本控制工具的技能,这样你就能比较代码在版本间的差异
- 相关文档:阅读官方源码文档可以帮助你快速了解项目,如设计文档、编码规范等文档
第二:从最简单的源码开始
不知道如何下手,就先从最简单的源码开始阅读。
开源项目有很多种,有数据库连接池,还有Spring框架类的,当然还有特别重型的中间件类的,比如Kafka、Redis,更有上百万行的大数据类的,比如Hadoop、Spark。
很多人还没掌握阅读源码的顺序、技巧和方法,所以看过一些源码但依旧不懂。所以大家先要明白一个前提,Kafka的作者,Hadoop的作者,他们本身就是有很多经验、技术功底很扎实的技术大牛,他们本身站在一个很高的角度去设计和开发出来了这些极为出色的分布式系统。
如果你还达不到他们的水平,你是无法直接去阅读他们写出来的代码的,因为其中蕴含的各种底层技术细节,分布式架构设计思想,还有复杂的算法和机制,这些都不是能简单理解的。
所以,建议大家可以挑一些简单的,适合自己水平的去看。
第三:先让项目跑起来
阅读项目源码的第一步,是先让项目能够通过你自己编译通过并且顺利跑起来。
有的项目很复杂,依赖的组件很多,搭建起一个调试环境并不容易,所以不见得所有项目都能顺利的跑起来。
第四:明确阅读方向
在开始阅读一个项目时候,需要明确自己的目的,是需要了解其中的一个模块实现,还是要了解这个框架的大结构,还是需要具体熟悉其中的一个算法的实现等。
代码阅读过程中,大家可以分成这两个方向来看:
- 纵向——顺着代码的顺序阅读,了解清楚流程、算法
- 横向——区分不同的模块进行阅读,梳理项目整体框架
建议大家两个方向进行交替阅读,以整体为首,先了解清楚脉络,暂时先不要纠结某个函数、数据结构这些,不影响整体的阅读就可以。
第五:带着问题阅读
如果阅读代码只是输入(Input),那么还需要有输出(Output)。只有你能真正输出的时候,就是你彻底掌握的时候。
比如在阅读代码的时候,大家可以带着问题去阅读,多问自己一些问题,如:
- 1.如果我来做一个,会如何去做?
- 2.如果能够对这个项目做减法,我可以去掉那些模块和代码?真的能够去掉吗?
- 3.通过阅读单元测试,理解开发者的设计思路。
- 4.尝试做一些破坏或者修改,来理解项目中的那些做法。
越是主动积极的思考,就越有助于大家的学习,输出质量和学习质量是成正比的。
第六:学习源码风格
不管是学习新技术还是代码风格,看源码都是一种不错的学习方式,尤其是优秀的开源代码,总是能有我们值得借鉴的地方。
比如,大家可以侧重学习这几方面内容:
学习语言:代码风格、规范、惯用法、高级语法。对于某个语言的新手,找一个熟悉领域的开源项目来深入掌握这门语言,也是一个不错的注意。
学习设计:数据接口、框架、整体架构
学习理论:算法、协议。光看论文是很枯燥的,而且算法理论到工程实践还是有一定的差距,这个时候结合开源项目实现往往更事半功倍。
小结:
上面分享了几点源码阅读的方法,但其实源码阅读没有统一的标准。大家可以自己不断练习,找到适合自己的方法和工具,慢慢的就会形成一套自己源码阅读方式。
以上是关于如何真正读懂开源代码?的主要内容,如果未能解决你的问题,请参考以下文章
我起飞了呀!阿里P8架构师把 JDK 源码技术精髓整合成一份 10W 字笔记,最近开源了!