坚持贡献10年,他在开源领域做到了国际顶尖

从技术小白成长为有着Apache member、Apache spark PMC、Apache Livy PPMC等头衔的国际顶级开源大牛,邵赛赛用了十年。

在回答是什么让这位鹅厂技术大牛十年如一日贡献开源的时候,他的回答是“爱和坚持”。

刚接触Apache开源社区时,邵赛赛时常看着邮件列表陷入迷茫,这种上世纪90年代流行的互联网沟通方式,在20年后已经让新生代的程序员们有些看不懂了。如何订阅、回复还有邮件要发给谁,都是他感到疑惑的问题。

更加令他疑惑的还有各种英文缩写,虽然认识每个英文字母,但组合在一起却像是天书,过了好一段时间他才搞明白,原来“LGTM”是“looks good to me”,而“PTAL”是指“please take a look”。

多年后,当他看到“YYDS”,别人告诉他这是“永远的神”时,熟悉的感觉立刻就回来了。

持之以恒,“鱼”就会到来

2010年毕业的邵赛赛,多少有一些“生不逢时”,大学他学的是模式识别与智能系统, 这个看似前沿的专业在当时看来还是太超前了,市场上相关的公司太少。

于是只好去做后台开发。由于工作中涉及了大量数据分析,此时大数据技术方兴未艾,英特尔在国内开始投入大数据相关的研发,他便去了英特尔,后来又去了“Hadoop三驾马车”之一的Hortonworks,一直做大数据开发。再后来因为腾讯大数据的体量和业务场景,加入了腾讯。

坚持贡献10年,他在开源领域做到了国际顶尖

也因此,他开始了与开源的不解之缘。

说是不解之缘,因为大数据和开源就像是一枚硬币的两面,无论是早期的Hadoop还是之后的Spark等大数据基础软件,体量都庞大到一家公司难以支撑其演进,需要全球化的组织来共同推动。

“任何一家公司单独去做这个东西,它的生命力都是有限的,但开源会让更多的人不断投入进去,它的生命力就是无限的,要做大数据,就要投身到开源的领域去。”邵赛赛说。

在Hortonworks,所有的软件或代码都是开源的,工程师的工作也都在开源的项目里进行,公司主要的盈利模式是为开源软件提供解决方案。大数据行业里,绝大多数的底层组件都源自开源社区,也因此,大数据工程师们的工作离不开开源,“不管是去开源社区提patch,还是了解开源社区的进展,参与开源社区的讨论,都是工作不可分割的一个部分。”

通过参与开源项目,参与者也能获得对应的头衔,比如参与Apache社区的大数据项目,贡献代码、文档和问题可以成为contributor(贡献者),这是开源项目基本的参与角色。

第二阶段是committer(提交者),committer能够将contributor贡献的代码或文档提交到代码的分支里去,并且日常review代码,帮助将patch尽快“核”进去,维护项目更好地发展。

第三阶段就是PMC member——项目管理委员会成员,PMC member所要做的事情,首先是决策项目未来的发展;其次是在contributor中遴选出优秀的个体,然后将他们推选为committer。总之,通过决策开源项目的每一个点来推动项目发展,这个就是PMC成员。

在PMC member之上,还有PMC chair(项目管理委员会主席),通常是项目的发起者或是领军人物。

而邵赛赛目前的头衔——Apache member、Apache Spark PMC和Apache Livy PPMC,在知名的Spark社区,他贡献了197个patch,排名33位,在Livy社区贡献了102个patch,排名全球第1位,这些足以体现他在开源社区的影响力。这些的头衔来之不易,尤其在比较知名或行业影响力较大的社区,要得到大家的认可,成为committer或者PMC,需要经历长时间的考验。

坚持贡献10年,他在开源领域做到了国际顶尖

正如文章开头所说,一开始进入社区,邵赛赛连英文缩写都看不懂,更遑论了解开源社区的规矩和做贡献了,这也是许多中国人面对开源的第一道坎儿。邵赛赛用《老人与海》中长时间没有渔获的老人做比喻,许多人接触开源时,会有这样一段艰苦的时期,就像一个人去爬山,然后迷失了方向。

