diff --git "a/\347\254\254\344\272\214\351\203\250\345\210\206\357\274\232\345\255\246\344\271\240\345\222\214\344\275\277\347\224\250\345\274\200\346\272\220\351\241\271\347\233\256/\347\254\254 2 \345\260\217\350\212\202\357\274\232\345\274\200\346\272\220\351\241\271\347\233\256\347\232\204\346\272\220\344\273\243\347\240\201\350\257\245\346\200\216\344\271\210\350\257\273.md" "b/\347\254\254\344\272\214\351\203\250\345\210\206\357\274\232\345\255\246\344\271\240\345\222\214\344\275\277\347\224\250\345\274\200\346\272\220\351\241\271\347\233\256/\347\254\254 2 \345\260\217\350\212\202\357\274\232\345\274\200\346\272\220\351\241\271\347\233\256\347\232\204\346\272\220\344\273\243\347\240\201\350\257\245\346\200\216\344\271\210\350\257\273.md" index 4918917ab6660ddf4eaf52d00f79ae336280dcbd..965ba8862104a3e775a76161e4ef262fde5558d5 100644 --- "a/\347\254\254\344\272\214\351\203\250\345\210\206\357\274\232\345\255\246\344\271\240\345\222\214\344\275\277\347\224\250\345\274\200\346\272\220\351\241\271\347\233\256/\347\254\254 2 \345\260\217\350\212\202\357\274\232\345\274\200\346\272\220\351\241\271\347\233\256\347\232\204\346\272\220\344\273\243\347\240\201\350\257\245\346\200\216\344\271\210\350\257\273.md" +++ "b/\347\254\254\344\272\214\351\203\250\345\210\206\357\274\232\345\255\246\344\271\240\345\222\214\344\275\277\347\224\250\345\274\200\346\272\220\351\241\271\347\233\256/\347\254\254 2 \345\260\217\350\212\202\357\274\232\345\274\200\346\272\220\351\241\271\347\233\256\347\232\204\346\272\220\344\273\243\347\240\201\350\257\245\346\200\216\344\271\210\350\257\273.md" @@ -1,30 +1,33 @@ # 第 2 小节:开源项目的源代码该怎么读 -### 选择合适的项目 -Gitee 上的项目种类和数量繁多,作为新手的话,要选择适合自己的项目进行学习。 -1. 以实际项目为导向,可以是真正的工程项目,也可以是生活中实用的小项目,根据实际项目可以有方向性的选择开源项目; -2. 调查实际项目相关领域的常用开源项目,可以参考项目的活跃度(Gitee 指数),贡献者数量,Star 数等缩小选择范围,学习过程可以获取更加丰富的资料; -3. 通过项目的 README.md 了解项目的大体情况,再进行研究和选择。 +## 选择合适的项目 -### 读源代码之前的准备工作 +Gitee 上的项目种类和数量繁多,作为新手的话,要选择适合自己的项目进行学习。下面是我们建议你在寻找开源项目时可以考虑的地方: -1. 领域知识储备 +1. 以实际项目为导向,可以是工作中用到的真实项目,也可以是生活中遇到的实际需求,从中有方向性的选择可以解决问题的开源项目; +2. 根据个人技术栈或者感兴趣的技术,从中筛选出一些符合你预期技术栈的开源项目; +3. 分析开源项目的指标,例如项目的活跃度(Gitee 指数)、贡献者数量、Star 数、文档完整度、开发者社区等因素,建议初学者选择开发者较多、文档教程丰富的项目; +4. 通过项目的 README.md 了解项目的大体情况,阅读使用手册、运行示例程序,再进行深入研究和选择,评估是否符合你的需求。 -开源项目往往是以领域知识为背景进行开发的,了解领域知识中基本概念、原理、算法,必然会降低阅读理解源码的难度。 +## 读源代码之前的准备工作 -2. 善用学习工具 +1. **领域知识储备** -方便查找的 IDE 工具使源码阅读过程事半功倍,阅读源码要搞清楚函数之间的调用关系,IDE 拥有代码静态分析功能和便捷的断点调试功能,可以帮助你快速查看源码调用关系,整体了解源码的逻辑关系。类图工具,方便梳理、记录和可视化项目调用的逻辑关系,加快深入学习。 + 开源项目往往是以领域知识为背景进行开发的,了解领域知识中基本概念、原理、算法,必然会降低阅读理解源码的难度。 -3. 了解开源项目 +2. **善用学习工具** -查找和阅读该项目的官网、相关博客和资料,对项目的目的、功能、基本使用和代码组织结构进行大概的了解,进一步明确学习内容和目标。 + 方便查找的 IDE 工具使源码阅读过程事半功倍,阅读源码要搞清楚函数之间的调用关系,IDE 拥有代码静态分析功能和便捷的断点调试功能,可以帮助你快速查看源码调用关系,整体了解源码的逻辑关系。类图工具,方便梳理、记录和可视化项目调用的逻辑关系,加快深入学习。 -### 读源代码时应该读些什么 +3. **了解开源项目** + + 查找和阅读该项目的官网、相关博客和资料,对项目的目的、功能、基本使用和代码组织结构进行大概的了解,进一步明确学习内容和目标。 + +## 读源代码时应该读些什么 读源代码的过程一般分为两步,首先是学习使用项目,对项目功能、运行环境和模块结构有基本的认识,搭建可以用于开发、调试和验证的环境;然后是阅读源代码,在运行环境中调试、梳理、深入理解代码细节,并尝试参与开源项目。 -#### 学习使用项目 +### 学习使用项目 1. 阅读项目文档,如 getting started,example 等,学习如何开源项目下载、安装和基本使用方法; 2. 如果项目提供 example 工程或者测试用例,尝试运行,解决运行过程中遇到的问题; @@ -32,7 +35,7 @@ Gitee 上的项目种类和数量繁多,作为新手的话,要选择适合 4. 在了解基本使用后,需要根据用户指南深入了解项目,例如项目的配置管理,高级功能及最佳实践; 5. 如果时间允许,尝试从源码构建项目,根据项目构建指南,搭建一个可以用于开发、调试和验证的环境。 -#### 阅读项目源代码 +### 阅读项目源代码 1. 阅读源代码的第一步为抓主干,尝试理清楚代码运行的调用路径,通过 Debug 来观察运行时的变量和行为,加入日志和打印可以更好的理解代码,大部分的细节需要在调试中理解; 2. 画逻辑关系图帮助理解源码,将代码主干画成流程图或 [UML 图](https://baike.baidu.com/item/UML%E5%9B%BE),帮助记忆和下一步阅读,大幅度提高对框架的理解速度; @@ -41,8 +44,8 @@ Gitee 上的项目种类和数量繁多,作为新手的话,要选择适合 5. 发现有可改进的地方,对项目开发者提出改进意见或者 Issue。 6. 写笔记与写文章,通过写笔记记录学习的收获和经验,供以后使用,通过写文章对于问题进行深入和系统的思考。 -### 本部分内容贡献者 +## 本部分内容贡献者 -[千羽](https://gitee.com/nateshao)、[xiangshang](https://gitee.com/wangchuang2453)、[雪山凌狐](https://gitee.com/xueshanlinghu)、[张翠山](https://gitee.com/springchang)、[Apache DolphinScheduler 社区](https://gitee.com/easyscheduler_admin)、[WhitePaper](https://gitee.com/whitepaper233)、[taotieren](https://gitee.com/taotieren) +[千羽](https://gitee.com/nateshao)、[xiangshang](https://gitee.com/wangchuang2453)、[雪山凌狐](https://gitee.com/xueshanlinghu)、[张翠山](https://gitee.com/springchang)、[Apache DolphinScheduler 社区](https://gitee.com/easyscheduler_admin)、[WhitePaper](https://gitee.com/whitepaper233)、[taotieren](https://gitee.com/taotieren)、[阿基米东](https://gitee.com/luhuadong) > 发现内容中的错误?还是想要补充更多符合主题的内容?《开源指北》欢迎你进行贡献,点击[贡献指南](./../贡献指南.md)了解贡献的具体步骤。 \ No newline at end of file