随着互联网的热潮兴起,工程师的面试和招聘一直是HR的头疼问题,也就自然有了网上的段子,一切准备就绪,就差一个工程师了!
现在的工作状态是每周大概有2-4轮面试,有电话面试,也有面对面的。这几年面试工程师的经验来说,无论是国内还是美国,无论是西二旗还是硅谷,大部分的面试都是“错的”。
什么情况?(WHAT?)
先说美国,从硅谷开始盛行的白板面试一直流传到了现在,没有太多的累赘,就是算法和数据结构(后来对于有工作经验多的人又增加了系统设计)。
面试官内心有一到三道他面了无数次的题目,各种算法,时间复杂度,空间复杂度等等他都了然于胸,这样无论面试者怎么解答,面试官总有一些问题(followup)等着他。
从这样45分钟到1个小时的时间里,主要考察面试者的算法能力,面对问题的临场应变和发挥能力,沟通能力,是否能够考略到所有的corner cases,代码是否规范整洁,对细节的把控等等。
从去年开始,我对国内互联网的面试也开始接触。与硅谷不同的是,对于社会招聘,不用刷太多的算法题目,更多的问的是会不会,是否理解某些特定的技术和用法,以前的工作经验是否直接拿来用就行。
从面试这件事还是可以反映出,国内的是拿来主义,大部分公司(正规)甚至乐意多付出20-30%的薪水招一个立马就能产出上手的工程师,也不是很喜欢把学生或者新手好好培养一下(貌似这几年有些好转)。毕竟,人多!
硅谷有些反过来,学生反而是各大厂抢手货,便宜,有干劲,有活力,有学习的热情和初出茅庐的“改变世界”的雄心。大公司愿意找些学生来进行培养,当然前提是这些学生平均水平能够达到要求。稍加培养,可以迅速成长。
问题出在?(WHY?)
事实上,一道面试的题目也好,某个知识点也好,都是可以反复地去准备的。
面试者恰好之前准备过这道题目,虽然面试官能看出来面试者准备过,可是很难做到完全摒除偏见。BIAS永远存在,只不过是形式不同。
有的工程师觉得你既然准备过我们就换一道题目吧,有的工程师觉得,准备过无伤大雅我们还是继续愉快地佯装讨论下去,还有的工程师直接就会给你挂掉。有的面试官今天有一堆bug需要修理,无心面试,水过即可;有的面试官今天一天没事儿,全身心投入面试,边边角角全都问遍。
虽然公司有统一的标准,但是标准到人这里有着不同的解读。举个简单的例子,有的工程师就喜欢抓变量名字是不是有意义,其实这是个习惯或者“顺带手“的事情,稍加不留神,可能就挂在这种有的工程师完全不介意的事情上面。
有人做判断的地方,就有差异。
一个合格的面试官也是需要反复培训出来的,这需要资源和时间
如果有年轻的工程师或者刚毕业的学生,这种情况很容易被面试者带“跑偏”。换句话说,并不是所有人都可以代表公司进行面试的。面试官们也不会把本来就已经排满的日程表再加上反复出现的面试培训。这就造成了这样的恶性循环。
缺工程师 -》 找不到好的工程师 -》找来不是很合适的工程师 -》 堆砌代码 -》累计功能 -》 重构?-》一段时间,工程师离职,跳槽,加薪 -》留下技术债 -》缺工程师。
并不是每一个工程师都觉得培训面试官的面试技能是必须的,毕竟背着KPI,没有奖金,没有流量,没有增长的日子是灰暗的。很多时候,都是被“勉强”地推到了面试官的位置,不得已而为之的。
并不是每一个工程师都觉得面试其他人是重要的。更多的人专注在自己今天几点能下班,项目下个月是否能完成,测试能不能通过,上线了有没有问题,而不是从公司战略发展的角度考虑。
如果求职者即将和自己在同一个组里工作,或许工程师还有些许兴趣来考量下面试者是不是一个很好的合作者;但是更多情况下,可能不在一起工作,那么面试官的原动力会大打折扣。
软实力与硬实力兼备
工程师面试的短短的几个小时的时间内,最多能得到的信号是跟技术相关的。而在实际工作当中,往往最重要的并不是技术知识,而是软式力。
国内的大厂都是把职能划分的非常细致,工程师大部分非常明确自己该做什么,比如说,无论是改个按钮的颜色,提高js库的性能,解决分布式服务并发问题,数据库调优,微服务的某个模块的编写与设计,运维等等。大部分不会涉及到与其它部门频繁的交流。但是,即便这样,也还是需要和设计师,或者项目经理进行沟通,这个时候需要很多软实力。
软实力1 自尊心受挫
很多工程师是不允许自己是错的,或者说自己可以发现自己是错的,但是不能由项目/产品经理指出来,或者有些人在其他工程师指出来的时候也会在情绪上非常“反抗“。
一旦发现什么问题,第一反应是反对 - 这个非常好理解,人的本能就是保护自己的认知是对的。可是很多时候,如果不带有情绪地去客观评价,就事论事来说,即使自尊心受挫下,但是能确保整个项目良好运转也是值得尝试的。很多工程师是智商的高手,涉及到情商,涉及到”面子“的时候,不太会平衡两者之间的关系 ,这种情况是无法面试出来的。
软实力2 适应能力
公司壮大起来之后,很多时候就会出现流程的改变,职位的变动,人员的调整。
你的组员可能有一天成为你的老板,跟你每天一起写代码的小伙伴可能明天成为你的老板,你的项目下个月可能会被撤掉,你的老板明天会离职,你的组可能会被拆散,由于“办公室政治“你可能3个月换4个项目等等。
工程师在这些情况下都是需要极强的适应能力来调节自己,要学会如何在这种“混乱”的环境下继续茁壮成长,找到机会学习到更多东西。这种适应能力不是一天两天能够练习出来的,是需要时间和思考才能慢慢成长。这些不是由算法题和技术知识能考察出来的。
软式力3 跨组合作能力
这一点面试就更看不出来了。
在硅谷工程师的权限范围很广 - 既要和公司内部其他组有合作,又要和产品经理,项目经理经常沟通进度,需求,可能还需要和运维打交道保证自己的程序挂了有人管,还要让自己的组内的老板小伙伴们支持自己的工作等等。
每个人都很忙,都有自己的工作。如何平衡各个方面,如何让其他人都开心地帮助推进你的项目顺利进行,让你的技术实力得到展现是门“艺术”。
这种是更高级的技能,面试还是很难考察出来。
林林总总,现在国内大厂的面试,能过技术这关的人都不是很好找,更别谈其他的什么软式力了。工程师在写代码的同时,可以多思考怎么提高自己的软式力,沟通能力,协调能力,规划进度能力。面试官在考察面试者的时候,也别揪着几个技术知识点不放,更重要的是一个人快速的学习和适应能力。
技术永远在变化,招人的时候看中的不仅仅应该是他现在会什么,因为他现在会的可能在工作种2年后就被淘汰了,或者公司的业务发展太快,半年后就不需要了。更看重的是,在资源有限的情况下,这个人能做到什么程度。
基于以上,现在的面试大部分都无法考察出来问题,所以,小伙伴们,当你们努力刷题的时候,心里要知道所有一起刷题的人心中都有无数草泥马在奔腾……
网友评论