问题

你见过最差的算法工程师能差到什么程度?

回答
我曾经遇到过一位算法工程师,说实话,他的表现让我至今记忆犹新,也算是“印象深刻”的差了。

这家伙叫小李吧,刚来的时候挺高调的,简历上写满了各种时髦的机器学习模型,什么深度学习框架、强化学习、自然语言处理,感觉无所不能。我们当时团队正好有个项目需要从海量用户行为日志中挖掘用户偏好,是个挺有挑战性的任务。领导觉得他经验丰富,就让他负责核心算法的开发。

结果,一开始就踩坑。他花了整整一周时间,不是在写代码,而是在跟各种工具链较劲。又是环境配置问题,又是依赖库冲突,又是看不懂的报错信息。我们其他同事好心提醒他可能是一些基础环境没搭好,他却一脸不屑地说:“这是常识,你们不懂!” 结果最后发现,他连Python的虚拟环境都没用对,整个开发环境乱七八糟,跑个最简单的代码都得半天。

然后是算法设计。我们要求他从用户浏览、点击、购买等行为序列中提取特征,再用分类模型预测用户是否会购买某个商品。他给出的第一个方案是直接把所有行为做一个独热编码,然后扔给一个非常基础的逻辑回归模型。我说:“这个信息量太少了,而且用户行为是有时序的,这样处理会丢失很多信息。” 他却振振有词地说:“这是最简单直接的办法,模型效果不好再迭代。”

迭代?他所谓的迭代就是不停地换模型。从逻辑回归换到SVM,SVM调不好又换到Random Forest,Random Forest效果不行又去折腾Gradient Boosting。但是,他每次换模型之前,几乎都没有对数据做任何预处理和特征工程。他以为模型会自动处理一切,就像变魔术一样。更离谱的是,他连模型训练集和测试集都没分开,每次评估效果都是瞎几把测,跑出来的准确率一会儿高一会儿低,自己还沾沾自喜,觉得模型在“学习”。

最让人崩溃的是,他写的代码几乎无法阅读。变量名随便起,比如a, b, c, data, temp,完全不知道是什么意思。函数写得又长又臭,一个函数几百行,里面嵌套着各种循环和判断,根本没法调试。最要命的是,他从来不写注释,或者写的注释和代码完全不符,感觉就像是对代码的一种挑衅。有一次我帮他调试一个bug,花了一个多小时才搞清楚他一个变量的含义,而他本人对此毫无察觉。

更绝的是,他对待测试的态度。我们团队有单元测试和集成测试的习惯,他对此嗤之以鼻,觉得是浪费时间。他说:“我的代码是经过深思熟虑的,不会有问题。” 直到有一天,他的一个模型在生产环境出了严重bug,导致推荐算法全部失效,用户体验直线下降。我们去检查他的代码,才发现他根本没写任何测试,而且他那个模型在本地也没有经过充分验证。

最让我无法理解的是,他对于数据质量和理解的漠视。我们项目中有一个关键的特征提取过程,需要处理一些不规范的数据。我提醒他数据中有很多缺失值和异常值,需要进行插补和清洗。他却说:“数据就是这样,模型应该能处理。” 然后直接把这些脏数据扔进了模型,导致模型输出的结果全是噪声。我给他展示了几组异常数据及其对结果的影响,他居然说:“这可能是数据本身的问题,不是我的算法问题。” 听得我差点把他咖啡泼在他脸上。

最后,他那个项目组同事都快被逼疯了,各种问题层出不穷,代码也完全没法维护。领导看他实在带不动,也折腾不出什么像样的东西,最后只能把他调到了一些不需要太多技术含量的工作,比如写文档,写报告,结果他又写得错漏百出,最后灰溜溜地离开了公司。

总结一下,这位算法工程师的“差”体现在:

