前端工程师成长之路
当小组决定让我写这个主题时,我是拒绝的,因为以我的资历,还远远不能积累到足够的素材、故事和教训来拼凑一篇像样的回忆录。因此,这里算是我的这个主题的个人
认识吧。
经常听到这样的言语:
现在业界对前端工程师这个角色的看法是有误解的,事实上前端的工作并没有那样简单。
我的个人观点是:__业界没有误解,前端的工作就是那样简单__。
最近在特别关注UI设计的社会培训课程,几乎每家培训机构在UI课程中都会加入一项”Web前端开发”,期望能在几天的培训课程后,能够让UI设计学员掌握一定的编码技巧,有能力承担简单网页的制作、JS特效等开发。可见前端入门水平之低。
让我们看拉勾网上一个招聘职位的 Job Description(JD):
1. 3年以上前端开发经验;
2. 熟练使用html和css制作符合W3C标准的页面,注重页面性能、语义化,能从整个产品的角度去考虑代码结构;
3. 熟悉JS,使用过JQ等前端框架,了解基本的语法
4. 熟悉AngularJS或同等框架,能做基于API接口的前端产品
5. 喜欢前端技术并且善于钻研,喜欢与他人分享自己的成果,乐于跟同行讨论问题
这是一个对有着三年工作经验的前端工程师的期望,
熟练使用html和css制作符合W3C标准的页面
,这就是前端工程师的基本工作内容;”注重页面性能、语义化,能从整个产品的角度去考虑代码结构”,ok,这有一点提升的要求了,不仅仅要求你制作的页面能用,还要求一定的优化。不过这一点属于extra内容,对于一家创业团队来说,现在重点是怎么迅速将投资人的钱转换为看得见的产品,起码有个交代,至于优化这些工作,你加班来做吧,反正老板暂时是不怎么care的;熟悉JS,使用过JQ等前端框架,了解基本的语法
,开什么玩笑,前端工程师如果不熟悉JS还能叫前端工程师吗,什么叫了解基本的语法,以现在这个年代的页面复杂性,恐怕需要了解全部语法而不是仅仅基本语法。不够了解全部语法也不是什么难事,相信99%的工程师都能做到,剩下那1%可以刨出工程师范畴之外了。JQ更不必说了,即使不是前端工程师,都有一大批人听说并且有能力使用;熟悉AngularJS或同等框架
,这要求又高了,AngularJS可不是所有前端工程师都听说过的,更不用说熟悉了,况且它那么复杂。这里有一个很有意思的点,”熟悉JS”和”熟悉AngularJS”,我理解这是一种包含的关系 ,熟悉AngularJS”必然”熟悉JS”,反之则不一定,因此,JD中的”熟悉JS”可以认为是废话;喜欢前端技术并且善于钻研
,这是套话了,暂且不表
看来三年的前端工作经验也无非如此,只需要掌握基本的职业技能,再花点时间稍微扩展一下知识就能拿到14k~18k的月薪了,前端就是这么一个low的职业,不需要你拥有高学历,也不需要你有能力解决XXX算法之类的烧脑问题。因此,无数非计算机专业的、计算机专业里常挂科的、野鸡大学的、培训机构的都来分前端这块面包,造就了大量的前端工程师。好在近两年互联网移动化转型,产生了大量移动web前端职位,前景似乎一片光明。
随着业务的发展,我们贴吧这样的前端团队也需要及时补充血液,在过去几个月里,面试了的很大一部分候选人。其实对于百度这样公司的人才甄选标准,能够进入面试环节,简历必然也是相当可以的。而且对于有工作经验的社招候选人,其编码能力也不会差到哪去,支持团队的日常业务开发任务问题不会很大。为什么大部分候选人会被毙掉呢?因为我们要的是工程师
,而他们更像是网页制作
。
这是一个很大的差异,你可以理解为战略和战术的区别:网页制作能够解决单个Case(一般是一个HTML网页)的开发就ok,而工程师则要负责一套包含HTML页面的整体解决方案。咦?前端的工作有这么复杂么?有的。什么时候有的?我不太清楚,最近几年吧。
我们看一些前端的工作都复杂在哪里。首先,当我们设想一个前端工程的时候,会考虑:
- 模板与数据:应使用后端模板渲染还是前端模板,后端模板对首屏性能友好,但需考虑前后端开发解耦;前端模板需考虑框架的维护性、升级;
- 静态资源:是否需要使用各种预处理器,如何打包;
- 组件化:是否需要组件化,使用何种组件化规范,这涉及到团队多人合作问题
上面每一个主题都可以拆成N多个小主题,涉及到的问题成百上千。其实前端工程中的真正难点还不是这些,而是备选方案五花八门,没有统一标准
。相对于其它领域,前端的技术发展太快,没有一种技术能够流行到成为主流。比如前些年的JS模块化规范 Require.js
现在已基本不被推荐,反而基于 Babel
的 ES6 Modules
越来越流行。能够利用自己的实践经验来有效规划合适的技术架构的人,已经成为了一种新的职业:前端架构师。
既然前端领域也如此善变和复杂,那么一个前端工程师应该如何学习和成长才能成为一名前端架构师呢?
- __精通HTML/CSS/JS__,这是基本要求,不再冗述;
- 之前对一个对前端工程师的基本要求,也是能体现前端工程师存在价值的一点就是能够__解决各种浏览器兼容问题__。在2015~2016之交的今天,这一点似乎并不那么重要,因为越来越多的公司抛弃了IE6&IE7,并且致力于移动端web开发,今天的浏览器兼容问题已经不同于从前;
- __实现UE设计的各种交互效果__也经常出现在各个JD中,这里的”交互效果”主要指特效。曾几何时,JS的主要应用场景就是写各种交互特效,写特效也是前端工程师的必备技能之一,能够写出炫目的特效往往成为炫耀的资本。在今天,Web的风格与N年前大不相同,夸张的动效不再是为了吸引用户的眼球,反而被设计者极力避免使用,以免影响用户体验。另一方面,在移动设备上,动画已经开始使用CSS3实现而非JS实现。总之,JS特效这一环节在当前已没那么重要,在简历上标记『会使用JS实现各种效果』已经没有什么权重;
- __精通原生JavaScript__,脱离jQuery等框架进行编程。一个框架没有绝对意义上的好不好,只有针对应用场景的适合不适合。通过编写原生JS代码,不但有机会了解W3C/ECMAScript/Whatwg等标准规范,还对你以后可能参与的JS框架的开发有益处;
- __熟悉常用的JS框架__,阅读优秀的开源框架,你能看到更多的编码技巧、更优秀的设计理念,对你以后的程序设计有着绝对有益的影响。特别地,职位面试中几乎都会有关注各种框架的问题;
- __熟悉移动端开发__,近两年移动设备的普及,特别是微信等传播平台的出现,使得前端越来越偏重向移动端,业界甚至产生了多个移动页面快速研发解决方案,如易企秀、MAKA、微页、兔展等等,可见移动端开发的重要性;
- __熟悉nodejs、php等非脚本语言__,未来全栈是一个很重要的方向,特别是nodejs成熟后,纯js平台的全栈对于小型团队来说尤为重要;
- __了解前端工程化__,工程化能力才能真正一个工程师而非网页制作的价值,它需要对前端开发中的各个环节都有清晰的认知。如果没有工程化思考,复杂的前端项目将无从谈起,只会停留在网页制作的水平。
以上几点是我对一名前端工程师的能力的基本认识,这与几年前相比几乎是截然不同的。之前很重要的技能在今天看来不值一提,今天必备的技能在之前看来也是遥不可及,可见随着时代变迁、技术的发展,对工程师的定义也会发生翻天覆地的变化。
那么成为一名合格的前端工程师之后,如何变为一名前端架构师呢?这里我认为有两点特征就够了,这两点特征也是大多数人的瓶颈,阻挡着大部分候选人进入百度,也阻碍着大部分”网页制作”变成”前端工程师”。这两点是:
- 学习能力
- 总结能力
在任何行业任何工种下,学习都是一个永恒的话题,特别对于web前端这样高速发展的领域。只有通过不断学习,才能有机会扩展视界,沉淀出足够的技术方案。同时,也只有总结,才能归纳出最合适的方案。这两点缺一不可,前端提到的几点要求只是现状,如何不满足,但拥有足够的学习和总结能力,这些就都会很快解决。因此,学习能力和总结能力才是工程师成长中最需要掌握的技能。
现在我们回到前面,为什么我说”前端的工作就是这么简单”,因为绝大多数业务的需求就是比较简单,只要开发一个可以看得见的网页就好了,这是普通网页制作人员就能Hold住的工作内容。这也说明了市场上绝大多数所谓”前端工程师”都是”网页制作”。一旦业务升级、团队规模扩大,”网页制作”的工作就会立即将整个团队的业务节奏推向万劫不复的深渊。一般地,在这种情况下至少会有一个人发现了问题,并开始解决,从此走向了”前端工程师”之路。
因此,在你的成长过程中,遇到困难和问题并非一定都是坏事,往往越糟糕的环境就越能激发你的创造天赋。在这一点上,一个有一定发展但又不足够成熟的公司往往更适合你的初期发展,它会培养你的学习和总结能力。我个人认为在中国,BAT这类公司并不合适,反而像豆瓣、知乎这类中小型公司,效率相对更高,会提供给你更大的发展空间。当你发现自己在这类公司中已经解决了很多问题,积累了足够的经验后,再去大型公司,比较一下他们的工作,会发现你之前的工作方式是多么低级和不规范,从而产生敬畏之心。当你怀着一份敬畏之心来对待这份工作,你会有着不一样的看法:前端领域深似海。
当我本人看穿这一切后,忽然觉得,前端如此,哪个领域又何尝不是?一味地追求极致只会让自己陷入我执当中。技术界多有高人精通,却有几人真正明白这些都是对于不完美的妥协?生活亦如此,每个人都称热爱生活,谁又会在意其背后的心酸、苦楚与无奈?
一切技术都是浮云,美好生活才是真谛。当你做这份工作时,失败和妥协只是你成长过程中不断被踢开的绊脚石,热爱和坚持才是那永不枯竭的推动力。不要过份追求成长,当你的经验教训积累足够,成长就会像那初春解冻的冰川,势如破竹。