Jesse Anderson 在 OReillyAI 上发表了关于数据工程师与数据科学家之间差别的文章:《数据工程师 vs 数据科学家》,阐述了两者间的分工区别。了解数据工程师和数据科学家之间的差异非常重要。 误解或不了解其差异,会导致团队在处理大数据时失败或者表现不及预期。
数据科学家的技能
数学与统计学(有时物理也可以)是数据科学家的核心。 在基于这种数学背景,他们正创建高级分析能力。 他们通过将数学应用到极致来创建机器学习模型和人工智能模型。
如同软件工程一样,数据科学家将不得不与业务端进行交流。 这包括充分了解领域,以获得洞察力。 数据科学家通常负责分析数据以帮助业务,这需要一定的商业敏锐度。 最后,他们的结果需要以可理解的方式提供给业务方。这要求数据科学家有能力用口述和视觉结果的形式,与业务方交流那些复杂的结果和观察情况,以似的业务方能够理解并且基于此展开决策。
关于数据科学家,我一言以概之的定义是:数据科学家是通过编程来强化他们的数学和统计背景能力来进行分析数据、创造数学模型的人。
数据科学家的一个常见特征是,他们不得不选择了编程,以实现他们除了编程以外无法做到的事情。 当我与数据科学家交谈时,他们经常向我倾诉的一件事情。 为了完成更复杂的分析,或者由于其他方面难以克服的问题,他们学会了如何编程。 他们的编程和系统搭建技能达不到你从程序员或数据工程师那里会看到的水平 – 他们也没必要达到。
数据工程师的技能
编程能力是数据工程师的核心。这种能力背景通常是 Java,Scala 或 Python 的编程经验。 他们的工作重点或专业能力主要在分布式系统和大数据方面。 数据工程师具有高级编程和系统构建技能。
对于数据工程师,我对其一言以蔽之的定义是:数据工程师是在围绕大数据建立创建软件解决方案上具备专业技能的人。
利用这些工程技能,他们可以创建数据管线。 创建数据管线可能听起来很简单或微不足道,但在大数据这种规模上,这意味着将 10 – 30 种不同的大数据技术整合在一起。 更重要的是,数据工程师是理解并选择『适合处理某种工作的工具』的人。 数据工程师深入了解各种技术和框架,以及如何将它们组合在一起以创建解决方案,从而使公司的业务流程具备数据管线。
在我的经验中,数据工程师只是最低限度地参与集群的运维(与此处讨论有关数据工程师的说法相反)。 虽然某些数据科学技术确实需要设置一个运维或者数据运维岗位,不过绝大多数技术都没有。 就像大多数程序员一样,我不允许他们直接访问生产系统。 这主要是系统管理员或运维人员的工作。
重叠技能
数据科学家和数据工程师技能之间存在重叠。 然而,重叠永远发生在每个人能力的不规则边缘。
比方说,这两个岗位在『分析』上重叠了。 但是,数据科学家的分析技能将远远超过数据工程师的分析技能。 数据工程师可以执行一些基本到中级的分析,但很难进行数据科学家所做的高级分析。
数据科学家和数据工程师在编程能力上有所重叠。 不过,数据工程师的编程技能远远超出了数据科学家的编程技能。 让数据科学家创建数据管线早已远离了他们技能优势边界,但却是数据工程师的优势所在。 在这种情况下,这两个角色是互补的,数据工程师对数据科学家的工作起支持作用。
您会注意到,数据科学家和数据工程师之间还存在一个大数据方面的重叠。 通过更好地了解每个岗位的技能,您现在可以更好的理解这种技能重叠。 数据工程师使用他们的编程和系统构建技能来创建大数据管线。 数据科学家利用他们更加有限的编程技能,运用他们的高级数学技能, 利用已经存在的数据管线创建高级数据产品。 『创建和使用』之间的这种差异,是在处理大数据时,团队失败或者表现不佳的核心之处。一个团队,如果期望他们的数据科学家创建数据管线,最后将会极其失望。
数据工程师与数据科学家的比率
决定数据工程师和数据科学家的比率是一个常见问题。在确定这个比率时,常见需要考虑的问题包括数据管线有多复杂,数据管线有多成熟,以及数据工程团队需要拥有多少经验。
拥有比数据工程师更多的数据科学家通常是个问题。 它通常意味着,机构正在让他们的数据科学家进行数据工程工作。 正如我之前所说的,这会进而导致各种各样的问题。
为每个数据科学家搭配 2 – 3 位数据工程师是一个常见配置。 对于一些具有更复杂数据工程要求的机构,这个数字可以是每个数据科学家配备 4 – 5 名数据工程师。 这包括那些数据工程和数据科学处于不同汇报组织结构中的机构。 您需要更多的数据工程师,因为创建数据管线需要比创建 ML / AI 部分花费更多的时间和精力。
我在《数据工程团队》一书中,更多地讨论了数据工程和数据科学团队应该如何相互交流。
数据工程师从事数据科学研究
一个远非常见的情况是数据工程师开始进行数据科学工作。 随着数据工程师开始提高他们的数学和统计技能,这是一个向上的推动力。 随着数据科学变得更加标准化,这种向上的推动力变得越来越普遍。 它导致了一种全新的工程师类型出现。
机器学习工程师的需求
数据科学家面临的一般问题是,他们不是将工作投入生产、创建数据管线以及公开这些 AI / ML 结果的工程师。
为了应对学术思维与『投入生产的需求』之间的差异,我们观察到了一种新型的工程师。 现在,这位工程师大多可以在美国看到。他们的头衔是机器学习工程师。
机器学习工程师的工作,主要是创建数据科学管线的最后一步。 这可能需要几个部分。 它可能是将数据科学家的代码从R / Python 重写为 Java / Scala。 它可能是从软件工程的角度优化 ML / AI 代码,保证数据科学家写的代码能够运行良好(或者干脆就是能够运行)。 机器学习工程师具有足够的工程背景,可以在一个领域(数据科学)保障所必需的工程规范,这些领域以并不遵循良好的工程原理而著称。
在生产环境中运行的模型需要维护和输入,而普通的软件并不需要。 机器学习模型可能过时,并开始给出不正确或扭曲事实的结果。 这可能来自数据属性的改变,新数据的增加,或恶意性质的攻击。 无论是哪种方式导致的,机器学习工程师都需要时刻注意他们的模型中需要修改的部分,这可能导致模型的重新训练或调整。
机器学习工程师和数据工程师
数据工程师向机器学习工程师的过渡是一个缓慢的过程。 坦率来讲,我们将看到,变成机器学习工程师需要作出什么变化和变成数据科学家需要作出什么变化是非常相似的。
为了解释我的『缓慢变化』的意思,我将分享那些我见过的从数据工程师转变为机器学习工程师的人的经验。 他们花了数年时间做软件工程师和数据工程师的开发工作。 他们一直对统计学或数学感兴趣。 其他时候,他们只是厌倦了作为一名数据工程师所遇到的限制。 无论哪种方式,这种转变需要数年时间。 参加初级统计课程或初级学习机器课程之后,我没发现人们能立刻成为机器学习工程师。
正如我将数据科学家视为偏学术一样,数据工程师也不刚好是适合做机器学习工程师的。 一个工程师喜欢世界里的真和假,黑和白,以及 1 和 0。他们不喜欢不确定性。 通过机器学习,模型的猜测存在一定程度的不确定性(工程师也不喜欢猜测)。 与大多数工程师不同,机器学习工程师可以跨越数据工程的确定性和数据科学的不确定性。