打开网易新闻 查看精彩图片

人在江湖飘,谁能不挨刀。一个公司除了镇山的虎、远见的鹰、善战的狼,总会有几个搅屎棍。

在互联网行业,算法工程师在开发岗位中要求高(他们通常被定位为给所在团队构建某领域的深度学习系统,完成给系统的数据采集、数据标引、模型训练、神经网络优化等工作,进行评估、优化、加速和部署等,需要有很高的数学水平和逻辑思维能力。)、薪资高(一线城市可以给到25-40K,新一线城市大概12-20K),但一些“素质差”的算法工程师总能莫名其妙混进来。

一个算法工程师能有多差?网友们纷纷献出公司的“大神”们。

网友纳米酱表示:

"我听过一个江湖潜规则,每一个大公司团队都会招一个特别不着调,水平也不行,智商也比较低的算法工程师,用来背低绩效。

当组里成员感到职业发展太难的时候,就会下意识看看那个人,这样,心里就会有莫大的安慰。

我当时下意识地看看周围的同事,发现他们都不符合这些描述。"

网友王喆说:

我们组一个年轻的印度小哥,UCSD毕业的,按说教育背景也不错,写model serving过程中的一步。每个request开20个线程计算。

我说你一个m*n复杂度的过程,m和n还都小于100,有必要开20个线程计算吗?你那线程开销绝对比并行计算收益大多了好吗。不听,给我说(大概意思):并行计算比较cool,老老实实写那个过程太boring。

行吧,不听不听吧,自己折腾去吧。

过两天给我说load test的时候server的latency翻倍,我一看线程数都超过JVM上限了能不翻倍吗。

讲这个倒不是想取笑这小哥,而是跟大家讨论一个问题,就是什么是比“技术上最差”更糟糕的情况。

如果你只是基础差,但总体上是一个严谨的人,其实到不那么麻烦,就是按部就班的学习,按部就班的积攒工程经验,无论是哪个领导还是老同事应该都是乐于帮助这样的年轻人的,因为总体来说你还是在解决问题,哪怕速度慢一点,你总归在成长,而且是让系统整体混乱程度降低的。

最差的算法工程师其实是什么呢?是自己对技术的感觉很差,但对自己的感觉挺好,试图用一些比较fancy的手段解决问题,但实质上引入了更高的系统复杂度,增加了系统潜在风险,这样的人,其实对整个团队是负能量的存在,始终需要更senior的人帮着擦屁股,这无形增加了整个团队的工作量,这就是最差的算法工程师。

网友夕小瑶说:

首先我个人觉得,算法工程师的目标既不是精通各种框架,会调各种包,也不是会发paper就是成功,而是有能力解决实实在在被提出的算法问题。

这里的问题可能来源于业务,也可能来源于长远的战略部署,甚至可能来源于一次大领导的拍脑袋。不管怎么说,个人觉得能独立分析,拆解,建模和解决算法问题的算法工程师就是胜任的,否则再怎么花里胡哨都是差劲的。

先说一下本文4个样本的背景,甲乙丙丁都是一线大厂的正式员工(包括知名外企),工龄从刚入职到3年不等,不过都不是自己团队的,只是各种原因而接触到的NLP算法工程师。

出现一个奇怪现象后,我让他把训练loss画出来,结果他不知道怎么画。然后他不会用xx,我告诉他那就把日志中的loss点提取出来,用*来画。结果他问我*从哪里下载,有没有学习教程。

注:*是一个非常常用的python库

然后又一次,发给他一个非常简单的代码,他想改一下其中一个预处理逻辑,我告诉他在哪里改,他直接说看不懂,求帮他改。我问别人,那他拿着工资每天干什么呢,答曰,可能会写写paper?

结果最后那篇paper也不是他写的。

