想要从事算法工程师,要掌握什么?

链接:https://www.zhihu.com/question/312955056/answer/2501177554

编辑:深度学习与计算机视觉

声明:仅做学术分享,侵删

作者:芯动的信号

https://www.zhihu.com/question/312955056/answer/2259045816

在要从事算法工程师这个岗位之前,我们一定要弄清楚几个问题,否则就算你从事了算法工作,后面的路可能也不太好走

一、算法工程师和其他IT从业人员的区别我想大概从事IT行业的开发人员多少对算法岗位都有所了解,但是其实很多人对这个岗位的认知存在一定的误区,或者说是被一些书籍所误导。其实算法工程师在所有IT岗位中,要求是相对较高,市场需求量少,成熟期慢,优秀的算法工程师可遇不可求,这是算法工程师的职业特点。正是这样的特性导致更多毕业生不愿意从事算法研究工作,而是转身选择成熟期短,赚钱快的开发,java,测试,前端,后端等等一些岗位,同时这些岗位应用性非常强,工作中遇到的问题都非常明确,只需要按照一定的方式和方法就可以解决,整体的难度不大。算法工程师在工作内容上与其他岗位有较大的区别,首先算法工程师面对的问题往往都是比较模糊的,无法有确定的客观指标来描述问题,都是用一些趋势上的词汇来描述某个现象或问题,然后用一定的手段来改善或者消除这一现象。当然这些手段和方法也是未知的不确定的,每个算法工程师的习惯不一样,方法千变万化,所以没有一套既定的方法来参考,无形中给解决这个问题增加了难度。这也是算法工程师所要做的难度比较大的一部分。在面对确定性的方法,可预知的结果和不确定的方法,不可预知的结果时,心态,以及思维方式是完全不一样的,而且很明显,算法工程师的工作内容难度更大。

二、算法工程师的工作内容算法工程师的工作内容既零散,又得全面。当拿到一个问题,你首先需要系统的分析这个问题,搞清楚问题的来源,产生这一问题的原因,以及问题背后所涉及到的理论,这些都需要非常清楚。其次,将问题进行分解和归类,将一个大问题分解为若干个小问题,将这些小问题一一归类,然后各个击破。当然解决每一个小问题你都需要设计不同组实验进行验证,设计实验的前提要对问题进行一个全面的认识,同时还需要输出一些中间实验数据,有利于后续实验结果分析,支撑你的结论。做完实验以后,针对你们实验结果要进行小组讨论,这一步非常重要,因为自己设计实验,然后进行验证,往往会限制你的思维,看不到实验以外的东西,这个时候就需要小组讨论,你要让别人看懂你的实验,解决问题的思路,这样其他人就会参与到你的实验分析中,对你的实验结果可能会有不同的看法,然后进一步给你一些建议。多次进行这样的互动,你所设计的算法鲁棒性就会更强,更加经得起推敲。可见一个成熟算法开发道路是漫长崎岖的!

三、优秀算法工程师的必备技能优秀的算法工程师一定是需要具备很多能力的,而这些能力无法从书本上学习到,更多的是需要去实践,只有不断经历积累,能力才能提高。A:分析问题的能力。算法工程师面对的问题有太多的不确定性,那么我们一定要学会分析问题,灵活运用所积累的知识,从不同角度,不同思考方式去分析问题,当问题分析透彻了,那么接下来要进行哪些实验就非常清晰。B:数据分析能力。对于工程师来说,最终具有说服力的东西一定是数据,只有确定的客观数据才能说明一切,那么在设计实验时,一定要输出一定的中间数据结果,单一最终的结果往往无法100%支撑你的结论,那么这个时候就需要结合你的中间数据了。学会利用不同角度的数据来进行自我验证你的算法。C:阅读文献的能力。算法是数学模型和应用场景结合的产物,算法需要解决的事情太多了,同时也涌现出太多的理论和方法。针对你感兴趣的方向,不断地去跟进目前学术界的发展,从中吸取一部分灵感,为我所用。同时可以适当地去复现一些典型的算法,是不是可以有利用其中一部分。D:编程能力。当然算法工程师不太看重编程能力,因为现在编程语言种类太多,只要熟练使用其中一门就足够了,但是需要快速实现你的想法。

