走进ASF系列 - 如何成为一个合格的ASF贡献者(Contributor)

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: # 阿里土话 ASF是一个开源组织,他有自身的文化,阿里是一个要活好102年的公司,其文化底蕴非凡!分享ASF之前总想或多或少的和大家分享一些阿里的味道! * 给世界带来微小而美好的改变 * 把幸运种子种到别人身上去,你才会有幸运 * Never, Never, Never Give Up(永不放弃) 没错,阿里人看到上面的三句话会倍感亲切,因为上面三句都是 “阿里土话”。虽然是

阿里土话

ASF是一个开源组织,他有自身的文化,阿里是一个要活好102年的公司,其文化底蕴非凡!分享ASF之前总想或多或少的和大家分享一些阿里的味道!

  • 给世界带来微小而美好的改变
  • 把幸运种子种到别人身上去,你才会有幸运
  • Never, Never, Never Give Up(永不放弃)

没错,阿里人看到上面的三句话会倍感亲切,因为上面三句都是 “阿里土话”。虽然是阿里土话,但我认为其有放诸四海而皆准的魅力!这些话,同样适用于激发和指导你成为合格的开源贡献者!不经意间看了一眼窗外,心里开心默笑,其实阿里每个角落都充满这阿里气息:

image.png

其实每个人参与社区贡献的机缘不一样,但无外乎两种:

  • 偶发事件 - 由于参与某项工作,无选择的就参与了某个开源项目。(我就是这种,很自然的就跟着 蒋晓伟 老师踏入了Apache Flink之旅)
  • 因爱而求 - 每个码农都有一颗想让自己的的代码被应用全球的梦想追求!这梦想的实现要依托有开源的力量,ASF完全可以为你营造最好的实现梦想的环境~

image.png

给个理由

也许目前的你既没有工作的需要,也没有产生对开源产生任何爱意❤️。但了解一件事情总没有坏处,了解参与开源的利好,也许明天你就踏上了开源之旅!

  • 顺势而为 - 如果你是一个码农,那么参与开源是一种must to have的事情,目前开源领域形式大好,各大公司纷纷拥抱开源,比如:Google,Alibaba,Hortonworks, Tencent, Facebook等等。参与开源无疑是扩大了生存的空间。
  • 业界身份证 - 参与开源就是在一点一滴的描绘你的业界身份证,你的开源贡献可以公示全球,由一行代码,一句文档的贡献,到成为某个项目的管理者(PMC成员),到成为 ASF Member 甚至 成为董事会成员,这些就像你曾经为之努力的学士学位,硕士学位,博士学位一样为世人所认可!不夸张的说,某些情况甚至比学位证书还实用!
  • 无国界导师 - 参与开源还有一个特别特别特别重大的利好,就是你可以在你所关注的领域寻找到最好的导师,所谓最好,不是牛,最好是最适合!所谓“三人行,必有我师”,社区交流最初你会感觉和业界大牛无法沟通,因为他的一句话,需要分解成十句才能懵懵懂,甚至不懂!这个不是大牛原因,也不是你的原因,是大牛对你水平的了解不足导致,但即大牛便了解你的水平,也很难让大牛将一句话分解成十句甚至百句话讨论你关注的问题,不是大牛不愿意,更多是我们不好意思:)。所以说,要“门当户对”找到 社区比你水平略高,同时你也能给人家一些反哺的贡献者长时间交流。目前ASF有7600+的Committer,就算是某一个项目,也应该有几十个Committer和数以百计的贡献者,总会遇到可以和你一起进步的小伙伴!虽不曾谋面,却已熟若亲朋!
  • 全球性分享 - 目前ASF项目有140多个领域,参与者覆盖230个国家。如果你小有成就,想将你的知识分享给更多的人,想利用的开源知识帮助更多的人,那么无疑ASF为你提供了这样的平台!你又何尝不能成为上面“无国界导师”中的一员的导师呢!
  • 最佳实践 - 不知 - 了解 - 有方案 - 最佳方案,开源是一个智慧的集结地,一个功能可能有几十种实现方式,这并不是一两个人或者某一个小团队能考虑到(ALL)的,然而在开源一个问题,你在考虑的同时,可能在世界的某个角落,某些角落还有其他人或团队在考虑解决方案,当大家共享方案的时候,智慧的火花将会产生!
  • 领导力塑造 - ASF有公司和项目的治理方式,不论你目前是否一个(技术)管理者,参与开源贡献你都有机会挖掘你自身的领导力。 TL,可以是 Team Lead,也可以是 Tech lead,作为一个码农,往往对 Tech lead 更加情有独钟!在开源贡献一向遵循 “正确的就是拥护的,正确的就是坚持的”!如果你一贯的在社区发出自己独到的见解(管理&技术),那么势必会塑造你独特的领导力,社区领导力是内心驱动的影响力,所以的拥护者都是无外界压力,无情感偏见,发自内心的崇拜赞许!如果你能达到这样的成就,将胜过你职业的晋升,当然这个也会促进你的职业晋升!
  • 给世界带来微小而美好的改变
    毋以善小而不为,小善举大美好!有的时候一个文档优化,甚至一个typo的贡献都会让成千上万的人获益。更有意思的是很多开源贡献者都是从文档贡献开始的 :)一个很有意思的统计,28%的开源贡献来自偶然的文档改进

