大数据面试大数据程序员

/捂脸,我又被BAT的算法工程师给拒绝了

2017-03-30  本文已影响2666人  数据虫巢
题图

文·blogchong

今天,我又被BAT的算法工程师给拒绝了,是的,你没看错,是被算法工程师给拒绝了。

或许,更确切的说是被大腾讯的算法工程师给拒绝了,应该是第四个还是第五个吧。

这也是没法子的事,在大深圳要找数据挖掘的、找做算法的人才,基本除了腾讯这个算法造血基地,其他厂子也不是说没有,相对会比较少而已。

就跟小高中生表白似得,我都说我“喜欢你”了,然后你说“我认真想了下,感觉我们在一起不是很合适”,/捂脸,好尴尬呀~~

听到这里,或许很多小伙伴还是有点小懵逼,我大概描述已下剧情吧。

部门在招数据挖掘工程师,当然,你也可以看做是算法工程师,然后深圳大厂基本可看的只有大腾讯了,所以,最终过了条件初筛,基本很多都是来自于鹅厂的了(当然,也有其他渠道的)。

由于找的是相对偏中高级的算法工程师,所以,基本上能满足以下几个条件,基本过的可能性还是蛮大的:

1 三五年工作经验,意味着他经历的项目足够多,很多算法、或者说单个方向都有比较多的累积。

2 出身鹅厂,本身就有背景背书。

3 项目经历与岗位需求相匹配,意味着方向不会偏离,技能复用性相对较高,淌坑填坑也会比较熟练 。

能满足以上几点,再加上人品没问题、思维不死板,性格没啥毛病,基本过的概率还是蛮大的。

但关键是人家不给过呀。

当然,跳槽换坑本身就是一个双向选择,你认可了人家的经验、技能、人品、性格等一系列属性,人家也需要认可你的条件,包括公司方向、团队情况、项目情况、薪酬福利等等一系列的东西。

只有“两情相悦”了,这事才能继续整下去。

而我所能保证就是,我们数据团队绝对是一个优秀的团队,会有自己的思维、创造力、想象力,并且如果你能加入俺们部门,你所做的事也是有意义的,并且有比较高度的自主性、挑战性,会有足够的空间去释放你的“小宇宙”。

至于其他,我的可控性确实会差点,但我依然可以有一些建议。

比如,公司的方向,当他们说2017年是内容变现的元年时,我司在2016年就已经开始在做这个事了,至于说我认不认可这个事,最起码我还在岗,说明目前还是认可的。

而这个岗位给的薪酬,应该说是高于其他岗位的,并且并不会比行业水平低(麻蛋,给的比我的还多),再加上中小公司乱七八糟的福利,所以说不上多好,肯定不坏就是啦。

此外就是,据我所了解到的一些情况,其实鹅厂给的单月薪酬并不算很高(算一般吧),最起码在普通工程师级别(T2-3,T3以上可以达到leader层级了)那层,并不是很高,哪怕是做算法方向的,只不过年终奖给的月份不少,但年终不是个固定值不是么,而且整体综合算下来的话,也没有想象中离谱啦。

至于其他的,好吧,不一一细说了,因为,本文的主题,并不是这个(不会被人骂吧,说了半天,竟然告诉别人,主题是其他的,把我吓得)~~

其实今天我想说的话题是,作为算法工程师或者说数据挖掘工程师岗位,在大厂与中小厂,有什么本质的区别,又或者说从大厂出来的数据挖掘工程师,他们追求到底是什么?

或许有人会说了,屁话,当然是金子了。

咱能不能不要这么俗,能不能说点有建设性的东西,比如追求技术啊什么的(其实我也好喜欢金子),追求理想啥的。

我们先来看看大厂的算法工程师一般都会做些什么工作。

当然,我没有在BAT待过,只是跟很多大厂出来的相关朋友聊过不少,所以一些情况还是了解一些,然后并且这里所说的算法工程师只是指普通部门普通的算法工程师,比如像腾讯人工智能实验室那种部门搞算法的,咱就不做讨论了,一票子博士。

并且,这也算是我自己的一个理解吧,没啥对不对的,认不认可无所谓,所以,如果有朋友要挑这个刺来喷口水就算啦。

大厂搞算法搞数据挖掘的专业大多对口,但普遍有“螺丝钉”现象。

注意,这里“螺丝钉”并不是一个贬义词,是相对中性的词,一方面是说这个“钉”钉的足够深,意味着其专业性是有保证的;另一方面,也意味着面会比较窄,就以鹅厂的T2-2/3这类的普通工程师来说,也是有比较明显这些特点的。

