本文仅用于学习和交流,不用于商业目的。非商业转载请注明做译者、出处,并保留本文的原始连接:http://www.ituring.com.cn/Art...前端
通往360的酒仙桥路真是名副其实的“堵”,难到是大公司感召人才的魅力所致?采访当天,恰巧碰到高校毕业生面试大军。这么想来,李松峰老师特地下来直接把我领进办公楼,确实有种“走了后门儿”的窃喜。以后,李老师带我来到了360著名的“南瓜车”型休息区,坐在里面有种"公举"的感受。不久,传说中的月影大大进入了视线。笔记本加手机,嗯,够专业!等真正进入了采访,月影大大的谈吐、逻辑彻底颠覆了我以前对技术员的偏见。后期整理虽然枯燥,时不时能被他广博的知识和独特的视角给惊醒,揉揉眼又是智慧一眼。程序员
早年曾在微软亚洲研究院作过访问学生,在金蝶软件有限公司前后担任核心开发工程师和项目经理,在百度电子商务事业部作过Web开发项目经理。在盛大创新院搜索主题院作太高级研究员。目前担任奇虎360副总监、360技术委员会委员兼前端技术委员会主席,前端最大团队——奇舞团负责人,w3ctech顾问。web
多年来致力于JavaScript技术和Web标准的推广,曾经活跃于国内极有影响力的JavaScript专业网站——无忧脚本(www.51js.com),并担任JavaScript版的版主。面试
平时热爱文学、写做和围棋。著有畅销书《JavaScript王者归来》、网络火爆技术文章《写给想成为前端工程师的同窗们》《前端动画原理与实现》等。算法
图灵访谈:我知道月影大大在前端方面特别有名,图灵社区的好多留言也都感叹终于有机会访谈到月影大大了。是何时开始接触JavaScript的?编程
我接触的时间算是比较早的了,若是从写网页开始的话,那时还没上大学,在高中的时候,大概1996年左右。咱们家上网比较早,算是第一批网民,那会儿我本身就写一些网页,只是简单地用一些HTML写一写,不是很专业,就作着玩。那个年代,很流行我的站长,我也跟着玩。后面接触到了动态网页技术,我记得当时用Perl写了像聊天室、留言本之类的页面。基本上不是很体系,就是瞎玩。 小程序
当时仍是以C语言为主,写一些小程序。大学的时候,学校并无专门的前端专业,但社团里面须要作一些网页,包括一些其余的宣传。后端
毕业之后,个人第一家公司是深圳金蝶,作ERP软件的。挺有意思的是,咱们那一届有一个半年轮岗的实习期。派到分公司后,我接触到的不全是开发,也作过售后、售前等各类东西。半年之后回到总部,参与了总部正在开发的一个内部web系统。当时的话,我还考虑是用.NET仍是Java,最后选择了Java。设计模式
当时看来,Java是比较适合的,由于这种企业级的系统用Java比较成熟,并且金蝶是一个Java很强的公司,因此也就学了Java这一块的东西。浏览器
涉及web系统就不可避免地要用到前端,我本身又没有系统地学习过前端,因此就用了Java的一些前端框架。以后,我发现用后端程序员使用的Java工具开发前端很不方便,因而回归到了标准的HTML、CSS、JavaScript 上,开始系统地学习JavaScript,好比说看犀牛书(《JavaScript权威指南》)、混迹无忧脚本。
图灵访谈:对,仍是51.JS论坛的版主。
由于常常发一些技术知识,参与一些讨论,算是比较活跃。
图灵访谈:应该说IT行业挺看重分享、开源的?
对,作技术的话,我挺看重分享的,这是一种互联网行业的精神。互联网早期的时候,可能比如今更纯粹一点。虽然如今的互联网,表面上看,存在一些开放精神,其实不少时候这些产品都已经商业化了,讲的更多的,是流量、变现、价值。
我但愿作技术的同窗可以继承早期互联网时期那些草根站长们身上的互联网精神。不必定为了访问量,才去作产品。回归到初心,我以为经过技术把产品作出来,分享给你们,享受分享的过程,这自己就很美好。
图灵访谈:你的微博昵称“十年踪影”,让我想到了纳兰性德的词“十年踪影十年心”。不知道是否出自这里?
对,确实出自纳兰容若的词。虽然是理科出身,其实我蛮喜欢文学,尤为是古诗词。像诗经、楚辞、宋词、元曲,我都会去涉猎一些。虽然小时候常吟诵的唐诗宋词大多遗忘了,但接触到这些诗歌都还挺美的。当成爱好跟朋友分享、拿来本身欣赏或是写写都挺有意思。
图灵访谈:从“十年踪影”“月影”到你写的《JavaScript王者归来》这些名字,能够看出做为“技术界的一股清流”你是很喜欢文学的。除了文学,平时你还喜欢写做、围棋。
以前会写一些包括技术的、非技术的文章,最近几年比较少了,但会坚持写技术博客。
图灵访谈:你怎样平衡生活跟工做呢?
其实刚毕业那段时间,平衡这块也不是很好。由于从事了本身兴趣爱好方面的工做,很开心。脑子里没有把工做和生活区分开的概念,平时下了班也想写写代码,写一点其余的东西。可是后来慢慢意识到,仍是要花些时间多陪陪家人、周末健身、休息旅游,合理安排本身的生活。
我在这方面仍是挺有表明性的。之前没有关注过这些东西,如今会关心身体锻炼。周末的时候,固定时间游泳健身,也会在家作作菜。
图灵访谈:其实图灵出过一本书叫《程序员健康指南》,可是受欢迎程度远不如技术书。从你这边说,是否应该注重一下?
应该注重一下健康问题。不少人可能有意识到,但改变多年养成的习惯也挺难的。
身体锻炼很重要,中午到公司健身房作些不太剧烈的运动,好比跑步机上慢跑一会,哪怕是楼下走一圈、散散步,保持更好的状态、更高效率地工做。
不要以为年轻、身体好,因此这些东西无所谓。当你工做了一段时间之后,你会以为天天熬夜、长时间久坐,很不舒服。
如今带团队的话,我不但愿底下的同窗由于工做致使身体方面的问题。我鼓励你们都运动运动,原则上也不鼓励过多的加班。作产品研发,因此项目都是有周期的,有忙有闲,是很正常的一个状态。若是遇到忙的状况,可能会出现周末加班,占用你们的一部分时间,但等到项目上线,后面会有一个调整期,你们可能相对的闲一点,我的学习时间也多一点。
图灵访谈:有人说前端的门槛低,切个图,搞个动态,拼个页面就好了。你以为优秀的前端开发人员应该具有怎么样的技能?
前端颇有必要分红两块:一个是专业的领域,还有一个是业余爱好者的领域。其实,我不反对把前端的门槛变得更低,由于前端实在太有用了,它的重要性决定了它的普及广度。举一个最简单的例子,把时间倒回20年前,谁会想到现在几乎每一个人甚至说一个家庭里面的孩子,均可以熟练使用电脑。20年前PC刚出现的时候,这是无法想象的。
当时,只有专业人士通过专门的培训以后,才可以上手使用,但如今的门槛已经变得很低了,PC就像家庭电器同样,已经普及成每个家庭必备的工具了,它影响和改变着咱们的生活方式。
前端也同样,前端在将来过重要了。过去的话,咱们可能把前端只当作是在浏览器上面展示UI的东西。将来随着互联网(IOT)、万维物联网(WOT)的迅速的发展,包括全部虚拟现实在内的各类智能终端能够帮咱们作不少事情。像智能手表、智能手环、智能家居,会须要愈来愈多的终端与人来交互。
智能自动化洗衣机多是你们用的第一台智能设备,将来发展的方向是把这些设备组合起来用。举一个简单的例子,我吃早餐的时候喜欢看新闻节目。假如我家的智能电视可以在我打开微波炉加热牛奶的时候,自动帮我切换到早间新闻的话,是否是就不用手动操做了?这实际上是很生活化、个性化的需求。若是物联网作得足够发达,就是没有通过太专业培训的人,也能够实现这种相似于简单编程的活动:经过一些图形化,或者是一些简单的直观方式来控制不一样品牌、不一样厂家制造的家电来完成这种自动化的逻辑。这也是将来前端普及的方向。
另外一块是更专业的领域,就是如何在这些家电的底层,在人机交互的界面,作出更好的展现、更炫酷的东西。举个例子,最近3D打印的话题很热门。其实,3D打印技术和显示屏的工做原理从本质来说都同样。你能够把在浏览器上显示网页理解成定时地、快速地、不间断地把内容打印在浏览器界面上,只是速度很是快,可能一秒钟打印几十次。因此CSS的媒体查询(media query)里面包含了打印机。从2D打印跨到3D打印,最大的难题,是咱们须要一个3D的表现模型,不管对于CSS仍是JS都是更高的要求。
虚拟现实的话,像3D眼镜、还有我在上海科技馆看到的那种球幕电影,将来均可能做为我的影音产品进入到咱们的家庭。这种状况下,如何把元素展示在这种球幕上,其实须要有更专业的技术。因此说前端的水很深,咱们要把它分红专业的和不太专业的。
最近在开奥运,可能你们对体育相对比较关注,我就用体育项目来作类比解释下“门槛高低”的问题。入门门槛高的领域,你能够把它理解成像跳水、体操的项目,由于不是全部的人,只要身体素质好就能够上去在单杠、双杠上面转几圈的,体操须要有专业的训练才能实现。入门门槛低的领域就像跑步项目同样,任何人均可以,只要身体健康、四肢健全的话,其实均可以跑步。可是咱们也知道爱好者的跑步和专业运动员的跑步是不同的:奥运赛场上的专业运动员,其实不夸张地说,在赛场上可以很精准地控制每一块肌肉,他可以追求很细节的、属于毫秒级的速度提高,这些不是普通人可以达到的。因此,跑步项目的金牌含量和跳水项目的金牌含量实际上是同样的。
前端跟跑步差很少,你能够用记事本、用简单的标签随手写一个网页,很简单,可是从专业的角度来看,一个专业的产品极可能须要专业前端工程师追求毫秒级性能提高、像素级设计稿还原。这就是一种专业精神,只有真正从事这个行业,真正进入这个行业的专业领域的时候,你才能感觉到;只有通过终年累月的积累和修炼,你才能达到这样的专业度。
图灵访谈:如何理解“计算机不只是一门科学,并且是一门艺术”?相比其余的领域,其实前端领域对这句话的感觉应该更强,由于前端就是要作出一些用户体验良好的界面也好,东西也好。平时工做的时候,怎样操做这门艺术来符合用户的胃口?
计算机科学是一种科学,它的本质是提升生产力。提升生产力的一个很是重要的方法就是合理抽象,只有把功能抽象到足够高,这个功能模块才能适用于越普遍的领域。
程序设计没有太多的诀窍,无论你是面向对象、面向过程、仍是函数式编程,无论采用哪一种设计模式,本质上是在作抽象工做。当你把现实生活的模型转变成一种数学模型,并反应在程序里面的时候,就可以提升生产效率,这也是程序最核心、最本质的价值。可是前端很难作到这一点,由于每个人的操做习惯都不同,每一个人想看到的东西都不一样,每一个产品向用户传达的东西也不同,人的活动是很自由的,你没办法去抽象。若是把个性的要求过分抽象,它们就会更贴近机器而对人不友好了。当你对人友好的时候,其实就无法对机器很友好,这是一个矛盾。前端的用户交互领域,一直存在这样的矛盾,无论是模块化开发仍是采用像MVC框架、MVVM框架,咱们只是在作有限的抽象:把一些复杂的交互活动拆解成一个一个的原子,包括HTML提出的标签、属性,CSS的样式。本质上是对渲染层作一些原子级的拆分和抽象。
可是这种抽象的能力颇有限。服务端的话,可能存在一套普适的方法论,有一个很牛的算法来解决这一类问题。但在前端的话,几乎没有一套方法可以去解决全部的交互问题。咱们没办法单用程序的思惟去解决前端问题,它须要运用各类知识才能把人类的交互体验带到一个新的高度。
我一直相信这样一个观念,就是程序员的工做是创做,写代码不是为了完成某个固定的工做。若是只是为了完成某个固定的工做,这些工做就是没有意义的,将来确定会被人工智能所取代。前端真正解决的是与人打交道的问题,所以差别性特别大。
图灵访谈:移动互联网的到来对前端开发人员产生了不小的影响,前端人员应该如何去面对挑战?
我曾经给团队设定的目标就是“从前端到端”,前端人员不该该把本身的目光只锁定在浏览器上,还要放眼于移动端和将来更多的终端。前端发展至今造成了一些相对比较成熟的方法论,能够适用于其余领域。
举个例子,我之前作手机开发的时候,我发现像iPhone、Android下面其实都有一些本身的布局,好比安卓有本身的layout,有经过xml方式的布局。没有前端背景的安卓工程师会用很繁琐的方式实现哪怕是简单的布局。好比说,在手机界面底部放一个bottom bar(一个固定高度的底栏)。考虑到不一样型号手机的屏幕高度不一样,没有从事过前端开发的安卓工程师可能会用一些比较复杂的layout组合来实现;但对于前端来讲的话,其实只须要用linear layout,把中间layout的高度设置成自适应,再把底下的挤到屏幕外面去,而后用一个负的margin把它浮动上来,就能够很完美地解决这个问题了。
过去的话,前端跟后端还有其余程序领域的交流不多,不少前端工程师并无从服务端去学习一些更先进的东西,web 服务端以及手机的原生应用开发者,也没有从前端学习一些东西。
如今,这个状况在慢慢地改变,边界也会变得更模糊。各类分辨率的屏幕、终端、甚至一些其余的设备好比非显示屏设备,包括各类传感器、执行器,其实均可以用前端的方法论来解决交互问题。
图灵访谈:做为360前端最大团队“奇舞团”的负责人,主要支持哪些业务?
主要仍是支持公司的业务,也有像众成翻译、爆米兔这些实验性的产品。而公司业务的话,咱们其实支持的产品线也还挺多的。
图灵访谈:这么多年的技术管理经验,是否能够分享给想要从技术转向管理的后辈?
其实不少公司都会给技术作的比较好的同窗一些机会。但就个人理解,我以为有一些人可能更喜欢作技术,愿意更深刻地作技术、写代码。
我带技术团队的话,其实优点仍是在技术上。从管理来说,这么多年也是磕磕绊绊,经历过不少的事情。我以为说,作管理其实比作技术更难,你必须去处理不少的琐事。若是你是一个喜欢专一、集中精力投入到一件事的人,刚开始作管理时会以为挺痛苦,可是慢慢地也会习惯。若是你致力于把前端行业作好,带团队可以作的事情确定更多。
图灵访谈:那你以为,作技术管理必定要像你这样在技术上见长么?
其实没有关系。关键的问题,是作管理须要对技术大方向的理解到位、看清趋势,还有必定的知识广度。技术见长的管理者要切忌心态狭隘,必定要开放,不要让本身的技术成为整个团队发展的天花板;避免保守,相信其余的新技术。我相信一个技术管理者确定有他独到的一面,但即使是技术不够好或者不够自信,也能够认可这一点、开放一点,鼓励团队里面的技术牛人来发挥他们的价值,甚至能够招聘或者培养一个技术牛人来一块儿带领团队。
另外,一些工程师在微博、知乎上抱怨经理“不干正事净作些政治斗争”。在我来看,大都是些误会。由于不少技术管理者都是技术出身,相对来讲的话,你们仍是比较单纯的。可能真的是管理者的管理水平问题,才致使了这些不舒服。你能够跟他好好地聊一次,他本身可能都没有意识到。对于团队来讲,团队成员间的沟通,leader对团队成员的绝对信任,以及团队成员对leader的支持帮助,实际上是很是重要的。不是全部的人天生就能面面俱到,无论是技术仍是管理,其实都是须要帮助的。
图灵访谈:团队面临多项目集体构建的时候,如何应对项目间共用组件的问题?
奇舞团有本身公共的平台,像公共组件库和公共编译部署工具,供全部项目开发过程当中使用。这些是咱们结合360的流程特色,给业务定制的,它可以适应大多数业务的基础搭建需求。反过来,从业务上收集到的需求也可以不断完善公共平台的建设。
公共组件是由每一个业务根据实践总结、提交上来的。固然咱们不必说,必定要全部的小组都去采用一样的标准、一样的方式去作业务,由于互联网产品的差别也蛮大的,有PC上面的、移动的、有嵌入式的(嵌入在桌面软件里的)、还有混合编程的。每一个产品的特色都不同,选择最适合的技术就好。不能为了作技术规范而作规范,相对来讲,我更看重的是产品技术方案的成熟度,包括文档、Style Guideline、代码review、线上质量、潜在风险,等等。
另外,我以为组建团队的一个重要原则,就是多元化。针对不一样产品选择不一样的技术,团队成员也会有更高的自由度。开发一个特别大的项目,或者带一个特别庞大的团队时,尤为团队人员的水平又良莠不齐的时候,你是不得不去采用统一的架构作规范的。也许这个架构并非最适合、最高效益的方案,但它有一个很是大的优势,就是保证技术人员不会写出一些破坏性的东西来把整个项目毁掉。
图灵访谈:如何支持底下技术人员的职业发展?
技术人员的发展有几个阶段,分别是学习、沉淀、分享和影响力。具体来讲,你要先学习,而后在工做中沉淀,等有了必定的知识沉淀之后去分享,而后打造你的影响力。影响力对于我的的职业发展颇有帮助,奇舞团鼓励中高级工程师具有必定的我的影响力。确实,有的同窗可能有产生惰性的时候,奇舞团的人比较多,也没办法一一照顾到。可是还有另一种状况,有的同窗我的是有意愿的,可是最近项目太忙根本没时间去规划发展本身。这个时候咱们会介入处理的,不然他就会彻底陷入到业务里面,对我的的发展一点好处都没有。咱们可能经过调配资源、增长人员、跟业务方沟通,或者其余的管理手段去解决问题,我以为,这也是团队管理的价值所在。