“你找不到更好的可以贡献的东西了,也不知道做什么好,有的人可能就放弃了,但经历一段时间的摸索和寻找,你会逐渐发现有一些潜在的可以投入的点,可以做出贡献,这两种状态会周期性的交替出现。”在邵赛赛看来,成为Apache member,最重要的并不是技术要有多牛,而是热爱这个社区,愿意在社区上做更多的贡献,帮助社区的项目更好的发展。

持之以恒,“鱼”就会到来。

“慢工出细活”

国内软件公司由于起步较晚和注重实际业务,普遍追求遇到问题就解决问题、快速迭代的方式,但开源社区却更讲究“慢工出细活”。

比如一名contributor发现了一个问题,他首先要分析这个问题到底是什么,分析出原因后,要去说服社区的大佬,因为自己分析出来的原因可能并不是深层次的原因,要继续分析。真正的原因分析出来后,还要做出解决方案,而且不是短平快的解决方案,是相对长期的解决方案。

这个时候开始,要写设计文档,列出几套解决方案,讨论出一套最合适的,然后开始写代码,每一行代码的风格也都要符合社区的标准。写完代码提交后,会有比较完善的单元测试或集成测试,社区会反复review好几轮,包括注释的拼写错误都要修正,最后再由committer核入。如果patch比较大,整个过程的周期会长达几个月甚至一两年都有可能,这在许多国内公司看来效率太低。

而且许多国内的程序员,习惯的是公司内部有人会为自己的工作兜底,自己只需要埋头做事就行,强调与人交流对程序员来说甚至有些“不务正业”。这与开源社区存在极大的不同,做开源需要注重沟通。社区是人形成的圈子,由于社区的成员之间不存在强联系,也不存在必须负责的义务,如果成员自顾自地提交代码,可能根本不会有人看,代码也就不了了之了;而当一名成员和社区的人更加熟悉后,提交patch会得到更多人更快地响应,整个流程也能够大大加速。长远来看,善于沟通的人,在开源社区做事的效率要更高。

邵赛赛认为,目前国内开源和国外开源比较大的区别,是国内外对开源的理解不同。国内绝大多数人或企业对开源的理解,仅限于把代码放出去,让别人知道这个代码是我或我们组织开源的,认可这个代码很厉害,这样就完了。开源之后,可能就没有持续的贡献了,开源的回馈或收益很低,或者是只有影响力层面的回馈,这就是国内开源绝大多数时候的现状。

相对来说,国外对于开源的理解就比较成熟。首先,为什么要开源?开源并不仅仅是为了影响力,开源也是一种商业行为或者说是商业模式,目前国外已经摸索出来一套比较好的方案,比如红帽这样的大公司,通过开源软件来教育用户,之后通过加强的商业版本收费。

还有许多利用开源创业的公司,尤其在大数据领域,这是非常主流的一种方式,它们通过将开源的产品进行重新包装、打磨,形成商业版的能力然后收费,即使是小公司,也可以依托开源社区去把核心功能做得更好。就像Hadoop三驾马车中的Cloudera和Hortonworks就先后上市又进行合并,还有Spark方向的Databricks,现在估值已经达到了380亿美元。

至于像谷歌这样的大公司,更是利用开源来形成相应的生态或标准,比如谷歌开源安卓,最终在移动互联网时代成为两大操作系统之一。相比之下,国内绝大多数公司和组织,对于如何通过开源获取影响力,如何有针对性地去开源,如何利用开源来构建生态,如何利用开源获得商业利益,不说是脑子里一团浆糊,也是“知其然不知其所以然”的。

但国内并非没有做好开源的潜力,比如目前在开源领域非常活跃的腾讯,本身就拥有着海量的数据需要处理,这对其内部技术的要求极高。腾讯同样从开源社区获取了不少的帮助,这些对问题的解决方案如果反馈到开源平台,也会推动社区的发展。另一方面,腾讯在大数据领域的基础技术已经基本完善和成熟,因此也有更多的意愿,去做更加前沿的技术研发,这也是大公司独有的优势。