Casual contributions are far from being trivial. After a manual inspection of a sample of casual contributions, we found that although 28.64% of them are related to grammar and typo fixes.

  • 认真生活,快乐工作 - 参与开源不仅仅是工作或业余爱好的演练台,也是生活的一部分,他会让你在快乐工作的同时寻找到“臭味相投”的挚友!通过参与Apache Flink项目我也交到了几位德国好朋友,甚至有些好朋友还成为了我的儿子的好朋友!:)看看下图有没有你和我共同的朋友?世界很小~?

show.jpg

给个原则

没有规矩,不成方圆,如果上面的理由足够打动你,那么我再给你一些参与开源的原则:

  • 给世界带来微小而美好的改变
    始终坚信滴水成河的道理,社区贡献在于积累,贵在坚持,不因善小而不为,任何贡献都会使得社区变得更加美好!
  • 公开沟通 - 参与开源的一个重要的原则就是公开沟通,任何问题不论大小,都要在可以被追溯,可以被任何感兴趣的人查阅的方式进行讨论。比如:邮件列表,JIRA上,PR中等。切记不要单独私信讨论,公开讨论有助于更多的人参与,而且还确保了在讨论过程中一些无意识的错误可以很容易被发现和纠正。
  • 保持尊重 - 社区的任何贡献都是以自愿为原则的,不能强迫任何人做事情,也不要无礼貌的敦促任何人做事情的进度(除非特殊情况)。更不能因为意见不通就进行人身攻击,不要以为这好笑,其实是真是发生过的!尊重是相互的,你给予我春风,我自送你一缕芳香!大家努力营造开心和谐的社区氛围。
  • 简明扼要 - 我们可以大胆的在社区提问,追问!但切记在提问之前将自己的问题反复思考,这是对自己负责也是对其他社区贡献者的尊重!因为你的一次问题描述可能将被数百人阅读。写一封简明扼要的邮件意味着人们可以尽可能有效地理解你的意图。如果需要详细说明,请考虑添加摘要。也就是,你的问题描述要简明扼要(这个很能力有关,尽自己最好就行),尽量写清楚上下文,你在什么情况下,遇到了怎样的问题,如何问题再现等等,你的描述越简明扼要,越清晰完整,越容易被人取得别人帮助!
  • 前进一小步,文明一大步 :)
    这可不是 WC 用语,而是确确实实的利他原则。阿里巴巴国际化战役中有一个要求,就是参与国际化建设的阿里人员,到哪个国家,就必须用当地的语言与当地客户沟通。这体现了足够的尊重,体现了足够的服务前的准备和付出!我们在开源社区问问题也是一样的,不能遇到问题,不加思索的就向社区提问,在提问之前要先进行各种尝试,各种资料的查阅,社区已有问题的查阅,同时带上自己的观点去提问,让想帮助你的社区人员看到你在设个问题上的努力。
  • 把幸运种子种到别人身上去,你才会有幸运
    我们不仅仅是问题的提出者,慢慢我们自己也变成问题的解决这,由社区求助者变成社区救助员!努力寻求自己反哺开源社区的机会,为他人付出也是为自己积累!所谓 “为自己,照亮他人!”。加入你相信来世今生的话,这里有个故事分享给给你:

