介绍一下我自己

目前就职于eBay中国,专注于微服务中间件,分布式架构等领域,同时也是狂热的开源爱好者。

如何成为一个commiter

过去几个月,我一直持续在为 Apache DolphinScheduler 项目贡献,也在最近收到了社区 PMC 的邀请,成为了 DolphinScheduler Committer, 这意味着过去一段时间我的贡献在社区中得到了大家的认可。一路走来,听过不少的分享,也获得过不少的帮助,本文结合我自己的体会和一些其他大神的总结,希望能够帮助更多人更好的参与到开源社区。

开始参与开源

万事开头难,但对于参与开源贡献来说,其实并没有那么难,需要的只是一次勇敢的尝试。

翻了翻我在 DolphinScheduler 的提交记录,我的第一个 pr 是删除一份无用注释,多么简单的一个任务,很多人可能根本不屑于做。但确实因为这个 pr,帮助我进入了开源的世界。很多社区中赫赫有名的人在分享他们刚开始参加开源贡献的时候,都是从一些很简单的事情着手,例如增加一个单元测试、参加一个 issue 的讨论或者参与一次版本 Release 投票。这些事情很简单,不会耗费我们很多的时间,但是却可以快速的帮助我们去熟悉一个社区的运作方式,也可以尽快的让社区中的人注意到你。

提升贡献值

Apache 社区非常重视一个人的贡献值, 一个人在社区中的贡献值越高,那么他在社区中就应该拥有越高的声望。

贡献可以是提交代码、修改文档或者参加公开的分享等多种方式,只要是遵循社区的准则,为社区的发展有帮助的行为都可以算作贡献。虽然贡献不分高低,但是参与一些重要 feature 的开发和困难BUG的修复往往能更快的增加你的贡献值,也更容易在社区中获得大家的认可。

因此,当我们进入社区一段时间之后,可能对一些普通的问题已经轻车熟路了,那么这个时候不妨多花时间在一些更深层次的问题上,这样不仅对提升自己的能力更有帮助,也能更好的帮助社区往前发展。

Communication over code

Apache 社区有一个非常著名的准则 "Community over code",意思是社区大于代码,Apache 社区认为维护一个健康可持续的社区比公开一份功能强大的代码更重要,这也是一直以来非常吸引我的地方。

在我刚加入开源贡献者的队伍中时,和很多人一样,觉得代码就是一切,一个项目的好坏由代码直接决定。但是随着越来越深入地参与,我慢慢发现,对于一个大型的多人异步协作的项目,有效沟通远比写代码重要得多。当我们有一个好的想法时,我们首先应该做的不是立刻开始实现这个想法,而是需要通过与社区进行沟通,征求社区的意见:一来、可以看看社区中是否有其他同学对此感兴趣,可以寻求其他小伙伴共同完成任务。二来、借助社区的力量来帮助 Review 我们的想法,还能及时的进行查漏补缺,避免出现写了一大堆的代码,最后发现自己在一开始就错了。在与社区进行确认之后再开始开发代码或书写文档,能够起到事半功倍的效果。

同时,参与日常的沟通讨论也是提升自己活跃度最简单的方式,在初入社区的时候,我们往往由于不自信,不愿意去参与邮件列表中的讨论,认为开源社区高手如云,自己如果说错了会全世界丢人。实际上,如果总是害怕犯错误,很难能够得到进步。当我们对于当前讨论的话题有自己的想法的时候,一定要勇敢的说出来,只要是经过思考得出的想法,最后都会得到社区的尊重和重视。

非常推荐大家参与项目的 Release 投票讨论,因为在这一过程中,你能最方便的知道当前版本的一些改动,同时,这也不会耗费你很多的时间。

如何成为 Committer

虽然 Apache 社区对于 Committer 没有要求必须要做出很大的贡献,但是要想成为 Committer,需要有看得见的贡献值和在社区中保持一定的活跃度,贡献值和活跃度都需要时间的积累,需要长期的投入。大部分同学应该都和我一样,白天在公司里需要完成工作上的事情,只有下班之后才能参与开源项目,因此保持热情和平常心尤为重要。

很多小伙伴往往由于一时兴起,或者在别处听说了某个项目,于是决定参与进来,而经过一段时间的浏览之后,最初的热情慢慢褪去,渐渐的自己也从社区中离开,没有达到最初的目的。我的建议是,从自己的兴趣出发,找到项目中自己感兴趣的模块,多思考项目中当前的设计是否存在问题,有没有更好的实现方式,保持好奇心可以很好的维持兴趣。

在开源贡献的过程中,免不了会收到反对的声音,保持平常心去看待问题。当我们精心设计了一个方案,最后收到别人的质疑的时候,不要因此而止步不前。一方面这其实是一件好事,说明我们的想法被更多的人知道了,另一方面我们需要先从自身出发,问问自己的方案是不是确实有问题,积极的与对方进行讨论,努力说服对方,这其实也是锻炼自己的好机会。

成为 Committer 并不是一件遥不可及的事情,只要坚持持续地为项目贡献,得到大家的认可,终将会有收获。

写在最后

在参与开源的过程当中,我也获得过很多人的帮助,在这里要特别感谢 CalvinKirs、dailidong 还有社区中的其他小伙伴,你们对开源的热爱和投入都深深的影响了我,没有你们的帮助,我无法进入到开源的世界。我也会继续坚持投入到开源社区中,贡献自己的一份力。