四、如何成为一名优秀的算法工程师想要成为一名优秀的算法工程师,除了需要具备上述所表述的能力之外,还需要大量的积累,只有通过不断积累才能一直成长,学会总结,这些能力很多都是自我总结得到的,形成一套自己的算法开发流程。算法工程师一般都有一定的“强迫症”,在面对现有的算法不断地反问自己“是不是还会有更好的算法?”思维一定要足够发散,不要怕思考偏,就怕你不去想,不敢想!想要成为一名优秀的算法工程师,没有捷径,也没有固定的模式去套用,只能是脚踏实地!

作者:TechTorch
https://www.zhihu.com/question/312955056/answer/2315721527

上周六我和几位在大厂工作的算法工程师吃了个饭,而且他们也都面试过很多人。正好聊到了从他们的角度了解一名算法工程师都需要具备什么能力。

前排回答其实已经非常的齐全了,我这里就不说具体的技术方面的建议了。我这里主要说一些非技术所需要的,但是很多没从事这个行业的人却没有意识到的点。

需要了解工业界到底要什么

我们在聊天时,他们谈论的最多的就是现在的学生离工业界实在是太远了,根本不知道工业界到底需要什么。大多数人都是看到薪资高就一窝蜂的去学,总想着毕业之后我月薪能有多少多少。

但是实际上很多人去练习算法,但是却没有想过什么是工程化能力。

比如你的语言表达组织能力。比如给你一个project,有一个小组能让你讨论发言,然后让你真正去解决这个问题,然后你debug问题。

这个听起来好像是不难对吧,但是实际上要想完成这个还真就需要工程化能力。

现在有很多人的简历都是很多项目长的一样,就假设可能有个什么大牛在智库上说做了这几个项目做完之后就能找工作。就比如Rose一个车道线检测项目,或者是一个什么车辆的识别和分割问题。那像这种人面试官会认为你做的这个根本就不重要。因为这种人根本不知道他用的是什么,基础根本不行。

那我们现在再来看看大多数人呢?大多数人都是想着给我一个project然后我去run,完事了就ok了,至于中间出的问题你最好爱找谁上找谁,反正别找我。

那现在问题来了,企业招你进来是想让你来debug问题,而不是请你来制造问题。

Debug问题其实最需要的是对基础的掌握,并不是说按照某个project去执行就完事了。因为你不啃基础你很难在日常工作里找到问题,就更不要说debug问题了。

所以建议好好啃基础,锻炼自己工程化能力和debug能力最为重要。

踏实

对的没错,就是踏实。这句话很鸡汤,但大多数人还真就做不到。

现在很多毕业生可能因为学历或者基础不够牢等因素而 去刻意美化自己的简历。实际上这个在算法工程师这个职业还真没必要,很多的东西真的就是一问就知道你行不行。很多人简历上写的东西你去问他他都讲不出来。虚头八脑的肯定谁都不会喜欢。相反,如果在面试的一个小时里面能够实实在在的表现出来他是怎么认认真真的做这件事情的,那这站在企业角度就是非常不错了。

但凡企业想培养人才或者招正经做事情的人,那他一定不会刻意的刁难一个毕业生的,往深了问也只是想知道你的基础怎么样。

所以一旦你踏实下来了,你真的很容易就脱颖而出,因为这年头踏实的人实在是少的离谱。

总的来说这就是我们聊天这么久达成的共识,基本上只要捏能做到这两点,学历差点或者之前项目差点都没事。因为掌握这两点所展现出来的潜力就已经足够找个还不错的工作了。

作者:panda爱瞎想
https://www.zhihu.com/question/312955056/answer/2340533181

业务型算法工程师有3个关键词,业务,算法,工程师,这是三个方向的技能,缺少一环,就会导致发展的失衡。

