为什么数据科学家不是数据工程师
换句话说,为什么科学和工程仍然是不同的学科。

“一位科学家可以发现一颗新星,但他不能制造一颗。他必须要求工程师为他做这件事。”

-Gordon Lindsay Glegg, 设计中的设计(1969)

几个月前我写过数据工程师和数据科学家之间的差异。 我谈到了他们的不同技能和共同的知识基础。

一件有趣的事情发生了:数据科学家开始反击,认为他们实际上在数据工程方面,和数据工程师一样熟练。 这很有趣,因为数据工程师并没有拒绝承认他们是数据科学家。

因此,过去几个月我一直在收集数据并观察数据科学家的自然行为。本文将提供有关数据科学家不是数据工程师的原因的更多信息。

为什么这非常重要?

有些人抱怨数据科学家与数据工程师的差别就是头衔而已。他们认为,“头衔不应该阻止人们学习或实践新事物。” 我同意,确实应该尽可能多地学习。 不过要知道,你的学习过程只接触浅表即可,否则,这会导致大型数据项目失败。

这一点也为公司的管理层提供了信息。 他们正在招聘数据科学家, 期望他们成为数据工程师。

我从很多公司听过同样的故事。 故事的情节都相同:一家公司决定使用数据科学,因为这是获取风险投资资金,高ROI(投资回报率),在商业周期中疯狂吸睛…的方式,当然也可能有一些其他原因。 这类决策往往是C-level(CEO,CTO… )或VP(副总裁)级别的人做出的。我们姑且把这个高管成为Alice。

这家公司进行了详尽的调研,以寻找有史以来最好的数据科学家。 让我们称这位数据科学家为鲍勃。

鲍勃入职第一天。 爱丽丝走向鲍勃并兴奋地告诉他她脑中所规划的所有项目。

“那很棒。 这些数据管线在哪里,以及你的Spark集群部署在哪?“Bob问道。

爱丽丝回答说:“这就是我们期待你做的事情。 我们聘请你做数据科学。”

“我不知道任何关于搭建基础设施的知识,”鲍勃说。

爱丽丝疑惑地看着他,“但你是一名数据科学家对吗? 这是你应该的。”

“不,我都是使用已经创建的数据管线和数据产品。”

爱丽丝回到她的办公室,弄清楚发生了什么。 她盯着一张如图1一样的简化图表,并且无法弄清楚Bob为什么不能完成简单的大数据任务。

Figure1-42ac4b8503ed9b17c941d48f6c81f147

图1.数据科学家和数据工程师的Venn式图。 杰西安德森的插图,经许可使用

关注点的核心

在以上互动中有两个问题:

  • 为什么管理层不了解数据科学家不是数据工程师?
  • 为什么一些数据科学家认为他们是数据工程师?

我将从管理层一边开始。 稍后,我们将从数据科学家自己的角度进行讨论。

面对现实吧。 数据工程并不是人们关注的焦点。 它并未被宣布为21世纪最好的工作。 它没有得到所有的媒体注意力。 会议并没有告诉CxO数据工程的优点。 如果你只看粗略的信息,那就是数据科学和招聘数据科学家。

这一点正在变化。 我们有数据工程会议。市面逐渐认识到对数据工程的需求。 我希望像我写出的这样的文章能够阐明数据工程的必要性。 我希望我的工作能够让企业懂得满足这一关键需求的意义。

认可并欣赏

即使一家公司拥有数据科学和数据工程团队,对数据工程方面的工作仍然缺乏认识。

你甚至在会议中看到信任缺失。 数据科学家正在谈论他们创造的东西。 我可以看到他们的模型中的大量数据工程,但在谈话期间从未被强调过。 我不指望一个谈话能够面面俱到,但是承认“创造的基础是数据工程底层工作”这一点是好的。 管理层和数据科学初学者错误的认为数据科学家的技能就能可以实现一切。

如何获得欣赏

最近,我一直在向数据工程师询问如何成为他们全公司的关注点。 他们觉得,当数据科学家去展示他们的最新作品时,要么获得了全体的信任,要么管理层一致把信任票投给他们。 数据工程师们的基本问题是:“我怎样才能让数据科学家不再因为我们的工作而获得荣誉?”

