做了几年程序员的同学,有了一些项目经验,也有了自己对编程的理解,但是有时候很迷茫,不知道接下来该如何提升自己。
在作者看来,“程序员现阶段最需要的是提高自己的编程能力和视野,学习开源项目是最有效的方法之一”。

在这篇文章中,作者谈谈自己学习开源项目的经验,希望对你有所帮助。
1 学会使用首先,我们需要学习如何使用开源项目。
Github是全球最大的在线软件源代码托管服务平台,很多开源项目都托管在上面。
从GIthub下载源代码后,需要重点关注像快速入门、入门、示例这样的文档,这些文档告诉初学者如何使用项目。
如果需要部署项目,请参考项目文档,并尝试在独立的环境中从头开始部署项目。
有些项目还会提供一个完美的范例项目。里面有现成的例子。您可以尝试根据文档运行介绍性示例。
如果介绍性示例运行顺利,对于项目初学者来说是一个好的开始。如果操作出现异常,不要慌张,可以在项目中查找FAQ文档,或者搜索有问题的关键词,查询相关解决方案。
成功运行项目中的第一个基本示例后,您可以尝试运行更复杂的功能示例。
建议作者创建单个项目,用功能实例完善整个项目。随着这个项目越来越满,证明你掌握的更多了。在学习的过程中,将学习心得记录在笔记中,便于后续回溯。
2 阅读源码阅读源代码是深入理解开源项目最重要的一步。
在阅读源代码之前,尝试从源代码构建项目。通常,开源项目会提供一个构建指南,指导您如何构建一个用于开发、调试和构建的环境。构建成功后,尝试运行项目。
查阅项目的架构设计文档,梳理整个项目的骨架,绘制流程图或UML图,加深对项目的理解。
当我们知道了整个项目的骨架后,就可以选择自己感兴趣的模块来阅读了。比如你对网络通信感兴趣,就去看看网络层的代码,深入到实现细节,比如它用的什么库,采用的什么设计模式,为什么要这么做。如果可以,调试详细代码。
在阅读源代码时,注意单元测试并尝试运行它们。基本上,一个好的单元测试会清楚地描述代码的功能和边界。
作者系统阅读源代码是在2014年。当时RocketMQ 3.0刚刚开源,我对消息队列极其感兴趣,非常想知道Netty这个网络编程框架是怎么用的。
所以要从RocketMQ网络通信模块remoting开始学习。因为源代码中有完善的测试用例,所以首先要运行单元测试,学习网络编码模型。
在学习网络编程的过程中,笔者有两个突破:
▍ 1.客户端的编程模型
RocketMQ客户端网络通信有以下三种方式:
单向:单向传输
同步:同步呼叫回调:异步回调很多技术思想是相通的。下图显示了sofa-bolt支持的调用类型,sofa-bolt是ants的一个开源通信组件。蚂蚁通讯框架Bolt调用类型▍二世。服务器处理器模式
RocketMQ服务器通信使用经典的Reactor模式,服务器注册不同的业务处理器,每个业务处理器可以绑定不同的线程池。
void registerProcessor;学习完网络框架Remoting,再结合Broker模块学习RocketMQ存储模型,这样就可以对RocketMQ有一个相对清晰的认识。
3 知行合一大学刚毕业的时候,看了李开复老师的一本书。书中有一句话让我印象深刻:“我听而忘,我看而记,我做而懂”。

中国古代哲学家荀子也说过,“不闻其味,则不闻其味;闻之,不见;见之,不可不知;知之,不可为也;”就学习而言,它停止了。"
在学习源代码的过程中,夯实知识点的关键是动手练习,并保证练习后有输出产品,即知行合一。
笔者总结两点经验,供大家参考。
▍ 1.源代码中的知识点应用到项目中。
开源项目中有大量优秀的实践,可以将编码技巧、设计思想和优秀的源代码引入到商业项目中。
2014年,鳄龙的优惠券计算服务遇到了性能瓶颈,作者负责重建这个系统。看了RocketMQ源代码,我了解到了线程池使用的本质:线程池隔离,各司其职。
因此,作者首先对业务场景进行了梳理,根据任务类型绑定不同的线程池,以方便扩展和暴露并发的配置参数。在重构这个系统的过程中,还引入了RocketMQ来创建线程工具类代码。
改造后,不仅系统性能提高了5倍,作者的自信心也大大提高,对技术的理解也更加深入。
▍第二,造轮子
当我们学习一个开源项目时,我们可以参考开源代码复制一个。模仿写作的过程就是查漏补缺的过程,也可以完善自己的知识体系。
2016年,哈丁-JDBC成为开源。下图是哈丁-JDBC当时的建筑设计:
当时作者对数据库和表的划分很着迷。与此同时,我的脑海中出现了许多问题,例如如何封装jdbc接口,如何实现SQL解析,以及如何聚合多个片段的结果。
所以参考sharding的源码——JDBC,作者模仿了一个子数据库和子表组件。
经过这次模仿,作者深入实践了客户端模式数据库和表的原理,积累了自己的技术储备。
4 参与开源“开源的概念之一是鼓励不同的人一起工作”。——Linux之父Linus Torvalds 2016年2月做了一个TED演讲《Linux背后的思想》。
在《教授鼓励学生参与开源项目的五个理由》一文中,提到了以下五个理由:
无限的学问
专业交流
外部机会
对计算机科学有更深的理解
玩
那么程序员如何参与开源呢?参与开源的方式有很多。最常见的如下:
直接参与开源项目的开发。
参考开源项目的社区竞争
修复开源项目中的错误
开源项目文档
参与开源项目的测试和演示编写。
参与开源项目的推广
参与一个开源项目,与许多同样聪明的工程师合作,实现你头脑中所有奇妙的想法,这是一件非常美妙的事情。

亲爱的程序员朋友,当你不知道选择哪个开源项目开始学习的时候,希望你能站在当下,行动起来。现在的技术团队使用的开源组件正是你学习的方向。
行动起来,你会成为更好的自己。走吧。
如果我的文章对你有帮助,请帮我点赞,阅读,转发。你的支持将激励我输出更高质量的文章。非常感谢!


