从迷茫到清晰

 说到算法岗位,现在网上的第一反应可能就是内卷,算法岗位也号称是内卷最严重的岗位。针对这个问题,其实之前我也有写过相关的文章。这个岗位竞争激烈不假,但我个人觉得称作内卷有些过了。就我个人的感觉,这几年的一个大趋势是从迷茫走向清晰早在2015年我在阿里妈妈实习的时候,那个时候我觉得其实对于算法工程师这个岗位的招聘要求甚至包括工作内容其实业内是没有一个统一的标准的。可以认为包括各大公司其实对这个岗位具体的工作内容以及需要的候选人的能力要求都不太一致,不同的面试官有不同的风格,也有不同的标准。我举几个例子,第一个例子是我当初实习面试的时候,因为是本科生,的确对机器学习这个领域了解非常非常少,可以说是几乎没有。但是我依然通过了,通过的原因也很简单,因为有acm的获奖背景,面试的过程当中主要也都是一些算法题,都还算是答得不错。但是在交叉面试的时候,一位另一个部门的总监就问我有没有这块的经验?我很明确地说了,没有,但是我愿意学。接着他告诉我,算法工程师的工作内容主要和机器学习相关,因此机器学习是基本的。当时我就觉得我凉了,然而很意外地是还是通过了面试另外一个例子是当时的一个小伙伴,他在最后转正面试的时候被要求用R语言写了一个树模型。具体是什么模型我不记得了,我只知道当时我还不会,所以没记住名字。但是了解行情的都知道,现在工业界应该已经基本上没有使用R语言的了。不论是当时的面试官对R语言比较熟悉,还是当时他的团队里用的都是R语言,都可以说明其实整个阿里内部当时对于算法工程师是没有统一标准的。实际上也的确如此,当时还有很多算法工程师和数据挖掘工程师的title混为一谈的现象。我不太清楚现在校招算法岗位会问一些什么,但是就我的了解,机器学习的模型原理以及之前的一些使用经验肯定是跑不了的。这两块的技能没有,只靠acm的奖项以及算法能力想要通过面试估计很难,更不要说是阿里妈妈这样的核心部门了。从这两个例子可以看出来,5年之前业内还是比较迷茫的,但是现在越来越清楚了,这个岗位究竟是做什么的,需要工程师有什么样的能力。并且我觉得以后应该会越来越清晰,现在可能还是会有一些个别的部门或者是上层的架构师对算法这块不是非常了解。比如工程出身的tech leader带算法团队这样的例子还不少见,但以后应该会越来越少。所谓没有985,没有名校硕士,没有paper去面试大公司的算法岗位就是炮灰就是送的说法,有一定的道理。但是我们不能只看现象胡乱总结,仔细分析背后的原因其实是对算法工程师的要求越来越明确。但是要求虽然清晰,也还有问题,问题就是这些能力不是非常方便在面试当中体现,对于校招社招都有这样的问题。社招这个问题会好些,看之前的经历就看得出来,校招这个问题相对比较严重,我们怎么知道你数据处理能力怎么样?你对模型的细节了解多少?怎么样判断你来了之后能不能hold住这一块事情?正因为有了这样的问题,所以很多面试官或者是hr才不得不抬高硬性要求。招一些基础好、背景出色人聪明的学生进来总没错,即使不对口,也可以现学。

 