从前有两个要投胎转世的人,在投胎之前有机会选择投胎之后是做“一生向别人索取的人”还是做“一生施惠于他人的人”,选择了“一生向别人索取的人”的那个,投胎做了 乞丐,而选择了“一生施惠于他人的人”的那个做了富翁!

所以做社区也一样,努力做施惠于别人的人,就是在社区德高望重,具有领导力的人!:)

  • Never, Never, Never Give Up(永不放弃)
    理想总是美好的,现实总是骨感的,参与社区的人都具备热情,耐心的品质,但社区的问题太多,需要得到帮助的人也太多,相同问题千人千面,意见不一致也是司空见惯的,切记不要意以为提的问题都会很快有人帮忙,你提交的PR很快有人Review。每个的社区贡献都需要如下图所示的投票决定,也许你的贡献被接受,也许你的贡献被拒绝,但请不要太在意一次的贡献成功与否,无轮遇到什么困难,挫折,都要 Never, Never, Never Give Up(永不放弃),因为马总说过 “今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上,看不到后天的太阳”。 只有坚持到最后的人,才能享受到和煦的阳光!

如何开始

最常见的参与Apache贡献的方式是选择一个你感兴趣的项目,因为爱好才是最好的原动力!我曾经用一句话描述过ASF:“ASF是一个与阿里巴巴同龄(成立于1999年),有完整的组织(董事会)架构管理,以软件(140个领域)技术全球(覆盖230个国家)共享为使命的公益组织",里面提及 ASF有140个技术领域总有一个你感兴趣的!

image.png
image.png
image.png

ASF 项目目前分为两大类:

  • 孵化器项目 - 是正在孵化的项目,也就是,在成为ASF 顶级项目之前,需要在ASF进行孵化,当从孵化器毕业之后就会成为Apache顶级项目。参与孵化器项目的好处是你能对项目有更早的参与,有多细节变化的了解,也很容易得到该项目的重视:),目前ASF所有孵化器项目列表请这里查阅
  • Apache 顶级项目 - 这是已经从孵化器毕业的Apache 顶级项目,顶级项目的运作一般已经完全符合Apache Way。直接参与顶级项目的好处是能开始就接触很规范的社区贡献方式和更高的质量代码,有更多的学习资料和更多的参与者。目前Apache 顶级项目列表,可以查阅这里

一旦选择参与某个项目,不论在什么情况下,你都要听从自己的直觉,做你认为更好或者不同的事情。永远都不忘初心,坚持自己所坚持的~~,也永远牢记上面的原则,其中你会发现“给世界带来微小而美好的改变”非常受用。假如,你在查看文档时候,发现了某个链接的错误或者typo错误。假如,你在使用产品的过程中发现了问题,请不要坐视不理,径直绕开,或者向社区提出问题,等待其他人来修复,因为这正是你贡献社区的好机会,解决这些你能看到的问题,因为,在解决这个问题的同时,也许会有新的问题被你发现~~ 进而你就入道啦:)

准备工作

目前ASF开源项目都是在github上面托管的。所以正式参与ASF开源贡献之前你要做一些准备工作:

创建一个github账号

点击创建,为了演示,我创建了一个“pyflink”账号 :)

Fork 你要参与的项目

Apache Flink为例,如下:
image.png

点击 “Fork” 之后,会在你的github账号下出现一个flink项目,如下:
image.png

Clone 代码到本地