这是我在公司内部看到的实际问题。

管理层没有意识到(而且普遍也没有共识)的一点是,数据工程工作涉及数据科学的方方面面。 如果你正在阅读这篇文章而你正在想:

  • 我的数据科学家是数据工程师
  • 我的数据科学家正在创建非常复杂的数据管道
  • 作者一定不知道他在说什么

…你可能在后台有一位数据工程师没有得到任何关注。

与数据科学家在没有数据工程师的情况下撂挑子不干的情况类似,未获得认可和赞赏的数据工程师也会撂挑子不干的。 不要自欺欺人了!与数据科学家一样,合格的数据工程师也有同样热门的就业市场。

数据科学只有在朋友的一些帮助下才会产生

Figure2-7dadc453228ac1fdfe14ee11d4e43323

图2.即使是14世纪的意大利人也知道数据工程师的重要性。 图片来自大都会博物馆,公共领域

你可能听说过神话中Atlas的故事。他因不得不举起世界/天空/天球而受到惩罚。 地球只会以现有的形态存在是因为阿特拉斯举起了它。

类似地,数据工程师支撑着数据科学的世界。 托起这个世界的人,没有得到太多的关注或信任,但应该有。 公司的所有级别都应该理解数据科学只能通过数据工程团队的工作来实现。

数据科学家不是数据工程师

这让我们想到了为什么数据科学家认为他们是数据工程师。

在我们继续之前,请注意一些注意事项:

  • 我认为数据科学家非常聪明,我喜欢和他们一起工作。
  • 我想知道这种情报是否会导致更高的智商Dunning-Kruger效应。
  • 我所知道的一些最好的数据工程师是数据科学家,尽管这个数字非常小。
  • 在评估我们自己的技能时,一直存在高估的情况

Figure3-fc72719498859c6a50ac911952e1d920

图3.数据科学家感知数据工程技能与实际技能的经验图。 Jesse Andersson的插图,经许可使用

在与数据科学家讨论他们的数据工程技能时,我发现他们的自我评估变化很大。 这是一个有趣的偏见社会实验。 大多数数据科学家过度评估了自己的数据工程能力。 有些人给出了准确的评估,但没有一个评估的评估低于他们的实际能力。

此图表中缺少两件事:

  • 数据工程师的技能水平是多少?
  • 中等复杂数据管线所需的技能水平是多少?

Figure4-489301cb2af38ca5cc96e4958ecf6405

图4.数据科学家和数据工程师的数据工程技能经验图,他们具有创建中等复杂数据管线所需的技能。 Jesse Andersson的插图,经许可使用

从该图中,您可以看到所需数据工程能力的差异。 事实上,我对能够创建中等复杂数据管线的数据科学家的数量进行了高估。 现实情况可能是数据科学家实际只有图表显示的一半。

总的来说,它显示了能够创建数据管线的两个群体的大致部分。 是的,一些数据工程师无法创建中等复杂的数据管道。 相反,大多数数据科学家也不能。 这又回到了手头的业务问题:公司机构正在把大数据项目交给无法胜任项目的个人来做。

什么是中等复杂的数据管线?

中等复杂的数据管线比创建数据管线的最低要求高出一步。最低限度的一个例子是使用Spark处理存储在HDFS / S3中的文本文件。 中等复杂数据管线的一个示例是使用正确使用的NoSQL数据库开始优化存储,该数据库使用像Avro这样的二进制格式。

我认为数据科学家们认为他们简单的数据管线就是数据工程。 现实情况是,他们谈论的是hello-world级别的数据管线,但现实需要的是更复杂的数据管线。 过去,数据工程师在幕后执行了非常困难的数据工程,数据科学家没有必要处理它。

你可能会想,“好,所以20%的数据科学家实际上可以做到这一点。 毕竟,我不需要数据工程师。“首先,请记住这个图表在显示数据科学家的能力方面已经格外开恩了。 请记住,“一般复杂”仍然是一个相当低的标准。 我需要创建另一个图表,以显示数据科学家很少能够处理复杂性的下一步。 在这一步,能够胜任的数据科学家的百分比降至1%或更低。

为什么数据科学家不是数据工程师?

