2-5 Offer选择
算法工程师的offer选择,我建议从以下几个角度个角度来思考问题:
- 公司是否重视?
- 直属领导
- 人才密度
- 所在岗位的话语权
- 策略vs算法?
坦白讲,offer选择可能不是一个很好回答的问题。因为我说不准这个选择会不会让你的人生产生巨大变化。而且这个变化可能真的是天壤之别,只不过在当前的时间点,没人能说出到底哪个是天,哪个是壤。此外,大家一心想追求的知名公司核心部门,其实是在不断发生变化的,普通人很难在当下就可以出预知未来的业务发展。
这种例子实在是太多了:比如腾讯在刚刚起步的时候,移动增值业务,就是彩铃彩信,是公司的饭碗,现在还有这个团队的影子吗?再比如张小龙的微信团队,现在登上神坛,但在这之前呢,在广东做邮箱,你也不会把它当做一个核心部门吧?阿里刚刚开始搞阿里云的时候,内外部都是各种反对各种不理解,这几年谁不知道阿里云到底有多大盘子?
所以,任何有关对师弟师妹未来的建议,我在说的时候通常都比较谨慎。我的原则是,尽量同步一些我自己知道的信息,还有一些思考问题的角度,尽量少给出直接的建议。
不可避免的是,人们在给出建议的时候,通常会给出那些更能支持自己当前选择的建议。比如我在说是毕业后选择了工作而不是读博,那么我在给建议的时候,就更倾向于工作而非读博;我选择了字节跳动这家公司,那么我在给建议的时候,不自觉的可能就倾向于这家公司本身。这也是没有办法的事情:毕竟如果自己都不相信自己的选择,又怎么可能会给出其他人好的建议呢?除非是自己深知这是一个火坑,劝阻他人不要往里面跳。但一般这种情况会出现的比较少。
公司是否重视
公司的重视与否,体现在,公司是否准备把这个项目当做下一个增长点,以及从上到下对这个项目所报的预期是什么?是尝试的心态呢,还是必须要把这个事情做成的心态。
这意味着公司资源的投入。如果公司大量资源投入进入某一个项目,决定把这个项目做成,那意味着至少两点:
- 这个项目未来可能会有一大波飞速发展的机会,意味着工作很多,遇到的挑战也会不小。在这种条件下,自身得到的成长将是飞速的。
- 即使这个项目最终失败了,因为这个项目本身公司投入较多,一般在失败前也会很多试图挽救的点和招。在这种逆境的条件下,积累的经验也是非常宝贵的财富。
所以我个人建议如果可以选择的话,尽量选择那些公司层面比较重视的项目。小公司的重点项目,我个人感觉可能还会比大公司的小项目要好。
直属领导
直属领导可以说是实际工作中的第一任老师。你的绝大多数工作都是从他那里分派出来的,同时这些工作也将会从他那里得到反馈。一个好的老师对人的影响是不言而喻的。
但是在接offer的时候,通常是很难知道这个领导到底是一个什么样的人。这时候就要尽可能的多的搜集信息:比如尽可能的多跟同组的其他同学搭上线,侧面了解一些情况;尽可能的早去实习,实地做一些考察;在网上搜集一些领导过往的履历等等。这个过程中要自己积极主动一点,否则自己入职之后发现被坑了,也挺难受的。
不过大公司的技术leader,一般水平都是很不错的。这一点大家不要过于担心。
对我来说,很幸运的一点是,我工作两年遇到的两个直属领导,都非常优秀,同时也都是非常好的leader。从他们两位这里学到了非常多的东西。
人才密度
对于一个团队来说,人才密度也是非常重要的。因为大家在同一团队之中,这帮人将是你未来重要的合作伙伴。如果人才密度够高的话,仅仅从周围同学中学到的东西,就已经很多了。
这个打听起来其实比较容易,一般越是大公司,offer的难度会越高。相应地,同组的同学的水平也就会越高。以及关于人才密度相关打听起来也比较容易,只需要问一下相关同学觉得同组同学比他厉害的人多不多就行了。
这一条和上一条的本质,都是希望在offer选择的时候,尽可能的可以选择一个相对好的环境。在一个具有竞争压力的环境里,可能自己从领导和周围同事身上学到的东西,就已经让自己受益匪浅了。
所在岗位的话语权
所在岗位的话语权也是一个比较重要的考虑因素。
怎么说呢?如果大家处在一个技术岗位话语权比较高的公司,大家就可以主观的思考某一些问题,然后可以和其他岗位的主动沟通交流,让你的想法落地。如果大家处在技术话语权相对比较低,很有可能技术会沦为产品策略的实现机器,这其实对个人的成长是不太有帮助的。
这个可能要看公司当前的发展阶段,以及内部的文化,大家可以尝试了解一下相关需求,尤其是算法相关的需求是从哪里产出的,以及怎么样推演下来的?
策略vs模型
在算法工程师offer对比中,可能还会有一种比较,就是会把算法工程师划分成做策略和做模型的,然后机械的评价策略算法工程师不如模型算法工程师。
这种划分一般不会出现在HR口中,更大可能性是出现在从业人员口中的。策略和模型算法工程师一般定义为:做策略的就是要结合业务写一堆if else,然后做模型的就是做模型效果调优。几乎我接触的每一个新入职的算法同学,都希望自己可以成为一个做模型的算法工程师,日常工作包括:训练模型、模型调参,效果调优等等。
我个人其实是不是特别赞成这种划分。因为在我心目中,世上本没有单纯的策略算法工程师或者模型算法工程师,策略只是算法的某种程度上的一种实现手段或者是验证方式。任何算法相关的工作本身都是策略和模型相结合的。
当前,机器学习技术本身可能已经相对成熟了。表现为,传统的一些定义好的问题,比如点击率预估或者观看时长预估问题,大家已经取得了比较通用的解法。如果短期内,机器学习技术如果没有飞跃性的进展,模型效果已经很难取得排除增加机器算力而带来的提升了。意味着,理论上公司应该不会再投入比较多的人力去做训练模型、模型调参的工作了,因为已经差不多到某一个瓶颈了。
那么在日常的工作中,算法工程师更重要的工作是,抽象和定义算法可解的问题。
什么意思呢?我来举两个例子。
在内容推荐场景,有一个比较通用的问题叫做标题党问题:大家是被文章或者视频的标题骗进来了,然后一打开发现不是这么回事,这时候去就不符合预期。一种通用的解法就是审核,就是把每篇文章都让人看一遍,判断是不是标题党。但是这种做法显然费人费力。能不能通过算法的方法去解决标题党的问题?这时候就涉及到,怎么定义标题党的问题(解决正负例的判定),该收集什么样的特征(特征抽取),怎么样可以收集一些case去优化这个模型(评价指标)。这样就可以通过算法优化解决标题党的问题。
这是抽象和定义为算法问题的一个例子。为了更好的说明策略和模型的异同,我们再举一个例子:
内容推荐场景有一个问题叫做文章冷启动问题。就是说我们要给所有的文章给一点基础的展现,让这些文章能够积攒一些用户行为,这样这些文章后续才能更加准确的触达给对它感兴趣的用户。此外,让所有的文章有基础的交互也是为了更好的服务作者,不然他们会觉得自己的发文没有人看,从而丧失了后续发文的动力。这是我们对待正常普通发文作者的态度。
但是平台里面可能还会存在一部分作者,他们的目的就是为了来平台薅羊毛,通过发布一些低质量的视频,赚取平台给的流量费。一般情况下,平台都是不会鼓励这样的作者的,因为他们会影响挤占那些原创作者的流量,进而影响整体的作者生态生态。所以呢,我们就要打压薅羊毛的作者,而鼓励那些真心认真原创的作者。
怎么样鼓励和打压呢,这时候可能就涉及到一些所谓的“策略”:我们可能会通过一些if else语句来实现鼓励和打压,然后看一下能到什么样的效果:比如这样的策略可能会让现有的冷启动模型效果造成多少的损失,最大能达到什么样的效果。这个属于策略向的一些糙快猛的探索。可能大家日常诟病的“策略”算法工程师就是在做这样的事情。
但是实际上这个问题背后还可以再深挖一下:比如怎么样去定义鼓励和打压的作者呢?他们有什么行为和特征?怎么样可以更好的实现流量分配的策略呢,是不是比if else可以更少损失更好效果的模型策略呢?这些问题背后其实都是一些可以被算法定义和解决优化的问题。而每一个问题背后,其实都可以抽象成为一个新的模型问题,都可以转化为模型效果和调优的问题。
所以到底是什么造成了“策略”算法工程师的不良名声呢?在实际的工作中,如果只是为了实现产品的需求,那肯定就是if else大师。但是作为一个算法工程师,把一些别人的一些insight,转化为模型算法可解的问题,通过机器学习算法达到更好的效果,那才是算法工程师真正发挥价值的地方。
所以在我看来,算法工程师其实本质上没有“策略”和“算法”的区别,可能产品的想法用“策略”描述更容易实现,但如果单纯的变成一个实现产品需求的机器,那可能也违背了算法工程师的初衷。本质上大家成为算法工程师都是希望用各种各样机器学习算法解决实际的需求和问题的,这时候就需要大家可以再往深的思考一下:“策略”问题,能不能用更好的通过“模型”来解?为了更好的有“模型”效果,通常可以用“策略”做一些简单尝试。
但是一个算法组,如果大家热衷于实现策略,而永远都不关注算法模型的定义,那确实也没有什么前途。为了避免踩坑,还是希望大家能够多了解,多去了解组里的算法氛围。
最后,还要说明的一点是:我们选择某一项工作,是希望通过这个工作本身为他人创造价值,同时在创造价值的过程中积累经验,帮助我们自身成长。但我们不能把自己的成长全部寄托在工作上。无论工作的好坏,我们还是希望自己能够得到最快速的成长。
我们当然有义务找寻一个最适合自己的环境,进而获得最大化的成长。类似于读书时候的孟母三迁以及选择一个好的大学。所以在选择之前多问人,多请教一些情况,这并不丢人。尤其是对于初入社会的同学来说,培养一个好的习惯,以及有机会对公司运营整体运营以及盈利方式有了解,找到其中的价值瓶颈和关键,尝试做出一些改进和贡献,积累行业经验,会更有利于自己的成长。