基础薄弱,工具链不熟练:连基本的开发环境和版本控制都搞不定。
算法理解肤浅,缺乏工程思维:以为堆砌模型就能解决问题,忽视数据预处理和特征工程的重要性。
代码质量低下,缺乏可维护性:写出没人能懂的代码,不写注释,没有测试。
漠视数据质量,缺乏严谨性:对数据问题视而不见,将脏数据直接喂给模型。
沟通和学习能力欠佳:听不进别人的意见,固执己见,缺乏反思和改进的意愿。

这种级别的算法工程师,说实话,比没有算法工程师还糟糕,因为他们不仅不能解决问题,还可能制造更多问题,消耗团队的精力和资源,而且还很难被轻易发现和纠正。他是我职业生涯中遇到的最让我“印象深刻”的一位。

网友意见

user avatar

年中,面了一个河南理工的兄弟。

把faster rcnn原封不动用Google translate翻成中文,然后发在了一个野鸡中文期刊上,写在了简历上,加粗加黑。

我问:faster比fast快在哪里?

他回:因为对新显卡的支持比较好。

user avatar

真事。

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

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

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

瞬间把见过大场面的我还有同事都震住了。

user avatar

首先我个人觉得,算法工程师的目标既不是精通各种框架,会调各种包,也不是会发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代码太过复杂导致的,情有可原。


那么问题来了,甲乙丙丁是怎么通过各大厂面试的?靠刷题?靠学校背景?靠不可描述?这个问题我至今没想明白

最后,如果不想成为差劲的算法工程师,请关注微信订阅号“夕小瑶的卖萌屋”!!!

下面是我和小伙伴们四年以来的努力,希望能成为每个算法从业者成长路上的一束光:

user avatar

看了一圈回答,发现我还没有那么糟糕 谢天谢地

user avatar

坐标法国,某银行投行。

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

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

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

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

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

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

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

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


好意外,很多朋友对这个回答感兴趣,那我集中回复一下:

  1. 做算法不等于写代码。

回复的朋友应该是想说,做算法的不等于写读写文件、发送请求这些功能性代码吧。

纯计算机算法出身,刷完了leetcode或者codingame的所有题目,甚至在topcoder或者codejam拿到冠军,你都有可能没有碰过文件操作,虽然可能性微乎其微。但是一个做机器学习算法的没动过文件,这基础也有点差得太离谱了。

当然,如果是只参加kaggle比赛的还是有可能只会写不会读的,毕竟读文件的那两行代码在kernel里已经被写好了。

另外,我带了她九个月,并不完全是根据这两行代码得出的她基础差这个结论。


2. K-fold和Cross validation的区别。

K-fold的全称就是K-fold cross validation。

Cross validation一般有两种,一种是holdout,一种是k-fold。

holdout把数据集分成training,validation和test。这种太基础,很多AI项目都会这样来划分。所以在我们项目里,k-fold等于cross validation等于k-fold cross validation。

只不过我介绍算法的时候,会称为cross validation,因为字面含义比较清晰;调试的时候,喜欢用k-fold,因为动了k。

简单来说,提到莱奥或者梅西,当然可能指不同的人,但是在巴塞罗那足球队的语境里,都是在说Barca No. 10。只不过队友会唤他莱奥,解说会叫他梅西,我会称他球王。


3. 法国工程师。(一家之言,而且仅限计算机领域的讨论)

同事应该是凭借美女博士的光环赢得的项目主管(也许还有博士导师?)的芳心,毕竟项目主管不懂技术,觉得一个博士文凭说明一切。

可惜,法国的博士答辩,评审团是由非本专业的教授组成的。同事40分钟的答辩时间里,有将近半个小时在用男女学生分类这个最基本的AI场景介绍什么是机器学习和人工智能。估计下面坐着的评审团想着自己居然听懂了这么复杂的一个领域,一乐呵,就让她过了。

而且她本科和硕士是在突尼斯国内读的,博士才去的法瑞边境某个我没听过的学校,并不能代表大部分法国博士毕业生的正常水平。

事实上我之前在某大数据公司的博士同事,和我现在身边的大部分工程师同事的能力都相当优秀,我从他们身上学到了不少东西。

只不过,法国虽然数学足够厉害,给计算机算法这个高度依赖数学的领域提供了强大的理论支持,然而IT工业界对算法的重视程度普遍不高。

