Skip to main content

【技术老兵的开源之路】

· One min read

个人介绍#

大家好,我是段海波,github账号haibo-duan,非常荣幸收到Apache ShenYu社区的邀请成为Apache ShenYu的Committer,下面跟大家分享一下我参与Apache ShenYu社区这段时间的成长和建议。

初识Apache ShenYu#

在去年的一次源码阅读活动中,我第一次听说了Dromara开源社区的Soul网关正式进入Apache基金会孵化器并改名叫ShenYu的故事。 由于ShenYu(神禹)是第一个以中国传统文化命名的开源项目,而如何命名又是程序员最头疼的事情,因此,在好奇心的驱使下,我关注了ShenYu的公众号。在此后,我了解到ShenYu不仅具备高性能、多协议、易扩展的特性,还提供了各种开箱即用的插件,抱着学习的心态,我在github上fork了ShenYu的源码,正好ShenYu官网的文档也非常丰富,许多文档对技术细节也描述得非常详细。 于是根据文档的描述,订阅了ShenYu的邮件,并尝试能否参与到社区的建设中来。

我的开源之路#

在关注社区的过程中,有一次,社区组织了一次代码清洁活动,旨在对当前shenyu的代码进行清洁和优化。我看了一下这个task的要求并不难,于是,抱着试一试的心态,我按照代码规范对一些代码进行了优化之后,尝试提交了第一个PR。 万事开头难,实际上在第一个PR中需要学习的东西还是挺多的,包括PR的格式、代码的分支、以及提交的流程等。幸好这一切在贡献者指南中描述得非常详细。不过让我感触最深的就是ShenYu的checkstyle, 这是一个非常严格的规范,包括注释、空格都有要求,虽然我平时已经很注意代码规范了,但是一开始在这个checkstyle上也会有点小痛苦。 不过这个过程很快就会适应,毕竟,经过统一checkstyle之后的代码看上去让人极度舒适。

在有了从0到1的第一个PR之后,后续的过程就轻松很多了。我发现每次提交PR本地打包的过程中,最耗时的就是执行单元测试用例。我发现还有部分代码没有提供单元测试代码。因此,我决定从单元测开始参与,首先可以不用了解太多的源码,毕竟ShenYu数万行的存量代码也不是一两天就能掌握的。 此外,还能很快的看到结果。在写单元测试用例的过程中,不仅能发现源码中的bug,提升代码质量,还能更好的了解源码。

而恰好就在此时,工作上的一些问题也需要我对单元测试技术进行调研,当我了解到了junit5的新特性之后,我发现Shenyu采用的是junit4,于是我就有了一个大胆的想法,发邮件询问了ShenYu社区是否可以进行升级。在邮件中经过数轮讨论之后,我的提议被采纳,我也成为了这个task的负责人。而我在做这个任务的过程中,由于涉及的测试代码比较多,我分成了许多小的任务,也吸引了几位新的小伙伴一起加入。 此外,在做这个junit5升级的任务中,还发现了之前很多用例都用到了PowerMock,而在新版本的jdk中,PowerMock的兼容性存在问题。因此PowerMock也被移除掉了。

ShenYu社区是开放和包容的,在完成了这些任务之后,我对ShenYu的功能模块已经非常熟悉,除了能继续跟进社区的一些issue之外,还能够更多的结合自身的工作和经历去思考,并在周例会中提出自己的问题和想法。 恰在此时,我也收到了ShenYu社区的邀请,正式成为了committer,在我看来,成为Apache committer这不仅仅是一种荣誉,更多的也是一种责任。代表了社区的信任,需要更多的为社区做出贡献。成为Apache committer不是终点,仅仅是一个更高的起点。

我在Apahce ShenYu社区的体验#

在过去这段参与开源的过程中,有非常多的收获,有如下几点心得,提供给大家参考:

  • 从小事做起:开源社区的贡献并并没有区分大小,无论是重大功能改进,还是一行文档错误,对社区而言,这都是贡献。因此,勿以善小而不为。只要是有价值的贡献,社区都是欢迎的。

  • 积极参与,持续贡献:开源是个积沙成塔的过程,也许一次的贡献有限,但只要积极参与社区活动,无论是邮件中的方案讨论还是Review代码,只要坚持参与,就能获得提升。也许你不能像面对工作那样全部投入,但只要利用好业余时间,长期坚持,一样也能成功。

  • 参与邮件讨论,大胆提出想法:开源社区最大的特点就是民主、开放和透明。在这里,任何想法和建议都会被充分重视。如果你有一个好想法,你只需要发送一封邮件,就能在社区里和大家一起讨论,你的邮件总会得到回复,所有的讨论都是公开的,你可以看到大家对你问题的讨论过程。而在很多时候,讨论问题的过程往往比解决问题本身更有价值。