Fork me on GitHub

学习开源项目的方法论

观点

  1. 无论读者水平如何,在开源项目中一定能学到很多东西,包括不限于:思想、设计、架构、代码
  2. 数据结构和算法不是特别重要。尤其是复杂的数据结构,知道原理即可,修改不是一件容易的事情。
  3. 自顶向下,按照功能-->安装-->配置-->原理-->测试-->源码的顺序学习

具体实施

1.安装

  1. 按照官方文档(即使是英文文档,也最好要看)一步一步进行。
  2. 根据安装依赖的库文件、或者其他组件,猜想推测项目的功能。例如nginx需要openssl、zlib,那可能和https和压缩有关
  3. 安装完成后,根据安装后的目录结构,查看系统提供了哪些工具,进一步推测具有哪些功能

2.运行

  1. 根据官方手册,跑起来看下效果
  2. 通过--help或者-h参数查看哪些参数是可配置的,或者如何修改配置文件的不同参数或选项来改变系统的行为

3.深入原理

  1. 研究开源项目的重点功能 特性是如何做到的?例如redis的单进程相比mysql为什么这么快?redis相比memcached又为什么更受欢迎?
  2. 对比同一类别的其他开源项目,优缺点是什么?以后在做技术选型的时候要结合自身的业务,选择不同的项目;而不是大家都这么用,大家都用并不一定适合自己,还是要知其然,知其所以然
  3. 具体步骤:挑选重点研究部分,1.阅读官方文档 2.阅读知名权威文档 3.对于模糊的点,按照demo,调试系统

4.使用项目,做各种测试

  1. 对于打算在生产环境使用的项目,一定要做压力测试、契合自身业务场景测试

5.阅读源代码

  1. 查看源代码的目的是学习和借鉴,考虑自己实现该如何做?代码里的技巧、思想、框架等等,能否用在自身项目里面?
  2. 通读源码是不可取的做法,收益和成本比率较低,得不偿失
  3. 通过demo调试,观察具体的调用栈帧和参数,理解系统的行为

时间分配

在短时间内研究所有的项目的做法不可取,就是说,时间分配路线不能是广度-->深度,这样得到的是每个系统的皮毛,遇到疑难杂症,依然无法解决。应该是一段时间内掌握一个项目的90%,吃透一个项目后,再去学习下一个,当学习四五个的时候,学习的速度就很快,质量也会更高了

来源:
从0开始学架构

posted @ 2019-04-27 12:38  gitmoji  阅读(285)  评论(0编辑  收藏  举报