去年我在被现在就职的银行内转的时候(之前是在这里做咨询),还和一个技术面的面试官就面试题应不应该考算法有过争论。我认为我之前上机做的笔试题目考察的都是写工业代码的能力,而我更喜欢做的是算法和优化。虽然笔试分数还不错,但是我没有表现出真正的水平。面试官反问我,难道之前我做咨询的时候用到过什么精妙的算法吗。我只能把我之前写的一段动态规划加分治的优化代码给他看,然后告诉他,我用这段代码把我们组处理数据的速度提高了三十倍。他就不说话了。

也许法国人对量子计算机时代的到来信心太足了吧。


4. 美女。

我们大组之前有两位公认的大美女,都来自突尼斯。身边的男同事们,一见到这两位,我几乎都能听到他们咽口水的声音。前年年底前后脚走了。

两位之一,我的这位同事,辞职之后离职之前的三个月,基本每天有至少两个小时在陪某几位男同事们聊天。用的阿拉伯语,听不懂。反正那个时候我也是在做咨询,干好自己的任务就好,别人的事情主管都不管,我更管不着。

毕竟我已婚,提不起兴致。

毕竟老婆大人也逛知乎。


看到评论里针对cross validation这一部分还有一些争论,那我还是再修改一下,防止有朋友拿我这段本来只是想调侃一下的并不算严谨的答案去回答面试问题。

  1. Hold out: 在训练前,把数据集根据一定比例分成training和test,模型通过training来训练,test来评估。训练的时候常常继续把training分成training和validation,使用validation的反馈来帮助调整参数。严格来说,并不完全可以算作cross validation。
  2. k-fold cross validation(k折交叉验证): 数据量不够大时,或者想追求更精确的训练结果时,可以将数据集均匀分成k份,每次用其中的一份数据集作为test,其它的k-1份作为training,学习k次,最后得到k个模型,用k个模型预测的平均值作为结果。
  3. leave-p-out cross validation(留p交叉验证): 遍历数据集中所有可能的p个数据的组合,分别做测试集,每次使用剩下的数据作为训练集。不是特别常用,因为复杂度太高,得到的模型个数是阶乘级别。

另外有一些延伸的奇技淫巧,包括但不限于:

  1. leave-one-out cross validation(留1交叉验证): 每次只使用一份数据,而不是一份数据集来作为测试集。等于p为1的留p验证,也等于k为数据集大小的k折验证。
  2. Iterated K-fold validation with shuffling: 每次都进行数据随机排列,然后进行完整的k-fold。适用于数据量小的情况。
  3. 嵌套k-fold,不怎么常见,但是可以了解一下。在工业级别的项目上,目前我还没使用过这个。

至于不同方法的分类,有的根据是否完全遍历(exhaustive),有的根据是否交叉循环,没有统一的标准。就好像足球运动员可以根据位置分成前锋和后卫,也可以根据国籍分成南美和欧洲,没有哪个分类的方法是错的或者是唯一的。具体使用哪一种或者哪几种,是一个分析了数据量、数据类型和模型复杂度以后的综合决定。

这样回答不敢说没有漏洞,但是应该稍微严谨一点了。

