来源: Alibaba F2E
作者: Alibaba F2E
在2021年527蚂蚁技术日上,蚂蚁内源社区举办了内源专场,在专场上玉伯给大家分享了《开源有带给我什么》,以下为演讲的图文整理。
我的开源之路
我从2009年到2018年,接近十年时间,一直在做开源的一些事情,在这个过程中收获了很多东西。今天就和大家分享一下,回顾这十年,我的一些收获和感触。
我最开始注册GitHub是09年的夏天,再之前,是在Google Code上面有一些个人项目。这张图是10年7、8月之后,开始在GitHub上疯狂提交代码的时候,那时候整天沉浸在代码里面,现在回想起来还是很开心的。
这些年做过一些开源项目,最开始是模块加载器Sea.js,在淘宝时期和别人一起开发了Kissy项目,来支付宝的早期做过一个不太成功的项目Arale,做了大概两年觉得这个方面是不对的,马上切换开始去做Ant Design,再后来又开启了AntV数据可视化开源项目。当然,体验技术部还有很多做的不错的开源项目,比如egg.js和Chair,不过这些我参与不多。
我的收获之一:高效工作
这些年我一直在思考,我在参与开源的过程中真正的收获是什么。
我总结了三点。其中第一个就是养成了高效工作的习惯。
高效工作里面包括几个小点,首先是文档优先。
在文档方面我印象最深的一件事,就是在2010年左右参与到CommonJS开放组织里面,这是一个虚拟的组织,最主要的产出就是文档,我在里面感受到了业界这些顶尖的专家对于文档的重视。
当时,大家通过一个wiki系统以及Google Group论坛在一起,讨论什么叫模块,以及拟定它的1.0、1.1等版本的规范细则,每个规范中都有很多分支,围绕里面的很多细节,大家吵的不可开交。正是通过大家的努力产出的这些规范文档,对整个行业都起到很大的帮助。
经常参与开源的同学可能发现,在文档优先这方面,老外比我们重视太多了,有点项目可能还只是个空壳,但里面已经讨论很多了,把很多想法思路、怎么做、可能遇到什么坑这些问题,通过文档和讨论,想的比较清楚了才动手去写代码,这点和国内是很不一样的。
当你真的深度参与开源,并且以文档先行的方式去实践的话,你的收获会非常之大。
第二点就是,在开源社区非常强调异步协作。无论是GitHub上的issues,还是Google的Groups,都是异步协作的利器,后来语雀的讨论区也借鉴了这些思路,就是是因为我们发现,异步协作比线下会议高效很多。我也非常想在公司内去推行异步协作,在体验技术部有句话,与其在钉钉上找我,不如发个issue给我,你可能会更快的得到反馈。
人们通常进行交流的手段就是听说读写,其中读和写是比听和说更高维度的手段,需要更多逻辑和抽象能力,更有助于问题的及早解决。
最后一点是求同尊异。GitHub上有些项目参与人数众多,大家参与讨论很激烈,如何在有分歧的情况下达成共识,以及不仅达成共识而是让社区往前走一步,这是需要一些领导力,以及一些意见领袖做出一些牺牲的。比如当时在CommonJS社区里有一位C语言大拿,他已经实现了一版模块化代码, 比已有的一些都更优雅,但为了让社区意见保持一致往前走,他把自己的代码全删掉了。
在这里,求同尊异不是很虚的词,而是很实际的原则,影响你的很多取舍。
最后一点是挺有趣的,在早期GitHub做社区的可能很多都是技术,比较纯粹,后来各种追求商业化以及个人影响力的都来了。所以我最后一点就是你要知人情世故,现在GitHub上很多开源类库你一看就知道是来蹭名利的,这种情况下笑一笑就好了,不需要去较真,否则会耗费很多无谓的时间,最少也影响心情。但同时你自己不要去人情世故,保持纯粹。开源社区也是个小社会,GitHub也没有大家想象中那么纯洁,有很多故事在里面。
这些习惯和认知一直延续到我现在的工作中,真的给我带来了很多帮助。我相信在开源上,只要你参与进去,你就会获得一些感性的认识,知道它们对你的职业成长和习惯是非常有利的。
我的收获之二:学做产品
我之前做Sea.js这些开源项目的时候,是把它当做一个产品去打造的,因此肯定会遇到产品的灵魂三问:
每一个开源项目在决定要不要去做的时候,都要问自己这几个问题。这些问题其实和很多业务和产品遇到的问题很类似。你必须将这些问题回答清楚之后才能再往前走一步。
比如当初我们在做AntV的G2的时候,就要回答一个问题,当时国内外有higcharts、echarts等开源的可视化框架,也都非常成功,这时候你G2凭什么去做另一个可视化类库?后来和萧庆关于这个问题想了很久,最终得出的答案是我们要做图形语法,而不是以前业界通行的基于配置的可视化,这也正是G2的差异化竞争优势,真的做好了会带来更多的可能性。
关于第二个问题,是因为很多你想做的项目,要么在GitHub上已经有了,要么已经在文档中被人讨论过了,那为什么是你做?为什么你更有可能去做成?这个问题的一个“政治正确”的答案是和你的业务有相关性,更实际的可能是和你这个人更有关系,是你内心想不想做,愿不愿意去长期的投入。
比如Ant Design、AntV,其实当时是集团更有机会去做的,因为集团有数据产品技术部,他们有很多业务,在这些业务土壤下是更有机会去长出这些项目的,但是他们缺人。所以对这个问题我的回答是,很多情况下,人的要素是比业务更重要的。只要你对事情是笃定想要去做的,大胆去做就好了。
第三个问题其实是更难回答的,就是你的边界在哪。之前接触过的一些开源项目越做越大,或者越做越复杂,这不一定是好的。我自己心目中理想的开源产品,是做到一定阶段,就不需要再做了。比如一些命令行小工具,很多年都没有更新了,但大家都在用,因为它们各种接口很完备,已经不需要更新了。做开源项目也一样,当你花一些时间设计好了,然后写完代码,就可以对整个世界说,我做好了,你用吧。当然,这是一种理想状态。
我的收获之三:对事的热爱
我的分享最后一点是热爱。但凡你曾经经历过为开源而疯狂,你就会理解什么叫热爱。而如果你没有疯狂过,热爱对你来说只是两个字而已。
最近袁老去世,举国同悲,我也看了那个40多分钟的纪录片,看的过程中真的是非常感动。特别是里面提到袁老的禾下乘凉梦:他有一个梦,希望稻谷长的像高粱一样高,稻穗比扫把还长,结的谷粒和花生米一样大,到时候他和他的助手可以躺在下面乘凉,睡个午觉。我觉得袁老说到这段话的时候整个人都升华了,看了这段视频,你可以理解什么叫做事业,什么叫做热爱。
当你把开源当做自己的事业的时候,感受其实是一样的,即使生活上很朴素,你也可以过的很开心。当你写代码的时候想着怎么写的更好,某个内存占用怎么降低一点点,某个性能怎么提高一点点,当你满脑子在想这些的时候,一些物欲得失也就没那么重要了。
我希望同学们通过开源,去参与和主导项目,能够感受到这份热爱。持续去感受过几份热爱之后,我觉得你整个人都会不一样的,面对许多事情,你会活的更通透,更透彻。
另外前不久在推特上看到一句话让我挺有感触,他主要说的是,很多人说工作要跟对人,但其实没什么关系,跟你工作的地方和公司也没关系,跟什么人不如跟随自己的内心。真正一个人在职场生涯往前走,应该找到的是你的mission和calling,还有找到对你有意义和热爱的一些事情。
总结一下,如果说开源带给我什么,首先第一个就是高效工作的习惯,让我受益终身;第二个是在这个过程中,学会了怎么去做产品;第三个是非常感谢自己有兴趣参与一些开源项目之后,从中感受到什么叫热爱,从而改变了我对人生的很多看法。