尤其是腾讯930变革以来,开源成为公司级的技术战略之一,并在内部成立了开源管理办公室,下设项目管理委员会、腾讯开源联盟和开源合规组三大组织,旨在自上而下地传递腾讯开源策略,自下而上地落地开源技术生态。同时,通过开放的开源评审平台,孵化和培育优秀的自主开源项目。

三年过去,目前腾讯已经对外开源了140+个项目,有数千位贡献者,Star 数超过40万,开源贡献居于全球前列。在内部腾讯已组建和孵化了117个开源协同小组,涵盖了计算、存储、数据等所有互联网技术基石。全公司内部代码开源率达到85%,不仅给腾讯带来巨大的效能提升和成本节约,同时通过腾讯云不断助力越来越多的生态伙伴,并源源不断将经过内部大量业务沉淀和检验的优质项目对外开源。

比如,致力于大数据领域的天穹Oteam,将各事业群的大数据最佳实践复制到了各个场景,实现平台互通,功能复用,大幅提升了通用性能与资源利用率。

做开源的“爱与坚持”

做开源需要怎样的特质?

邵赛赛认为,首先是要有毅力,能够持之以恒。开源项目都是需要长期投入的,只有长期投入后,才能有更多的回报。对于像Spark社区这样要求较高的开源社区,从contributor到成为committer,至少需要持续贡献三年或更久,其中有的社区大牛,从自己的青年一直贡献到中年。做开源如果没有对开源项目真正的热爱,没有持之以恒的毅力,而是追求短期的回报,那么很容易就会放弃了。

其次是有强大的自驱力,支撑自己持续不断地投入到发现问题、解决问题、贡献代码的过程中去。发现问题和解决问题对开源至关重要,但这两种能力并不是每个人都拥有的,很多贡献者在使用的过程中发现了几个问题以后,贡献完之后不知道还能继续做什么,这个时候就需要依靠自驱力以及相应的方法论,去持续发现问题和不停地进行改善。

邵赛赛对寻找值得贡献的点的经验是,首先,要找到一个方向,这个方向要具备很多的潜在可以做的点,在这个方向上去寻找可以做的点;其次,在做这个方向的时候,如果发现很多公司在实际应用中有很多问题,证明代码的成熟度有限,那么就去构建一套测试框架或是测试集,然后去测试,测试出了问题就解决问题,最终还是会寻找到一条能够挖掘出更多可做点的路。

而这样的自驱力又建立在对项目的认可上,只有认可了项目,才会想做更多的贡献,并在社区头衔和影响力上获取相应的成就,尤其是在全球知名的开源社区获得影响力,对贡献者来说也能够进一步激励自己。

通过持续对开源做贡献,开源社区较高的核入门槛,可以让贡献者更加系统深入地去思考问题,提出真正能解决问题的方案,而非“短平快”、“头疼医头脚疼医脚”的解决方案,并且和全球不同文化背景的人沟通,也能让解决方案更加清晰和面面俱到。“我在review很多代码的时候,尤其是国内一些贡献者代码的时候,他们的patch是不错的patch,但是没有准确地描述出为什么要提交这个patch,究竟解决了什么问题,这也会造成贡献没有很好很快地被人接纳。在社区中,不但要做事,还要跟人有效的沟通。”邵赛赛说。

坚持贡献10年,他在开源领域做到了国际顶尖

开源是一件伟大的事情,让全世界的智慧能够汇合在一起,并无偿地反馈给全世界。但对于开源社区的贡献者来说,做社区贡献,就像是一个人默默去爬山,既孤独又艰巨。曾经邵赛赛在做Spark贡献时,很长的一段时间里,国内没有多少人在做这个,相互间不多的交流也仅限于在社区上,说不辛苦,那是不客观的。

但他的开源贡献最终带来的长期价值也是巨大的,甚至不仅仅是一个Apache Spark PMC的头衔所能概括的。对有志于做开源的人来说,“路漫漫其修远兮,吾将上下而求索”。

(免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。 )