首先,具备业务思维,能够与产品进行有效的沟通,听懂真正的思路(可能有时候产品都无法描述正确他的思路),能够参与业务立项的讨论,提出自己的见解,这需要自己抛开技术角度,从一个用户的角度去看待问题,而不是单从技术角度,觉着这个问题太难,无法解决,这个问题太简单,无法体现自己的厉害之处,解决问题的第一想法就是不做,其次就是简化做;

其次,在算法技能上要达标,这个能力分为两个方面:1)问题抽象能力,能够刨析问题的本质,找到解决问题的落脚点;2)技能的广度与深度,针对落脚点,能够确定合适的技术路线,能够针对场景,做算法的适配,而非仅仅是调用模型与调参;

最后就是工程能力,知道了问题所在,知道了如何解决,剩下的就是执行,这要求在开发能力上不能有短板,包括大数据处理能力,特征工程,模型流程搭建,线上线下部署,性能优化等。

总结:

1.能够知道别人让你做的是什么,能够分析值不值得做;

2.能够刨析问题本质,确定解决问题的落脚点;

3.选型调研,组内如何做,公司如何做,业界如何做,谋定而后动;

4.确定实现路线,由浅到深,确定迭代思路,利用现有资源,快速上线拿结果;

5.考虑线上线下区别,设计实验,设计评价指标,并说服业务方;

6.制定时间点,开始执行。

一个20年毕业的算法小菜鸟,在近2年的算法成长道路上的一些摸索。

作者:趣趣童
https://www.zhihu.com/question/312955056/answer/1572220206

在不同的公司里面算法工程师的要求还真就是不一样,就拿开发语言来说有的需要Java,有的需要C或C++,如果是用爬虫来说的话更多的企业现在都喜欢Python。

这就需要一定要有目的性的去做这件事儿,题主究竟想去一个什么样的公司,这个岗位的描述究竟是什么样的。有了目标才好办事儿。当然了前提就是你的基础一定要打好,每天一定要多刷题保持好一个状态。

如果你有心仪的公司那就最好不过了,直接看一下他们招聘算法工程师的岗位描述是什么样,然后去牛客网的牛客题霸上面找到对应的岗位练习题,里面的面试题都是这个公司的面试真题,相对于其他的网站来说还不用花钱,里面还有一个功能就是AI模拟面试功能,在这个功能里面是完全的模拟出互联网公司远程面试的一个场景,里面的考官也是人工智能,能够根据面试者的现场表现给出一个综合得分,多多练习,拿offer的概率大幅度提升。


作者:知乎用户
https://www.zhihu.com/question/312955056/answer/2839018522

个人认为是抽象,逻辑,实现,这三个点。

把问题抽象化,之后分析里面的逻辑链条。在通过仿真或者实现结果的反馈,对问题补充了解。

抽象化和逻辑这块,可以差不多理解成天赋,天赋不够,做算法很糟心,如果无法把问题理解充分,那么只能是隔靴搔痒。天赋够的话,会觉得自己才是整个团队的核心,有种掌控全局的错觉。

实现部分考验的是编程能力,当然要求不用像软件工程师一样程度,只需要能自己把算法部分实现就行,Matlab一般是算法工程师的标配,python也有很多人用。一方面是对算法的验证,另一方面是和其他人对接的时候,能降低沟通成本。

知识储备方面,算法工程师的话,数学是核心。起码,高数,线性代数,概率论,数值分析这些基础的东西必须掌握,最好不是单纯背公式那种,看一些论文的话,最好学下泛函。理解线性代数的正交性会增强对最小二乘的理解,懂了高斯分布特性就可以从概率的角度去看卡尔曼滤波。知道基础的系数拟合的模式对学习机器学习也会有很大帮助。只有懂了基础的,才能真的熟悉并掌握一些稍微深一点的知识。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

5fb988ac87c6bb9ae7b2bf57178a8779.jpeg

猜你喜欢

转载自blog.csdn.net/woshicver/article/details/131266664