最近在脉脉、知乎等平台都有人在渲染前端从业人员的危机,甚至使用“前端已死”的字眼,颇有“语不惊人死不休”的意味,对老鸟来说,这关乎职业寿命,关乎生活,但因为浸淫行业多年,个中变化比较了解,应该不会太受影响,对新人可能就有误导了,甚至不敢入行。
谨以此文,分享一些个人感受和看法。
背景介绍:
我从业10年整,经历了从前后端不分离,JQuery,到现在到处开花。
经历过从小厂到大厂,再到小厂。
从事过网页制作、页面重构、前端开发,现任前端负责人。
经历过裁员,空窗,若干次被面试,若干次面试。
常年关注行业动态、技术动态,保持对行业和职业发展的思考。
鉴于以上,相信这篇文会对屏幕前的你有所帮助。
唱衰
唱衰一个职业不是第一次出现,更早时候是客户端,到现在仍在继续,但过去这么久,客户端死了么?
“衰”的表象是:岗位机会减少,面试难通过,薪资不及预期。
人才市场怨声载道:投了几十份简历,一次面试都没有,面了很多,一个满意的offer都没有。这个职业是不是不行了?
怎么看待一个职业的发展前景?这不是某个人说了算,要看市场需求,看分工。就像曾经因为历史原因,在腾讯、携程等公司出现过少量页面重构岗位,大家经常一起讨论Web标准、、语义化、CSS新技巧、设计模式、提效工具等等,这跟当时的国内环境是相关的,前端开发刚起步,大部分人从零开始入门,对基础知识的学习和研究是大家共同的兴趣和需要。页面重构职位,相当于在前端岗位的基础上,再次细分,重构人员来做切图、页面结构和样式、交互,前端开发做业务逻辑、展示逻辑。它确实在某一个时期,起到了关键作用,引起了大家对视觉稿还原、样式创意、遵循标准编程等方面的重视,也输出了一些精通这方面的人才。
但后来的情况大家都知道:Node、Angular、React/Vue、小程序、Flutter、Electron、WebAssembly…前端的走向逐渐变成了大而全,而不是小而细。
这种情况下,你说页面重构岗位有危机,可能会慢慢不存在,需要有忧患意识,是有事实依据的,但就像上面所说,前端近几年,甚至往后几年,岗位需求都不会变,大而全的走向不会变,这样的形势下,说“已死”,未免有些滑稽。
既然不会死,为什么显得没有那么繁荣了呢,且往下看。
找工难
要说唱衰的来由,就是“找工难”,而不是前端岗位消失。
既然职位本身没有衰落,找工难是为什么?总结起来无非是供大于求。
供:来自持续不断的新人进入,新人包括应届毕业生、培训班等,但同时不会有同样规模的老人退出,所以每年活跃在外的人才数量都是纯增长,且增幅很大。
求:大公司快速扩张,小公司大量涌现的时候,是需求最旺盛的时候,但恰恰相反,近几年是小公司大量倒闭,大公司脚步放缓,这就造成了“求”大大减少。
还有一些情况使人力外溢加剧。
- 裁员:教育、区块链等政策问题、行业问题,经营/管理不善,组织架构调整,降本提效,人员优化。
- 跳槽:工作不如意,拿完年终奖,年初新的年度人才计划推出,跳槽高峰。
当“供”持续增加,“求”持续减少的时候,就没有那么多机会出来,而少量的机会,竞争也激烈起来,就会出现“明明觉得自己还行,就是面试过不了”的情况。
到底为什么过不了?
“框架 + 库”工程师
前端开发经历过多个阶段。最初是会用 div + css 布局,会Jquery,到后来,会做移动端、angular、会使用grunt、gulp,到再后来,Vue/React、RN、Flutter,Webpack等等。
要求越来越多,越来越新,从招聘信息到个人简历都罗列一堆名词。
Vue、Vue-router、Vuex、Axios、Element UI
或者
React、React-router、Redux、Axios、Antd
再多一些,会介绍可视化、微前端、设计模式、工程化、性能优化等。
这些内容往往会在项目描述中再写一遍,且专科、本科、研究生,大厂、小厂背景的人都没有太大区别,当你打开千篇一律的简历,什么感觉?
作为投简历者,可能已经绞尽脑汁,就那么多东西,掌握了该掌握的,大部分工作都能胜任,没什么问题。
但作为收简历者,很多差不多的简历,要用什么样的标准录用,录用谁呢?
这就是标题所说的“同质化”,我们不能满足于“框架 + 库”工程师,要体现更多的特质来打动面试官。
打动面试官
什么特质更能打动面试官?
大抵三个方面:
一、软素质:学习能力,总结能力,逻辑思维。
二、技术栈:跟团队一致是最好,上手成本小。
三、项目经验:做过一样或类似项目的最好,不仅上手快,还可能帮助团队提升效率,解决问题。
所以,在投简历的时候要有针对性,技术栈完全不匹配的,有写明具体要求的,职级/年限跟现状不符的,都不作为优先考虑,优先选择匹配度高的,简历过筛几率大,面试成功概率也高。
需要清醒认识的一点:同样是前端岗位,不同团队的需求是不同的。
有些需要移动端H5,有些需要小程序,有些要做APP,有些需要擅长性能优化,还有服务端渲染、中间件、项目重构、升级等等。
我曾听过最扎心的一句话是:我们求贤若渴,但…(公司名叫“店匠”)
所以,失利一定是自己的错么?你用不变的自己,去尝试变化的机会,失败率自然高,不用太过自责。人和公司是互选,人要对自己负责,面试官要为公司负责,不合适就是不合适,果断pass对双方都好。
但我们目的不是被pass,要怎么做能提高成功率?
简历
简历的重要性被多次强调,但还是有人不重视,或者不得要领。
现在的简历想做得好看比以前容易很多,有平台提供模板服务,起码外观不需费功夫,即便这样,不代表人人会写。
- 个人信息:突出重点院校,在校期间的学习、比赛、项目经历等,相比大学期间浑浑噩噩,一无所获,就是优势。
- 掌握技能:通用技术大家都类似,不会成为亮点,精简即可,专有技术需要突出,可单列。
- 项目经历:业务细节不必占篇幅,只要表述清楚什么类型项目,相应有哪些特点,项目的不同,带来哪些技术实现的不同,难点,优化点,即可。很微小的技术点(如使用了key,使用v-show代替v-if等)就不用列了。
- 个人评价:不宜过宽泛,最好举例,也不要前后矛盾(比如说喜欢钻研,但经考察又比较表层)。这样给人的感觉才是具象且有信服力的。
正向加成
所谓正向加成,即让人大眼一看,你有多少年工作经验,应该具备什么样的项目积累和技术厚度,事实和预期是大致匹配的,甚至超出预期,就是正向加成,否则就是反向作用。
倘若年限短,技术全,且有自己的思考和总结,会是很大的加分。一是体现技术热情,学习主动性;二是学习、理解力强,这样的人,不论当前水平怎样,起码很有培养价值,假以时日就能创造更大价值,独当一面。
倘若年限长,但项目经验一般,技术停留表层,甚至因为长期不更新、不温习而退化,这就是前面说的,个人积累不足,或者不出彩,就是反向作用了,这一点很致命。
薪资玄学
你把自己摆到什么位置,别人就会怎么看你。
我们找工作都会有期望薪资,哪怕简历上不写,面试也会问。
期望薪资,就像商店里货物标牌上的价格,一件衣服,如果几十块,大概率是地摊上的杂牌货,而不是摆在商场里的大牌货。
人也一样,按照当前的市场行情和自身情况,应该是什么水平,要有合理的预估。年限短的不说,一般不会写太高,但年限长的区间就大了,从10k+到50K+都有。
即从刚工作,到工作十几年,期望薪资会是个抛物线,从低到高,后又降下来。顶峰出现在5-8年,年限10+的往往表现为,经历丰富,技术杂,期望薪资偏低(专家、总监、CTO除外)。
这跟当前整个前端行业年轻人多,用人偏年轻有关,同时,每个人都会慢慢变老,但不是每个人都走架构、管理或者技术专家路线,如果你年长,但跟年轻人相比优势不大,那何必不用年轻人呢。
这一段重点要说是,虽然公司都想节省用人成本,但不是你越便宜公司越想要你,而是就算你贵,但物有所值,才想要你。
武装到牙
越是行业进入瓶颈,竞争激烈的时候,越要把每一关都做好。
印象分
首先,大家都是人,印象很重要。前面聊了简历,那是第一印象。
第二印象:笔试题(如果有)
负责任的面试官都会精心挑选笔试题,每一个问题都有其意图在,会顾及题目的跨度、梯度。下面是一些比较减分的表现:
1、基础题错误,这种很不应该,如果应聘高级岗,要更加小心。
2、回答不全面,这种一般是开放性的,看你掌握的知识面或者碰到过的情况。你答多少,就代表碰到类似问题有多少种思路。
3、审题不清,一题两问,只答一个。
笔试题如果做得差,第二印象就差,大概率没有面试机会,除非简历上还有其他亮点,会考虑聊一聊,但一面几乎等同于最后的机会。
第三印象:谈吐、表达
有实力,简历没写出来,面试没表现出来,是最可惜的。
很多人觉得技术过关就行,别的不重要。技术肯定最重要,如果问的问题都能答得很好,就算说话磕磕绊绊,相信公司也不舍得挂掉,但实际很少人做到,那么表达就变得重要了。
表达可以体现在多个环节:自我介绍、项目介绍、知识点回答、难点问题解决、职业规划/期望等。
每个环节都是加分的机会,如果看到的是清晰、确定、灵泛,就会加分,如果是茫然、错乱、空洞,就会减分。
细节制胜
印象是第一关,细节是第二关。
如果从大的方面无法跟他人区分,就要从细节发力,大致以下几类。
- 人无我有,人有我优
比如:WebGIS、微前端、WebGL、低代码等。
如果招聘方刚好需要这方面的人,别人不具备,你具备,就是优选条件。
如果不只你有,但是,你的学习和使用更加深入,经验更丰富,细节研究更多,就达到了“人有我优”,不仅简历好过,还会在面试中占上风。
- 技术原理
近年来,面试问原理基本成了业界共识,我也会问,但不是生硬地一个问题对应一个标准答案这样问,是询问譬如设计目的、使用场景、优缺点、启发性等,要出于探究的兴趣,出于对更好体验和问题解决的追求,而不单单是一个“会背了”的答案。
- 算法
我没有专门考过算法题,当我向候选人问出这个问题时,并不期望他能够如数家珍,甚至不想听到他说刷过leecode,这点可能跟很多面试官不同。
为什么问,想了解的是:
1、有没有了解过算法;
2、算法对编程的意义有没有自己的认识;
3、实际需求中哪些地方可以用。
这些跟上一条一样,能够一定程度反映出应聘者的职业追求和素质,但不会成为面试通过的决定因素,只是加分项。
- 参与度
如果你们团队造了一个火箭,你负责的是燃料、驾驶舱、推进器等,就是参与度高,但如果你只负责摁下最后那个开关,可以理解为“没有参与”。
只有参与度高,才有从调研、实施、解决问题,到成功上线的经验,才知道来龙去脉,否则,就算你属于那个团队,也没什么有价值的东西可继承。
- 难点攻克
攻克难点能反映什么?实现过的功能的复杂度、应对的态度、思考路径、总结沉淀。
不论水平高低,大家都会有自己的盲点,往往这种时候才真正锻炼人,使人得到提升,比较能考察出候选人的多方位素质。
不要忽视细节,不论是软素质还是技术水平,细节到位的人,工作中不要太省心!
大厂双刃剑
很多人想进大厂,冲着光环、高薪、福利等,但不得不说大厂也是双刃剑,主要表现两个方面:
业务细分:
在一个组工作的人,很长时间内都不会接触到不同业务类型或技术类型的项目,这限制了广度的发展,没有广度,技术积累会相对弱一些。
工种细分:
大厂分工更细,作为前端开发,通常不会涉及跨端、后端、运维等环节,甚至于在一个团队中,组件库、打包构建也会有专门的人去做,普通的“螺丝钉”级开发很少有机会接触。
鉴于这两个层面,时间长了之后,因为工作内容导致接触面窄,在很多事情上的参与度低,缺少主动权,就成为禁锢,反而会让人觉得,你某大厂出来的,怎么那也没做过,这也不怎么懂。
这是一部分大厂出身的人找不到好下家的原因,找工作不是有背景就够。
鸡啄米?
网上流传一张趣图,形容前端开发的门槛低,技术含量低,鸡啄米瞎捣鼓就能把代码写出来。
初看,是对前端职位的冒犯,但咱也不必上脸,前端学习的特点是什么呢,起步容易,一个编辑器,一个浏览器,零基础的人只需几天的学习就能写出简单布局的页面,看起来确实容易。
再者,现在前端框架的流行,使学习成本进一步降低,标签用div、p、span一把梭,几乎不用管DOM,CSS用库,模块化用scoped,不管复用,有不会的上网搜…很多系统都是由非前端人员自己摸索着就做出来了,这降低了大家对前端系统学习必要性的重视。
除此之外,还有另一种观点,说前端在团队中没有话语权,好像跟前端有关的东西都很简单,提到难度,就是后端、运维等。
这跟两个方面有关:
一是业务和项目类型,如果项目中,前端的确是在做一些简单且重复的事情,不会出什么问题,也没多少优化空间,别人看不到前端创造了什么外显的价值,人也得不到锻炼。
二是前端驱动/赋能,据我了解,很多人每天做的事情,就是接需求,按时完成任务,按时修完bug,上线,如此循环。除此之外,再没有多余的想法,甚至自己的代码写得怎样,也不是很关心,能跑就行,优化嫌麻烦。
长期下来,能力素质就会趋于平庸,所以,对这种说法要有一个清醒的认识,不是前端简单,而是作为一名开发者的能力一般罢了,不要用自己的能力和贡献来定义前端。
八股
程序员面试常碰到考八股,有人认为是无意义地卷,太难,面试跟撞运气一样,但就算不考这些也不代表容易,相信不少人碰到实际的编码题,场景题,同样被难倒。
最近在拜读一本小册,里面有一段话很值得参考。
我曾经面试的时候,被问过几个问题:
- 说说宏任务与微任务;
- 说说
setTimeout(..., 0)
、setImmediate
与process.nextTick()
等的顺序。我其实是记不住的,就算你现在来面试我,我仍然记不住,需要翻文档、翻源码。但那次面试我就挂了吗?其实没挂,我绕过去了。
“这些八股我没有准备,但我可以说说这些定时器或任务在 Node.js 里面是怎么实现的。至于顺序是怎么样的,无非是在事件循环里面先写哪句再写哪句罢了。”然后我就讲了具体实现,最后好像也并没有挂。
这个过程很好地体现了,程序员应该知道的是什么,不是应付面试的死记硬背,而是理解背后的设计。
值得说明的是,当你慢慢地搞懂了那些八股,知识体系越来越完善的时候,就会发现它们是环环相扣连成一片的,很多需要独立记忆的东西,理解之后就不需要记了,对工作中一些最佳实践、优化手段也能理解更深刻。
当下的选择
你对下一份工作的期望和目标是什么?每个人更多是着眼于当下,但又不能单单考虑当下。
看过很多简历,比例接近90%的是一份工作时长在2年以下,有些推荐系统直接把有过2年在职经历的归为“工作稳定”。
工作稳定为什么会成为一个标签,这不难理解,因为一个成功入职的人,可能是从上百份甚至更多简历中挑,又是若干次多轮面试反复比较,才最终定下来的,成本很高,从入职到熟悉项目,熟悉同事,熟悉业务,做出相应的成绩,至少几个月到一年,如果做了一年,走了,前面大半的心血白费了,又得重来一次,不仅如此,因为人员更迭造成的团队历史债务也增多,比如:文档缺失、不明代码堆砌等。稳定性为什么重要就不必多说了。
但从个人角度,有时候的离职属于“忍无可忍”,比如:跟入职时的预想差距过大,加班太多,工作内容比较“坑”,被领导压制,进步/晋升难等。每个人都能给出合理的理由。
总结就是,上一段经历不顺利,上一次择业不成功,那么下次找工作时,就需要吸取教训,好好考虑,想要的是什么,需要的是什么,哪种岗位,哪种工作内容,更利于自己的成长和后续发展。你可能觉得这过于理想,很多时候没得选,或者看不清,我们只能尽量去做,而不是糊里糊涂选一家。
这里提三点建议:
1、经济上不紧缺的,成长大于金钱,这份工作可能让你少2K,但下份工作多10K,这个账不难算。
2、勇于挑战自己,有时候别人要你了,你自己觉得扛不下来,不是那块料,属实多虑,这是你短时间内快速成长的好机会。
3、不要带滤镜找工作,你以为的不一定是你以为的,不要盲目做选择,很容易看走眼。
红利褪去
程序员需求多,薪资高,已经持续了近10年,一定程度上吃了互联网行业的红利,在行业刚起步的时候,有能干活的人就行,后来互联网往各个行业渗透,外卖、打车、共享、音视频等,每一种新方向出现,都意味着有新公司或者大公司的新业务出现,资金会涌入,需求多,薪资高,是自然的。
但随着行业红利逐渐褪去,需求少了,钱少了,有些人就开始感慨“世道变了”,但其实这应该是市场回归理性的过程。
起初借着机会多进来的这批人,相当一部分并不真的喜欢这个职业,“改变世界”也早已不是程序员应有的追求,只成为了各种“管理系统、官网、H5页面”的搬砖者。
想想读大学的时候我们学了什么?C语言、Java、数据结构与算法、汇编、线性代数…现在在做什么?调样式、调接口、改bug。
那些早该掌握的东西,现在放到面试里,放到项目里,我们觉得难,觉得卷,多少有点不应该,浪潮退去才知道谁在裸泳, 不够优秀的我们应该感到惭愧。
沧海遗珠
前面我们算过一次,求职的人在持续增多,机会又在减少,这意味着一部分人暂时找不到工作成为必然。
当一个月、两个月,甚至更久找不到工作,该怎么办?
一方面,人不是刚开始就能准备得很好,发挥得很好,或者碰到认可自己的人,可以根据自己的情况和节奏、策略,持续准备,持续找,花两三个月找工作都是正常的。
另一方面,可以把自己的要求稍微降低,暂时找一份工作,不处于失业状态,有收入就不会那么焦虑,在这份工作当中,再寻求成长,待时机成熟,或许更好地选择就来了。
当然,还有最后一种选择,就是转行,这对大多数人,都是更难的选择,因为要从头开始,起点更低,爬坡难度更高,可能还要面对一定落差,是更考验心态的,不到万不得已,或者很好的机会,不宜选择。
最后的话
这是我许诺给部分网友的一篇文章,也是出于莫名的责任感,想传递出来一些客观事实和积极信号。篇幅稍长,你阅读辛苦了!
不论是新人还是老人,我们都需要正确看待自己和周围的环境,做出冷静、理性的判断。
《进化论》有云:“适者生存”。当环境改变不了,公司标准改变不了,我们唯有改变自己,来适应之。
什么时候前端会无?当浏览器不存在了,网页媒介不存在了,前端才可能往另一个工种转变,但是,到时会发生变化的又何止是前端呢?所以,稳住心态,积极面对每一天,总会迎来新的生机。
祝好,共勉。