来看看这位年轻的 eBay 小伙是如何成为 Committer的更多相关文章

  1. 一位年轻而优秀的.NET开发者的成长点滴

    一,社区的小圈子 今年3月的一次技术交流活动上,那是我们.NET技术社区第一次组织线下活动,由于没什么经验,所以活动组织得比较仓促,内容也比较一般,效果还是有点欠缺.当然,活动本身是必要的,这次活动上 ...

  2. QQ中未读气泡拖拽消失的实现(参照一位年轻牛B的博主的思路自己实现了一下)

    原文链接:http://kittenyang.com/drawablebubble/,博主年轻却很有思想.相仿的年纪,很佩服他! 首先分析拖拽时的图,大圆.不规则的图(实际上时有规律的不然也画不出来, ...

  3. Spring WebFlux开门迎客,却来了一位特殊客人

    话说Spring WebFlux已经出现有一段时间了,但是知道他的人并不是很多.这让他很是闷闷不乐. 还有更惨的是,那些敢于吃螃蟹的人在尝试了他之后,有的竟把代码重新改回到Spring MVC的同步模 ...

  4. eBay起诉指控亚马逊利用非法手段挖走其卖家

    [摘要]eBay在诉状中称,亚马逊的代表滥用eBay的内部电子邮件系统联系卖家,这违反了市场政策. 腾讯科技讯 10月18日消息,据外媒报道,拍卖网站eBay对亚马逊提起诉讼,指控这家美国零售巨头利用 ...

  5. BAT线下战争:巨额投资或培养出自己最大对手(包括美团、58、饿了么在内的公司都在计划推出自己的支付工具和金融产品,腾讯只做2不做O)

    BAT线下战争:巨额投资或培养出自己最大对手 2015年10月12日09:49   <财经>杂志    我有话说(18人参与) 收藏本文        BAT大举投资线下公司,看似咄咄逼人 ...

  6. DNS原理及劫持问题

    对于互联网,人们总是高谈阔论,却很少有人愿意去了解电脑.手机.电视这些设备到底是如何被“连接”起来的.本文通过“我”,一个普通的网络请求的视角,给大家介绍下“我”的工作流程是如何的. 人们动动手指,点 ...

  7. 轻松了解DNS劫持

    对于互联网,人们总是高谈阔论,却很少有人愿意去了解电脑.手机.电视这些设备到底是如何被"连接"起来的.本文通过"我",一个普通的网络请求的视角,给大家介绍下&q ...

  8. 【Win10 应用开发】实现数据的增量加载

    今天,老周有小故事讲,国庆期间.有一次老周在某站台上候公交车.老周旁边也站满了人,突然,有一位头发弄得像电线杆的小伙子,不知为何,没有先兆地就大笑起来. 老周先是看了那小伙子一眼,他手上没有拿什么东西 ...

  9. HTTP协议 -- 认清协议常用状态码

    HTTP协议作为web服务的基础,理所应当受到重视,但是周围的同事能够讲清楚HTTP协议的凤毛麟角.既然是基础,就应该早一点掌握,所以近半年(2016-2月——2016年6月),不准备学习新技术了.首 ...

随机推荐

  1. while和for循环的补充与数据类型的内置方法(int, float, str)

    目录 while与for循环的补充 while + else 死循环 while的嵌套 for补充 range函数 break与continue与else for循环的嵌套 数据类型的内置方法 int ...

  2. CMU 15-445 数据库课程第四课文字版 - 存储2

    熟肉视频地址: CMU数据库管理系统课程[熟肉]4.数据库存储结构2(上) CMU数据库管理系统课程[熟肉]4.数据库存储结构2(下) 1. 面向日志的存储 上节课我们讲完了面向元组的存储,这节课从面 ...

  3. [第18届 科大讯飞杯 J] 能到达吗

    能到达吗 题目链接:牛客5278 J 能到达吗 Description 给定一个 \(n\times m\) 的地图,地图的左上角为 \((1, 1)\) ,右下角为 \((n,m)\). 地图上有 ...

  4. 附001.Python多版本环境管理

    一 环境背景 由于Python的版本过多,且不同版本之间差异性较大.同时又因系统底层需要调用当前版本Python,所以不能随意变更当前系统Python版本.因此,在多版本共存的情况下,Python多环 ...

  5. 2021.05.04【NOIP提高B组】模拟 总结

    T1 题目大意, \(S_{i,j}=\sum_{k=i}^j a_k\) ,求 \(ans=\min\{ S_{i,j}\mod P|S_{i,j}\mod P\ge K \}\) 其中 \(i\l ...

  6. Acwing 428

    可以找到规律,将第 N 项的 N 对应的二进制表示,转换为以 k 为基底的数即可. N=1=1 ----> 1 ----> \(a^b\) N=2=2 ----> 10 ----&g ...

  7. JS:函数

    Function:函数 1. 定义一个函数:function functionname(argument) { 代码块 return }: 调用此函数:fn() 2.函数是定义了一种方法,只有被调用才 ...

  8. SAP LUW 实现提交数据库更新

    CALL FUNCTION 'TRANSACTION_BEGIN' IMPORTING transaction_id = lv_transaction_id. * 更新日志表 MODIFY zfit0 ...

  9. UiPath录制器的介绍和使用

    一.录制器(Recording)的介绍 录制器是UiPath Studio的重要组成部分,可以帮助您在自动化业务流程时节省大量时间.此功能使您可以轻松地在屏幕上捕获用户的动作并将其转换为序列. 二.录 ...

  10. [零基础学IoT Pwn] 环境搭建

    [零基础学IoT Pwn] 环境搭建 0x00 前言 这里指的零基础其实是我们在实战中遇到一些基础问题,再相应的去补充学习理论知识,这样起码不会枯燥. 本系列主要是利用网上已知的IoT设备(路由器)漏 ...