有时我更喜欢看到问题的表现。 有一些例子是关于数据科学家缺乏数据工程技能的经验问题的。

大学和其他课程

数据科学是大学和在线课程的热门新课程。 有各种各样的课,但几乎所有课都有同样的问题:它们要么完全缺乏,要么有一个数据工程班。

当我看到一所新大学的数据科学课程宣布时,我会看一看。 有时,我会被要求就大学提出的数据科学课程提出意见。 我给他们同样的反馈:“你期待的是专家程序员吗? 因为内容完全没涵盖消耗现有的数据管线所需的编程能力或系统知识。“

课程大纲通常侧重于所需的统计学和数学。 这反映了公司和学者认为数据科学应该是什么样子。 现实世界看起来很不一样。 这些可怜的学生只能为这些“不一般”的学习内容而自生自灭。

我们可以退一步,看看分布式系统硕士学位课程要求学习哪些内容。 显然,数据科学家不需要这种知识深度,但它有助于展示数据科学教学中缺少的内容,以及数据科学家技能树里的重大遗漏。 它们存在一些重大缺陷。

数据工程不等于 Spark

数据科学家和管理层的一个常见误解是数据工程只是编写一些Spark代码来处理文件。 Spark是批处理计算一个很好的解决方案,但它并不是您需要的唯一技术。 大数据解决方案需要10-30种不同的技术才能协同工作。

这种想法是大数据项目失败的核心。 管理层认为他们有一个新的银弹来消除他们所有的大数据问题。 现实远比这复杂得多。

当我指导一个关于大数据的公司时,我会在公司的所有层面检查这种误解是否存在。 如果确实存在,我要确保讨论他们需要的所有技术。 这消除了误认为大数据中有一个简单的按钮,并且存在一种技术可以解决所有问题。

代码来自哪里?

有时数据科学家会告诉我数据工程是多么容易。 我会让他们告诉我他们如何以及为什么这么认为。 “我可以从StackOverflow或Reddit获得我需要的所有代码。 如果我需要从零开始创建一些东西,我可以在会议演讲或白皮书中复制某人的设计。

对于非工程师来说,这似乎没问题。 对于工程师来说,这会引发重大警报。 姑且不谈法律问题,这不是工程是做法。 大数据中很少有可以速成的部分。 “hello world”之后的所有内容都需要数据工程师的复杂设计,因为没有一种速成方法来处理它。 从白皮书中复制您的设计可能会导致设计效果不佳或更糟

我曾与一些数据科学团队打过交道,他们尝试过这种照猫画虎的做法。 它不怎么管用。 这是由于大数据的复杂性飙升以及对用例的极度关注。 数据科学团队通常会因为项目超出其数据工程能力而选择放弃。

简而言之,“我可以从stackoverflow复制代码”或“我可以修改已经编写的内容”和“我可以从头开始创建这个系统”之间存在很大差异。

就个人而言,我担心数据科学团队将成为大量技术债务的来源,这些技术债务会压制组织中的大数据生产力。 当它被发现时,技术债务将如此之高,以至于纠正它可能已经无能为力了(只能推倒重来)。

生产系统中用了最久的代码是什么?

数据科学家的核心差异在于他们的深度。 这种深度以两种方式显示。 他们在生产系统中的用了最久的代码是什么(或者这些代码是否真正在生产系统中存在过)?以及他们写过的最长,最大或最复杂的程序是什么?

这不意味着谁的技巧更好,谁更牛。这意味着,他们是否知道当你在生产环境中添加了一些东西,以及维护代码时会发生什么。 编写20行程序相对容易。 编写1,000行可维护和连贯的代码是另一种情况。 从未写过超过20行的人不理解可维护性方面的差异。 

他们所有关于“Java太冗长”或者“为什么需要使用编程最佳实践”的抱怨,都是大型软件项目关注的焦点。

在评估和探索数据阶段,快速移动代码、打破已有模式很有效。 在处理生产环境中的代码时,这一点更猛烈,且很有必要。 出于这些原因,大多数数据科学家的代码在投入生产之前都会被重构一次。

当他们设计分布式系统时

