找回密码
 立即注册
查看: 1559|回复: 20

算法工程师也会遇到35岁这道坎么?

[复制链接]
发表于 2021-7-30 15:45 | 显示全部楼层 |阅读模式
如题,现在互联网行业很多开发工程师(包括前端开发、后端开发等等传统意义上的“码农”)会遇到35岁这道坎,那么对于算法工程师这种非常规、非传统的码农(侧重以数学模型技能为主,而不是写代码),也会遇到35岁的坎么?
发表于 2021-7-30 15:51 | 显示全部楼层
2020.05.20更新,补充不同阶段的细节和总结
<hr/>这个问题其实对于大多数程序员都是适用的,国内的互联网公司,始终奋斗在一线写代码、跑算法模型的工程师实在是太少了。每年的高校毕业生,持续不断地在为这个行业输入更年轻更新鲜的血液,对比25岁刚入职更会加班更能吃苦关键是薪资更加便宜的小年轻,35岁的算法工程师如果只是工龄更长资历更老,将全方位处于劣势。
想要跨过这道坎,要做的就是努力去提升自己的相对不可替代性,从初级渐渐往高级的方向走,个人觉得大体可以分3个阶段:
初级算法工程师 ––– 高效执行机器

   算法入行的必经之路,所谓的sql boy、调参侠、数据搬运工、炼丹师,都发生在这个阶段。
   这个阶段的算法工程师,很多时候都是在和数据打交道。数据漏报、数据重复上报、埋点有误、多方数据统计口径无法对齐、反作弊口径定义和对齐、异常数据检测和排查、数据缺失处理、样本清洗、特征统计加工、线上指标下降问题排查、bad case归因分析、数据标注...听起来是不是一点都不fancy?对于一个负责业务落地的一线算法工程师来说,这些数据工作可能占了日常工作的很大一部分时间。
     可就是这些一开始被你看不起的各种所谓dirty job,这些你在实验室和学校接触不到的工业数据实践,这些在paper、书本和网络永远不会教你的工作,正是你所累积的技术经验和宝贵的财富,它是驱动你往下一层级的改造的很大的动力。作为一个算法工程师,如果从没有在底层有过基础的开发和数据分析的从业经验,将来站在更高层的时候很难作出对团队方向有利的决策。数据决定了模型的上界,特征和算法只是在逼近这个上界。
不了解你的业务数据特点,很难成为一个好的算法工程师。在业务实践中培养锻炼数据sense,是一个初级算法工程师的必修课之一。
  这个阶段的算法工程师,一般面临的业务问题也比较明确,比如提升召回效果、提升线上ctr/cvr/gmv/时长、提升搜索相关性、降低bad case率等等。这些明确的业务问题背后,在业界包括团队内一般都有比较明确的技术方向,相对应的就是一些比较明确的算法问题,比如信息流的ctr预估、用户兴趣建模、广告出价预估、相关性模型、物品召回、图文标签生成等。
     这些不同的算法方向根据团队形态不同,往往会分的更加明细,比如召回方向的可能会有专门的团队,落到每个人头上就是负责其中一种召回策略:用户标签召回、行为序列召回、主题召回、双塔模型召回等。做排序模型的有专门的团队,可能是每个场景有专门的人负责,例如首页/频道页/分类页/热门页/子频道页等;也可能是每个方向的模型是专门的人负责,比如ctr模型、gmv模型、时常模型等。机制策略的也可能有专门的团队,每个人负责不同的策略方向。
    具体业务和技术形态怎么分工,不需要初级算法工程师操心,那是更高层的算法工程师需要规划和操心的事。这个阶段的算法工程师的主要目标,是要使得自己成为一个具有能够高效执行具体任务落地的能力,对动手能力要求是最高的。
    业界XX会议又又发表了一篇影响力很大的paper,实验效果宣称(chui niu)业界最牛;隔壁XX公司的XX团队又又又发表(PR)了最新的算法,声称效果提升巨大(可能是baseline很低);著名程序员大型交友网站某hub又开源了最新的模型代码,号称在多项任务中吊打当前各种主流模型。于是老大一句话,你去调研下人家怎么做的,回来落地实现下啊。
   接下来就是发挥初级算法工程师能力的时候了。 看论文、复现模型、跑实验、调参数、魔改网络、效果不好接着调。这个过程其实也是拉开初级算法工程师们能力的时候,有些人只是做到会用工具,调调api,调调参数改改网络,或者直接git clone下载源码编码后改改直接跑,至于能否有效果完全看天,真真是在“炼丹”。最终没效果还要补充一句,论文作者们真的是在吹牛啊,这个算法在我们这里完全没有效果啊。然后换个模型重新炼丹来过。
