2018年初冬,在淘宝996乐队的《持续迭代》的余味中,winter 在 Vue Conf 上以“挖掘 Vue 的声明式交互能力”为题做了演讲
winter,本名程劭非,前手机淘宝前端负责人,阿里高级技术专家,JavaScript 专家,带领团队开发了阿里巴巴开源项目 Weex 移动前端开发框架。
说到前端圈内的技术大牛,winter 这个名字就不得不提。
winter 是谁?有人抓取GitHub中国区前100名用户,他排在第18位。
知乎三大程序员「温赵轮」中的「温」。
2016年的双十一会场,他带领团队开发的 Weex 前端框架覆盖了99.6%的会场页面,打开速度和页面流畅性都保障了完美的用户体验。
余晟评价他:「真正的全栈工程师不是什么都会,而是有足够的知识和能力,遇到什么问题就能解决什么问题。我第一次接触这个说法的时候马上想到,程劭非应当就是前端出身的全栈工程师。」
坚持自己喜欢的事,是一种什么样的体验?
winter 出生于 1985 年 10 月 24 日,恰巧是我国的程序员节。江湖人称「计算机之子」。
winter 的父母是最早的一批程序员,受父母影响,他很早就开始接触计算机。
但小时候主要是以玩儿为主,他真正接触编程是高中的时候,在文曲星上面编写小游戏。
那其实是个开玩笑的称号。当时还是在盛大的时候,同事说我爸妈都是程序员,就说我是计算机之子。本来应该说是程序员之子,是吧?我觉得程序员之子挺好,比计算机之子要好一些。
我爸的工作偏硬件一些,我妈的工作偏软件一些。我爸在大学里面教书,我妈后来转销售、市场了,他们那个时候市场和销售不怎么分。她还自己创过业,经历比较丰富,但是也没有什么特别的成就吧,哈哈。
我很早就开始接触计算机,从记事开始我家里就有电脑了,因为我爸妈都是干这个的。但是那个时候主要是以玩儿为主,真正接触编程还是高中弄了一个文曲星,当时它提供了一门非常简陋的语言——GVBASIC。
我凭借各种研究出来的奇技淫巧,跨越了它的内存局限,在上面编游戏,形成了一套方法。后来发展到大家有新型号的触屏版文曲星,我根据内存的变化状况,研究出来触屏的位置怎么读取。高中的时候干了很多这样的事情。
除了编程之外,winter 高中大学的时候还经常玩黑白棋。
他自己写了个黑白棋 AI,据说赵劼有一次把它某个版本的子吃光了,然后 winter 表示这是个 bug。
有人说喜欢一样东西是不需要理由的,但每个人对兴趣的选择其实并非出于偶然。
其实有一些兴趣是消耗型的,比如游戏你玩儿完了就结束了。但是编程不同,它是一种累积型的兴趣。你可能一开始不是特别爽,一开始很艰难。但是随着你不断地投入时间,它给你的成就感和满足感是越来越高的。所以,我还是会把更多的时间放在这种兴趣上。
玩游戏我也会比较偏爱这种发展型的游戏,而不是那种短时间、快速的游戏。所以呢,我觉得这是性格的导向吧。我很喜欢这种所谓的厚积薄发或者运筹帷幄,我喜欢做很有把握的事情。
高中开始对编程有了一些基础的能力和兴趣,再往后就是大学参加 ACM 竞赛。当时成绩也算不上有多好吧,亚洲区域赛入围,省级比赛的金奖,前几名这样。
所以大学的时候算是走上了正轨。后来自己到网上去找技术论坛开始学,然后参加工作,逐渐地有了更明确的方向。一直到现在也差不多做了十几年了。
进阶的方法论:态度与技能
编程是一种创造性的脑力劳动,这场漂流的大潮,它的规则就是不进则退。
我在上大学的时候,选计算机专业,因为我妈是做这个的,她其实很严肃地问过我一个问题。她说计算机这个事儿你选了以后一辈子跟着跑,你觉得你 ok 吗?我当时也没有想太多,我说好,可以。虽然我至今仍然觉得 ok,挺好的。但是想一想,当时这个问题可能比我感受到的要更严肃一些。
计算机的任何一个科目其实都是在拼命跑的,除了那些濒临淘汰的职业。我觉得其实前端并不快。客户端技术永远比前端技术发展得要快。只不过我们的某些领域,今天看似很稳定,但是可能真正革新的时候,你看不到那些变化。
前端的好处就是这些变化都在标准里面,你就盯着这个标准去走,就可以了。所有的东西都会有人告诉你它变了,推着你向前走。而且前端社区比较活跃,能够把这些变化直接地传达给你。所以前端很快是个误解。我觉得其实前端很慢,因为标准发展得很慢,一定比私有的技术要慢。
所以我倒是觉得前端工程师还是要更有危机感,就是不能跟着标准的节奏走,反而应该超在前面,看客户端里的那些技术能不能进到前端。不然就是很危险的事情。如果说有些工程师,他觉得连标准都跟不上,那我觉得可能这个人真的不太适合这个行业。
如果世界上有一种万能的天赋,那一定是长久的热爱与坚持。
关于勤奋的定义,winter 认为有两种。
我觉得天赋谈不上,但是勤奋呢,我也谈不上。但是这里面有一点,就是说我们怎么样去定义这个勤奋吧。如果我们把勤奋定义为积极思考的话,那我觉得我是勤奋的。如果我们把勤奋定义为夜以继日地在这上面投入,那我觉得我已经懒得不行了。
有些人是思想上的勤奋,有些人是行动上的勤奋。我觉得我思想上还是够勤奋的,包括新的技术也好,还是新的标准也好,这方面我始终没有落下过。我从来没有对自己讲过,你这个东西就不用学了。在我这里没有不用学,都用学。只是你有没有空,有没有更重要的事情去做,有没有更重要的东西去学。
我特别烦网上的有一些言论,就是说:哎呀我这个东西不用学了。这个东西学了是浪费时间。其实最后你会发现,这些人把时间都浪费在逛街看电影上了。我不是说他们不应该干这些事,而是说,这些人不学这个并没有节省出来时间。
怎么说呢?不管你出于什么动机去学习,原理都是一样的。有些东西是你必须要去学的,你总给自己找借口,其实什么都可以不学。计算机就是这样,你只会简单的 if、else、while 循环,你是可以写出来一切东西的。那么这样好不好呢?那我觉得肯定是有问题的。
有些东西你可以学了之后很讨厌它,我觉得这是另一回事。但是你因为讨厌它,你不想学,这个事情就很奇葩。任何新的技术,你还是要把它研究明白的。比如 React 最新出的 Hooks,我也把它评价得一文不值,但是我仍然认真看了它的实现和它的一些想法,我觉得这是个态度问题。
除此之外,一些细节也体现了 winter 对待技术的态度。
网上传言 winter 用记事本写代码。因为他非常注重软件设计和可调试性,所以他敲代码时更在意思考的时间,不会过于依赖工具。
有一次,因为和赵劼 PK 白纸写代码,他还改了飞机航班。
他也很乐意分享自己的经验,关于前端工程师需要具备的能力,他系统性地总结出了一篇文章。
首先我觉得前端分为三大基本能力:编程能力、架构能力和工程能力。在这个基础上具备一些前端的领域知识,更往上是对前端特有的构成体系的一些认知,就是说工具链,比如前端的性能问题,其实是这些实践中的体系。
我在淘宝工作的时候,其实已经总结出来了几个比较通用的体系,比如中后台体系,就是怎样去快速地生产这些给专业人员用的中后台的操作界面。这个可能要形成一套方法。关于前端的架构体系,就是怎样建立一套基础库,建立基本的研发能力,去帮助整个团队去复用和快速地生产。
然后,工具链和持续集成体系。这是通过工具统一提升团队的效率,帮助我们在线上减少问题,这里面也包括了监控与运维。性能体系,怎么产出性能更好的网页,怎样去建立从监控到人员的培训,再到跟其他端的配合,建立起这种真正提交给用户的高性能的网页。还有就是搭建体系,我们怎么用工具,就是用非代码的形式快速生产一些网页的系统。
这大致就是我们前端工程师应该特别关注的几个大体系,加上通用能力。我觉得这就是衡量前端工程师的一个技能模型。
程序员教育出了什么问题?
winter 在手机淘宝一直负责前端工程师的面试与培养,这让他对程序员的教育问题有了更多的观察和思考。
校招的时候我们去看通过的人,非常明显的一点就是他们都是主要靠自学的。没有一个人说我的学校教得特别好,都是说我自学了什么,我做了什么。我觉得这本身就是个问题。反映了我们的大学其实跟真正的行业需求匹配度挺低的。我不能说大学教得不好,但这个问题很明显。
因为这个事情实在是太明显了,像阿里招聘的通过率很低很低,招不到。
我觉得大学时其实应该更多地去写代码。我在大学的时候这方面感觉还不错,因为我参加了ACM竞赛,那个竞赛会写很多代码。它实际上是非常小的片段,类似一个个算法,并不能够成为很大的工程。我也看到大学里的老师很明确地发现了这些问题,在努力去解决。大家其实都有感觉的,我相信这个问题在几年之内应该至少会有所改善。
不是说彻底解决,但是一定会变好。因为有很多优秀的人已经投入其中。
我觉得这件事情有两个关键,一是怎样解决教育成果的评判问题,二是怎样解决师资的问题。我也联系过一些大学,其实他们最大的问题是没有好的师资。这个师资的问题是不是可以通过技术手段来解决;而评判的问题,我们可以通过商业模式去解决。我们应该能够去设计一种因为效果而赚钱的商业模式,通过这种方式拉回成本。否则的话,如果你去向学生收钱,因为学生缺乏评判能力,所以谁讲得幽默风趣,那就谁就能得到更多的生源。
但是这样最终只会变成大家都去说相声,然后把教育变成德云社小剧场。
我觉得最终教育这件事的解决,一定会变成受益者去买单,可能是企业去买单的这种教育模式。我们今天还有很长的路要走,所以首先应该是一些企业里的人开始关注教育这件事情。
他认为编程不仅仅局限于 IT 领域,也是未来职业发展的趋势。
我有时帮人家教教课,其实就是帮同事带带孩子,也有一些朋友会定期找我来学一下。很有意思,我有些朋友,比如猎头、律师他们想学学代码。所以,这符合我对未来职业的一种看法,将来各行各业都是需要写代码的。反而程序员可能会逐渐地变成一个很小的群体。
因为其实代码可以更高效地表达和执行,值得去学习。
律师要学到能分析卷宗是不是要很长时间?我觉得可能比你想象的要简单,因为我们有大量的库可以用。我们首先要建立编程的基本能力和思维,接下来只需要去理解这个库就可以了。我们并不需要自己真的去把这个东西做出来,所以实际上不会特别困难。
当然我们如果想要更进一步,觉得开源的东西不够好,我们想给它贡献,那是需要很长时间,这也不是我能够教出来的。我觉得,可能100个程序员里有1个人会去尝试贡献这些开源的库,这已经是很不错的比例了。
现在各行各业都开始学编程,这是一个必然的趋势,因为这样整体效率就会更高。就是大家都用代码,效率就更高。整个生产环节里只要有一个是非代码的,比如手淘的产品经理的文档,是文档而不是代码的话,效率马上就下来了。
因为人类本身的自然语言是非常不严谨的,会存在大量的互相沟通的时间成本。除非它是一个形式化的东西,填空。而这个就已经很接近于编程了。
前端如何优雅地进行职业规划?
winter 一直相信这句话:You are the owner of your career. 你是你职业发展的责任人。
我确实是从一开始就非常认可浏览器里面的前端这个方向。而且我从很年轻的时候,就发现浏览器里 JavaScript 的能力其实比大家认识的要强。所以从这一点上来讲,我应该从大三、大四左右,就基本上认定了前端这个方向是非常有发展的。所以我一直在努力地朝这方面积累。
我在微软的时候虽然是客户端工程师,但其实我做的是浏览器,然后到盛大我在做渲染类相关的东西,同时也会负责一些前端的工作。所以对我来说,还是找一个我认为它有潜力的工作去做。后来我的职业发展的选择都是经过了一定的思考和设计的,没有那种非常突然的选择。
我其实在盛大也不是全职的前端吧,到阿里算是百分之百的前端,也是个前端 leader(手淘前端的高级开发专家)。我觉得我在阿里之前,其实脑子里是没有线上这个概念的。在我看来整个的研发就是到产品的 deliver(交付)就结束了,觉得这个产品出来了自然而然就卖出去了。
在阿里,我了解了产品的后半段,我真正认识到了什么叫作商业。业务有运营,技术有运维,还有监控之类的。有了所谓的线上意识。一个产品从它做完的那一刻其实是一个新的开始。我觉得这个是我最大的收获,理解了很多商业上的逻辑。
另外,我觉得淘宝是我做的第一个真正的面向大量用户的产品。可能是因为我特别喜欢很挑战、很创新的东西,所以一直没有一个真正放到用户手里、被很多用户使用的产品。手机淘宝今天在整个市场也是最大的几个 App 之一,这个产品也始终会是我的骄傲。我觉得人一生能遇到这样的产品还是不容易的,虽然我也只是很多人中间的一个,但是这个真的是让我很有成就感。
我考虑工作跟考大学时,考虑的问题都是一样的。这个工作带给我的 scope 有没有变大,资源有没有变多,成长有没有变好。其实这几个维度里面就包含大家平时关心的一切问题,什么薪资、级别这些东西。所以它是比较全面的考虑,更接近本质吧。
因为如果你钱变多了,你做的事情还是和原来一样的,那迟早这个公司反应过来是要把你裁掉的呀!
做技术的人日复一日地沉浸于创造,点滴的进步终会汇聚成真实的变革。
其实知识始终都在那里,只不过你把它做成什么样的形式,去展现出来。所以从这一点来讲,我非常相信前端的机会都会在教育和出版行业。
因为社交,你不 care 聊天的气泡是方的还是圆的,背景是粉的还是绿的,关键是谁在跟你聊天呀!而淘宝这种电子商务,主要还是你到底能买到什么商品,你买到的质量怎么样,花多少钱。这个网站做出花来,也不如图拍的漂漂亮亮,清清楚楚。
我觉得从这个角度,前端在淘宝、腾讯这些领域,永远不会是一个非常重要的岗位。领域的特征就决定了它的前端只是一种锦上添花的东西。所以我一直坚信前端应该去做一些教育类的、娱乐的、展现性的事情。就算这次我还是找了一个工作,等两三年,我将来还是会做这块事情的。这是一个长期的规划。