乙比甲好一些,乙想解决一个问题,于是我给他甩了一篇paper,然后他很多地方看不懂,于是这些细节我一点点给他讲。讲完后他要借鉴其中一个idea用代码实现,这个idea写起来就一二十行。他绕不清矩阵计算,让我教他写,我给他5分钟写完,他很努力的理解了,恍然大雾,拿去跑了,然后跑完觉得很棒,自己又想了一个可能的实现方案,然后问我另一个方案可行性,这两个方案在数学上是等价的,于是讲了等价后,开始问我另一个方案的每行代码应该怎么实现。

小哥哥,你是故意来搭讪的吧?

有一天我把甲的故事分享给了另一家大厂的小伙伴,小伙伴说,还好,他们组刚入职一个新人,第一次做技术分享,给大家讲了半小时的word2vec就结束了,据说,该同学非常费力的直译了论文原文一些内容,专业名词翻译错了他都不清楚,并且表示负采样没看懂,而且不重要,所以就不讲了

问了一下丙后来怎么样了,说被调去做java了,小伙伴反馈丙做java开发还出活挺快的。

丁的故事来源于一个很要好的小伙伴,差点让小伙伴当场离职。丁是另一家很多人都想去的大厂的。丁的能力则是在甲乙丙之上,各种leetcode题刷的贼溜,textcnn之类的也都很熟,今年年初ta的mentor让ta用bert跑一下业务上的一个*分类任务,结果其一跑就是X个月,调了X个月后的结论是不如textcnn好用,线下稍微好一些,线上一塌糊涂。后来我一个刚去的小伙伴接手了ta的工作后,发现数据集里,预处理脚本里,训练脚本和评估脚本里全都有bug,从头到尾完全就是错的。小伙伴给ta修完bug后上升了近XX个点。

注:*取值小于5,X取值大于3,XX取值两位数

丁至今还是在岗的,因为ta的mentor也不太懂这块,mentor认为是bert代码太过复杂导致的,情有可原。

网友Dr.Hu说:

这周面试了一个候选人,面CV/DL/AI的TechLead。简历很牛逼,做过很多CV的工业项目,涵盖detection, OCR, face recognition, fire/smoke detection等好多项目. 给我们讲了45分钟做得项目,讲得很自信。我挑了一个大项目,我说你在这个项目中的贡献是什么?他说整个项目的所有算法部分都是他实现的。

OK,我开始进行深度学习的技术面。

我先问了两个深度学习的中等难度的问题,他都说不知道。有点冷场,那我赶紧问点简单的吧。我说,深度学习网络,进行分类时有哪些loss?他犹豫了一下,回答: relu.

瞬间把见过大场面的我还有同事都

震住了。

网友桔了个仔表示:

我有一个前同事,在linkedin上写着:精通AI,CNN,机器人,量子计算机。

在职近三个月,每天在公司白天睡觉,老板来了就敲几行。

有一天他知道自己试用期难以通过,自己跑路了。

在他留下的电脑里,只留下一个还没提交代码文件。

打开一看,只有几行:

import numpy as npimport pandas as pdimport tensorflow as tfprint 'fuck fuck fuck'

我至今一直在想这人咋忽悠通过面试的。

网友Xiaotian ZUO说:

坐标法国,某银行投行。

前年年初,项目主管招进一个data scientist,突尼斯美女,在法国念的博士,机器学习专业,简历上精通Python和R,人工智能算法工程师,某专业大数据咨询公司咨询师。被塞在了我手下,帮我处理数据做深度学习。

一上来先找我要了两篇论文啃。这在法国同事中不常见。顿时觉得,这个博士不光有颜,还有实力。

一个礼拜后我开始让她动数据,布置了几个小任务。半个小时后她过来问我,为什么一个10k的文档读出来size很小。

我至今都记得这两行萌到销魂的代码:

file = "d:\\\\data\\\est.json"len(file)

九个月以后她辞职了,被一个法国自动驾驶公司高薪聘走。

走之前问我的最后一个问题是,K-Fold和Cross Validation有什么区别。也怪我,为啥常常混着用这两个词。

