非商业转载请注明做译者、出处,并保留本文的原始连接:http://www.ituring.com.cn/article/133104前端
赵望野,现任豌豆荚Front-end Team Lead。他2011年加入豌豆实验室,曾负责豌豆荚 Windows 版的前端架构设计和主要开发工做,以及 Front-end Infrastructure 的研发工做。当豌豆荚从一家初创公司成长为一家得到上亿美圆投资的企业的时候,赵望野也在他的职业道路上不断成长着。随着业界对前端工程师价值的逐渐承认,愈来愈多的人才开始进入这个领域,而赵望野却认为这一切都“有点晚了”。他的困惑来源于变化的环境和前端工程师这个有些特殊的群体。而他,也逐渐从一个单纯的工程师变成了一个以解决问题为目的的人。面试
“我以为我不傻,这个公司到底靠不靠谱,我干一阵是可以判断出来的。”算法
问:你从何时开始编程的?编程
我第一次写代码应该是七八岁,由于我爸爸是哈工大的教授,因此计算机是做为年轻的科研工做者得的奖。写程序我第一次用的是Basic,而第一次作有界面的东西,用的是Visual Basic。我是在初二的时候第一次接触互联网,那时候接触了一点点Web开发。后端
问: 你大学学的是什么?跟计算机有关吗?浏览器
我是在中国传媒大学上的数字媒体艺术专业,算是相关。由于本质上专业培养目标是可以利用新媒体技术、艺术结合去作一些事情。虽然咱们专业到目前为止也没给新媒体一个准确的定义,可是互联网确定算是新媒体之一了。而我本身的我的兴趣是作一些网络、Web开发方面的事情。微信
问:你如今从事的工做都和你的专业相关吗?网络
算是相关。你很难肯定某个东西究竟是不是网络多媒体,由于这种交叉学科口径很宽泛,包括咱们专业课的设置,学的东西也是很是杂的。我前两届的学生还在学数字电路、模拟电路这种纯工科的课程,到我这届就删掉了。我这个专业比较新,我研究生的导师是这个专业的创始人,2002年是第一届,因此我入学的时候尚未毕业生。这个专业到底应该是干什么的、怎么发展,也是在一个逐渐摸索的过程。但本质上,我如今作的这个其实算是Web前端,就是UI,那UI算不算网络多媒体呢?我以为是算的。前端工程师
问:其实你如今用的不少技术都不是在学校学的吧?数据结构
对。我以为这是一个普通现象,不仅是前端,甚至不少的后端工做,好比作Windows客户端或者作iOS客户端开发都是。由于本科教育相对仍是一个比较基础性的教育,我以为不会有专业去教你JavaScript,有的话也都是像选修课这样的形式。专业基础课大部分仍是比较经典的教学语言,像C,或者是Pascal,也有多是C++。更重要的是基础,好比数据结构、算法、操做系统这些。不会有一个大学专业课教你一个框架、教你一个具体的技术平台、怎么去作移动开发、怎么去作Web开发。因此我以为这应该是个广泛现象。
问:你是怎么加入豌豆荚的?
在2010年年末的时候,我当时已是研究生了,带着咱们的本科生来创新工场参观,当时有人接待了咱们,说:咱们在招人,有想来实习的同窗能够留个简历。本科生没有一个留的,但我留下了个人简历,至关于我把简历扔给了创新工场的人力资源库。当时大概面了两三个项目,除了豌豆荚,剩下的我都不记得了,。我面试的时候豌豆荚还没搬出创新工场,我入职的那一天是他们刚刚从创新工场搬出来到本身独立的办公室。
问:选择一家初创企业其实仍是颇有风险的,你是如何决定的?
我以为这首先是个我的选择问题。第1、风险确定是和收益并存的。第2、由于我当时也只是实习,其实对创业这事自己并无什么概念。包括创业会有多大风险,到底会面临什么样的困难,会有多少收益,其实并无一个很直观、很明确的判断。我周围的师兄师姐,包括个人同窗,也没有人参与过创业,你们对互联网创业这事也都不很了解。本质上,首先我以为我不傻,这个公司到底靠不靠谱,我干一阵是可以判断出来的,当时也是实习,对我来说风险并无那么大,由于我并非毕业找工做,因此先干着呗。大概干了一个Q吧,就以为这里还挺好的。
豌豆荚的文化和睦场如今对于不少人来讲是颇有吸引力的,你去的时候,有这样成型的文化和睦场吗?
有,可是我以为公司文化这件事,并非你刻意想要一个什么样的文化。本质上说,早期加入的人少,跟你一块儿工做的人你喜不喜欢,若是你喜欢的话,说明大家的气场是类似的,大家作事的方法、态度,包括三观应该是一致的,慢慢地这些人聚在一块儿天然而然造成了这样一个文化。可是可能到一两百人以后,才会有意识地回来把这个东西总结一下,“咱们的公司文化是什么样的”,才去对外传达这样的思想,而并非很早的时候就说咱们要一个什么样的东西。好比像豌豆荚的三个创始人在一块儿,我加入他们以后,会以为之前这几我的作事的方法、价值观跟我都是相符的,我天然也喜欢他们,因此就加入这了。
“若是Web技术在移动设备上面的消亡是一个不可避免的技术潮流的话,那可能前端工程师真的要好好考虑一下怎么去规划本身的职业路径了。”
问:几年前,不少人对前端工程师的价值并非很承认,你以为最近这几年这方面有没有改观?
我以为是有改观的,可是有点晚了。如今的状况是,你们并非不承认前端工程师的价值,而是说这个水太浑了。前端工程师数量不少,可是这里面真正意义上能够被称做合格的前端工程师的数量并很少。好比我会切个图,会拼个简单的页面,如今传统行业也在作内部系统或者本身的门户站,像这样的程度不管从工程质量仍是项目复杂度来说,简单的培训均可以完成。这有点像专业技能,大部分前端工程师的能力就停留在钳工、电工这样的水平,而并非一个真正意义上的软件工程师。
咱们认为合格的、符合咱们用人标准的前端工程师是我能把他当成一个真真正正的软件工程师来对待,这个数量是比较少的。你们以为前端门槛比较低,不少人都能作,技术含量比较低,但本质上不是这样的。
近些年有所改善是由于互联网泡沫破裂以后,行业开始进入了一个健康的发展情况,竞争也进入比较正常的情况了。任何行业都是这样,行业健康发展的一个标志就是不少人开始作同质化的事情。这个时候前端工程师的价值就体现出来了,由于前端工程师是最终决定你的产品能不能从80分进到100分甚至120分的人,是体现竞争力的。好比一样我都是作一个阅读软件,或者SNS网站,其中一部分是产品设计师或者PM的工做怎么样,若是咱们把变量变成一致的话,差异就在前端工程师上。他们实现的东西究竟是不是用户便于用的:界面精美,使用体验流畅,加载速度快。前端工程师会在同质化竞争时体现出竞争力的一部分。
若是一家初创公司不注重这一块,不把使用体验看成一个竞争力,那说明这家公司仍是处在一个比较初期的竞争阶段,由于没有竞品,他们拼市场、拼功能,当有了竞品以后才会去拼产品。产品竞争力的一部分是由产品设计师和PM来决定的,另一部分就是前端工程师,特别是对Web产品来说。
我为何说这事有点晚了呢?由于如今已经进入移动互联时代了,PC上面的Web流量大幅萎缩降低,可是却并无转到移动设备的Web上面,而是转到移动App上面。在移动终端上,Web技术只能做为一个补充,移动设备并非Web前端工程师的主战场。因此如今不少前端工程师会比较迷茫,或者说将来怎么发展,是否是要转行去作Android开发,或者iOS开发,不少人会有这样的想法。包括咱们本身的前端团队其实也在探索前端工程师在移动设备上怎么去发展,若是要转型的话,怎么转,咱们作一些什么样的事情是更能体现出咱们价值的。
问:到底什么是前端?
我以为如今前端的概念比之前你们所广泛认识的范围要广。前端工程师是干吗的?作UI的。这个词在英语里面自己指的是接口, interface自己并不仅是你看得见的,一个能点的按钮叫interface,USB也是interface,火线的IEEE1394接口也叫interface,因此它指的应该是两个系统进行信息交互的中介。因此前端工程师作的应该是可以把服务或系统转换成用户可以接受的形式。好比我是豌豆荚的前端工程师,豌豆荚能提供什么样的服务,我把背后的复杂的技术系统转换成用户可以接受的信息形式。好比,我把应用搜索或者咱们如今作的应用内搜索转换成这样的信息形态交给用户。用户看到的就是我手机上的一个App,或者在Web上面的一个搜索框,同时,可以把用户输入的信息,再包装成系统可以接受的形式传递回来,做为一个中介在里面存在。
咱们如今说的前端实际上是指狭义的Web前端。咱们的技术团队其实也在探索,是否是整个作客户端开发的,均可以叫作前端。不管Windows开发、iOS,或者作Andriod开发,平台复杂度都要比Web高一点,可是作的事情是同样的。好比说用户给了我一个搜索请求,怎么去查我并无论,我只是把这个东西扔给后端,后端把结果返还给我,我把它作成一个交互流畅、界面精美的体验,把这个结果包装一下还给用户。前端工程师的视野必定要很是开阔,纯从用户角度看多是更偏向于PM或者设计师,纯从技术的角度看可能会偏向于架构师,我以为前端会在这里面找一个平衡。
问:你以为如今前端工程师的发展路径能够是什么样的?
若是你要说三四年前,可能仍是PC上面的Web会占主导,那个时候客户端彻底没有办法跟这些作互联网的公司竞争,作互联网最主要的就是在浏览器里面落地。如今这两年,移动互联网的发展很快,前端工程师会有点迷茫,不知道本身该干吗了。由于若是一个公司只作移动端的话,那颇有可能前端工程师在这里面就是一个非主导的地位,在工程团队也会比较边缘化。但这个题怎么解,咱们没有办法给出特别好的答案,由于咱们本身也在探索。但我也并不以为这是一个问题,由于若是你是一个工程师的话,就知道任何事物都有发展的天然规律,若是咱们有一天认为Web技术不适合移动终端这种使用场景的话,那前端工程师就转行干别的吧,能够去作Andriod开发或者作iOS开发。
问:关于Web应用和原生应用争论,你有什么见解?
如今整个前端圈子里面有一小撮人,有点像原教旨主义者,他就以为Web是一个神圣不可侵犯的既有体系,“客户端已死,Web永生”,他们以为在移动设备上面,Web终有一天会赶超原生应用。但我以为这不是目的,Web只是一个技术手段,为何必定要在移动设备上赶超原生技术呢?
全部的工程师仍是首先应该把用户放在第一位,你要解决的是用户的问题,而不是用一个特定的技术手段去解决用户的问题。我见过不少人,他们处处去跟人争辩,说Web如今发展得很快,必定会在移动设备上大有所为的。可是没有办法回避的是,Web确实性能没有原生应用好。也有人反过来讲,过几年随着硬件的发展,手机CPU变得更快,内存更大,那Web技术可能就会变得更快了,可是他们忽略了一点,Web变得更快的同时,原生技术也更快了。
虽然我是豌豆荚的前端工程师,但首先我是豌豆荚的工程师,因此我要解决的是用户在使用移动设备时遇到的问题,而个人目的不是用Web技术去解决他的问题。这两年咱们也看到不少大公司成功地把本身在移动终端上面的客户端,从混合形式转成了纯原生形式。好比Facebook,这是你们都公认的比较优秀的产品,他们曾经在早期的时候选择用混合的技术形式作移动客户端,可是最终放弃了,都转成了纯原生的开发。而iOS开发和Andriod开发又彻底分红了两条技术路线。
问:还有没有其余技术路线?
可能会有一些比较特殊的。好比最近Google在公测的软件叫Inbox,它选择的一条路是,用Google的GWT和另一个叫J2Obj-C的框架写了一份代码,但他们把这份代码编译成JavaScript的Web版在浏览器里用。又由于代码是Java的,因此就能够直接在Andriod里用,而后我再把它转成Objective-C在iOS里面用。但这些都跟Web没有必然的联系,虽然我写的代码能够在浏览器里跑,但它并非一个Web技术的解决方案。因此这些东西究竟是不是前端工程师的工做范围,将来会不会转向这条路,其实我并不知道。若是Web技术在移动设备上面的消亡是一个不可避免的技术潮流的话,那可能前端工程师真的要好好考虑一下怎么去规划本身的职业路径了。
问:为何Web前端工程师会感受转行很困难呢?
我遇到过不少人之前多是作Windows客户端开发或者是作Server端开发的,作Windows的可能转Server了,作Server的可能转去作Andriod,或者转去作iOS,并不会有特别大的困难,由于他们的基础知识是没有问题的,就像我刚刚说的数据结构、操做系统原理这些知识体系的基础。但为何Web前端工程师如今会以为转行很困难呢?缘由在这:他们的基础知识有缺口。
咱们如今的实践经验就是:若是一个颇有经验的Web前端工程师去作Andriod或者iOS,可能在用户体验这块的感受会比较强,但技术上并无任何优点,由于Web平台的复杂度比iOS和Andriod低得多。不少公司招Windows客户端工程师的用人标准是非五年经验的我不招,为何?由于Windows平台复杂度很高。若是你C++代码写得再好,可是没有作过Windows平台开发,没有那三五年的时间去摸索Windows平台的API和特性,你是不可能作好Windows客户端开发的。Web前端也是客户端开发的一种,只不过是限制在浏览器这个技术平台里面,而浏览器这个平台的复杂度是远低于Andriod和iOS的。这就是为何不少前端工程师会以为本身转岗很困难的缘由,本质上仍是由于基础知识的缺口。而反过来Andriod和iOS的工程师转Web,并不会以为很困难,他可能不知道浏览器有什么API,可是不可能连Javascript这个语言都学不会。
Web技术最主要的编程范式是声明式,所谓声明式,就是我写个HTML的标记,声明我要什么,可是这个东西在浏览器里怎么渲染,我控制不了。另一个比较典型的声明式范式的语言是SQL,我只描述我要什么,可是后面会有个很复杂的体系来按照个人描述去实现。它的好处是你很容易抽象你的需求,学习成本会比较低,可是代价就是牺牲了运行时的效率。若是你开发又简单,运行时又快,那原生技术就没有存在的必要了。原生技术不是声明式的,好比界面是怎么渲染的,你要用代码去控制渲染的过程,你不能简单地说我要一个表格,它就给你个表格。而Web是这样的,Web说我要一个表格,浏览器就给它个表格,你再告诉浏览器说我要一个5像素的阴影,那浏览器就给你一个5像素的阴影,前端工程师根本控制不了这5像素的阴影怎么画上去,或者说只能在很小的范围内控制。这其实和时间换空间,空间换时间这个简单的哲学原理很类似,不可能二者兼得。
“我接触过不少前端工程师,他以为差一像素就差吧,可是UI质量可能差异就在这一像素上,你差了这1像素,就不是100分了。”
问:对你来讲一个优秀的前端工程师须要具有什么样的技能?或者什么样的知识结构?
前端工程师应该首先是个工程师。如今不少前端工程师,包括我面试的,可能会在基础知识上有所欠缺,基础的数据结构、基础的算法、操做系统原理,这些对一个软件工程师来说很是基础的内容仍是要知道的。若是不知道的话,你可能会成长得很快,可是很容易进入到一个瓶颈,而且这个瓶颈是没法突破的,由于你的知识结构是有残缺的。
其次是我的素质,好比说对细节的注意力。前端工程师作的东西,不管是本身实现的,仍是按照设计师的设计稿实现的,差1像素就是差。那这1像素你能不能看得出来,而且把它纠正过来,这其实不少状况下取决于我的的素质和对细节的注意力和追求。由于我也接触过不少前端工程师,他以为差1像素就差吧,可是UI质量可能差异就在这一像素上,你差了这1像素,就不是100分了。
第三部分是你要对用户体验有一些基本的了解和判断,什么样的东西体验是好的,什么样的东西是体验流畅的,怎样可以让用户更有效地去接受你想传达的信息。一些交互设计上的最佳实践是必定要知道的,这不彻底是设计师的事,前端工程师也要参与进来。
问:你在面试的时候,除了这些技能以外,你还看重别的什么吗?
其实我我的会比较看重一我的的视野。不少部门说我也看重视野,可是前端工程师应该尤为看重,由于前端技术更新迭代太快了,Web技术自己就很是不稳定,你今天会的东西,明天睡一觉可能就已经发生变化了。前端工程师若是视野不够开阔,你所了解的东西广度不够的话,就很难跟得上这种进步速度。
另外,前端是最接近用户的这一端,你不只要能从工程的角度,从站在你背后的产品设计师、后端工程师的角度去跟用户交流,同时你要能站在用户的角度,反向地跟你后面的这些设计师和后端工程师交流。好比后端工程师给我一个API,我做为使用者来讲必须能判断什么是好用的,我才能把后端想要传达的信息有效地传达给用户,再把用户的交互反馈给系统。前端工程师要站在两个角度去沟通,要可以从很是不同的角度去看待同一件事情。
我看你在一个Talk里面说过“统一的前端研发生态环境可以自生长”,这个大家是如何实现的?
首先“自生长”是为了作Talk包装出来的一个概念,但若是要把它说成大白话的话,所谓“研发生态环境”是指的是开发环境、测试环境、生产环境和运行环境,这是你的代码会跑的一些独立的物理上隔离的环境。这时候就须要有个工具链,能把整个环境穿起来,尽可能减小在整个研发过程当中工程师的一些机械性手工操做。
所谓“自生长”是说,由于一个工具链上涉及到不少的小工具,这些工具都像珠子同样串在一块儿,可是每一环我均可以独立地去替换它,“自生长”保证了这些工具都是很是原子的。若是有一个工程师以为如今咱们在整个研发过程当中某一个环节不够好,自动化流程不够,想去优化它,那他就能够单独针对这一小块去优化,而不是给你一个很庞大的技术体系,想要把这个东西使用明白都得花很大的精力。
因此所谓的“自生长”是说每一个人均可以很容易地对你整个技术环节当中的一个小部分进行改进,它就可以日趋完善。可能今天我改一点,明天你改一点,日积月累下来,整个工具链就会愈来愈完善。
问:这个体系在大家团队里实现起来有没有遇到困难?
困难却是没有。可是这个东西作完了以后,我得Push你们去用,若是你们不用,就很难让这个东西达到我所说的自趋完善的过程。豌豆荚作事的文化并非上面给你一个任务,你就必定要去作。而是这个东西我痛了,谁痛谁驱动。我把这个解决方案给他了,他一开始可能不用,但时间久了以后,他痛得不行了,就会尝试一下看看能不能改进痛点。因此这个过程会相对比我以前预想的缓慢。但如今基本上这个事情已经进行完了,咱们如今整个前端的研发都是构建在我以前作的那套系统之上。
问:你刚才说你很重视视野和学习的能力,那么你是怎么更新本身的知识、工具和技能的?
我以为仍是要保持一个高度的关注吧,首先我订阅了不少国外的技术博客,包括圈子里面比较知名的工程师,他们都有写博客的习惯,我会去关注他们正在作的事情,也包括一些公司的技术团队的技术博客。比较知名的像Google有本身的Google黑板报,当他们作了一件比较牛的事情,就会放一篇Blog出来,我会长期关注这件事。我之因此不多关注中文世界,是由于会有滞后。
前端技术发展实在太快了。若是如今后端一些作Server的工程师,还在用两三年前的技术方案不会有人以为是彻底不可接受。但若是如今前端工程师,好比我面试的时候,若是你不知道什么叫前端MVC,没据说过Angular,Backbone这些前端MVC框架,那我以为这是一个彻底不可接受的事情。整个前端的技术体系就是逆水行舟不进则退,基本上以周甚至以天为单位更新本身的知识体系,要时刻保持关注。
问:那你如今工做中都使用什么样的框架和工具?
若是专指前端的框架的话,咱们豌豆荚仍是挺丰富的,咱们并不像不少公司同样会指定特定的工具,我知道有一些公司如今在用YUI,还有一些可能用Backbone或者Angular。首先咱们并不指定一个团队只能用一个框架,咱们根据产品的不一样选择一个最合适的解决方案。之前我作Windows客户端的时候,用的是Backbone,后来的海外产品,以及不少内部产品用的是Angular。咱们也但愿你们能多接触不一样的技术解决方案、不一样的框架,去了解这些框架背后的设计哲学,解决问题的角度,这会带来不少的启示。咱们现行还在维护的产品里面用的就有Backbone, Angular, React,咱们鼓励解决问题,但不鼓励用同一种姿式不停地解决同一种问题。咱们作的一些内部项目,你们会以为比较机械,不肯意作。可是若是用一种新的技术方案,在解决一个问题的同时还会学一些新东西,这也是一个不一样的思路。
问:你对本身有没有什么规划?想一直作前端工程师?
我本身其实并无特别明确的规划,可能也跟我本身所处的环境有关,由于豌豆荚实在发展太快了,我五年以前也不会想到本身会发展到今天这样。这四年在豌豆荚走过的整个成长路程,并非一步一步规划过来的。不少时候若是你真的潜心在工做里面,什么也无论,可能过了一段时间后你会发现你比本身想象的走得更远。在互联网这个外部环境变化比较快的行业里面,超过三年的规划我以为意义都不大,由于一年之后可能整个外部环境就彻底不同了。我本身如今可能会作一些团队管理,包括产品的研发管理上面的事情,这也是我两三年前彻底想不到的。之前我以为本身会一直作工程师,前端作不了,我会去作别的,但如今看来,“作事”对我来说可能更重要,技术只是一个手段,是支撑之一,还有其余的东西须要保障。
我如今在作的产品,前端只是众多技术体系的一部分,我想要把这件事作成,只盯着前端这一块是不行的。之前我只作工程师的时候,一个问题来了,个人反应是这事我前端应该怎么作,前端能作到什么范围,如说一个功能到底应该由前端去作仍是由后端去作,我只能站在前端工程师的角度去考虑这件事。但如今我会更多考虑的是我要把这事解决了,无论是前端仍是后端,首先要把这事解决了。因此思考问题的角度和整个目标会不太同样。
问:知乎上有相关的讨论,码农35岁之后怎么办?
不少人感受如今一些工程师牛了以后就不写代码了,底下就会有一堆人站出来反驳,国内的谁谁谁,如今多少岁还在写代码,但这只是个例。从总体上看,确实国内的环境相对比较浮躁,位高权重了以后就不爱写代码了,这是个广泛现象。固然也有个例,可是用个例来推导出结论是不科学的。确实国外的情况要好不少,一是竞争环境不太同样,生存压力也不同。另外,国内技术驱动的公司很少。人写代码能创造多大价值,就是你能挣多少钱和你在公司里的地位。若是你十年如一日地写代码,可是到你40岁写的代码跟你30岁写的代码创造的价值是同样的,那活该嘛。写不写代码这不是决定你有多大影响力和有多少收入的根本项,关键是你创造多少价值。