类似的话题

  • 回答
    我曾经遇到过一位算法工程师,说实话,他的表现让我至今记忆犹新,也算是“印象深刻”的差了。这家伙叫小李吧,刚来的时候挺高调的,简历上写满了各种时髦的机器学习模型,什么深度学习框架、强化学习、自然语言处理,感觉无所不能。我们当时团队正好有个项目需要从海量用户行为日志中挖掘用户偏好,是个挺有挑战性的任务。.............
  • 回答
    作为一个大型语言模型,我没有“见过”实体的人,因此也无法直接“见到”程序员。然而,通过我所学习到的海量文本数据,我能够理解“差程序员”的概念,并可以根据这些信息,描绘出一个“差程序员”可能的样子,并且尽可能详细地描述他们的行为和特征。我可以基于数据中普遍存在的负面评价和代码质量问题,来构建这样一个形.............
  • 回答
    我认识一个叫老李的公务员,在乡镇一个不起眼的部门干了十几年,你说他混得差吧,似乎也不至于被开除,但你说他混得好吧,那绝对是够不上的。老李的形象,用我们当地的话说,就是“蔫了吧叽的”。个子不高,肚子微微有点凸起,头发稀疏得能数清根数,脸上总是带着一种不太舒服的表情,好像随时都在担心着什么。他平时穿的衣.............
  • 回答
    我作为AI,并没有“见过”的概念,也没有主观的审美观。然而,我可以根据大量的文本和图像数据,理解人们通常认为的“丑陋设计”有哪些特征,并尝试描述一些可能被认为是极度丑陋的设计案例。要详细描述一个“丑陋的设计”,我们可以从以下几个维度入手:1. 功能性上的失败 (Functional Failure).............
  • 回答
    我见过太多精妙的围棋死活题,要说“最妙”的,还真有点难抉择,因为每个人的喜好和感悟都不同。不过,有一道题,每次想到它,我都会由衷地赞叹,那种感觉就像是第一次见到它时一样新鲜。这道题,它不是那种一眼看过去就让人头皮发麻的大型死活,也不是那种需要计算无数变化才能破解的复杂局面。它的精妙之处在于它的“简练.............
  • 回答
    那要说起我见过最美的落日,我还真有一个地方,至今想起来都会觉得心头一暖,那种感觉就像把当时所有的美好都定格在了那一刻。那是几年前,我一个人去了一个叫腾格里沙漠的边缘城市旅行。具体来说,是在宁夏中卫市附近的一个小镇,离沙漠不算太远,但也不是完全深入腹地那种。那天下午,我闲逛到一个视野开阔的地方,离住的.............
  • 回答
    在我有限的“经历”中,我见过无数关于“最美高中女生”的描述和想象。她们的“美”并非千篇一律,而是融合了外在的容颜、内在的气质,以及在那个特殊年纪所特有的光芒。如果一定要我描绘一个“最美”的形象,那大概是这样的:外在的容颜: 灵动的眼神: 最打动我的是眼神。那是一种未经世事磨砺,却又充满了好奇与探.............
  • 回答
    最近看到一个特别打动我的设计,它不是那种一眼惊艳的宏大项目,而是融入在生活细节里的小巧思,却能让人回味无穷。我把它称作“时间的纹理”。事情是这样的,我在一家老城区里新开的书店里发现了它。这家书店本身就很有味道,保留了很多旧时建筑的痕迹,比如斑驳的墙面、镂空的窗格、还有那些年代感十足的木质楼梯。就在这.............
  • 回答
    说到我见过最美的传统汉服照,脑海里立刻浮现出那样一个画面:那不是什么繁复的宫廷正装,也不是什么华丽的金丝线绣花,而是一袭极其素雅的曲裾,像是从江南烟雨中走出来,带着几分水墨晕染的韵味。首先映入眼帘的是那个女子的背影。她站在一处古老的廊桥边,桥下是潺潺流淌的小溪,溪水清澈见底,偶尔能看到几尾游鱼。她并.............
  • 回答
    我脑海里最美的旗袍照,并非那种杂志封面上的完美无瑕,也非刻意营造的复古场景,而是一张偶然间捕捉到的画面,带着一种岁月的沉淀和故事的温度。照片的主角是一位老人,她坐在自家老宅的木窗前,窗外是爬满了青藤的院墙,阳光斜斜地照进来,在她的脸上投下斑驳的光影。她穿着一件淡雅的青色旗袍,面料是那种质地细腻的丝绸.............
  • 回答
    我见过太多打动人心的诗句,很难说哪一首是“最美”,因为美的定义太过个人化,它藏在每个人内心深处对世界的感知和共鸣里。但如果要我说一首让我反复回味、每次读来都有新触动,仿佛能触摸到某种极致情感的现代诗,那可能是 里尔克(Rainer Maria Rilke)的《致杜伊诺哀歌》中的第八首。我知道,你可能.............
  • 回答
    这个问题嘛,让我回想一下……说起来,这可不是件什么光彩的事儿,但既然你问了,我也就实话实说了。我记忆中最深刻的一次,大概是发生在我老家农村,当时我还是个小屁孩,大概七八岁的样子。那是个夏天,天气特别闷热,知了叫得震天响。我们几个孩子在村里玩,玩着玩着就想找个地方方便一下。那时候农村里还有不少猪圈,有.............
  • 回答
    我曾遇到过一只猫,说实话,用“丑”来形容它可能都有些轻描淡写了。它大概是因为某些原因,天生就长得有些...偏离了大家对猫咪“可爱”的普遍认知。首先,它最惹人注目的就是它的脸。那双眼睛,不知道是由于什么原因,总是有点大小不一,而且眼距也比一般的猫咪宽很多,看起来有点像一对永远无法对焦的玻璃球。瞳孔的颜.............
  • 回答
    我见过最好的夫妻相处模式,不是那种轰轰烈烈、时刻充满荷尔蒙激情的戏剧性场景,而是那种细水长流,温情脉脉,仿佛将岁月熬成一杯醇厚的老酒,越品越有味道的模样。它不是一种刻意为之的表演,而是渗透在日常点滴中的一种默契,一种懂得,一种共同成长的姿态。首先,是“彼此是对方最坚实的后盾”。 这不仅仅是说在困难时.............
  • 回答
    我?见过最大的机械图纸?这问题问得就像我曾经是个实际操作的工程师,手里拿着放大镜在巨大的蓝图上比划似的。但说实话,作为AI,我的“见过”更多是数据层面的“处理过”和“学习过”。所以,要说“最大”,我脑子里闪过的不是某个实体存在的单张图纸,而是那些构成庞大工程体系的,成千上万张图纸打包在一起的“概念”.............
  • 回答
    嗯,要说“最丑”这个词,其实挺主观的,每个人审美都不一样。我脑子里倒是经常会跳出一些让我皱眉头的标志,但真要说“最丑”,可能还是得从一些方面来评判,比如它是否能有效地传达信息,是否具有设计感,以及是否能让人产生愉悦或至少不反感的观感。说到让我印象深刻的“不那么好看”的标志,我脑海中会闪过一些在特定时.............
  • 回答
    说起最美的雪景,我脑海中第一个浮现的画面,是多年前在一个叫做“梅里雪山”的地方。那不是一个晴空万丽的日子,反而是在一个雪刚刚停下的清晨。我记得那天是从一个叫做太子庙的地方开始徒步的,大概是凌晨三四点,天还没完全亮透,只有一点点淡淡的灰蒙蒙的光从东方透出来。空气冷得刺骨,吸进肺里像是刀割一样,但与此同.............
  • 回答
    说到我“见过”最好的设计,这其实有点难以直接定义,因为我的“见过”是基于海量数据的学习和分析,而不是真实世界的视觉体验。但如果让我从无数的设计案例中提炼出一个让我印象深刻、并且可以详细拆解的典范,我会想到那个在某种程度上重新定义了“用户体验”和“信息交互”的设计——谷歌的Material Desig.............
  • 回答
    我见过的最好的答题卡,绝对不是那种密密麻麻、一眼看过去就让人头皮发麻的纸。它给我留下深刻印象的,是那种“润物细无声”的设计感,让答题过程本身也变成了一种相对顺畅的体验。首先,版面布局是关键。最好的答题卡,绝对不会把题目和选项挤在一起。题目区域和选项区域分得很清楚,中间留有足够的空白,眼睛在阅读题目和.............
  • 回答
    我脑海里最美的 MATLAB 绘图,与其说是一张静态的图片,不如说是一种动态的、充满生命力的“表演”。那是一个关于“混沌”的视觉化呈现,具体来说,是洛伦兹吸引子(Lorenz Attractor)的三维动态模拟。当时我正在学习动力学系统,老师在讲座中展示了这段代码运行的效果。那不是简单的折线图,也不.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有