从此下定两个决心:第一,从此以后所有面试的我都亲自去面;第二,打死我也不相信法国的自动驾驶技术了。

与这些“大神”相反,一个好的算法工程师应该具备什么样的特质呢?网友胡津铭总结出九条对照标准:

1.基础非常扎实。问他/她一些比较经典的算法,能够很清晰地说出算法的特点、适用的场景、坑点、里面的细节等等。

2.工程能力很强。我是一位“工程狗”,自己的工程能力很菜,但对工程能力强的同学非常崇拜 Orz 如果碰到一位算法工程师的工程能力很强,仅凭这一点,我就认为他/她基本上一定是大佬Orz

3.重视代码的测试。算法岗的工作并不完全就是调参炼丹,往往也是需要去写一些代码的,例如写些spark/sql代码获得特征,写模型等等。既然是写代码,就可以而且应该在其中加上测试。实际上,根据我的经验,如果碰到某个其他地方好用的模型在自己的场景下效果很差(不reasonable得差),那很可能是数据、特征的处理代码有问题,或者模型的代码有问题。这种问题可以用单元测试(断言等)来提前发现,也可以用一些sanity check来发现。

4.对场景业务的认识很深刻。软件工程没有银弹,机器学习也没有银弹。用什么样的特征、什么样的预估目标、什么样的评价指标、甚至什么样的模型,这些东西都是要与场景业务结合的。换言之,工业届里,业务先于技术。很多大神在这个方面做得尤其出色。

5.在实际场景中,注重先把整个pipeline搭建起来。个人认为,这一点在实际应用中往往应该是最优先的。搭建起来之后,机器学习系统的上下游也都可以工作,也可以更好地判断系统的瓶颈所在,把好刚用在刀刃上。这其实就与做开发的程序设计一样,较早地抽象出比较好的接口、搭建一个系统原型是很重要的。

6.能够持续学习新的知识,跟踪最新的成果,对各种模型的motivation有自己的理解,有自己的insight与vision。这里举几个我自己学习过程中碰到的例子来说明一下这点。例如,推荐系统中,在Youtube 16年的推荐paper中,为何step1和step2的优化目标是不一样的?人脸检测中,MTCNN为何要分为多阶段?landmark检测中,3000FPS为何要分为两个阶段?(这些是设计相关的motivation)Google的wide&deep为何在Google store的场景下效果好,而在其他的场景下效果不一定好(这是对场景的motivation理解)?文字检测中,PixelLink为何要引入link?OCR中,CRNN为何要引入一个RNN?机器学习系统中,LightGBM是如何针对xgboost存在的哪些缺点进行改进的?(这些是对改进的motivation理解)我认识的一些大佬们会主动结合文章思考这些问题,有的时候会有与paper所claim的不同的理解(毕竟写paper的story很多时候也不一定靠谱,大家都懂),甚至还会做实验验证自己的理解。然后拿这些问题来考我,在我思考不出来后再告诉我他们的理解与实验结果Orz

7.做多数实验之前有自己的假设,根据实验结果会根据实验结果做进一步实验,或修正假设、或进一步探究。

8.自己参与的项目,对其中与自己比较相关的内容的细节比较清楚,自己负责的部分能够了如指掌。

9.能系统性地分析出机器学习整个系统的瓶颈所在,并提出相应的解决方案。当系统效果不好的时候,知道如何去debug,找到问题所在,改进系统的性能。这方面是我个人尤其欠缺的点。

你达标了吗?

【来源】:知乎https://www.zhihu.com/question/347545092/answer/1033059172

【消息】: 1.《码客人生》开启新栏目:《读者来信》——每月精选往期文章的趣味评论,类似程序员“树洞”,评论选中者,可在微信公众号后台加运营者微信,领取奖励。 2.《码客人生》建立读者交流群了,讨论技术话题,分享文章看法,感兴趣的人可以后台加运营者微信入群。

打开网易新闻 查看精彩图片