了解数据科学家和数据工程师之间差异的一种方法是看看他们编写自己的分布式系统时会发生什么。 数据科学家将编写一个以数学为重点,但执行非常繁琐的系统。 一个专门编写分布式系统的软件工程师将创建一个性能良好且工作分布的软件( 但严肃来说不要从头写一个新的)。我在这里分享一些与“数据科学家创建分布式系统”的公司交流的故事。

由我客户公司的数据科学家组成的部门建立了一个分布式系统。 我被派去与他们交谈并了解他们为什么创建自己的系统,以及它能做什么。 他们正在进行(分布式)图像处理。

我开始问他们为什么创建自己的分布式系统。 他们回答称,已有系统无法分发算法。 为了验证他们的发现,他们与另一位具有图像处理专业能力的数据科学家签约。 那位数据科学家承认无法分发算法。

在我与团队一起度过的两个小时内,很明显算法可以分布在类似Spark这类通用计算引擎上。而同样清楚的是,他们编写的分布式系统不具备可扩展性,并存在严重的设计缺陷。 他们不仅让另一位数据科学家,而不是合格的数据工程师来验证他们的发现,还让另一位新手程序员验证他们的创新发现。

在另一家由数学家经营的公司,他们与我讨论了他们编写的分布式系统。 它的编写使得数学问题可以在其他计算机上运行。 与他们交谈后,有些事情很清楚。 他们本可以使用通用计算引擎,而且效果更好。 他们分配和运行工作的方式效率低下。 执行RPC网络流量所需的时间比执行计算要长。

所有这些故事,以及其他数不胜数的故事,有些共同之处:

  • 数据科学家专注于数学而不是系统。 该系统用于运行数学运算,但无法有效地运行数学运算。
  • 数据工程师知道非数学类的技巧。 我们不是在解决数据溢出问题
  • 一位数据科学家思考的是:“我怎样才能让计算机解决我的数学问题?”而一位数据工程师思考的是:“我怎样才能让计算机尽可能快速有效地解决数学问题呢?”
  • 公司可以通过使用通用引擎而不是自己编写引擎来节省时间,金钱,也不会感到难受。

那么数据科学家/数据工程师有什么不同?

你已经读到这里,我希望我已经说服了你:数据科学家不是数据工程师。 但实际上,他们有什么不同呢?

数据科学家和数据工程师之间的区别,就是大数据项目成功或失败的区别。

从工程角度看数据科学

当我第一次开始与数据科学家合作时,我很惊讶他们几乎从来不向工程方面要求、借鉴、偷师学艺。 在工程前沿,我们有一些尚未在数据科学方面使用的比较完善的最佳实践。 其中一些是:

  • 源码控制
  • 持续集成
  • 项目管理框架,如Agile或Scrum
  • 集成开发环境
  • 错误跟踪
  • 代码复查
  • 代码注释

你看到我开诚布公地提到了我在数据科学团队中看到的技术债务。 让我详细说明为什么我这么担心。 当我开始推动数据科学团队使用最佳实践时,我会得到两个答案:“我们知道,以后再实施吧”或“我们不需要这些重量级的工程实践。 我们是敏捷团队。 这些模型尚未投入生产。” 实际上最佳实践从没得到实践的时候模型就已经进入生产系统了。这些问题中的每一个都会导致技术债务的复合化。

代码质量

你会将实习生的代码投入生产吗? 如果您在管理层,请询问您的工程副总裁是否同意将二年级计算机科学学生的代码投入生产。 你可能会得到决然的否定。 或者他们可能会说,要在代码被团队的其他成员审核之后才能做下一步判断。

你打算将数据科学家的代码投入生产吗? 本文的主旨部分是数据科学家通常是编程的新手,而且他们的代码正在进入生产环境。 回顾一下数据科学团队没有做的最佳实践。 没有任何制衡措施可以防止非专业的代码投入生产环境。

情况变好的原因是什么?

我想通过一点来结束今天的讨论,我们要提到那些仍然认为数据科学家是数据工程师的人。 或者他们的数据科学家里确实也是合格的数据工程师。 我想重申一下,你可以从图中看出它是可能的,只是概率相当低。

如果这是真的,我希望你能想一想为什么会这样。