做代码贡献之前需要Clone你刚才fork的Flink代码到你本地,以备提交第一个社区贡献PR!
image.png
image.png`

阅读项目贡献说明

一般具体项目会有介绍如何参与该项目的贡献,以Apache Flink为例 就有关于如果参与Flink社区贡献的说明, 比如:

Apache Flink is developed by an open and friendly community. Everybody is cordially welcome to join the community and contribute to Apache Flink. There are several ways to interact with the community and to contribute to Flink including asking questions, filing bug reports, proposing new features, joining discussions on the mailing lists, contributing code or documentation, improving the website, or testing release candidates.

详情查阅这里

订阅邮件列表

社区问题大多会在具体项目的社区邮件列表里面进行讨论,所以邮件列表是了解社区动态最重要的收入,以Apache Flink 为例,最要要订阅 开发邮件列表和用户邮件列表,如下:

首先,点击上面的link,会引导你给 xxx-subscribe@flink.apache.org 发送邮件。然后你会收到官方确认邮件。最后你回复确认邮件之后还会收到一封欢迎邮件,也就意味这你订阅成功了!注意上面每个邮件列表都需要单独发起订阅。
OK, 到这一步你已经完成了为Apache Flink做贡献的准备工作了:),接下来就要寻找做贡献的机会了!

创建issue或者解决issue

目前大多数ASF项目的问题采用JIRA管理(当然也有例外),我们以Apache Flink为例,当用户发现的问题可以在这里查阅。 如果你发现有你感兴趣的issue,不要由于,直接在JIRA下放留言,你想帮忙解决这个问题,并share你解决问题的方法,这样社区会有Committer来与你沟通了!以一个早起我向Flink提及贡献的issue为例 FLINK-13471
image.png

当发现有人创建了issue,但还没有分配给任何人,你就可以尝试帮助解决这个问题,在完成开发后提交PR。

当然,如果你发现了问题,如果是你确认的小问题,可以直接创建新的issue, 如果你对这个问题并不确定,可以在开发邮件列表里面就像邮件讨论。当确认问题之后,再创建issue.

提交PR

不论你是修复文档还是贡献代码,都建议在你刚才fork的项目中创建一个用于提交PR的分之,以我上面的为例,我会本地创建一个名为LINK-13473-PR的分支,当完成开发之后,将分支push到自己的仓库,就可以创建PR了,如下:
image.png

点击“Compare & pull request”,进行PR创建,如下:

image.png

创建PR,有几个值得注意的点:

  • 确保你的分支和官方git的master分支没有冲突,也就是如图显示“ Able to merge.”。
  • 要对PR所要解决的问题,在Title里面简明的体现出来,比如“ FLINK-13471 Add FlatAggregate support to stream Table API(blink planner) ” 明确了 JIRA号FLINK-13471, 模块table 和PR的内容是Add FlatAggregate support to stream Table API(blink planner)
  • 同时在详情里面要清楚的描述你改动的点,不同项目有不同的要求,但总体上保持上面提到的 前进一小步,文明一大步的原则,你些的也清楚,Review的人越容易理解你的改动,你的PR约容易被得到有效的反馈。

最后,点击“create pull request”完成PR的创建!不过,这还没有完成社区贡献,还需要等待社区其他贡献者的Review。

正常情况下,除非是typo的贡献,一般有代码逻辑的PR都会或多或少的得到reviewer的改进反馈,这时候就是学习交流的好机会啦:) 你可以尽可能的发表你的看法,解释你的设计,当然也要充分理解反馈的内容,最后根据沟通达成的内容进行PR的更新!

最后。。。最后。。。最后 达到了社区代码质量的要求,Committer会帮助你进行代码的Merge,这样你就完成了社区第一份贡献喽!!

开始1-100之旅

常识性观念是0-1很难,因为那是创新,那是新领域的探索,那是酝酿了很久之后的第一步!但是参与ASF开源贡献,恰恰是0-1很容易,1-100才是一个持久战。需要上面提到的 “Never, Never, Never Give Up(永不放弃)”, 因为我真的看到了很多社区贡献者在一个社区贡献了一段时间之后,如果没有拿到自己想要的结果,比如成为Committer,就会永远的在这个项目贡献里面消失了,Give Up 了!这不是危言耸听,这是真是的现实!所以在ASF开源贡献的道理上,的确有很多人被 马老师的话所命中:“今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上,看不到后天的太阳”。所以,你...准备好了吗?:)

但行善事,莫问前程

不论做人,做事还是社区贡献,很多道理都是想通的,在下面的ASF金字塔中,我们从 贡献者 到 董事会成员的路是漫长的,如果你天天想着什么时候成Committer,什么时候成为PMC成员,什么时候成为ASF Member,什么时候能够当选董事会成员,我确信,在ASF开源贡献中,你将无法做到 “快乐工作,认真生活”!过急的目标驱动会增加你的烦恼,相反,登山而不思山顶 攀登,将会迎来一路的惊喜!所以在参与开源的开始,我最后的建议就是:“但行善事,莫问前程”!加油⛽️

image.png

阿里土话为你打气

我相信在ASF开源贡献之旅,你会有很多次要放弃的念头,你会遇到很多怀疑自己的时刻,你会时不时的怀疑社区管理者是否有问题?总之,如果你想把他当作一生的乐趣,在你没有找到乐趣之前,你一定需要下面的在文章开头已经提及的三句话:

  • 给世界带来微小而美好的改变
  • 把幸运种子种到别人身上去,你才会有幸运
  • Never, Never, Never Give Up(永不放弃)

你参与社区的目的是为了尽自己微薄之力,来让ASF开源社区更美好!
你参与社区的信念是为其他人播撒幸福幸运的种子,你并没有在乎得到什么汇报,你相信“因果”!
你参与社区的坚守是永不放弃,因为只要我在前行,必将抵达彼岸!永不放弃要深刻你脑海!

我很喜欢上面这三句阿里土话,我们共勉把!

诚挚邀请

我目前在负责Apache Flink的PyFlink建设,诚挚邀请想参与ASF社区贡献的你,以PyFlink作为你的开源之旅的首站!期待在Apache Flink社区PyFlink的建设中,遇见你~~

image.png

小结

本篇为大家介绍了参与开源的利好,原则,以及介绍为自己的第一个社区贡献需要做怎样的准备。最后诚挚邀请想参与开源建设的朋友首站加入Apache Flink 的PyFlink建设!

查阅更多内容

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
SQL 分布式计算 数据可视化
滴滴出行大数据数仓实战
滴滴出行大数据数仓实战
422 0
滴滴出行大数据数仓实战
|
3月前
|
存储 API 内存技术
GD32通过SPI和QSPI模式读取GD的NOR Flash
GD32通过SPI和QSPI模式读取GD的NOR Flash
577 2
|
8月前
|
存储 负载均衡 NoSQL
搭建高可用及负载均衡的Redis
通过本文介绍的高可用及负载均衡Redis架构,可以有效提升Redis服务的可靠性和性能。主从复制、哨兵模式、Redis集群以及负载均衡技术的结合,使得Redis系统在应对高并发和数据一致性方面表现出色。这些配置和技术不仅适用于小型应用,也能够支持大规模企业级应用的需求。希望本文能够为您的Redis部署提供实用指导和参考。
666 9
|
监控 NoSQL JavaScript
《Redis服务监控神器:用RedisLive轻松掌控实时数据》
【8月更文挑战第13天】确保Redis稳定运行可通过监控工具RedisLive实现,它实时监控服务状态以便及时处理问题。RedisLive是款开源工具,具备易用、实时与可视化特性,透过Web界面展示内存使用及命令统计等关键指标。使用前需确认已安装Redis、Node.js环境,并配置MongoDB用于数据持久化。安装步骤包括克隆项目、安装依赖、配置连接信息,最后启动应用并通过浏览器访问监控页面。
453 0
|
数据采集 测试技术 网络安全
阿萨聊测试 ZAP3:如何测试HTTPS的Web网站?
阿萨聊测试 ZAP3:如何测试HTTPS的Web网站?
339 0
阿萨聊测试 ZAP3:如何测试HTTPS的Web网站?
|
机器学习/深度学习 数据采集 人工智能
【热门话题】AI作画算法原理解析
本文解析了AI作画算法的原理,介绍了基于机器学习和深度学习的CNNs及GANs在艺术创作中的应用。从数据预处理到模型训练、优化,再到风格迁移、图像合成等实际应用,阐述了AI如何生成艺术作品。同时,文章指出未来发展中面临的版权、伦理等问题,强调理解这些算法对于探索艺术新境地的重要性。
398 3
|
存储 Oracle 网络协议
实战篇:使用 StarWind 配置 ISCSI 共享存储
实战篇:使用 StarWind 配置 ISCSI 共享存储
实战篇:使用 StarWind 配置 ISCSI 共享存储
|
安全 Unix Linux
15.3.2 【Linux】系统的配置文件:/etc/crontab,/etc/cron.d/*
15.3.2 【Linux】系统的配置文件:/etc/crontab,/etc/cron.d/*
318 0
|
SQL JSON 关系型数据库
【万字长文】Flink cdc源码精讲(推荐收藏)(一)
【万字长文】Flink cdc源码精讲(推荐收藏)
2687 0
【万字长文】Flink cdc源码精讲(推荐收藏)(一)
|
定位技术 API 容器
百度地图覆盖物加载svg图片的实战案例分析
百度地图覆盖物加载svg图片的实战案例分析
745 0