2020年 算法工程师生存怪状

共 3597字,需浏览 8分钟

 ·

2021-02-11 02:50


 他们会自嘲是SQL BOY,是调参侠,其实他们做的,远比这些要多。


01
入局



恭喜您被录用了!

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

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

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

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

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

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

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

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



02

成长



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

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

现实却给了初出茅庐的赵磊当头一棒,你会发现,在企业中的事情,和在学校里面很不一样,是结果导向的,你想要做一件事,那么首先要考虑它能够带来什么,如果不能有什么直接的结果,或者这个结果在短时间内是看不到的,那么没有人会支持你做。这也是为什么很多从学术界跳往产业界的学术大牛会水土不服,这样的例子太多了。

赵磊的前几个月写了很多规则模版(根据问题的出现的某些关键词,直接匹配相应的答案),因为这是短期内提高问答正确率的最快最稳定的方式。

在这样做了几个月的规则之后,不知道为什么,领导似乎觉得我们应该做一些很fancy的事情了,于是赵磊很开心,可以做一些之前学习过的机器学习模型了。

训练优化模型的过程其实是比较枯燥的,特别是当你很长时间都没有效果上的提升时,一开始的新鲜感褪去之后,剩下的就是愈来愈多的枯燥。模型的效果是重度依赖于数据,在算法届有这么一句话:「数据和特征决定了效果的上限,而不同的模型和参数只是去逼近这个上限。」赵磊就是在不停的「清洗数据」->「特征处理」->「训练模型」 ->「调整参数」->「清洗更多数据」 这样的每一天不停循环。

现实不总是奥特曼打小怪兽,点点鼠标,调调参数,效果提升很大的日子并不多见,更多的时候,是在无数的加班夜晚,日常灵魂拷问
  • 训练数据是不是有问题?

  • 这个场景是不是不太适合这个模型?

  • 我早就觉得这个模型结构很奇怪!


相信每一个算法工程师都有这样的体验,当你的模型效果长时间得不到提升,压力自然就会出现,慢慢你会有一种无助、绝望的感觉,这时候你会想念起当初写规则、写模版的美好时光。



03

现状



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

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

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

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

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

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


04

误解


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

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

有些配合算法的开发同学会觉得自己是在给算法打黑工,承担了线上的故障风险,而功劳可能大部分都是算法同学的。

事实上,目前很多算法工程师的工程能力太差,这是一些别的同学嘲讽算法同学的主要原因。

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

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


05

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,节日快乐!

(文中赵磊为化名)
浏览 45
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报