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

2020 年算法工程师生存现状

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

    恭喜您被录用了!

    对于刚刚计算机硕士毕业的赵磊来说,这是一个天大的好消息。这是一个国内知名 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 要么引领浪潮,要么追随浪潮
    user8341
        8
    user8341  
       2020-10-24 23:33:45 +08:00
    Java 后端才是最通用的刚需
    salaryfly
        9
    salaryfly  
    OP
       2020-10-24 23:35:17 +08:00
    @user8341 Golang 不配拥有姓名吗 :)
    user8341
        10
    user8341  
       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   ·   实用小工具   ·   2712 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:06 · PVG 20:06 · LAX 04:06 · JFK 07:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.