学习开源项目的方法论
观点
- 无论读者水平如何,在开源项目中一定能学到很多东西,包括不限于:思想、设计、架构、代码
- 数据结构和算法不是特别重要。尤其是复杂的数据结构,知道原理即可,修改不是一件容易的事情。
- 自顶向下,按照功能-->安装-->配置-->原理-->测试-->源码的顺序学习
具体实施
1.安装
- 按照官方文档(即使是英文文档,也最好要看)一步一步进行。
- 根据安装依赖的库文件、或者其他组件,猜想推测项目的功能。例如nginx需要openssl、zlib,那可能和https和压缩有关
- 安装完成后,根据安装后的目录结构,查看系统提供了哪些工具,进一步推测具有哪些功能
2.运行
- 根据官方手册,跑起来看下效果
- 通过--help或者-h参数查看哪些参数是可配置的,或者如何修改配置文件的不同参数或选项来改变系统的行为
3.深入原理
- 研究开源项目的重点功能 特性是如何做到的?例如redis的单进程相比mysql为什么这么快?redis相比memcached又为什么更受欢迎?
- 对比同一类别的其他开源项目,优缺点是什么?以后在做技术选型的时候要结合自身的业务,选择不同的项目;而不是大家都这么用,大家都用并不一定适合自己,还是要知其然,知其所以然
- 具体步骤:挑选重点研究部分,1.阅读官方文档 2.阅读知名权威文档 3.对于模糊的点,按照demo,调试系统
4.使用项目,做各种测试
- 对于打算在生产环境使用的项目,一定要做压力测试、契合自身业务场景测试
5.阅读源代码
- 查看源代码的目的是学习和借鉴,考虑自己实现该如何做?代码里的技巧、思想、框架等等,能否用在自身项目里面?
- 通读源码是不可取的做法,收益和成本比率较低,得不偿失
- 通过demo调试,观察具体的调用栈帧和参数,理解系统的行为
时间分配
在短时间内研究所有的项目的做法不可取,就是说,时间分配路线不能是广度-->深度,这样得到的是每个系统的皮毛,遇到疑难杂症,依然无法解决。应该是一段时间内掌握一个项目的90%,吃透一个项目后,再去学习下一个,当学习四五个的时候,学习的速度就很快,质量也会更高了
来源:
从0开始学架构