有些人在这个过程中不断累积经验,尽可能去找这些方法的共性。以ctr模型为例,embedding参数对自己业务数据效果是否敏感、网络层数的深度对效果的影响、不同正则化方法是否work、bn/ln/dropout等方法是否有效、当前的特征体系对于高阶特征交叉是否已经刻画足够、attention到底收益有多大等等。这些如果能从更本质和通用共性的角度去分析总结,大概率在同样的数据分布上可以作为以后的先验判断,经验是可迁移的,不至于在每一次有新的模型出来就去盲目的做尝试。
判断这个阶段的工程师的标准,就是对于一个明确的算法目标,是否具备足够强的执行能力将其落地。初级的落地能力只是快速实现,更加高级和solid的落地能力,是能够know how的落地,有无效果都能做出比较solid的分析,并且能够为以后的迭代优化提供经验。
中级算法工程师 ––– 算法选型和改造能力

   经过了第一阶段之后,对于明确的算法问题已经具备了足够的经验,这个阶段,需要自己根据在这个领域内的技术累积,对已有的算法问题,进行适当的改造和优化。
   以用户画像为例,如果是刚搭建的团队,初期可能更多需要搭建的是整个模型框架,和上下游团队协作沟通,以最小的代价迅速搭建起线上可用的基础baseline。比如最简单的基于统计的方法,根据用户的主动行为的物品标签作为用户的统计画像标签,如24小时的统计标签作为短期兴趣,30天的统计标签并做时间衰减作为长期兴趣。这个阶段的算法工程师,如果不顾团队的现状,一上来就想做能够体现技术深度的各种模型,对团队其实的进展其实是负向的。确保算法能够快速落地并取得收益才是主要目的。
而团队发展到了一定阶段,有了一定的基础属性画像和统计画像之后,可以根据团队的人力做些深度的发展,从基础的统计,可以做无监督的隐语义理解(lda, w2c等)、有监督的双塔建模、加入特征的用户兴趣建模,到用户序列建模,甚至各种图方法知识图谱的手段。而具体选择哪些方法进行尝试需要中级算法工程师根据此前在初级阶段累积的经验做预判,例如假如还没有用户embedding的表示,将用户的行为序列作为sentence尝试在很多公司的业务都有过收益的word2vec可以作为baseline;引入更多特征的双塔模型去得到用户的行为embedding大概率能进一步提升效果。而如果用户有些社交属性关联,可以考虑图方法做进一步的挖掘等等。
作为该方向的负责人,需要根据团队发展阶段,进行合理的技术选型,并做适当的改造。例如该不该用序列模型、lstm/rnn/transormer/bert等序列模型如何选择,位置特征如何设计融入等等。关于细节的参数调优需要具体执行的初级算法工程师去进行实验,而大方向的技术选型以及改造方向,则需要中级算法工程师去把握和指导。
技术深度绝对不是考察中级算法工程师的主要手段。判断这个阶段算法工程师的标准,主要是是否具备在某个算法方向,独立承担整个算法从选型、改造、应用到落地取得成果的能力。
高级算法工程师 ––– 业务抽象能力

   前面两个阶段的工程师做的事情,严格意义上来说,都是在执行这个阶段的算法工程师定下来的算法指标。这个阶段的算法工程师,需要更多的是对整个业务的理解,去抽象和定义业务问题。比如当前阶段,业务是否需要专门的团队做用户画像,需要多少的人力做素材理解,rank模型是否还有空间、需要投入多少人力持续优化等。如果战略目标制定不明确,影响的将是整个团队的努力。
