算法工程师应该具有哪些工程能力?

做者 | 木东居士
来源 | Data_Engineering

最近看了 Milter 的《算法工程师究竟须要哪些工程能力》这篇文章,有所感想,所以也写一篇关于算法工程师的技术能力的问题,和你们分享一下居士关于算法工程师的技术能力的观点。前端

对于一名优秀的算法工程师,他(她)要具有的不只仅是出色的技术能力,也要有很深的业务理解能力和对外沟通能力,总之,要求能够很高!算法

可是,从职责能力的划分上来说,算法工程师首先是一名工程师,所以本文主要从工程能力要求上进行一些探讨。编程

开始以前先放一份思惟导图,这将是这篇文章要分享的核心内容:网络

工程能力概览

算法工程师,从名字上咱们就能看出,一名算法工程师首先应该具有算法能力工程能力,咱们能够认为这是基础的技术能力。因为如今开源技术的普及,Sklearn、Tensorflow 和 Spark ML 基本已经成为大部分算法工程师标配的工具库了,所以,熟练的调包能力也是决定了一名算法工程师可否快速实现需求。架构

其次,在真实的生产环境中,算法的落地会遇到各类各样的业务场景和数据环境,这也要求算法工程师须要具有Pipeline 构建能力,将整个生产环境中的数据流和模型打通。同时,在生产环境中,会出现各类“疑难杂症”等待你去解释,好比说为何实验效果特别差?为何模型效果不稳定?这就要要求算法工程师须要具有必定的数据分析能力负载均衡

不少时候,你会发现,你用在数据分析和Pipeline构建上的精力可能占据了你8成以上的工做内容。运维

当你具有了上面的能力时,你已经能够称本身是一名算法工程师了。此时,你能够去对着数据分析小得瑟一下:“你看,我能构建整个模型的Pipeline,你却只能拿到别人提供的数据后调调包吧。“或者,你也能够去找开发得瑟:”你看,我懂了不少算法哦,你就只会写代码吧。“

得瑟完以后,咱们仍是回归正题,算法工程师只具有这样能力是否已经够了?答案固然是不够的。因为不一样公司的团队成熟度不一样,工具化和流程的成熟度都不一样,这就会对算法工程师有不一样的要求,好比说模型发布能力报表开发能力,固然也会有一些其它能力,虽然可能不是特别重要,可是当这些工做没人帮你作的时候,算法工程师可能依然要承担起这些工做内容,好比说灰度测试的能力、负载均衡的能力等等。编程语言

将上面的内容整理后,就是这样一份思惟导图了(一张图多看几篇更能加深印象,所以我再贴出来一遍)分布式

工程能力详解

1、基础能力

算法能力工具

算法能力就很少说了,算法工程师的基本能力要求,不懂算法对于一名算法工程师来说是不太合理的。这里居士把统计学的内容也放进来了。

编程能力

编程能力主要分为两部分:

  • Python、C++、Java这类编程语言,这三种也是算法工程师须要了解的主流编程语言,通常掌握其一就够,看不一样公司。
  • Sql就是很通用的能力了,Sql也是一门编程语言,而是是数据处理最经常使用的语言!
    很好用。
    大数据场景下,要了解Hive Sql。

调包能力

你们虽然会调侃调包侠,可是说实话,能调包调的很溜的人,也是很少的,好比说如今让你本身用tensorflow构建一个复杂网络,不能google,你能写出来吗?能记清楚用法吗?

  • Sklearn
  • Tensorflow
  • Spark ML

2、核心能力

Pipeline 构建能力

Pipeline构建能力,这里想表达的更多的是整个数据流的构建能力,数据从日志->特征->模型训练->反馈,这一个链条可否完成的能力,这里面会有不少难题须要克服。好比说:

  1. 实时和离线模型一致性问题?
  2. 离线和实时特征一致性问题?
  3. 实时特征构建的问题?
  4. 数据延迟的问题?

不少时候,模型发布之类的工做是能够由其余同窗支持完成,可是数据流这种问题更多的是须要算法工程师来解决的。

数据分析能力

这里的数据分析能力不是指商业分析或者业务分析,更多的是指特征分析、算法效果分析和各类异常问题定位分析的能力。

不少时候,两个算法工程师能力水平的强弱从数据分析能力上也能窥得一二。

3、辅助技术能力

辅助的技术能力是指,你会不会的影响不会特别大,可是也都是有用的能力,特别是不一样公司的发展状况不一样,极可能会出现一个算法工程师既要作数据接入、又要作数据清洗、还要作算法平台
也要搞前端、还要负责模型上线、系统运维。

这里就再也不细讲了。

思考一

聊一下对技术能力、工程能力和数据分析的思考。

居士我的的理解,技术能力更多的是偏向于一个一个的技术点,而工程能力更多就是在一个团队中将项目作好的能力。不少算法出身的工程能力不行,那么他作的单纯的一个模型是没法应用到实际生产中的,而工程就是指把理论落地实际生产的过程。那么工程包含了什么?它包括了系统架构设计和模块设计、数据流搭建和平台搭建、调包或算法开发、分布式、上线以及各类落地的代码开发。报表和监控,其实本质也是作数据流,边缘性的可能要作些后台和前端的开发。

而后数据分析能力是什么?数据分析(不是纯粹的数据分析)除了分析方法论和套路外,是一个很综合性、相对偏软一点的能力,好比说你经过分析发现了咱们的系统有哪些能够优化的点,经过分析发现了问题的缘由是什么,这些都是分析能力。

思考二

针对前面的内容,和 Cathy 讨论后,对整个思路作了新的梳理,你们直接看图就好,居士也认为这样描述可能更为合理。

思考三

这里再补充一个模型复现的能力,好比你看了一篇论文,发现这个模型可能很适合本身的业务场景,那么你是否能力将论文里面的模型快速用公司现有的平台和工具来复现?

居士认为,这一个是一个很是重要的能力,可是没有想好具体该怎样划分。

相关文章
相关标签/搜索