learn-tech/专栏/超级访谈:对话玉伯/04开源三大收获:异步协同、文档优先与快乐工作.md
2024-10-16 11:00:45 +08:00

81 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
04 开源三大收获:异步协同、文档优先与快乐工作
希望玉伯能聊聊开源,因为他和团队折腾过 KISSY、SeaJS、Ant Design、AntV 等开源项目KISSY、SeaJS 已经成为过去式Ant Design、AntV 还在进程中。但说起对于开源的理解,对他触动最大的开源项目其实是 Yahoo 的 YUI3玉伯也是在参与 YUI3 的过程中,体会开源带给他的快乐和反思。
极客时间:你最早参与开源是什么时候,是以什么方式?你对开源最开始的理解是什么样的?
玉伯这就早了我谈谈在阿里的时候吧。2008 年入职淘宝时就比较关注开源,当时前端有个标杆公司叫雅虎,雅虎是前端工程师的摇篮,有一批牛人。当年雅虎有一个产品叫 YUI是前端最早的著名开源项目之一。
淘宝最早用的组件库就是 YUI当时我们基于 YUI2 在内部封装了一个版本叫 TBraT 代表淘宝,淘宝前端的内部开源起步于 TBra 项目,代码写得很不错,我经常去看源码设计。
最开始我对开源的理解,就是把源代码放出来,然后大家能够一起去看源代码长什么样子,是怎么实现的,还可以参与贡献,这是我对开源最初的理解。
极客时间:在参与开源社区的过程中,从最开始开放自己的源代码,往后发展,越来越深入地去参与项目甚至主导项目,然后反馈社区,它是一个更进阶的过程。深入参与到社区里,你的状态是怎样的?
玉伯:更进一步参与开源,是雅虎的 YUI3 项目,这是对我触动最大的开源项目。对我的触动点在于,当时 YUI3 的代码还没写多少,但是整个项目组就已经通过整个社区运作,共同探讨 YUI3 应该如何设计,比如应该分哪些组件,组件 API 应该怎样设计等等。设计先行,文档先行,而不是先写代码,这种开源协作,对我影响非常大。
当时有一波国外前端大牛也在里面,我就看他们用英语在探讨,我当时的英语阅读和写作能力都突飞猛进。基本上天天都会去看,一有时间就会看,同时会用英语参与回复讨论。
从参与文档讨论后来逐步开始尝试去提交一些代码YUI3 里面有些早期代码是我写的。这个过程很好玩,有点像打擂台。就是你提交了一个版本,对方一看这是什么啊,觉得你写得不好,然后别人会提交一版实现,把你的代码给覆盖掉了。这个时候,人的斗志就来啦,内心不服,就会想到更好的方案去实现,然后来个回马枪,把别人提交的代码再修改成自己的方案。
我现在印象很深刻的一个组件,是 AutoComplete 组件,实现起来挺复杂的,当时对里面的性能优化点、渲染性能做了很多研究。我一直对性能优化感兴趣,跟这段经历也很有关系。这是我参与开源的第二个阶段,从看源代码,到参与讨论,再到开始打擂台的一样贡献代码,年轻气盛少年狂。这个过程,现在回想起来都挺开心的。
那时候我天天盼着下班,我白天疯狂地在项目室闭关,就想尽快把业务代码的活干完,然后回到家里,快速吃个饭,就又开始疯狂地参与开源。印象中我每天晚上都干到凌晨两三点,很开心,很兴奋,好像不觉得累,睡眠质量也挺好的。
对我而言,开源就是开心的源泉,现在回想起来都很开心。
极客时间:你这种状态,当时坚持多久?
玉伯:好久的。但后来发现熬夜对身体有影响,有时上午会没什么精神,而且因为凌晨几点了还在疯狂写代码,到了早上再继续写代码会有点疲。于是上午一般会选择去开会讨论或写文档,写文档时,脑海里已经在构思代码怎么写,怎么实现。吃完午饭精神就会好很多,中午打个盹后,下午会开始疯狂写业务代码。在我离开淘宝 UED 前,基本都是这种状态。
极客时间:有没有一种可能是这样?那几年时间其实你写代码写太多了,已经在写代码这件事情上找不到更多的乐趣了,所以你更多地会去关注产品、业务管理?有这种可能性吗?
玉伯:肯定有这种可能性,但代码本身依旧很有乐趣,但 YUI3 项目的缓慢进展,让当时的自己的确有些受挫。当年 YUI3 项目搞着搞着我觉得项目有点看不到希望了后来越发展越不太好内心很受挫。YUI3 项目的发展不顺利,的确让我开始思考写代码是为了什么,为什么 YUI3 的代码明明这么优秀,但社区却好像越来越不喜欢 YUI3。这块的思考让我将精力开始转向产品思考。YUI3 是一个技术产品,作为技术产品,真正决定产品成败的,并不是代码。
写淘宝业务的前端代码时,更有体感,最终我发现淘宝的核心价值大都来自产品和运营,代码一定程度上只是实现工具。从代码实现,开始转向代码背后的技术产品设计,这是我参与开源的第三个阶段。
小结起来,我参与开源有三个阶段。第一个阶段是看代码为主,第二个阶段开始参与文档讨论和核心代码实现,第三个阶段则是从产品视角去看开源项目。决定一个开源产品成败的,往往是这个产品本身的设计理念和思路是否符合潮流,如果方向不对,代码就很容易白写。
代码是实现产品的工具,就像语言是沟通的工具一样。我们说话,本质上是沟通,语言只是沟通的一个工具。曾经有一段时间我很纠结自己有老家的口音,后来我一点都不纠结了,为什么?我发现其实在沟通这块,大家还是能够听懂稍微带点湖南口音的语言。我不会现阶段还纠结说我的语言要字正腔圆,反正大家能听懂。这是一种心态的变化。不是否定工具,而是于我而言,更看重用工具所做的事情本身。
极客时间:从你参与 YUI3 项目对你影响这么大,加上你和团队一起折腾的 KISSY、SeaJS、Ant Design、AntV 等开源项目,你觉得参与开源对你产生了哪些影响?或者说收获,可以聊聊吗?
玉伯:我第一个深度参与的开源项目是 YUI3最大的收获有三点。一点是深度感受到了写代码是很快乐的。同时还有一个更大的收获是意识到代码是工具。第二点我很少对外说。
很多时候人一定要知道自己拥有的所谓能力也好技能也好,究竟是有什么用?看开之后,人会坦然。比如我不会再纠结某个代码风格更好,我会更关注用技术能实现的产品价值点在哪。
开源收获的第三点,是真正感受到了开源社区异步协同的美好体验,超级喜欢。做语雀跟这段经历也很有关系。有时会开玩笑说,给我们发旺旺、钉钉消息,我们回复会很慢,大家都不怎么想去看 IM 消息,但是给我们提一个 issue我们立刻就会响应。异步协作文化让我以及整个体验技术部都深受影响。
除此之外还有一个收获就是理解文档的重要性,之前跟 YUI 项目那帮人聊的时候就是靠文档。文档跟微信聊天不一样,因为很多时候是跨时区的,每一次沟通都很珍贵,我们得把自己想说的话尽可能一次表达清楚。因此写文档的能力很关键,清晰表达才能做到几个回合之间达成一致,否则就是漫无目的地闲聊。还有比如你要去做某个功能,甚至你写了一堆代码要提交,你都得先写一堆注释,去告诉他我为什么要改你的代码,我改完之后究竟好在什么地方。在这些层面上是需要通过一些文档的方式来讲清楚的。文档先行的理念对我影响很大,我们做很多事情都养成了文档先行的习惯,这和亚马逊说的“六页纸”管理方法有异曲同工之妙。
极客时间:在你自己后续的开源项目中,你怎么把前面学到的东西运用在项目上?
玉伯:我尝试过,当时做 Ant Design 之前还有一个开源项目叫做 Arale阿拉蕾充分践行 YUI3 的那套理念就是文档先行我们对外说我们开源了打开一看一行代码都没开始写充分践行文档先行。当时很多人在讨论认可文档先行的占大多数。Ant Design 开源社区这块,好多人从早期就参与了,他们全程见证了整个过程。
国内开源项目,一直有个我觉得不太好的做法,就是一定要等到代码写得差不多了才开源。很多时候怕自己代码写得太烂,一定要整到一定阶段,写到心目中最好了,才把代码放出来开源,但往往这时候别人都没有参与的机会了,对别人来说只能用。我一直觉得这种做法并不太好。
我之前跟某开源负责人讨论过这个问题,我说他们开源目的不纯,他说我是古典开源主义。他们的说法我也认的。就像做产品有古典产品主义者,这批产品经理,一开始不会怎么考虑用户增长,而是关注我想不想做,我具体想做什么,然后根据自己的想法和设计把这个产品给做出来,给用户用,这叫做古典产品主义。开源也存在这种情况。古典开源主义是一种比较纯粹的状态,开源最早的理念就是分享想法,并不是分享代码。像 W3CWorld Wide Web Consortium万维网联盟 最开始的标准诞生,就是我有一个想法,我希望能够召集一拨人来讨论,来实现。这是我接触的开源最原始的状态,也是我最喜欢的开源阶段。
极客时间:最原始的开源你会去考古它的这些背景和发展,现在有没有什么好的资料可以来去看?
玉伯:我接触过的最早是 Linux 开源社区。Linus Torvalds 本人挺有趣,他是开源的奇迹,对项目管控得非常好。社区里有很多观点,到目前为止都是很前沿的,比如什么是好的开源项目?我们很多时候会觉得要有影响力,觉得好的开源项目是目前还活跃的、还不断有人迭代的项目。但当时我看到过一个至今记忆深刻的观点:“死了的项目才是好的开源项目”。这句话是什么意思呢?就是说已经不再迭代的开源项目,说明它做完了,没有任何 Bug 了。Unix 里面很多底层小工具做到删无可删了做无可做了Bug 也没了,不需要更新迭代了。这种东西才是最好的开源果实。
这个概念延伸到产品领域,我曾经看张小龙讲微信的设计,其中讲到摇一摇这个产品,就跟 Linux 社区的理念是一脉相承的。微信摇一摇为什么可以做到不可超越,是因为已经把这个功能做到了极简化,删无可删,你只要加功能,你就输了。我觉得开源好多理念和产品也是很相像的,可以互相借鉴。
小结时刻
玉伯是开源圈里的古典开源主义他说今天国内开源一直有一个不太好的形态——代码写得差不多了才开源。很多开源项目一定要代码写到最好了才开源但对社区的参与者来说别人没有参与的份了这是不太好的。他怀念Ant Design开源的时候有部分社区的人是全程见证它的成长的。
《大教堂与集市》中讲“只要有足够多的 beta 测试者,几乎所有的问题都会很快呈现,自然会有人把它解决”,这种笃定和相信,今天是否还能大面积看到?“集市”精神就是社区精神,人的价值感、人与人的连接就在大大小小的社区里,开源社区就是一个庞大的意义共同体,而每个开源项目小组也是意义共同体,能够找到意义共同体的人无疑是幸福的。
最后,也请你一起交流对开源的理解,以及你从参与开源过程中获得的养分吧。我们下一讲见!