2015 年,他发起阿里 Weex 项目,实现「一次编写,三端运行」。他被称为「Weex 之父」。
2016 年,阿里宣布开源 Weex 项目,年底将其捐赠 Apache 基金会。2017 年,他在微博宣布退出 Weex 团队。
外界对 Weex 的讨论也好,争议也罢,他淡出了大众的视线。
下一次外界听到他的消息,是在 2017 年底,却完全与技术无关。原来,他和几个同事一起,组成了阿里 996 乐队。大家才发现,原来程序员们不仅会写代码,写歌也蛮好听。
他和 Weex 的故事是怎样的?他是怎样的一个人?今天,图灵访谈带你走近勾三股四,一位自称「有点叛逆」的前端工程师。
文 | 李冰
采访 | 乐馨,李冰
移动端崛起
勾股 2007 年大学毕业。他大二学完基础课程之后,就转到了自己很着迷的软件工程专业。毕业后,他去傲游浏览器面试,笔试之后现场对方只问了三个问题:「HTML 熟不熟?JavaScript 熟不熟?CSS 熟不熟?」他不怵,说了三个「熟」。面试官竟然没多问,直接给了他 offer。
那是中国互联网风起云涌的时代。当时浏览器才刚兴起,大家用得最多的还是 Office、QQ 这种桌面传统软件。他们经历了所谓的浏览器大战。
傲游做了大量革命性的创新,不仅推出免费版,支持多语言,用单窗口多标签代替了多窗口,推出广告过滤功能,而且它独创了如今浏览器必备的在线收藏系统。2007 年,傲游霸占了非常高的市场份额,市场占有率仅次于 IE 浏览器。
勾股说:「在一个蓬勃发展的创业公司,每天都给你很多成就感。而且个人也在随着公司一起发展,不仅是技术,而是能够真正感受到整个行业的方方面面。」
然而,随着移动端崛起,PC 浏览器市场开始呈现疲态。2010 年,傲游的用户大量流失。2012 年,它在中国大陆的市场占有率已经不足 1%。
勾股坦言:「我们在 PC 端有非常狂热的忠实用户的支持,收入也比较稳定。公司其实也看到了移动互联网的趋势,但可能没有抓住这个机会。」
与此同时,2013 年,阿里的战略是「All-in 无线」。
一方面,勾股看到移动互联网的发展,很想参与和探索;另外,很多他认为很厉害或者关系很好的朋友在阿里,淘宝的居多。于是,在 winter 的推荐下,他加入了阿里。「winter 打电话给我,说:‘有一个好消息,有一个坏消息。好消息是我们发 offer 给你。坏消息就是我们要 996。’
「我当时的第一反应当然是比较兴奋啊!反正我刚去那边,也需要花比别人更多的时间熟悉工作。既然这样的话,就有更多的人晚上陪我了。当时我是这么想的。」
那段时间他印象深刻的就是每个人都很拼。
「从最上边到最一线的员工,每个人都是在玩命。可能一方面是工作压力,另外一方面,我看到很多人谈到移动技术的发展这些东西时,真的是两眼放光,有讲不完的话想跟你分享。确实是有那股热情在。」
2016 年,手机淘宝和淘宝的合并标志着一个时代——移动端的崛起。手淘的创业之路算是告一段落,无论从技术还是从业务,都和淘宝网的 PC 业务做了更深度的整合。
Weex 的故事
2013 年,阿里「All in 无线」战略如火如荼地推进,大量资源向无线业务倾斜。当时,勾股所在团队负责手机淘宝的前端业务,在快速向前的同时,他们面前也摆着大量的问题。
其中,iOS、安卓,还有 Web,这三端的业务,可不可以只用一套代码解决?
iOS 和安卓的发布节奏有限制,比如 iOS 每月发一版。但淘宝每天都要做新促销活动或者上新功能。有些东西这个月没赶上,就只能赶下一个月。所以可不可以找到一种方式,能够随时发布更新?
他们一直在寻找解决方案。
2015 年初,React Native 正式开源发布了。其实,自从 2014 年底的一个技术会议对它有所介绍之后,大家就一直很期待,因为它看上去能够解决这两个问题。
但在尝试之后,两大困难让他们无法忽视。
第一个困难是当时 React Native 的版本还很早,迭代非常快,并且每次都有大幅度的改动,团队跟不上这个节奏。
第二个就是,很难在它上面加自己的东西。这个技术方案的定位并非解决他们面临的动态性问题,导致很多细节用起来比较牵强。
归根到底,他们还是绕不开面前的难题,外来的解决方案似乎并不合适。
干脆还是靠自己吧!
2015 年夏天,勾股发起了 Weex 项目,一颗探路石,一个灵活的解决方案。
「可能我在这个过程当中扮演的角色,是在一个特定的阶段,我同时看到很多信息和知识,其他人未必同时看得到。然后我有机会想到把它们组合在一起。
「第一个东西是在阿里内部的项目,它可以接受一段 JSON 的数据,然后渲染成 Native 的界面。这个工程我 2013 年加入阿里的时候就已经在做了,为 Weex 提供了技术积累。
「另外,第二个东西是 Vue.js,当时知道它的人并不多。我发现它能很好地优化前端开发体验,以及处理前端框架中间 JavaScript 的这部分。2015 年夏天深圳的 JSConf 上,刚好尤雨溪也一同参会,我们当面聊了几句,交流了这个项目。他当时给了我很多鼓励,也跟我分享了他对一些技术细节的看法。
「第三个当然就是 Web standard,包括 W3C,以及其他 Web 规范。首先,它可以解决很多通用的一些技术问题。而且,它的一些规范和 API 的设计是由很多厉害的科技公司沉淀下来的结论,非常经得起考验。」
三大武器虽已备齐,现实遇到的困难却比预估的更复杂。
「最大的困难,坦白讲就是三端不一致。
「不光是从技术角度,就是 API 的设计不一样。更困难的在于,因为大家的技术栈不一样,整个思考问题的方式,甚至工作习惯都不一样。所以,要让整个团队在一起工作,做出一个让大家能够信服的技术方案,这是真正具有挑战的地方。」
这个难题,他们写出了怎样的答案呢?
2015 年的双十一 Weex 首秀,历史上第一次把 Native 级别的体验和稳定性带到了天猫双十一的移动会场。
如此惊喜的效果不仅让 Weex 团队感到兴奋,也获得了技术团队负责人的认可,给了 Weex 项目更多的支持和信任。
2016 年双十一,Weex 覆盖了 99.6% 的会场页面,页面的打开速度、滚动的流畅性都保证了良好的用户体验。
Weex 的意义
目前为止,一切都很顺利。
2016 年初,阿里决定将 Weex 开源,年底宣布将 Weex 项目捐赠给 Apache 基金会,并且宣布了与 Vue.js 的官方合作。然而,这却使 Weex 引来了巨大的争议,外界对项目后续维护问题产生了质疑。
2017 年初,项目发起人勾股发表了一份声明:不再是 Weex 团队的一员,离开淘宝,新的工作内容已与 Weex 无关。
事情的发展让外界迷惑不已。
Weex 项目以及手机淘宝内部,经历了怎样的变动?
起初,在移动端崛起的背景下,每个团队都在摸索前进。移动端的开发形态和模式应该是怎样的?Native 工程师有自己的想法,前端工程师也有自己的想法。直到 Weex 出现,越来越多的业务团队的技术栈逐渐地稳定下来。
这种变化,从技术角度来说,大家做事更有层次感了。有些人会维护 Weex 开源项目的核心的框架,有人做一些 Weex 插件或者扩展,还有一些人会专注在最上层的业务开发。大家的分工和团队协作方式变得更加清晰。
另一方面,人员结构也在逐渐地发生变化。有人适应,有人不适应,有人来有人走。每个人都在变化的进程里,包括勾股。
他说,一面的确有被动的因素存在,另一方面自己在想,不如主动地去拥抱变化。
而今时隔两年,他坦然分享了自己对这个问题的思考:Weex 项目的意义是什么?
「Weex 项目是阿里巴巴第一个愿意以官方的身份,并且主动地去拥抱开源社区的。
「其实阿里在 Weex 之前也开源了很多东西,都是以个人名义开源。当时在阿里内部,你想开源一个东西,流程很简单,就是你自己做一个申请。公司只会做一件事情,就是看有没有泄露公司的内部信息。公司不是在主动地面对这个问题。名义上是阿里的,但其实就是个人的。
「其实我们也讨论过这个问题,但担心将它开源会给公司惹麻烦。
「后来,这个观念在逐渐转变。我们也在思索,能否通过开源的这个行为,争取到更多开源社区的认同?甚至能不能招聘到更好的人?或者说能不能够经营一个更好的开源社区生态?
「我很欣慰因为 Weex 项目让阿里勇于做这个尝试,主动地开源。而且阿里内部还重组了一个开源委员会,专门来思考这个问题。
「在这个背景下,我很早就清楚,这个项目是我发起的,但它不是个人的。如果想借助开源项目达到一些个人诉求,在 Weex 这个项目面前其实显得有点自私了,因为更多的是要为公司考虑。而且我觉得这是一个很好的开始,未来更多的开源项目做下去,是需要站在公司的角度去思考的。这是一件双赢的事情。」
面对 Weex 受到的质疑,他说:「Weex 的开源,也是它意义的一部分。大家都需要一个过程去适应和感受,去了解开源文化以及一个国际化的技术交流社区,然后尝试去解决问题。」
即使退出了 Weex 团队,他也一直在思考它的命题。「我觉得这个问题还没有结束,就是移动端的所谓 UI 技术或者是渲染技术,它将来会走向哪里?
「其实相关的技术,我一直在关注或者在思考。刚好上个月,Swift UI 也发布了,它是 iOS 技术栈里 UI 开发的一个新技术;包括去年的 Flutter,我在 Weex 团队的时候就知道这个项目,它当时刚开始,那应该是两年前了。
「我觉得这些类似的技术一定是更灵活的。更灵活的意思是说,你可以更加快速,更加直接有效地去完成你的开发,完成你的发布,然后让用户看到。这个很理想。
「还有,它是对开发体验更友好的。无论是 Flutter 还是 Swift UI,或者像 React Native,Weex,都是在尝试做一件事情,就是你代码写完,能立刻在开发环境下看到渲染结果,或者看到一些友好的错误提示,调试信息,等等。当然另外一方面,很多东西也在逐渐地标准化和规范化,会进一步降低整个技术方案实施的门槛和大家接受的门槛。」
前端是什么
到现在,勾股在前端已经有 12 年了。
从傲游开始,他见证了整个 HTML5 技术从无到有的过程。「现在我们可能也不叫 HTML5 了。就叫前端或者 Web。最早的 Web 前端只用来做一些简单的页面,到今天可以做复杂的应用。」
他刚加入淘宝时,前端是在 UED 团队的,也就是设计团队。过了一段时间,团队结构变成了「UED 团队、前端团队、技术团队」。直到现在,他们已经完全归属于技术团队。显然,前端的技术含量在不断地积累和提高。
勾股说,前端发展得非常快。「我举两个例子。一是今天越来越多前端框架尝试着在编译器上,以及从 DSL,即所谓的语言层面去做文章了,甚至创造一种新的语言,这在早几年是不敢想的。也许将来有一天你想做前端,你就要懂编译原理。这个一点也不夸张。
「另一个例子是 WebAssembly,就是让更多语言和更多技术参与到 Web 这个生态当中。以前只是写 JavaScript,将来有一天 Rust、Go、C++ 等,甚至整个软件行业的积累都会进来,所以这是一个很开阔的空间。
「前端领域未来的可能非常多。渲染技术,比如 3D 渲染,包括 AR,VR 场景;还有比如工程化,这个也不是什么新话题了;再有就是 Serverless,跟云计算有更多的契合。当然也包括刚才提到的更多的语言,更底层的技术栈,就像前端框架现在都深入到了编译原理。
「所以最重要的就是打开自己,就是没有不可能。保持好奇心,不要主动向新的东西 say no。」
他最近一段时间对一个东西比较着迷,叫信息无障碍化,英文是 accessibility。
「我也会把它翻译成可访问性,听上去更符合 Web 语境,意思就是不管你用任何设备,有任何输入输出环境(比如键盘或者鼠标坏了)的情况下,都能正常访问网站。
「它最早的受益群体可能是一些视障用户,而随着移动互联网到来,适用群体以及场景也变得越来越丰富。
「比如说,工程师会高频地使用电脑,所以习惯用各种快捷键,不喜欢把手离开键盘。那如果一款软件只能用鼠标操作,是不是就忽视了这个用户群体?再比如,一个人在开车,只能通过语音使用软件。而另一个人在开会,没办法讲话。那他们俩能不能正常地交流?
「所以 accessibility 是在探索这些,它甚至可以让我们更语义化地去理解今天的 Web 是什么样的东西。」
深度参与 Vue.js
2016 年 9 月,尤雨溪加入了 Weex。同时,勾股也是 Vue.js 的核心开发成员,他很早就与 Vue.js 结缘了。
「2013 年底,我们团队当时在讨论移动端的前端的框架,尝试着做自己的东西。就在那个过程中我发现了 Vue.js,它从里到外都符合我们的期望,包括技术实现和 API 设计的想法,所以我就有种天然的亲切感。
「每个人都想做属于自己的东西,这个听上去很酷,但你如果有机会跟别人合作,做一个 1 +1>2 的东西呢?很多人可能没有看到第二种可能性,而这就是我与 Vue.js 的开始。
「因为最早的代码都是小右自己写的,完成度非常高,我很难直接参与到代码中,就从英文文档翻译开始。」
因为翻译需要他分析一字一句,甚至一些词语的隐喻,不能错过任何细节。这个过程让他对 Vue.js 更了解。
「Vue2.0 发布的时候,也是我们团队在做 Weex 的时间点,我们一起探讨了早期的一些想法。
「当时小右在做 2.0 的时候,是从一个 private 的仓库开始做的,但其实那个阶段他就已经把我邀请进去了。所以今天看提交记录你会发现,最早的一两百个 commit 都是小右的,中间有几个是我的,后面才是整个社区参与进来,就是已经从 private 到 public 发布了。」
勾股说,这段经历对自己影响很深。他学会如何与国际化的团队交流,相互碰撞想法。他们会聊技术,也会聊生活中好玩的话题。他深刻感受到了那些不一样的文化,与世界的距离在一点点缩短。「它就是一点点在发生,如果说是从哪里开始的话,应该就是我从参与 Vuejs 项目开始。」
技术还是管理
身处阿里,他也在思索个人应该如何发展。不同的是,他有一点叛逆,不想听任周围的惯性替自己做决定。
「有一个普遍的技术人员的困惑,是做到一定阶段就会有人 push 你去做管理。
「在当时阿里的环境下,无论是项目管理还是团队管理,很少有人不做管理而可以被大家认同,当然也包括内部晋升。
「在很多场合,大家觉得你工作经历和能力到一定程度后,就需要做一些管理的工作,或者你需要把经验传递给更多的人。所以我周围的人几乎清一色从技术转向管理,继续发展。
「我可能有点叛逆。这个行业有更多更难的技术问题等待着优秀的技术人才去解决,为什么要把转向管理变成一个传统?我会问自己:我可不可以只专注在技术上,一样可以发展得很好?」
这不是一种简单的固执,他有自己理性的分析。「坦白讲,我自己也是越来越平静的,或者包容的心态去看待各种事情和想法。
「首先大家都是学技术专业出身的,这个毫无疑问,自己的内心所属就是技术本身。管理对大家来讲也许是第二专业,或者甚至不那么专业,没有那么有归属感,所以你会困惑。但坦白讲两个都是机会,我觉得这个是因人而异的。
「第二就是说,管理更多的是跟人打交道,不同的人需要花的代价和精力是不一样的。我也看很多社科研究的书,也看一些管理的书(推荐《合作的进化》,《精益企业》等),很多东西到今天还没有定论,所以管理路线是一个不断往前探索的过程,某种角度这也是管理有意思的地方。
「而技术的世界是小葱拌豆腐,一清二白。像我这种性格,我希望所有东西都有确定答案,可以有方法有路径,永远去追求那些东西,心里会有底。」
他说,自己之前也一直不确定,是 Weex 项目给了他走技术路线的信心。
「参与 Weex 的项目,我收到很多的鼓励,更好的反馈,然后被周围非常多的人认同。它让我有信心,一直做技术做下去,可以探索出不一样的工程师发展的可能。」
996 的新意义
2017 年 1 月 21 日,勾股、渚薰和完颜组成了 996 乐队,在阿里巴巴西溪园区举办第一次新歌发表会。
其实,他们乐队的成员最早在「All-in 无线」的时候就认识了,但乐队两三年之后才成立。一是因为之前工作太忙,确实没有时间。二是也没有所谓的契机。
直到一次年会,同事子宽自己写了一首歌,吉他弹唱。歌词旋律都很简单,唱的就是一些自己工作的感受和状态,令人非常感同身受。
「有些人加班,有人在偷懒,有人今天没活干……」「你会写代码,你会切页面,你做出了淘宝网;身材走样了,眼睛坏掉了,头发也快没有了……」
于是,他们几个会点乐器的人凑在一块聊了聊,想给他伴奏,组了个乐队,名字就叫 996。
他们设计了一个简单的 logo。「logo 里面的 99 像一个引号,代表歌词。6 像一个音符,代表作曲,也就是旋律。」
他们想这样赋予 996 一个新的意义,而非那个规定的工作时长,或用所谓「奋斗」来鼓励大家绑架自己的生活。
勾股说:「第一个 9 是早上 9 点,代表认真工作。第二个 9 是晚上 9 点,代表下班之后的个人生活。那个 6 呢,就是周末可以玩玩音乐,做点自己喜欢的事情。」
他们希望通过一种轻松的方式,传递一些想法,一些声音给技术社区。让大家知道,如果你在工作当中遇到了一些问题,即便不是纯技术问题,也是可以拿来讨论的。虽然技术交流会上不能讲,我们可以把它写成歌,以音乐这种轻松的方式,唱给别人听。
前几年,有人问勾股:「你怎么能看那么多东西?」他笑说:「因为比你晚睡几个小时。」他习惯用更多的努力和时间去换一个更好的答案。
可是,工作生活怎么平衡呢?这个问题,每个人的选择不一样。有些人是按小时计算,比如白天几个小时工作,晚上几个小时回家陪家人;有些人是按天计算,周一到周五玩命地工作,周六周日陪家人。
勾股说,他是属于那种按年计算的。
前几年他真的花很多精力在工作上,忽视了家人。直到两年前,他的女儿出生。面对这份天赐的礼物,他才突然开始反思:自己这种透支身体的工作状态,真的可持续吗?
他意识到了家人对他的需要,并且开始做出行动上的改变。
今年,女儿两岁了。他说:「我觉得自己逐渐地找到了一种既能很好地工作,又能够很好地生活的状态。我主动做了很多变化,能够花更多的时间在家里,这让我很有成就感。」
他说等再过几年,等宝宝长得比较大了,他可能再把一部分重心逐渐转回工作当中,做更多事情,追求更多想法,这也未尝不是一种选择。
除此之外,他生活中还有一个非常狂热的业余爱好,就是足球。
「我不光看球赛,有机会我还会下场去踢球,平时也爱跟同事玩足球游戏。如果以后不做前端的话,即使没办法做球员,也许做个足球教练?
「只要有足球相关的东西在我的眼前,我就永远不觉得疲倦,这个还蛮神奇。有些兴趣爱好,可能一时兴起玩一玩,不会坚持很久,但是足球这么多年就一直没有离开我的生活。」
也许这就是工程师们或程序员们,就像 996 乐队的歌词所写,他们拼命工作,在代码的世界 like a hero. 但在工作之外,他们也对生活有着纯粹的追求。
–End–
技术的世界没有退缩的念头
追寻生活中的小小需求
最好的技术成就最好你我
让音乐来为自己加油
——《持续迭代》996 乐队