如何学习一个开源项目
背景
github是程序员的宝库,那些知名开源项目就是程序员修炼升级的武功秘籍。合理的应用和学习开源项目,不但能够更加高效高质量的完成开发任务,同时能够见识到更加专业的代码、设计、理念等,提升内功。
但是要如何高效的学习一个新项目?
如何选择
1.需求驱动 通常是为了解决某个问题需要引入开源项目,通过google or baidu找到目标仓库,通常会有多个选择,选择星星多、文档齐全、有人维护、代码质量高的项目。
2.兴趣驱动 对某个技术领域感兴趣,想要深入学习和参与,学习或者参加一个开源项目最好不过了。选择知名度高、应用广泛、活跃的项目。
如何学习
兴趣驱动,以学习为目标
1.看README、说明文档、设计文档、接口文档,先大致了解该项目的目标、功能、设计、优势等,对该项目有个大体的了解。
2.下载源码,搭建环境,编译安装,让功能先run起来或者实现hello world程序。建起debug环境和运行环境,跑起来体验体验功能,方面更深入的学习。
3.阅读代码,先看源码结构,搞清楚有那些组件,搞清楚核心组件源码目录,搞清楚各组件间关系和组织方式。有设计架构图的可以参考架构图学习,没有的可以自己先结合功能和代码画出自己理解的设计架构。对项目先有个整体认识和理解。
4.开始逐个学习核心模块,先理清楚主要流程,画出每个模块的处理流程图,同时随着理解的加深完善总体结构图。
5.有个设计架构图和核心功能流程图,基本上对该项目已经有了一个比较深入的理解了,再开始详细阅读代码,看一些亮点功能是如何实现了,学习功能是怎么抽象的,用了什么比较酷的技术等。
需求驱动,以应用为目标
1.看README、说明文档、设计文档、接口文档,先大致了解该项目的目标、功能、设计、优势等,对该项目有个大体的了解。注意一些约束(比如开源协议、依赖、部署环境要求、是不是可以分布式部署等等)。
2.下载源码,搭建环境,编译安装,让功能先run起来或者实现hello world程序。建起debug环境和运行环境,跑起来体验体验功能。
3.针对自己想要应用的功能实现demo做仔细的验证,从可否满足需求、开源协议、依赖、部署环境、性能、安全、易用性、代码质量等方面决定是不是要使用该项目。
4.确定能够满足需求,并且安全等方面满足条件后,就可以引入使用,先满足业务需求。
5.然后再近一步学习该项目,先搞清楚总体设计,然后再先搞清楚应用的功能的细节设计,再学习其他组件。
参考资料
- https://www.zhihu.com/question/19637879