学习开源项目的步骤学习笔记
参考:infoQ的某篇推送
- 不管你是谁,都能从开源项目中学到很多东西
- 不要只盯着数据结构和算法
有些部分不必去深究具体的实现方法,比如使用了某个结构,除非你需要对这个结构进行修改,不然就不必要去深入了解这个结构到底怎么实现 - 自顶向下,源码不是第一步,而是最后一步
要在掌握了基本的功能、原理、关键设计之后再去看源码
看源码的目的是学习别人的实现方式以及写作方法
自顶向下的学习:
安装
了解安装所依赖的东西,这些东西很可能就跟具体的实现有关系,同时还能知道系统提供给我们哪些工具去使用
(在安装RocksDB的时候只关注了如何去安装以及安装过程中出的问题,没有关注RocksDB用了哪些轮子,以及这些轮子的作用)
(去重新回顾安装过程,大致了解每个轮子是做什么用的,这样可以了解一下RocksDB的某些特性)运行
通过命令行参数以及配置文件可以看出系统可以干什么以及是如何运行的,通过修改配置参数去了解每个参数的功能,从而对系统的总体功能有个大致的了解
(只简单编译运行了一下,没有尝试去修改什么参数,也没去具体了解各个参数的作用)
(学习所有的Options参数,了解各个参数对应的功能,以及对应功能的实现方式)-
原理研究
此处对原理进行系统性的研究(运行阶段可以通过参数大致了解一些原理,此处开始细致地去了解)关键特性的基本实现原理:系统有哪些标榜的特性,这些特性怎么去实现,怎么做到的
优缺点对比:掌握优缺点才能掌握该技术,才能针对不同的技术进行选择
(只读了RocksDB的文档,但是没有把文档中提到的特性联系起来,没有思考具体的实现方式以及进行横向对比)
(整理文档中提到的新技术,理清各个技术之间的关系,了解同一个结构不同实现方式之间的区别,比如不同的sst格式以及compaction方式之类的)原理研究的手段:
通读项目设计文档:官网的文档
网上已有的分析文档:别人已经学习过这个项目形成的文档
Demo验证:自己去写个demo验证某个特性,然后打印日志或者调试参数
(通过实际运行了解各个功能的使用方法,运行过程) 测试
如果要实际使用该项目,那么使用前一定要进行测试,通过测试才能知道是否真的适合自己源码研究
学习具体的编码技术以提升自己,不要通读代码,不要通读代码,不要通读代码
还可以自己写个demo通过调试,去查看他的调用栈来进行学习