关于本文:文章会从什么是算法工程师这个问题,在网络上遨游一番,发现有好的句子就摘抄下来,固然最后,我也会给出一些本身的拙见。css
【如下内容参考:https://www.zhihu.com/question/20281296】html
工做产品:软件工程师输出代码和文档,其中代码是主要产品;算法工程师输出算法模型和描述,虽然一般也是代码和文档,可是目的是为了表达算法。
举个例子说明你们是怎么合做的。公司要开发一款多媒体播放器,就是一般说的MP4。算法工程师 研究各类视频和音频解码算法,研究各类多媒体文件格式,研究如何用最少的资源实现最快的解码速度。在不是很大的公司里面,算法工程师一般会负责把上面的算法实现成一个软件库, 只提供几个很简单的API给软件工程师(一般就是应用软件工程师)。应用软件工程师使用软件库,实现UI等外围功能,造成最终的产品。
手段和工具:软件工程师用的是各类编程语言和软件架构。算法工程师也使用编程语言,但更多依赖各类专业上的工具软件,例如MATLAB、各类统计分析软件等等。
关注点:软件工程师关注使用现成算法提供应用软件和解决方案,多数状况下核心算法是算法工程师提供的。算法工程师关注如何解决某一类特定问题,实现某一类功能。前端
目前互联网IT企业招的算法工程师大多数是搞数据挖掘和机器学习的。
研发工程师就是作应用层的开发,后端研发的要和和算法工程师提供的算法接口对接,前端研发的要和后端的数据接口对接。node这么讲起来有点抽象,我来举个本身的例子。web
我如今在一家互联网移动广告创业公司作算法,工程师很少,老大是百度和阿里出来创业的,主要就分为前端、后端、算法。算法
算法的职责就是对用户数据进行建模分析,好比知道你看过了哪些商品,哪些网站,经过一些数据挖掘的手段来把这些信息转换为特征值,从而实现对用户群体的分类和聚类,这样才能有针对性地进行广告投放,以提升广告的点击率和转化率,这一块算法的效能基本决定了这家公司的技术硬实力,由于你算法作得烂,就赚不了钱,融不了资,全部人等着吃翔。数据库
后端开发主要是精通一些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以及网站来讲,所谓的输入(主要为用户操做),是会限定在一个有限集合中的,于是能够按照设计好的逻辑进行处理;但在上述具体项目中,没法保证输入是符合要求的,对输入数据的处理(过滤、规整、变换)——即所谓的“预处理”是系统中的必需部分。设计模式
数据的预处理,在算法岗涉及的工做中,是很是重要的。核心的算法,在学术界的推进下,都有不少成熟、可靠的选择,但这些算法,每每都对输入的数据有严苛的要求,数据的预处理若是作得很差,再好的核心算法每每也无能为力。 但因为输入数据自然的不稳定性和复杂性,数据预处理每每也是烦琐而复杂的,须要根据实际的业务状况和数据状况设置各类各样的规则来处理。对于一些成熟的领域如语音、图像,异常数据的种类是有限的,所以也有通用的处理方法,所谓的“去噪”就是图像和语音识别中比较重要的预处理方法;但业务状况却随产品的定位和功能而变幻无穷,这就须要算法工程师对具体产品的业务有深刻的理解。
-----
因为没法进行快速迭代,算法工程师的工做强度不算太大(相对而言),并且通常待遇不错,这算是这个职位的优势了。而相对的,算法工程师的工做会比较枯燥,远没有外行人所想象的那么“酷”,并且大部分时间是在作工程化和调优,其实并无太多时间去作探索性的工做。