本期专访来自开源之夏的老朋友,Apache Dubbo Committer、GSoC新晋项目导师——牛学蔚
自我介绍
我的开源历程:开源是“用爱发电”?
Hi 大家好,我叫牛学蔚,北邮计算机学院研究生在读,本人对云原生领域有浓厚的兴趣,在平时工作学习中也非常关注开源社区。
说起来,其实我从很早之前就开始关注开源社区了,在本科期间也尝试将自己的代码开源,在 GitHub 上开源了一个 Docker 镜像的仓库收获了 200 多个 stars,当时的项目都是随手开源,所以大部分项目到最后都不了了之,在我内心中一直希望能够在一个比较知名的项目中贡献代码。时间就来到了 2021 年的夏天,我意外发现了开源之夏这个项目,从那之后就真正地开始加入开源社区贡献代码。
我最喜欢的或者说很关注的开源项目有两个,一个是 Dubbo-go 社区,算是我参与开源社区的启蒙社区,参与的时间最长,同时我也很荣幸被社区推荐到 Apache 基金会,成为了 Apache Dubbo Committer,到现在也经常去 review 下 PR。第二个项目是 Kata Containers,是一个非常优秀的安全容器实现方案,感兴趣的主要原因是这将是我后期实习的内容和方向。
很多人认为开源就是“用爱发电”,我认为也是也不是。参与开源基本上是没有直接的收益的,从这个方面来说开源就是用爱发电,但是从更长远的角度看,开源可以收获更宽阔的视野,认识到志同道合的伙伴,甚至可以在简历上列出参与的开源项目,这些都是无形的回报,特别是伙伴我觉得是最重要的,我开始关注 Kata Containers 并入职蚂蚁,都少不了我们社区老大雨哥的帮助,总之我觉得如果是学生,如果有大把时间,如果对技术有追求的话,参与开源是不会让你失望的。
我与开源之夏
收获满满,代码质量,时间管理,新晋GSoC导师
我了解开源之夏是因为在逛 v2ex 论坛的时候偶然看到了一个参与开源之夏项目的推广帖,出于好奇我就点开了开源之夏2021的主页,发现了这里面有不少知名开源项目,我本身对 Golang 以及微服务和云原生这些技术比较感兴趣,对比之后选择了 【Dubbo-go 社区 多注册中心支持的应用级服务发现】项目。
【Dubbo-go 社区 多注册中心支持的应用级服务发现】在 Dubbo-go 3.0 版本中应用级服务发现功能是一个 breaking feature。结项后我也一直在参与泛化调用、triple 协议等多方面工作,现在主要负责柔性服务相关任务。
开源之夏带来的收获我觉得非常多,最主要的就是在社区中认识到了很多前辈和小伙伴,比如我们社区老大雨哥,在过去这一年中给予过我非常多帮助,其次就是在面试的时候游刃有余,可以和面试官聊很久我参与过的开源项目的细节,总之我觉得收获满满。
在提高代码质量方面,一个是靠自己的对代码风格的要求,还有一个就是多看多写,每个语言都有自己的规范和特点,多看看这个语言中最有名的开源项目,特别是开源项目由于没有那么急的 ddl 限制,所以可以花更多时间打磨代码。
在时间管理方面,我认为只要稍微规划一下就能有不错的效率,每周开始之前确定好 To Do List,完全的覆盖这些工作还是非常累的,以至于会变得不可持续,所以对于计划也要弹性一点,精力充沛的时候多弹一些,精力不足的时候少弹一些,慢慢积累,时间会说话。
今年成为了GSoC的导师,这种感觉还是挺奇妙的,特别是参与的同学还是我的北邮学弟。从这段时间来说我的学弟本身能力非常强,基本上自己很快就能入门复杂的 Dubbo-go 代码,在写新功能的时候也很有自己的主张和看法,代码味道也非常好。但是我们的题目是探索性质的,很难从已有的方案中找到答案,面对这种不确定性的时候,我觉得我们的关系是平等的、合作的,需要共同讨论去合作完成,从交流中我们也在互相学习和促进。总之是一次非常新奇且愉快的体验。
我与Dubbo-go
开源社区的魅力,成为 Committer
Dubbo-go 是阿里开源项目中最活跃的开源社区之一,多年的发展使社区积累了众多热爱开源的活跃贡献者、 Apache Committer/PMC 成员。开发者可以使用 Dubbo-go 框架高效地编写 RPC 服务,并支持与 Dubbo、gRPC 服务跨语言互通;可以使用 Dubbo 生态强大的服务治理能力和运维能力,例如服务注册发现、负载均衡、配置中心、可视化等功能;也可以使用 Dubbo-go 生态的 pixiu 网关将服务暴露给集群外部访问。
开源之夏是我完整地参与开源社区的开端。在参与之前我认为开源社区有点遥不可及,更多的可能还是觉得自己水平不够,而且没有一个平台能够和开源社区很好的衔接,事实上开源之夏这个平台就承担了那么一种角色,社区带着问题而来以及有相应的导师帮助入门,这对于新手来说是非常友好的。在有这些铺垫之后,我认为我与开源社区的距离不再是那么遥远,我也能逐渐变成参与者。在加入了一段时间之后,我也发现社区的包容性还是很强的,如果是想参与社区工作的话,我觉得大可不必犹豫 ,Just do it!
开源社区的魅力一是来源于社区同学们都很 nice,第二是我的工作能够在实际场景中落地,实实在在的落地到各个业务中去,阿里、小米、汽车之家等我们耳熟能详的企业都登记在 Dubbo-go 的用户登记列表中。我印象最深刻的是我完全重构了 Dubbo-go 的泛化调用,在这之前泛化调用没有办法支持 go/java 多语言调用,后来小米电商在一篇文章中介绍了他们是如何在实践中使用泛化调用构建微服务,突然意识到我的贡献能够支撑企业的业务(相关阅读:小米电商 Apache Dubbo-go 微服务实践),这种收获感是在开源社区之外很难感受到的。
继续投身社区的原因有两点吧,第一是在社区中我能学到很多东西,社区中不乏来自头部企业的同学,在相互的交流中收获满满,第二是社区也给我了很多荣誉,比如 Apache Committer 等,参与社区也是我本身的责任,慢慢的和社区一起进步。
我获得社区 Committer 的提名是在去年的 11 月,差不多是我加入社区半年左右的时间。参与社区我觉得第一点就是保持交流,开源社区卧虎藏龙,多和大佬们直接接触对于学生来说这种机会是比较难得的,第二就是代码要精雕细琢,提高代码质量,开源社区没有 KPI 要求,所以可以更多时间打磨,当然我们社区的 review 流程也比较严格,需要三个同学审核之后才能合并。
现阶段我已经逐渐开始面对新同学,带他们快速熟悉社区项目,逐渐从单纯的代码贡献者变成了社区贡献者,我要慢慢向带我入门的前辈们学习,让社区力量可持续地发展下去。
收获和寄语
开源社区与在校生,优势与助益
我认为在校生参与开源最主要的优势就是时间充裕且试错成本低,所以只要有兴趣随时都可以参与到开源中来。试错成本我是指的技术方向上的,现在的技术方法多如牛毛,比如云原生、机器学习、Linux 内核等等,参与开源的过程也是了解技术细节的过程,如果在参与过程中觉得自己不喜欢或者不适合这个赛道,切换起来的成本也更低。我接触中的同学可能面临相同的问题就是想的太多,觉得会不会自己太“菜”社区不会要我,最后就不了了之了,我的建议是别想太多先参与起来。其次就是社区其实也应该多抛出一些新手友好的问题,先让新同学走通提交 PR 的流程,在这个过程中逐步拉近社区与同学们的距离。
开源社区对于在校生的帮助我觉得非常多,在前面已经说了很多,总结下就是人脉上,能够认识很多头部大厂的大佬们,他们通常有更多的资源和更宽广的视野,第二就是参与开源的经历对于我们找工作和实习都大有裨益,最后是代码能力的提升。
关于开源对专业提升和就业帮助在之前已经说了很多,我还想补充一点就是能否接触核心代码。在企业实习的经验上来看,新入职的实习生总是从打杂开始的,这当然是出于商业产品利益的考量,实习生不熟悉业务的时候写的东西很有可能会造成直接的经济损失,需要长时间的建立信任之后才能慢慢接触项目核心,这个时间跨度需要三个月甚至更长。但是开源社区的包容性就会好很多,社区大佬们都会很认真和友善的帮你 review 代码,即使是新人也能相对容易的接触核心模块,这个我觉得也是很大的区别和不同。
希望参与开源之夏的学弟学妹能够有所收获有所成长,也真诚的祝福开源之夏项目会越办越好!