学习开源项目的方法论

Posted boboshenqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习开源项目的方法论相关的知识,希望对你有一定的参考价值。

观点

  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开始学架构

以上是关于学习开源项目的方法论的主要内容,如果未能解决你的问题,请参考以下文章

如何研究一个开源项目

学习Coding-iOS开源项目日志

React Native开源项目如何运行?

如何系统地学习 C/C++ 语言有哪些C++开源项目可以学习呢?

c开源项目webbench学习

开源项目精选: 机器学习开源框架 TensorFlow