当然,凡是都是有特例的,我这里所述的只是我所观测到的一般普众情况。

也当然,或许我说的是错的。

以用户画像这个话题来说,相信鹅厂很多相关部门可能都在做,比如数平、比如广告部门、比如其他XX部门,甚至有些业务部门都有自己的一套模式。

这也是没有办法的事,谁让用户画像这个上层业务方向的可扩展性这么大呢,只要标签挖掘的准,后续上层业务可做的事太多太多了。

用户画像一方面是体系结构的设计,另一方面其实就其本质了,其实说白了还是信息标签化嘛,关键如何打上一个一个标签,以及不同标签的分层逻辑。

落实到底层实现,其实最常用到的就是各种分类算法了,不同是数据源不同、处理方式不同、所使用的算法不同等等。

在鹅厂,一般诸如用户画像这种研究方向都是几个人的小组完成的,那我们就以这个实操来简单的说一下上面的观点。

这个小组他不需要关注数据是从哪里来的,因为他们也接触不到,所以他们肯定不会涉及到这些基础数据的收集、汇总、清洗相关的工作。

因为这些基础原始数据,已经有合作部门,或者其他小组处理好提供到了他们那里。

涉及到算法,很多时候他们并不需要去实现各种算法,因为很多时候他们的前辈已经封装好了符合业务的算法库供他们调用(这里说一下,大厂一般会更喜欢自己去写、封装一些算法库,以达到定制、以及高可控的目的),即使没有,也有其他的小组或者部门专门干这事。

他们写好的分类器,需要实际的跑大批量数据时,已经有现成别人搭建好的平台,供他们去调用,实际的把结果跑出来。

甚至,他们都不需要去做工程化的事,因为他们工程化的流程都已经封装好,只需要配置好分类器的服务入口,再配置好处理流程,直接提交任务即可,他们接触不到里头数据是具体如何流向的、实际的工程化过程是怎样的。

OK,到了这一步,已经所有该出来的标签都出来了,画像也算搞定了,那么然后呢,然后就完了呀。

他们的画像交付到另外一些小组,或者部门,至于画像具体怎么进一步使用,用在什么场景,怎么做变换,他们是不知道的,或者说是不care的,了不起到时候会拿到ABtest的效果,来做进一步优化指导。

我们来看一下整个流程,他们会错过很多东西,比如数据源的处理变换、集群平台级的认知、工程化的实际流程、算法解决的实际业务问题等等。

这也就是我所说的,技能点相对会比较单一,面会比较窄的原因。

当然,也并非没有优势,比如,他们接触到的数据量级会更大( 不过这点单从画像这个方向看,优势不大,反倒做前期数据处理、后期工程化的环节更能感受到),其次是会有更多的时间来专研算法,在某个点上更有深度。

就比如我这种半路出身,非蓝翔毕业的渣渣,是绝对不敢在他们面前妄谈算法理论的,但也不是说没法谈下去了。

比如在实际问题与算法模型的转换上、在实际业务模型量化上、在整个数据流程的架构上,我相信我可以把大部分人秒成渣渣,因为我接触的足够多,了解的足够多,看的足够多,想的足够多。

比如,我在一个鹅长算法工程师的面试中,就曾于他们广点通用户画像算法工程化这部分质疑过。

他们以监督式的方式训练好分类器之后,将其部署成一个分类器服务,只要调用这个服务即可获得分类结果。

而他们实际的算法工程化流程是,HDFS->XX消息队列(名字忘了他们自己写的)->Storm,然后Storm里调用分类器服务,最终把所有数据的结果处理出来。

我当时就问:你们的数据每天都是离线周期性从其他部门导出来的,那为何要设计成这种模式,明明是离线的批量数据,非得走MQ加Storm这种流式处理的方式,你们数据量这么大何时才能跑完一天的全量数据?

确实是的,这种模式其实就是一个离线批量计算的过程,在批量计算的过程中调用分类器服务,离线跑即可,当然,前提是你的分类器服务需要支撑的其这种并发量,或者说性能足够好。

好像有点叉题了,回到之前的话题,不止是用户画像这个例子,很多其他部门也一样的。

比如一些提供基础数据的部门,他们只负责大批量的数据清洗规整,至于说这些数据到底后续怎么被使用,其实他们是不关注的。

而平台运维部门,他们只关心平台有没有问题,资源够不够,也不会关心集群中到底跑了什么业务。

