从 Web 工程师到 Apache APISIX PMC

ApacheCon@Home 2020 中文主题视频:https://www.bilibili.com/video/BV1oZ4y1V7Zi/

各位好,我是琚致远,来自「支流科技」,是高性能开源网关项目 Apache APISIX PMC 成员。支流科技是一家开源基础软件创业公司,这里开源软件便是指 Apache APISIX。

本次会议,我会与各位分享自己从一名 Web 工程师到持续参与开源项目的故事,通过叙述自己参与开源项目的收获与感想,以此鼓励更多人认识开源项目、敢于参与开源项目。

在介绍参与开源项目感想之前,我想先分享自己学习 Web 的经历。

2015 年高考结束后,由于对 Web 研发颇有兴趣,因此通过搜索引擎查询并学习与之相关的教程。过去 5 年,我的 Web 学习可分为三个阶段,首先是茫然、不知所措。我不知道为什么页面会被渲染?编写好的页面如何被别人看到?在入校后没多久,很幸运地接到了第一个项目:帮学校学生处开发一套内容管理系统。那时的我只会做一些基本页面罢了,如何动态渲染内容、如何制作自适应页面等新问题接踵而来,当时圈子太小、身边没人做这些事儿,我只能求助于搜索引擎!通过不断地查询、尝试,尽管踩坑无数,但最终完成了本项目,并且实践了所学内容,据说校内对该站点整体评价高。

在尝到「项目驱动、亲手实践」带来的甜处后,我便开始寻找新的项目,幸运的是,第一个项目给我带来了一定的知名度,大二、大三两年便在做各种类型的项目、极大地拓宽了自己的技术栈。这是我学习 Web 的第二个阶段。

第三个阶段是在大四,由于是自学 Web 技术,因此绕了许多弯路、对 Web 技术也没有成体系的学习,重复地做外包项目虽然可以带来暂时性的收入,但不利于个人技术成长。偶然的一次思考,让我意识到在开发过程中使用到的开源库代码质量高、协作流程规范,这正是我所需要学习的!因此毅然把大部分时间投入到学习开源项目代码、关注开源社区动态中。

那么在这两年参与开源项目的过程中,自己收获了什么呢?

首先是时间。参与开源项目是一件富有创造性与想象力的事情,它需要通过不断地思考、讨论后,才能做决定,因此这需要足够的时间。幸运的是,在我们支流科技,大家可以灵活地安排工作与生活。我选择在有灵感的时候高效工作,在需要休息或者其它事情时,可以没有负担地随时去做。

其次,参与开源项目扩充了我的朋友圈。每天但凡坐在电脑前,一定会去刷蛮久的 GitHub,去查看有什么好玩的项目?自己所关注的项目有什么动态?对于感兴趣的项目,我会查看其作者相关信息(博客、Twitter、GitHub 活跃项目),不断发现优秀的独立贡献者!于是自己通过贡献代码或者其它方式,与作者不断互动着便熟悉了。

此外,因为热爱开源,我会主动关注并活跃于开源社区。在大一那年了解到了一个非盈利性的、在线教授 Web 编程的平台 freeCodeCamp,帮助全世界人们免费学习编程为使命,自己也积极的成为其中一名贡献者、协助维护平台建设。因为 freeCodeCamp 在国内有多个城市社群,我通过参与线下活动也结实了许许多多志趣相同的小伙伴们!

令我惊喜的是,随着自己的“朋友圈”逐渐扩大,以及在线下会议练出的不恐惧社交的性格,自己也以志愿者的身份加入到了「津津乐道播客」团队!大学时自己便是「津津乐道」的听众,它是由各领域大牛联手制作的高质量、中文播客,目前月活听友超过百万。在加入团队后,与多位早已耳闻的达人拉近了距离!

另一件我所收获到的,便是技能

在参与开源项目的过程中,我会着重注意项目结构、代码规范,以及 Issue 或 PR 在聊什么、做什么、怎么做。以 Code Review 为例,我会关心这段逻辑在做什么?贡献者为什么要这么做?如果是我,我该怎么做?对于不清楚的地方,我将追加自己的评论,作者也会在某个时间回复自己的问题。有时自己想错了,通过作者的解答,使自己逻辑能力更加严谨;有时作者做法不妥,他便可能接受我的提案,并告诉你:Good catch!Thanks!!自己便是在这种你一句、我一句的讨论中,提升了专业技能。

那么对于没有参与过开源项目但又感兴趣的小伙伴而言,该如何参与进来呢?

通过贡献代码便是一种常见的、参与开源项目的方式。在自己研发过程中会用到许多开源项目库,不时会遇到实际效果与文档描述不一致的情况,若确定是 BUG,那除了通过等待别人修正之外,自己也可以尝试定位问题、解决问题并提交 PR。

但参与开源项目又不止是贡献代码,以 Apache APISIX 为例。Apache APISIX 作为高性能开源网关项目,功能丰富,又由于不断新增的贡献者推动着项目快速迭代,这就造成了有时文档与代码不同步的情况,此时我们便可以尝试提交 Issue、确定问题,最后提交 PR 以修正问题,这便是一次开源项目贡献。除此之外,文档错别字、语句描述不通顺、多语言(国际化)需求等问题,各位都可以尝试参与进来,活跃的贡献者们将推动项目更好地发展。

以上便是我本次的分享,通过叙述自己参与开源项目的经历与收获,希望能给还在观望开源项目的伙伴们带来启发,并鼓励更多人加入到开源项目中!

接下来是 Q&A 环节,各位是否有想要提问的?