招聘逻辑

 接下来和大家聊聊各种公司的招聘逻辑,这里面我也发现了一些规律。这里面的规律就是越是小厂越务实,越是大厂越虚。这其实也很好理解,因为小厂的资金和预算都有限,所有岗位的人头都要精打细算,能不多招绝不多招。一旦招了一定是有具体的用处的,比如某一块事情人手不够,或者是某个问题没有人解决,必须要招人。在这种情况下,小厂的要求非常明确,就是技术栈越匹配越好。也就是你会的东西和他们用的东西越匹配越好,越匹配你上手和学习的成本越低,来了直接能干活的最好。大厂则不然,越大的厂越不然。原因也简单,大厂招聘的目的除了满足人力需求之外,还有其他的意义就是人才储备。比如清华姚班一年毕业30人,这30人如果都去了腾讯,会给腾讯的发展起到多大的帮助?如果你是老马你能接受这样的事情吗?肯定不行,因为优秀的人才的数量是有限的,虽然竞争的人多,但是头部用户一直就那么多。其他公司多招走了一些,留给你们公司的就少一些。身为大公司肯定是会努力争取的,包括招聘实习生什么的,其实本质上的目的都是招聘人才进行储备。某种程度上来说,大公司把一个优秀的学生培养成优秀工程师花费的代价要小于去市场上招聘一个同样优秀的工程师的代价。算法岗位当中至少有80%以上的顶级人才都在大公司手里攥着,广大二线、三线的小公司争抢剩下的20%。大公司想要在市场上招聘一个优秀的工程师是非常难的,远远比大家想的要难。这样的人手里往往不缺offer,加上大公司里层级以及待遇的限制,想要抢得过那些财大气粗的二线公司真的不容易。所以面试小公司的核心逻辑就是对口,他们需要的能力你有,他们需要的技术你会,就行了,你搞出很多花里胡哨的东西来其实没什么用。有些小公司的面试官连acm是什么都不知道,你和他说你是亚洲区的银牌有用么?大公司的招聘要求就比较琐碎了,一般来说比较看重基础。这里的基础并不仅仅是基础知识,准确地说是基础能力。比如数据结构和算法的能力,比如思维的灵活度,也就是给你出个算法题,看你能不能灵活地做出来。再比如机器学习的基础,模型的一些基础原理等等。除了基础之外另外一个很重要的是你的软实力,比如你的表达能力,你的情商,遇到困难的时候的反应。比如遇到难题你有没有一个清晰的思考过程,简单尝试了一下就放弃了还是愿意不停地努力。还有你的性格,比如你是服从性的还是比较有主见的,如果你很有个性,老板可能会觉得你比较难管,用术语来说就是管理成本有点高,这也会让面试官打退堂鼓。还有一点常说的是潜力,潜力这是一个很虚的概念,完全是面试官的主观感受,很难有实际的支撑。根据我的理解大概是这么几个方面,一个是智商,聪明的人学东西快,潜力高,这个是毋庸置疑的。即使你很多东西不会,如果你能让面试官觉得你能很快学会,这些不是问题,那么这就不是一个减分项。还有年龄,比如中间经过了一些曲折浪费了几年比其他应聘者年长很多(两岁以上),可能会让面试官觉得你潜力折损。再比如你过去的一些经历,比如你在某个领域坚韧不拔从0做起,成长迅速,也会让面试官觉得你潜力不错。这样说起来实践的能力反而是加分项而不是主要的了,这也有一定的道理。因为对于大公司而言,整个技术架构往往都是自己独立建的,和外面的都不一样。也就是说除非之前在里面待过的,否则几乎找不到技术栈完全懂的。再加上校招生原本实战经验就要少一些,相比于招一个立即能上手的,更加倾向于能够快速学会的。

 

核心能力

 由于我已经很久没有接触校招了,所以也很难说校招面试应该怎么样准备,只能说说如果是我来招聘,我会喜欢什么样的学生。也可以理解成我理解的一个合格优秀的算法工程师应该有的能力。

1、模型理解

算法工程师和模型打交道,那么理解模型是必须的。其实不用说每一个模型都精通,这没有必要,面试的时候问的模型也不一定用得到。但更多地是看重这个人在学习的时候的习惯,他是浅尝辄止呢,还是会刨根究底,究竟能够学到怎样的地步。在实际的工作当中我们可能会面临各种各样的情况,比如说新加了特征但是没有效果,比如升级了模型效果反而变差了等等,这些情况都是有可能发生的。当我们遇到这些情况之后,需要我们根据已知的信息来推理和猜测导致的原因从而针对性的采取相应的手段。因此这就需要我们对当前的模型有比较深入地了解,否则推导原因做出改进也就无从谈起。所以面试的时候问起哪个模型都不重要,重要的是你能不能体现出你有过深入的研究和理解。

2、数据分析

算法工程师一直和数据打交道,那么分析数据、清洗数据、做数据的能力也必不可少。说起来简单的数据分析,这当中其实牵扯很多,简单来说至少有两个关键点。第一个关键点是处理数据的能力,比如SQL、hive、spark、MapReduce这些常用的数据处理的工具会不会,会多少?是一个都不会呢,还是至少会一点。由于各个公司的技术栈不同,一般不会抱着候选人必须刚好会和我们一样的期待去招人,但是候选人如果一无所知肯定也是不行的。由于学生时代其实很少接触这种实践的内容,很多人对这些都一无所知,如果你会一两个,其实就是加分项。第二个关键点是对数据的理解力,举个简单的例子,比如说现在的样本训练了模型之后效果不好,我们要分析它的原因,你该怎么下手?这个问题日常当中经常遇到,也非常考验算法工程师对数据的分析能力以及他的经验。数据是水,模型是船,我们要把船驶向远方,只懂船只构造是不行的,还需要对水文、天象也有了解。这样才能从数据当中捕捉到trick,对一些现象有更深入的看法和理解。

3、工程能力

虽然是算法工程师,但是并不代表工程能力不重要,相反工程能力也很重要。当然这往往不会成为招聘的硬性指标, 比如考察你之前做过什么工程项目之类的。但是会在你的代码测试环节有所体现,你的代码风格,你的编码能力都是你面试的考察点之一。并不只是在面试当中如此,在实际工作当中,工程能力也很关键。往小了说可以开发一些工具、脚本方便自己或者是团队当中其他人的日常工作,往大了说,你也可以成为团队当中的开发担当,负责其团队当中最工程的工作。比如说复现一篇paper,或者是从头撸一个模型。这其实也是一种差异化竞争的手段,你合理地负担起别人负担不了的工作,那么自然就会成为你的业绩。

 

总结

 

时代在变化,行业在发展,如今的校招会问些什么早已经和当年不同了。但不管怎么说,这个岗位以及面试官对于人才的核心诉求几乎是没有变过的,我们从核心出发去构建简历、准备面试,相信一定可以有所收获。