2020 年算法工程师生存现状 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
salaryfly
V2EX    程序员

2020 年算法工程师生存现状

  •  1
     
  •   salaryfly 2020-10-24 21:35:13 +08:00 4931 次点击
    这是一个创建于 1812 天前的主题,其中的信息可能已经有所发展或是发生改变。

    恭喜您被录用了!

    对于刚刚计算机硕士毕业的赵磊来说,这是一个天大的好消息。这是一个国内知名 IT 公司的算法岗工程师,同时这个岗位的有 500+人。能进入面试的都是很优秀的人才。你知道的,很多人形容如今的校招算法岗:「灰飞烟灭」。

    即便如此,还是有不计其数的应届简历选择投递到了各大 IT 公司的算法岗,这像是一种魔力,每一个毕业生都会被其吸引;这像是一个黑洞,竞争已经一片红海。

    在杭州某中型互联网公司负责校招的 HR 董女士告诉 Salaryfly,今年的校招算法岗早已全部招满,简历多到很多都没有来得及看,现在还没招满的是 Java 服务端开发和测试开发工程师。原因是 Java 服务端工程师名额较多,而测试开发工程师的简历数量较少。( PS. 如果您对 Java 服务端开发或测试开发工程师有兴趣,请留言让我们知道,后续会根据反馈采访相关人员)

    为什么会有这么多的同学选择算法岗?

    原因是显然的,算法岗薪资会较其他开发工程师高出一大截,目前的惊人高薪 offer 基本上都是出自算法岗。刚刚入职的赵磊透露,入职同一部门的他的同学,月薪要比自己少 25%左右。要知道,如果你能在校招时拿到一个更高的收入,这意味着整个职业生涯的起点都会领先别人,将来的薪资涨幅都是基于这个起点。不夸张的说,选择算法岗,相当于赢在了一个职场的起跑线上。

    算法岗的另一个优点是其工作压力会较其他开发小很多。在如今的互联网公司,工作压力约等于给你的任务数量,由于前端或后端工程师的任务容易被量化,如前端容易根据页面数量和页面复杂情况来度量 story point(一种在敏捷开发中评估工作量的方式,可简单理解为完成任务所需要的工作天数),后端会被根据服务 /接口的数量和逻辑复杂情况来度量 story point,由于互联网行业的长期发展,开发环境、开发工具、开源工具十分丰富,其工作量度量相对准确,导致的普通开发的工作压力相对较大。

    而算法岗的区别在于其本身需要较多的创造能力,同样的算法可能需要不断的选择模型、调整优化参数和模型结构的过程,其开发工具、开发环境还不十分丰富,其度量的结果只能是最终算法效果。效果提升与否的原因有很多,很多适合并不能在一个较短的时间内有明显的算法效果提升,这导致算法的工作相对难以被评估工作量。

    还有一个重要的原因是当前人工智能的浪潮还远未到达巅峰,人工智能作为国家战略,其重要性不言而喻。而算法工程师可以说是人工智能浪潮的弄潮儿,这导致了上述的高薪等原因。算法的需要一定的数学基础,其难度相对较高,对于在学校中的优秀学生来说,选择这样的岗位,也是符合自己的一个从小的「别人家的小孩」的定位。

    成长

    算法工程师其实细分了很多职位,包括搜索 /推荐 /广告算法、计算机视觉、语音处理和自然语言处理等主要的几类。

    赵磊的工作内容主要是自然语言处理的相关内容,其团队的主要业务是一个智能问答机器人。是的,这是一个高大上的人工智能产品。赵磊觉得,在这里自己能够实现理想,「 Make the world a better place 」,让这个世界因为自己而变得更好。

    现实却给了初出茅庐的赵磊当头一棒,你会发现,在企业中的事情,和在学校里面很不一样,是结果导向的,你想要做一件事,那么首先要考虑它能够带来什么,如果不能有什么直接的结果,或者这个结果在短时间内是看不到的,那么没有人会支持你做。这也是为什么很多从学术界跳往产业界的学术大牛会水土不服,这样的例子太多了。赵磊的前几个月写了很多规则模版(根据问题的出现的某些关键词,直接匹配相应的答案),因为这是短期内提高问答正确率的最快最稳定的方式。

    在这样做了几个月的规则之后,不知道为什么,领导似乎觉得我们应该做一些很 fancy 的事情了,于是赵磊很开心,可以做一些之前学习过的机器学习模型了。训练优化模型的过程其实是比较枯燥的,特别是当你很长时间都没有效果上的提升时,一开始的新鲜感褪去之后,剩下的就是愈来愈多的枯燥。模型的效果是重度依赖于数据,在算法届有这么一句话:「数据和特征决定了效果的上限,而不同的模型和参数只是去逼近这个上限。」赵磊就是在不停的「清洗数据」->「特征处理」->「训练模型」 ->「调整参数」->「清洗更多数据」 这样的每一天不停循环。现实不总是奥特曼打小怪兽,点点鼠标,调调参数,效果提升很大的日子并不多见,更多的时候,是在无数的加班夜晚,日常灵魂拷问:

    训练数据是不是有问题? 这个场景是不是不太适合这个模型? 我早就觉得这个模型结构很奇怪! 相信每一个算法工程师都有这样的体验,当你的模型效果长时间得不到提升,压力自然就会出现,慢慢你会有一种无助、绝望的感觉,这时候你会想念起当初写规则、写模版的美好时光。

    现状

    目前算法工程师的要求越来越高,很多企业对算法工程师的工程能力的要求也是越来越高。5 年前你可能不需要任何的工程能力,仅仅凭借算法能力就能收获 offer,但是现在的情况是,如果你没有一定的工程能力,那么意味着企业还需要给你搭配相应的工程人员,这显然不是最优的。

    在校招方面,学校和学历的要求越来越高,浪潮之下的相关专业的博士生已经一批批的毕业,今年以来的大环境不是很理想,导致招聘数量没有明显提升。这无疑使得竞争愈加激烈,特别是在校招行业,相关的要求也是水涨船高。

    算法方面的知识更新速度更是其他岗位更难以望其项背的。

    举例来说,Java 程序员的主要开发框架,这么多年来都还是 Spring 相关的这一套,而相对更新较快的前端方面,其主要的框架也是 React/Vue/Angular 这几种。

    而算法领域的模型更新超过你的想象,这意味着你更需要不停的学习、吸收相关的模型。举例来说,自然语言处理领域,可能 5 年前你只需要知道一些基础的机器学习模型和 Word2vec 就够了,两年前你需要再了解 Attention 结构,而如今如果你不知道大名鼎鼎的 BERT,不了解其背后的 Transformer,我甚至怀疑你是否能拿到任何一个 offer.

    不夸张的说,每一天都有新的模型推出,其中有一部分优秀模型可能会有 SOTA(目前最优)的效果,如果这个模型引发了关注,那么你必须要学习它!持续学习是一项必备的关键能力之一!

    误解

    目前对于算法岗的调侃和误解是存在的。

    算法同学会自嘲是 SQL BOY,是调参侠。

    有些配合算法的开发同学会觉得自己是在给算法打黑工,承担了线上的故障风险,而功劳可能大部分都是算法同学的。事实上,目前很多算法工程师的工程能力太差,这是一些别的同学嘲讽算法同学的主要原因。

    Salaryfly 认为,如果不是纯学术型的研究人员,那么还是建议有一定的工程实现能力,这不仅会对算法的落地有帮助,也会便于算法同学和开发同学之间的沟通。

    曾经有知乎上有人将不合格的算法工程师分为了几种类型,这也反映出目前的部分浮夸现状,其主要共同特征是对算法一知半解,满足于 hello world 型的算法学习,落地能力不强,主要靠 PPT 进行输出等等。

    2020

    算法工程师的基础技术栈。

    深度学习框架:

    • Tensorflow, 最流行的深度学习框架之一,起源于 Google 内部,有非常完整的一套工具用于生产环境部署,可能是企业界最受欢迎的深度学习框架。
    • PyTorch, 最 fancy 的深度学习框架,fork 自日本的 Chainer, 使用起来较为方法,语法非常的 Pythonic,相对于 tensorflow 的较为容易上手。
    • Keras, 深度学习高级接口,不限定后端。其接口设计非常优雅,及其容易上手。

    编程语言:

    • Python, 必备, 有一句流行语「 Data scientist should use Python.」
    • Java/C++/Golang,可选,但是建议掌握。如果你需要部署模型到生产环境,考虑到各个公司的编程语言栈不同,但国内大部分是 Java/C++/Golang 的其中一种或几种,如果你会其中的一种编程语言,这会对你很有帮助。 SQL, 必备, 很常用,你不能不会。

    常用库:

    • Spark/Flink, 必备, 数据处理与流失计算。
    • ScikitLearn/Pandas/Numpy:可选,但强烈建议掌握。这是大家都会且经常用到的工具,如果你还不会,建议尽快掌握。且 Numpy 是很多 Python 数值计算的基础库,包括 Tensorflow 等等。

    如果你已经是或者想成为一名算法工程师,那么在 2020 年,建议你踏实下来,算法+工程两手都要抓,都要硬!

    1024,节日快乐!

    (文中赵磊为化名)

    欢迎关注微信公众号: Salaryfly

    22 条回复    2021-04-20 10:37:26 +08:00
    salaryfly
        1
    salaryfly  
    OP
       2020-10-24 21:44:44 +08:00
    revalue
        2
    revalue  
       2020-10-24 22:21:07 +08:00
    市场需求肯定是有的,高手和打杂之间存在着比例划分。打杂的都觉得自己在打黑工
    raaaaaar
        3
    raaaaaar  
       2020-10-24 23:07:00 +08:00 via Android
    算法岗太卷了,我周围那些高中的竞赛党,大学各种 ACM 奖牌的大佬也是往这方向走,怎么比。。
    hoyixi
        4
    hoyixi  
       2020-10-24 23:23:43 +08:00
    当卖水的集中卖某一种水的时候,已经是谷峰,或者谷峰已过,开始往下栽了。iOS,Andorid,前端,Python 无一例外
    salaryfly
        5
    salaryfly  
    OP
       2020-10-24 23:30:04 +08:00
    @revalue 打杂大多了,也可能就是高手了:)
    salaryfly
        6
    salaryfly  
    OP
       2020-10-24 23:31:05 +08:00
    @raaaaaar 现在的竞争特别是校招,确实很激烈!
    salaryfly
        7
    salaryfly  
    OP
       2020-10-24 23:32:14 +08:00
    @hoyixi 要么引领浪潮,要么追随浪潮
    9LCRwvU14033RHJo
        8
    9LCRwvU14033RHJo  
       2020-10-24 23:33:45 +08:00
    Java 后端才是最通用的刚需
    salaryfly
        9
    salaryfly  
    OP
       2020-10-24 23:35:17 +08:00
    @user8341 Golang 不配拥有姓名吗 :)
    9LCRwvU14033RHJo
        10
    9LCRwvU14033RHJo  
       2020-10-24 23:39:08 +08:00
    @salaryfly 市场占有率差很多。我是看 TIOBE 排名,Java 占 12.56%,Go 只占 1.16%。差距还是很悬殊的。
    LoveJava
        11
    LoveJava  
       2020-10-24 23:41:14 +08:00   3
    贩卖焦虑,然后宣传自己的公众号收割粉丝。最后卖广告卖教材赚钱美滋滋。
    abcbuzhiming
        12
    abcbuzhiming  
       2020-10-24 23:48:00 +08:00
    @salaryfly Go 还需要时间积累基础设施,现在真心感觉背后有超级组织撑着的语言就是不一样,Java 背后的那个 JCP 组织,以及 Apache 基金会不声不响的做了很多事情,护城河早就建起来了。Go 背后只有 google,差点意思。至于背后没有超级组织的语言,比如 Javascript,本来是应用超级广泛,社区也超级庞大的语言,按理说应该发展的很好,结果呢,作为重要基础设施的包管理工具 NPM 三天两头的爆被人写入恶意代码的新闻。。。。。。看着让人叹气
    salaryfly
        13
    salaryfly  
    OP
       2020-10-24 23:57:50 +08:00
    @LoveJava 别这样说啊,要不你也关注一下我的公众号吧。
    salaryfly
        14
    salaryfly  
    OP
       2020-10-24 23:59:08 +08:00
    @abcbuzhiming 感觉用 Golang 的公司慢慢多了起来了
    AntiGameZ
        15
    AntiGameZ  
       2020-10-25 00:57:20 +08:00
    LZ 目的就是推广自己网站,我觉得无可厚非。

    对我来说,与其长篇大论贩卖焦虑,不如聊聊为何作为一个程序员,salaryfly 的数据是可信的。起码对我来说,观感会更好一些。
    Ley
        16
    Ley  
       2020-10-25 01:16:48 +08:00 via Android   1
    我倒是觉得楼主文笔不错,文章内容也算不上贩卖焦虑。只要能提供一些有价值的信息,内容又不是太浮夸或急功近利,相信会得到更多的关注者。
    salaryfly
        17
    salaryfly  
    OP
       2020-10-25 10:13:39 +08:00 via Android
    @AntiGameZ 感谢理解!

    关注公众号 Salaryfly 后面我们会聊聊为什么 salaryfly 的数据是基本可信的:)
    salaryfly
        18
    salaryfly  
    OP
       2020-10-25 10:17:31 +08:00 via Android
    @Ley 您好,感谢您的理解和建议!

    之前有做过技术干货博客网站,有一些关注量,但是觉得技术干货的受众面可能会更窄。

    我们也想做一个调查,有希望看技术干货的能否关注公众号留言,说一下想看的干货类型。提前感谢大家!
    wangyzj
        19
    wangyzj  
       2020-10-25 11:30:54 +08:00
    写的不错
    我的感受是
    基础理论很难突破,大部分场景都有固定的套路算法去实现
    根据公司不同场景来优化算法又很大程度上依赖工程
    所以很多算法岗就变成了特征,调参,pm,和配合工程团队
    我个人不是算法,我只是自学过,发现其实很多场景实现都可以 google 到,所以有此感受
    salaryfly
        20
    salaryfly  
    OP
       2020-10-25 12:27:02 +08:00
    @wangyzj 感谢支持!
    基础理论是学术界和极少数产业界的顶尖人才来突破的。
    然而这不是说做算法应用没有价值。相反,目前最缺少的就是可以做算法应用落地的人才!
    wangyzj
        21
    wangyzj  
       2020-10-25 19:04:36 +08:00
    @salaryfly #20 实用价值肯定是有的,尤其是那种结合实际生产场景需要,同时给出工程架构设计的人
    kevtyle
        22
    kevtyle  
       2021-04-20 10:37:26 +08:00
    如果别人想看薪资,却没办法看,可能会提交假信息,这个情况考虑过吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6108 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 03:17 PVG 11:17 LAX 20:17 JFK 23:17
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86