根据我的经验,当数据科学家与数据工程师的比例远远不一致时,就会发生这种情况。 当比率走向极端,公司中数据工程师为零时,就会发生这种情况。 每个数据科学家应该配备两到五个数据工程师。 这个比率是必要的,因为数据工程方面比数据科学消耗更多的时间。

当团队缺乏正确的比例时,他们很难有效利用数据科学家的时间。 数据科学家往往会陷入数据工程师熟练掌握的编程部分。我看到太多的数据科学家花费数天的时间研究数据工程师一小时就能搞定的工作。 这种错误的感知和解决的问题导致组织雇用更多的数据科学家,而不是雇用合适的人员,去提高流程的效率。

其他时候,他们误解了数据工程师是什么。拥有不称职或错误类型的数据工程师同样糟糕。 您需要确保获得合格的帮助。 这导致了您误认为不需要数据工程师,因为您使用过的数据工程师并不称职。

我经常被管理层询问他们应该如何让他们的数据科学家在技术上更加熟练。 我回答说,首先要解决的问题是,一个数据科学家是否应该在技术上变得更熟练。 这有几个重要原因:

  • 对于一个不是很技术的数据科学团队而言,边际收益递减的最低点很早期就会碰见。他们花了数个月学习技术,但可能情况永远不会变好。
  • 它假定数据科学家是数据工程师。这不对。最好指定数据科学团队中具有先天技术能力的一两个人作为培养技术的目标。
  • 这种改进的投资回报率如何? 如果数据科学团队能力变好了,产出能否变好?
  • 它假设最高价值是改善数据科学团队。 更好的投资可能是改进数据工程团队,促进数据科学和数据工程团队之间更好的沟通、改善他们的关系。
  • 它假设数据科学家实际上想要在技术上进行改进。 我发现数据科学家认为数据工程是达到目的的手段。 通过数据工程工作,他们可以做有趣的数据科学工作。

我们应该做什么?

既然知道了数据科学家不是数据工程师,我们该怎么办? 首先,我们必须了解数据科学家和数据工程师工作的不同。 我们必须意识到这绝不仅仅是一个头衔的问题,我们不会基于头衔刻板描述别人。 这是每个人擅长什么和他们的核心优势的根本区别。

让数据科学家做数据工程任务充满了失败。 相反,让数据工程师做数据科学也会充满了失败。 如果您的组织正在尝试进行数据科学,那么您需要两个人。 每个人都必要,且角色互补。

对于大型公司,您将开始意识到,首先要分割数据科学家和数据工程师技能集合,然后需要满足不同技能集合的人。我建议管理团队考虑创建一个机器学习工程师岗位,围绕这个岗位做招聘。

大数据的成功

正如您在此处所看到的,大数据成功的途径不仅仅是技术 – 管理部分至关重要。误解数据科学家和数据工程师的本质只是其中之一。 如果您的大数据项目遇到问题,请不要仅仅寻找技术原因。 潜在的问题可能是管理失败、团队协作失败。

当您对大数据项目停滞或失败的原因进行根本分析时,不要只关注或责怪该项技术。 此外,不要仅仅接受数据科学团队的解释,因为他们可能没有足够的经验去了解或理解失败的原因。 相反,您需要更深入(令人更加痛苦) 查看导致项目失败的管理失败或团队失败。

像这样的失败具有重复性和连续的模式。 您可以转而使用最新技术,但您只是解决了系统问题。 只有通过修复根本问题,才能走向成功。

Jesse Anderson

Jesse Anderson是Big Data Institute(大数据学院)的数据工程师,创意工程师和常务董事。 Jesse为员工提供大数据培训,培训内容包括Apache Kafka,Apache Hadoop和Apache Spark等尖端技术。 他教过成千上万的学生,这些学生遍布从初创到财富100强的各种公司,从他这里获得了数据工程师的技能。 他被广泛认为是该领域的专家,并因其新颖的教学实践而受到广泛认可。 Jesse受到O’Reilly及Pragmatic Programmers的宣传,并且吸引了类似Wall Street Journal, CNN, BBC, NPR, Engadget, and Wired这种主流媒体的报道。你可以在Jesse-Anderson.com 了解关于他的更多信息。

比较苹果和橘子(来源: Flickr上的frankieleon用户