认识下算法工程师
Posted 码出境界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了认识下算法工程师相关的知识,希望对你有一定的参考价值。
关于本文:文章会从什么是算法工程师这个问题,在网络上遨游一番,发现有好的句子就摘抄下来,当然最后,我也会给出一些自己的拙见。
【以下内容参考:https://www.zhihu.com/question/20281296】
工作产品:软件工程师输出代码和文档,其中代码是主要产品;算法工程师输出算法模型和描述,虽然通常也是代码和文档,但是目的是为了表达算法。
举个例子说明大家是怎么合作的。公司要开发一款多媒体播放器,就是通常说的MP4。算法工程师研究各种视频和音频解码算法,研究各种多媒体文件格式,研究如何用最少的资源实现最快的解码速度。在不是很大的公司里面,算法工程师通常会负责把上面的算法实现成一个软件库,只提供几个很简单的API给软件工程师(通常就是应用软件工程师)。应用软件工程师使用软件库,实现UI等外围功能,形成最终的产品。
手段和工具:软件工程师用的是各种编程语言和软件架构。算法工程师也使用编程语言,但更多依赖各种专业上的工具软件,例如MATLAB、各种统计分析软件等等。
关注点:软件工程师关注使用现成算法提供应用软件和解决方案,多数情况下核心算法是算法工程师提供的。算法工程师关注如何解决某一类特定问题,实现某一类功能。
目前互联网IT企业招的算法工程师大多数是搞数据挖掘和机器学习的。
研发工程师就是做应用层的开发,后端研发的要和和算法工程师提供的算法接口对接,前端研发的要和后端的数据接口对接。这么讲起来有点抽象,我来举个自己的例子。
我现在在一家互联网移动广告创业公司做算法,工程师不多,老大是百度和阿里出来创业的,主要就分为前端、后端、算法。
算法的职责就是对用户数据进行建模分析,比如知道你看过了哪些商品,哪些网站,通过一些数据挖掘的手段来把这些信息转换为特征值,从而实现对用户群体的分类和聚类,这样才能有针对性地进行广告投放,以提高广告的点击率和转化率,这一块算法的效能基本决定了这家公司的技术硬实力,因为你算法做得烂,就赚不了钱,融不了资,所有人等着吃翔。
后端开发主要是精通一些web架构,怎么做多线程,怎么搞分布式,怎么解决多并发的问题等等等,如果公司规模不大的话后端研发可能还要兼职系统工程师和运维。系统工程师就是做服务器配置,做负载均衡,做数据库的分布式搭建,做服务器实时的监控报警等等,运维就是维护服务器日常工作,顺带修电脑做几根网线什么的......
前端研发主要还是js和node之流,顺带css编写。不过现在的大学生多多少少有点误解前端开发的意思,觉得前端开发和美工是一个干活,导致了我在最近两次校招中基本面不到前端的人才(或者实在太水了无法直视)。其实前端还是挺有技术含量的,如果你要是知道几个不同浏览器内核是怎么工作就已经很厉害了,页面交互也是个技术活,搞太丑了或者逼格不够高,也是一个不够格的前端工程师。
工作两年来除了前端研发别的活我都干过,如果论待遇而言,相同level下基本是算法 > 后端 > 前端,想进BAT做算法的话,大学期间没有ACM regional及以上经历的话估计不行的。
软件工程师在国内泛指码农,因为大多数码农都有个title:软件工程师
软件工程师在美国很吃香,因为软件工程师是一个技术团队的核心,以工程的思维去做软件,去思考软件,包括设计,开发,调试各个方面,懂得设计模式,懂得架构设计,不是我们国内传统意义的coder
算法工程师其实比较代表一些科研能力较强的工程师,这些人不太出现在民用软件实现的过程中,也就是不太参与写代码实现功能,一般是在一个产品的初期,去解决技术上的难题,提供一些技术方案,也包括方案的初步算法实现,比如在X为,一个研究视频处理的团队,这帮人会对核心技术的算法进行实现,弄出一堆库,一堆包,开发团队拿到这些核心技术后,就进行实用性产品的开发鸟。
研究方向:视频算法工程师、图像处理算法工程师、音频算法工程师、通信基带算法工程师、信号算法工程师目前国内外状况:国内从事算法研究的工程师不少,但是高级算法工程师却很少,是一个非常紧缺的专业工程师。算法工程师根据研究领域来分主要有音频/视频算法处理、图像技术方面的二维信息算法处理和通信物理层、雷达信号处理、生物医学信号处理等领域的一维信息算法处理。在计算机音视频和图形图像技术等二维信息算法处理方面比较先进的视频处理算法:机器视觉成为此类算法研究的核心;另外还有2D转3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),运动估计运动补偿算法(Motion estimation/Motion Compensation),去噪算法(Noise Reduction),缩放算法(scaling),锐化处理算法(Sharpness),超分辨率算法(Super Resolution),手势识别(gesture recognition),人脸识别(face recognition)。另外数据挖掘、互联网搜索算法也成为当今的热门方向。算法工程师逐渐往人工智能方向发展。
第一点不同是,以上问题的“输入”都存在很大的不确定因素,而且对这些不确定因素不易检测和处理。对于普通的软件、APP以及网站来说,所谓的输入(主要为用户操作),是会限定在一个有限集合中的,因而可以按照设计好的逻辑进行处理;但在上述具体项目中,无法保证输入是符合要求的,对输入数据的处理(过滤、规整、变换)——即所谓的“预处理”是系统中的必需部分。
数据的预处理,在算法岗涉及的工作中,是非常重要的。核心的算法,在学术界的推动下,都有很多成熟、可靠的选择,但这些算法,往往都对输入的数据有严苛的要求,数据的预处理如果做得不好,再好的核心算法往往也无能为力。 但由于输入数据天然的不稳定性和复杂性,数据预处理往往也是烦琐而复杂的,需要根据实际的业务情况和数据情况设置各种各样的规则来处理。对于一些成熟的领域如语音、图像,异常数据的种类是有限的,因此也有通用的处理方法,所谓的“去噪”就是图像和语音识别中比较重要的预处理方法;但业务情况却随产品的定位和功能而千变万化,这就需要算法工程师对具体产品的业务有深入的理解。
-----
由于无法进行快速迭代,算法工程师的工作强度不算太大(相对而言),而且一般待遇不错,这算是这个职位的优点了。而相对的,算法工程师的工作会比较枯燥,远没有外行人所想象的那么“酷”,而且大部分时间是在做工程化和调优,其实并没有太多时间去做探索性的工作。
以上是关于认识下算法工程师的主要内容,如果未能解决你的问题,请参考以下文章