对于更上层的管理层来说,算法团队的存在意义,绝对不是说一定需要有ctr预估团队,需要有用户画像团队和视频理解团队,需要有人做nlp有人做特征等等。整个算法团队存在的意义,就是能够最终从算法的层面,解决实际的业务问题。在某个阶段需要做的是提升用户点击率,可能需要有ctr模型方向团队和有用户画像方向团队等;在某个阶段引入更多的多媒体素材可能需要有团队做视频理解和图像理解;某个阶段需要做用户增长和留存,可能需要有团队做专门的数据分析影响用户留存的因素,有团队做留存模型有团队做增长模型等等。
这也就决定了不同时期,对于算法团队的目标是不同的,需要的人员配备也不同,而这些,都需要高级算法工程师去站在整个业务层面去理解和拆解,然后将目标层层传递到整个团队去。判断这个阶段算法工程师的标准,主要是对于所负责的业务,能否制定合理的算法可达目标,并带领团队完成实现。
个人觉得,如果35岁了还处在第一阶段,也就是只能执行明确的算法模型,和刚毕业的小年轻比可以说完全没有竞争力,个人职业生涯的进一步发展会很受限。
如果已经进入第二阶段,不可取代性还是很强的,毕竟这个阶段的合理算法技术选型和推动落地能力,是很多刚毕业和工作不久的年轻算法工程师难以做到的。
如果已经到了第三阶段至少已经是业务方向的算法负责人了,都这种title了,考虑的是怎么往公司的中上层走了,根本不会担心年龄这种坎。
35岁对于我个人而言还有几年的时间,也只有几年的时间。无论是算法工程师还是其他岗位,深耕该岗位目前而言可能还是最优的选择,也可以说是没得选的选择。持续不断的去提升自己在技术、技能、经验、资源上的累积,努力去提升自己的相对不可替代性。
至于年龄,不过是个数字而已。就算是个坎,它也远不是终点。
发表于 2021-7-30 15:56 | 显示全部楼层
@霍华德 讲的很好了,纯从技术发展的本身,一定是门槛越来越低,所谓的经验经不起新技术的冲击,但这一套逻辑更适用于基础技术,我来补充另一方面的信息。
这个问题其实不是技术人员独有的,而是职业发展中面临的普遍问题,只是网上技术的同学发声比较多,而且技术同学相对单纯,容易一条路走到黑,遇到困难不容易变通,很少去看看那些其他行业的人面对问题的处理方式。
回到职业规划,我觉得远见这本书里面提了三个标准挺有意思的。分别是可迁移的技能、有意义的经验、持久的人际关系。
可迁移的技能不多说,简单说下我对有意义的经验的理解,有意义包括两方面,一个是这个经验对别人有门槛,另一个是这个经验是有拿到结果。对很多在工业界做算法应用的同学来讲,无论是线上abtest的资源还是公司算力的资源,对后来者都是有很大的门槛的,即很难在学生时代就对算法和业务结合理解的特别好,这是一个明显的优势。
再谈下持久的人际关系,很多技术同学都会忽视持久的人际关系。其实人和人之间的信任是非常宝贵的,大家应该重视起来。机器学习发展起来后,在工业界普遍遇到一个问题,如果和非机器学习的同事解释,如何和他们更有效的合作。而机器学习有很多时候,都是需要大投入的项目,这个时候长期的信任关系就变的特别的重要,这个也是新人并不具备的。
总结起来,题主特别问了算法和程序员的对比,我觉得最大的特点是算法面对的巨大不确定性,而且这个不确定性是和业务本身相关的。业务变化万千,很多经验都是靠真金白银砸出来的,门槛很高。因此,这方面我又偏乐观一些。
PS:这个行业最受人瞩目的当然是哪些世纪难题,如果你从事的和这些问题相关,那就是高风险高回报的逻辑了。
发表于 2021-7-30 16:00 | 显示全部楼层
25 岁的算法工程师会怎样看待这个问题?
发表于 2021-7-30 16:00 | 显示全部楼层
谢邀,会的,因为他们很快会被迫转成开发,然后。。。
发表于 2021-7-30 16:02 | 显示全部楼层
我对这个问题很谨慎
一方面,近几年的算法不断自我革命,随着框架的发展,其实门槛是越来越低了。十年前,需要自己实现反向传播,能拦住不少人。现如今BERT出现后,很多任务的难度都大幅下降。这方面利空年迈的算法工程师。
另一方面,对算法工程师的要求越来越综合,算法工程师也逐渐向多面手发展,做nlp的算法工程师只会nlp领域是不够的,随着多模态技术的发展,视觉、语音、强化学习等技术也统统都要掌握。所以,年迈的算法工程师对新萌的优势在于技能的宽度上。与资本家的博弈中,依靠“技多不压身”,来维持相对高一些的待遇”。
另外,只能寄希望于中国教育改革迟缓,为年迈的算法工程师多争取一些时间。
发表于 2021-7-30 16:08 | 显示全部楼层
2020.11.09更
最近很多师弟妹和朋友的师弟妹,都会咨询我诸如“拿了xxx大厂 xxx薪水,该不该去” 的问题。这种问题其实很头疼。
我在这里仅针对大厂的算法类offer,简单说一下我的观点吧。
    从个人技能树、业务思维能力出发,“拿到大厂offer”和“拿到大厂核心业务部门offer”是两件事。应届生如果想在行业深耕,那应该把所在部门是否是核心部门作为首选条件,而不是package。核心部门意味着业务更成熟、技术也有积累和深耕,过去相当于能踩在巨人肩膀,得到的是全方位的提高。  相反,如果去非核心部门、流量较小部门,那即使是大厂,可能最后也会被阉割为sql boy,视野受限,个人不建议去。 还有一种情况,就是新成立业务线的部门。这个时候就要联系公司内熟人,了解下这个业务线是否是公司接下来的重点、是否是新的利润增长拐点。这种是有可能通过生长初期的新员工股权激励,短期获得可观财富。