而偏上层的一些部门,比如就以使用画像做广告投放的部门来说,他们不关注画像是怎么生成的,只要画像的精度足够准,他们只需要关注上层的投放算法逻辑即可。

所以,你会发现,每一个块都是分离的,你只需要专注某一个点即可,对于一般人来说,其目光是难以覆盖到整个流程的。

“螺丝钉”虽然“钉”的深,但如果层级不够,真的就只是一颗“螺丝钉”而已。

那么,在来看一看,同样的岗位,在中小公司情况是怎么样的?

首先,他们需要解决的首要是业务问题,以业务为驱动导向。

比如,我们依然是需要做广告的精准投放,那么,我们需要算法工程师,或者说数据挖掘工程师,去拆解这个业务目的,把实际业务问题,转换为模型问题。

广告的精准投放,又落实到标签的匹配问题,以及各种上层的筛选排序相关的逻辑,往下追溯,标签将落实到画像层级,所以,我们又需要解决如何绘制画像。

绘制画像,我们不止需要关心使用的算法问题,还需要关心如何把数据拿过来,如何将数据进行预处理,然后如何将算法进行工程化,需要考虑数据的批量处理问题,需要考虑算法在实际的工程化中数据规模,并发等一系列问题。

在这些过程中,由于很难有封装好的算法库,或者说也没有这个时间去做算法的封装,只能上开源的东西了,所以需要你对外界的信息又有足够的了解,或者说有快速从外界获取知识的能力。

各种封装性肯定会差一些,所以,你必然也会涉及到一些集群的操作,那么,一些底层的linux操作也是绕不开的。

所以,一般中小公司的算法工程师,将会额外的接触其他的一些知识,而不是在算法这个点上做足够多的研究 ,他需要了解数据处理的流程、需要做算法的研究建模、需要了解业务、需要快速学习、需要学会实际的生产工程化等等。

其实一直以来,我都潜意识的把算法工程师和数据挖掘工程师分成两类职业,在我认为算法工程师更多的专注于某个点的研究,即明确的问题如何做的更细致,这就有点像在大厂搞算法的同志。

而数据挖掘工程师,显然其所接触东西会更多,并且以实际业务为导向,结合算法模型来解决实际的问题,其中必然会涉及各种数据流程、工程框架,工程化等一系列的问题,算法将只是这其中的一环而已,这更像是在中小公司使用算法来解决实际问题的人。

那么,这两种人哪种会好点呢?

好吧,其实这个问题有点小傻逼,并没有什么优劣之分,一个更加专注,能够把问题解决的更彻底;另一种更加的复合,能够快速的把实际问题加以转化,更加的效率。

就比如目前炒的比较火的人工智能来说,他们对一个研究方向就是作死的研究(很大一部分时候,他们并不关注当前的研究是否会带来直接的商业价值),所以,他们所需求的必然都是那种高度专业、专注的人才,所以BAT的人工智能实验室啥的,都是博士集中营。

但是,对于一般的中小企业来说,他们更多的是以快速解决实际问题为目的,注意,其中有两个关键词,“快速”、“解决实际问题”。

那么,他们必然是需要在有限的时间窗口期,以算法来解决实际的问题,提升效率。

所以,对于技能高复合还是有一定要求的,他们需要的整个挖掘的项目流程,而不是单个算法的点。

最后,我们再来分析最后一个问题,对于诸如鹅厂T2-2/3类似级别的算法同志来说,从大厂出来,到底是为了什么?或者说能得到什么?

我们知道,鹅厂的T2-3有很多,但是到了T3级数目就少了下来,因为T3是可以当leader的了,但狼多肉少,所以出走是一种对于很多人来说是一种很必然的方式。

其次,在个人技能加点上,就跟玩游戏似得,你在一个两个技能点上死命的加点,对于特定很多场合可能无往不利。

但是,很多时候我们所处的环境是多变的,面对的事务也是复杂多样的,所以,我们在对于某个领域有足够多的累积之后,适当的多学一些技能,提升自己的综合素质,提高自己的外界生存能力。

我想,在未来,除了部分专门的一些特殊领域,对于大部分人来说,在某一方向有深度、其他方面又有广度的复合型人才肯定是很受欢迎的。

所以,对于那些大厂子里要走出来的朋友,是的,外面的世界很精彩,是时候去看看了。

接触不同的人,接触不同的事,重要的寻找一份更有掌控力、成就感的工作,加上自己所缺少的技能点,去感受更开放的世界。

扩展阅读:

《一个理想的数据团队,应该是这样的》

(全文完)

上一篇 下一篇

猜你喜欢

热点阅读