玉伯:开源有带给我什么

在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,还有找到对你有意义和热爱的一些事情。

总结一下,如果说开源带给我什么,首先第一个就是高效工作的习惯,让我受益终身;第二个是在这个过程中,学会了怎么去做产品;第三个是非常感谢自己有兴趣参与一些开源项目之后,从中感受到什么叫热爱,从而改变了我对人生的很多看法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python并行运算库_最佳并行绘图Python库简介:“ HiPlot”

python并行运算库HiPlot is Facebook’s Python library to support visualization of high-dimensional data table, released this January. It is particularly well known for its sophisticated interactive parallel plot.HiPlot是Facebook的Python库,用于支持…

Asp.net 文件上传的 FileUpload FileName 和 FileUpload PostedFile.FileName的细节问题

Asp.net 文件上传的 FileUpload FileName 和 FileUpload PostedFile.FileName的细节问题 ASP.NET 文件上传估计大家都用得很熟悉,常用控件 FileUpload 。 主要步骤: 1.判断是否合法 2.获得文件的路径 (包括目录的完整路径,同时可能…

java 友元_C++ 友元函数 | 菜鸟教程

对教程中的例子,稍加修改,添加了友元类的使用。#include using namespace std;class Box{double width;public:friend void printWidth(Box box);friend class BigBox;void setWidth(double wid);};class BigBox{public :void Print(int width, Box &…

刚学编程的程序员必备这5大编程网站,你知道几个?

一个好的网站,就是程序员学编程的基地。 虽说新手程序员也许知道一些在线编程网站,但是质量上乘的编程网站又知道几个呢? 下面就来给大家推荐5个质量上乘的编程网站: 0、Leetcode LeetCode是大名鼎鼎的在线刷题网站,通过该网站的…

【赠书福利】不扶好眼镜,请别打开这本挑战JS语言特性的书

文末赠福利大家好,我是若川。为感谢大家一直以来的支持和肯定,文末抽《JavaScript悟道》3本包邮送和若干红包,详细规则请看文末哦。"人们不停地给老化的语言“整容”,拼命地往其中注入各种新的特性来稳住其流行地位&#xff…

MySQL存储过程之事务管理

MySQL存储过程之事务管理 ACID:Atomic、Consistent、Isolated、Durable 存储程序提供了一个绝佳的机制来定义、封装和管理事务。 1,MySQL的事务支持 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关: Java代码 MyISAM&#xff…

罗马数字 java_【leetcode刷题】[简单]13.罗马数字转整数(roman to integer)-java

罗马数字转整数 roman to integer题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII &a…

我在工作中是如何使用Git的

大家好,我是若川。今天分享一篇关于git的好文章。我自己经常用命令行终端和git缩写。具体可以看我以往的文章。使用 ohmyzsh 打造 windows、ubuntu、mac 系统高效终端命令行工具,用过都说好。点击下方卡片关注我、加个星标学习源码整体架构系列、年度总结…

克服浮躁_设计思维:您克服并赢得低迷的最终工具。

克服浮躁设计思维101 (Design thinking 101) Let’s begin by getting ourselves clear on the question: What is design thinking?让我们首先弄清楚问题:设计思想是什么? Many people have an impression that design thinking has something to do …

mongodb数组字段prefix匹配返回

DOC: https://docs.mongodb.com/manu... collection(test)结构 {_id: Objectd("123456789"),category: [apple_1,apple_2,banana_1,banana_2] }Question: 对test表的所有数据做category过滤,返回category中以apple开头的元素 表原数…

java参数化查询_小博老师解析Java核心技术 ——JDBC参数化查询(二)

[步骤阅读四]SQL注入按照以上方式开发,确实已经完成了基本的用户登录业务需求,但是这么做的话可以会出现一个比较严重的问题,那就是容易被SQL注入。所谓SQL注入,就是在需要用户填写信息,并且这些信息会生成数据库查询字…

Lightbox 效果

网上其实到处都是。 遮罩层: .transparent {filter:alpha(opacity0); -moz-opacity: 0.0; opacity: 0.0; z-index: 90;background-color:#000;float:left;top:0;left:0;position:absolute;width:100%; }主要业务层:.rollover5 {display:none; position:a…

前端抢饭碗系列之Vue项目如何做单元测试

大家好,我是若川。今天分享一篇vue项目如何做单元测试的好文,文章比较长,建议先收藏,需要时用电脑看。点击下方卡片关注我、加个星标学习源码系列、年度总结、JS基础系列关于单元测试,最常见的问题应该就是“前端单元测…

React Native组件开发指南

React Native的组件开发一直处在一个比较尴尬的处境。在官方未给予相关示例与脚手架的情况下,社区中依然诞生了许许多多的React Native组件。因为缺少示例与规范,很多组件库仅含有一个index.js文件。这种基础的目录结构也导致了一些显而易见的问题&#…

java activiti jbpm_activiti和jbpm工作流引擎哪个比较好?

原标题:activiti和jbpm工作流引擎哪个比较好?在常用的ERP系统、OA系统的开发中,工作流引擎是一个必不可少的工具。之前在选择工作流引擎时曾经在activiti和jbpm之间有过比较,当时做出的决定是使用jbpm,但实际开发过程中…

C/C++中善用大括号

C/C中善用大括号转载于:https://www.cnblogs.com/satng/archive/2010/12/17/2138840.html

识别人声_演唱人声的5个技巧

识别人声什么是声乐伴奏? (What is Vocal Comping?) Vocal comping describes the process of combining multiple vocal takes into one “supertake” that has the best parts of each. This is called a “composite track,” or comp for short. Many instrum…

你知道source map如何帮你定位源码么?

大家好,我是若川。今天分享一篇我们经常会忽略的定位原始代码位置原理的文章。文章不长,例子不错,可以先收藏,有空时动手试试。学习源码系列、年度总结、JS基础系列前言我们知道,代码上线前要经过压缩,美化…

OOP 中的 方法调用、接口、鸭式辩型、访问者模式

2019独角兽企业重金招聘Python工程师标准>>> 方法调用的四种方式 直接调用:通过类或者实例直接调用其方法。接口调用或者转型调用:通过将实例回调给一个接口对象,或者转型为一个父类的实例,来调用间接调用:…

Substitution控件MethodName无法取到Session的解决办法

Substitution是对缓存页面实现动态显示部分内容的控件,使用方法:在后台页面添加静态方法,private static string MethodName(HttpContext context),经典的用法是动态显示的是当前的登录用户名字(非登录用户显示其他的)…