——————— 以下原答案———————
这个问题的根源于16年~18年,校招算法工程师的高薪现象。
一个刚毕业的研究生,大多能拿到至少20万,还有很多动辄总package达到80万的个案,这几乎秒杀了其他行业。先说造成的现象吧,那就是各专业的学生趋之若鹜。
我目前在就职于某大厂,上海做推荐系统,项目组今年过滤完学校后,还有千份简历,笔试过后就剩100来份了,最后面完2~3轮,薪资拉锯战后,校招就发了一个offer(非sp),给了一个复旦的牛人,2个实习生要了一个交大的牛人。这俩人一个做图像、一个做强化学习,大概率以后入职会做一些正则模型之类的事情,和研究生的研究方向无太大关联,我们看重的是他们灵活的思维和解决问题的能力。。。
然后隔壁开发、数仓的组,校招人招不够,还社招了几个人。。。投我们组的同学,部分基础很好的,大多也被开发、数仓部门消化了。。。
所以总结下来,现在的情况就是:
    IT行业对人才还是有很大需求的,特别是业务很繁多的部门 这个需求已经不在算法岗位了,或者说算法岗位的校招坑至少在大部分大公司已经趋于饱和了 现在算法岗位对应届生能力要求非常高,可以说已经超越了前几年的博士要求 互联网各种岗位的薪资已经趋于一致,晋升渠道也都类似,算法岗位已经不是前3年那样众星捧月了 就在这种情况下,还有人在整天AIAI年薪百万的叫嚣,坑害未来n年的毕业生
我总结下来,首先各行各业,几乎都会涉及到寻优、规划、迭代、探索,算法是其中的重头戏,那算法工程师就会一直被需求。
按现在这种情况,算法工程师肯定是至少研究生起步,35岁就是工作5~10年,如果这段时间能在大厂,大概率得需要国内排名前n的名校毕业以及国外名校。。。然后再跟对Boss,跟对Boss,跟对Boss,然后得到很好的技术锻炼、养成定期学习的习惯、培养业务的敏感度、跟进社会的更迭、学习先进的管理模式。做好上面至少任意一点,那这部分人到了35岁,只会更加不可或缺,成为互联网或者其他渗透行业的支柱,或者下一个新兴行业的弄潮儿。原因很简单,任何行业,要提高效率,做到垄断,(除了有靠谱的爹)都需要算法。这部分人的比例,永远是很少的,这种模式也是一种良性的循环。
其他的同学,到35岁,浪潮完全褪去,必然会有不少淹死的。。。其实就今年已经淹死很多了,大家都心知肚明,大厂offer全集中在少数人手里。。。说句心里话,就算在大公司,也不是所有部门的算法岗位都在搞高大上的东西,很多都还是在用规则解决实际业务。如果在职业伊始,没有牛人在身边,得不到很好的技能锻炼和思维培训,那就算拿到了算法岗位,又有多大意义呢?你学的东西大概率是没有平台在实际场景去施展。
说了这么多,我觉得肯定有大部分人会遇到坎;但是对于小部分幸运儿,会越来越顺利。
发表于 2021-7-30 16:10 | 显示全部楼层
我觉得不会,起码从我身边那些跳槽的同事的经历不会,40多岁还能随便跳槽。
可能是我一直在一线工作的关系,我一直觉得算法是一个跟业务强相关的工作,小到数据埋点,大到业务架构,算法都需要参与其中,算法的意见对项目也是至关重要的。
面向企业的业务经验是极其宝贵的。
我以前也问过鹅厂做5G和云开发的同事,你们35岁了,会不会被我这样的小年轻淘汰。他们笑着说:你们20多岁的小年轻,毛手毛脚的,不敢让他们动核心代码的,还是有经验的老家伙让人放心。
也许新的技术上来小年轻会把老家伙打倒,(我以前也鄙视过用十年前老技术的程序员,一点也不时髦),但是老家伙的业务经验却是小年轻没有踩过坑而学不会的。
发表于 2021-7-30 16:14 | 显示全部楼层
当然会了。
我甚至觉得,现在算法工程师的前景远差于后端/前端开发。
就以我所从事的推荐系统这个算法工程师的分支举例子。若一家公司没有几百万DAU,根本不需要推荐系统,搜索+热榜就能覆盖大部分需求,所以,推荐系统工程师大概只能生活在三,四线以上互联网公司以及少部分国企中。但是前后端开发的去向就宽广多了,小公司也需要网页呀,也需要小程序啊,也需要开发app呀…
有一个研发同学所在部门的老板(p8)就从杭州跳去了一家武汉公司,据说是做cto。算法想要得到同样的机会会难很多。
但换一个角度,我觉得算法(可能更狭窄的说是推荐算法),转行的可能性会比开发高很多。1.首先可以转开发,大家都是学cs过来的,并不是学不会。2.算法对数据的感知要比开发高很多,我们通常都说用数据说话,这个习惯不是每个职业都有的,转行产品等职业会比一般的开发有优势。
最后,把自己打造成T字型人才,有算法的深度,也有更广泛领域知识的宽度。查理芒格经常说用多元思维模型解决问题。咱们学了那么多数学,学了那么多算法,搞了这么久大数据,如果把自己定位为解决问题的人,就算不搞算法了,也不至于找不到工作的:)
发表于 2021-7-30 16:18 | 显示全部楼层
原来算法工程师不是码农吗
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 13:24 , Processed in 0.132005 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表