-
数据工程师
深扒一个独角兽公司标配,但仍被低估的岗位
编者按:本文来自微信公众号“峰瑞资本”(ID:freesvc),推荐人陈诚,DataPipeline创始人,前 Yelp 数据工程师。
来源 / Stitch Data
译者 / 黄谦、徐勇、王小佛、张耕、王心田、王挺、Raymond Yang
编辑 / 张潇冉
在和国内外顶尖公司交流的过程中,我发现他们多数都很骄傲有一支极其专业的数据团队。这些公司花了大量的时间和精力把数据工程这件事情做到了极致,有不小规模的工程师团队,开源了大量数据技术。Linkedin 有 kafka, samza, Facebook 有 hive, presto, Airbnb有airflow, superset,我所熟悉的 Yelp 也有 mrjob…… 这些公司在数据领域的精益求精,为后来的大步前进奠定了基石。
今天推荐的这篇文章《美国数据工程现状》,从多个维度阐释了数据工程和数据工程师在美国的发展状况。或许你和我一样,都会有一些意想不到的发现。
我常觉得数据工程之于企业的意义,就好像马斯洛需求理论之于人的意义,从低到高进阶满足,企业对于数据工程的应用应该遵循这个三角原则。
第一层,企业要注意到公司发展过程中,最普世最基础的需求:即让数据可见可得。这需要我们重视数据工程这件事,这是企业做大做强安身立命的根本;
第二层,进阶需求。有了数据意识,招来了数据工程师,拉开架势开始干吧。这时候企业就需要开始从语义(semantic)的角度去理解跑起来的数据流了。实现从数据到企业战略指导再回到数据;
第三层,是目前看起来最接近塔尖也是最高级的需求:即建模、更完善的预测性算法、更漂亮的数据可视化、深度学习、AI 等等……
这些更高级的更贴近金字塔尖,也是现在创业的风口。我偶尔也会被风吹的精神抖擞,但吹完风,静下来想想,一个企业没有好的数据工程、数据基础架构逻辑、没有构建数据流的能力,这些金塔尖上的需求是非常难被满足的,很难取得好的结果,也无法实现真正的价值。
是的,我又被风打下来了,开始站在地上思考问题了。
当然,对于创业公司来说,打造完整的数据工程、严密数据架构、高效的数据流是件 “正确但不容易的事情”。不好做、效果不直观,但很重要。
最后,我想引用 Kafka 技术的缔造者 (Kafka,被誉为 LinkedIn 的 “中枢神经系统”),现 Confluent 的 CEO Jay Kreps 的一句话:Without a reliable and complete data flow, a Hadoop cluster is little more than a very expensive and difficult-to-assemble space heater。如果你的公司没有一个完整可靠的数据流,那么你的 Hadoop 集群其实就像非常贵而且很难组装的暖气片而已。
如果你对中国数据工程现状充满兴趣和好奇心,欢迎你和我取得联系 cheng@datapipeline.com。
我是贴心的文章要点:
6500 人在 LinkedIn (领英)上称自己是数据工程师。
2013 到 2015 年,数据工程师的数量至少翻了一倍。
50% 的数据工程师都在美国。
42% 的数据工程师都是软件工程出身。
数据工程师主要供职于信息科技与服务产业。
数据工程师前 5 项主要技能是:SQL, Java, Python, Hadoop, 和Linux。R语言甚至都没进前 20。
美国数据工程概况
目前,LinkedIn 上有 6500 人称自己是数据工程师。而仅在旧金山,就有 6600 个这样的工作机会虚位以待。去年,数据工程师的数量翻了一倍,但工程主管们却仍觉得人才匮乏。
数据人才的旺盛需求源自一个根本性的变化:科技公司现如今都成了数据公司。
像 Uber、Airbnb、Spotify 这些公司都在大力发展数据产品,结果便造成数据系统开发和维护人才的激烈争夺。
Josh Wills 是 Slack 的数据工程师,在 2016 数据工程大会(DataEngConf 2016)上半开玩笑地说:“我的数据工程师都在会场了,请你们别挖墙角。” 即使 Slack 这样当红的硅谷企业,也在担忧如何留住这些宝贵人才。
我们的研究着重于说明以下几个方面:
目前市场上数据工程师的数量;
数据工程师的背景和核心技能 —— 这些信息对于主管们研究如何将软件工程转换至数据工程特别有用(编者按:以缓解招聘数据工程师的压力);
数据工程师的就业信息 —— 帮助你说明为什么要投资(时间/精力/金钱)到这项昂贵的技能中来。
从 Stripe、MIT、Looker 的工程主管对数据人才的发现、留任和对数据工程师团队项目的开发等一系列策略的分享中,我们找到了这些问题的答案,使得这份报告清晰地呈现出数据工程的现状。
关键指标:
人数:6500 人在 LinkedIn (领英)上称自己是数据工程师。
发展:2013 到 2015 年,数据工程师的数量至少翻了一倍。
分布:50% 的数据工程师都在美国。
之前的职务:42% 的数据工程师都是软件工程出身。
产业:数据工程师主要供职于信息科技与服务产业。
技能:数据工程师前 5 项主要技能是:SQL, Java, Python, Hadoop, 和Linux。R语言甚至都没进前 20。
分析方法:
本报告基于 Linkedin 上的用户资料,包括所有公开可见的个人及公司档案、技能与工作经验,数据以 2016 年 3 月份的统计为准。
我们根据档案上的职业标题和头衔识别出数据工程师,这里只纳入了那些可确认公司的数据工程师档案。
【图表:LinkedIn 个人档案总结】
截止 2016 年 3 月 1 日,Linkedin 上的个人档案大约 4.3 亿,此次参考了 2.6 亿例档案,其中列有至少一项经历的近 1.9 亿, 有一项已认证经历的超过 1 亿,当前经历已认证的近 8000 多万。
在这些数据工程师中,我们分析了:
3 万项工作经验
8.2 万条个人经历
3400 个公司
分析工具:
分析采用 Python, SQL 和 Jupyter。
HighCharts 和 HighMaps 中的交互式可视化效果采用 Python 的制图包和 Python-highchairs 实现。
数据采用 AWS Redshift 进行存储和处理。
“数据工程师”(所有以某种方式与数据打交道的软件工程师)的定义仍有很大的模糊性,目前并没有一个完美答案,我们觉得由这些从业者自己来解读是最好的方式。
我们发现在 Linkedin 上有 6500 人称自己是“数据工程师”。
6500,这个数目并不大。
实际上,我们有些惊讶“数据工程师”竟如此之少。而在写这篇报道的时候,Indeed 上有 6600 个 数据工程师的招聘启事,这还仅仅是在旧金山和湾区。
薪酬数据也证实了数据工程师很受欢迎。据说,在 Facebook, Amazon 和 Google 这样的巨头公司工作的顶级数据工程师工资超 50 万美金。Indeed 的数据分布更保守一些,尽管如此,薪资也达到了 6 位数。
【图表: 旧金山地区数据工程师的数量和薪酬比】
截止从上图可以看出,薪酬在 10 万美元以上的职位超过 80%, 其中 110k-120k, 120k-130k 和 130k+ 的职位都很多,均超过了 20%。数据工程师成为当下的黄金职业!
专家洞见:
Jonathan Coveney,Stripe 数据工程师:“对数据工程师型人才的需求”。
近十年来,Jonathan 都在数据领域深耕,曾在 Twitter、Spotify 等公司建立数据系统。在他看来,有三种主要趋势在推动着对数据工程师类人才的需求:
公司在对数据和管理数据的人的思考上更加精深。“数据不再是副产品,而是一个公司运作的核心”。
对机器学习愈加倚重。由于机器学习的进步,对专有数据的掌握逐渐成为各个领域的公司最重要的竞争优势。
公司开始建造数据产品。“以地图为例,机器学习主要作用于交通路线的侦测与规划,而地图的基础建设则在于管理和组织大规模的数据,这就是数据工程。”
LinkedIn 的简历显示了一个人声明的自己的职业发展历史,包括了在各个时间段内的职务。这些数据让我可以构建出某个职务的不断演变。
下图就展示了”数据工程师“这个职务的飞速发展:
【图表】累计数据工程师的数量(单位:千)
数据工程师的数量从 2013 年到 2015 年增长超过了一倍。而且基于上文中相关岗位需求的数据,该增长趋势并不会减慢。
相比之下,数据科学家的数量大约是数据工程师的两倍(大约 11,400 人),但是数据工程师的增长速度却要更高:在同一时期,数据科学家数量“仅”增长了 50%。
数据工程师的疯狂增长让人产生了一个疑问:这些人从哪里来?他们之前是什么职业?
我们通过观察数据,调查了数据工程师这一职业的 DNA —— 他们之前的职业。
在我们的调查前有以下几个猜测:
数据工程师是软件工程师和数据科学家之间的桥梁:他们编写了生产代码来方便数据科学家们进行大规模的运算实验。因此,我们猜测有很大一部分数据工程师的前身是软件工程师或数据科学家;
因为数据工程师很大部分的工作都围绕着运算的规模,他们同时也是软件工程师和运维开发 ( Devops ) 的桥梁。因此我们猜测一部分人由运维开发转来;
数据库管理员曾在一个企业中扮演类似的角色。因而,不难假设一部分数据库管理员投身到这一更加先进的职业中。
结果显示,我们的猜测部分是正确的,有一点是非常明确的:数据工程师的 DNA 和软件工程师最接近 。
【图表 :TOP 10 数据工程师的来源】
数据工程师前职调查,最多依次为软件工程师、分析师、咨询师、商业分析师、数据架构师、数据分析师、数据库管理员、数据科学家、实习生、研究助理等。
50% 的数据工程师在美国。这并不奇怪,因为数据科学家这个称谓的本身和很多基础技术都是来自于美国的科技公司和大学。
【图表:数据科学家全球化】
大部分的数据科技或是来自于一小部分大学——特别是伯克利大学 AMP 实验室,或者是来自于全球最大的网络公司软件工程团队。
谷歌、脸书、领英和亚马逊在领先该产业其他对手很久,就已经开始挑战大数据,并投入了大量资源。他们不仅创造了很多的数据科技,他们成为了数据人才的培育基地。
然而,这张图有些误导。
美国至今有着最多的数据工程师,也同样在全球有着最多的数据工程师档案:接近4倍多于排名第二的印度。
为了标准化数据,我们图中排名前十的国家展开详细,看他们各自数据工程师人数与在领英(LinkedIn)档案数的对比,以及与总人口的对比。
【图表:TOP 10 数据工程师最多的国家】
这张统计中没有以色列,以色列是我们此前的参考标准,它曾经在每百万人中的数据科学家占比排名中排名最高。上文提及,以色列长期被认为是数据科学的起源国度,在以色列“硅溪”有着强劲科技展现。但意外的是,这却没能转化为高密度的数据工程师人才。
在扩大存储、传输和处理数据方面遇到挑战的公司对数据工程人才需求最甚。这些挑战多在科技公司出现,但是像电信、生物科技和保险这些行业呢?难道这些行业不需要数据扩张方面的帮助吗?
当我们考察数据工程师的工作领域时,我们发现一系列的行业都需要数据人才。
【图表:TOP 20 数据工程师的行业分布】
与预期一致,电信和金融服务接近顶端,但是在生物科技中 DNA 的拍字节(Petabytes)的排序却没有朝排名靠前的位置发展。
从该表格中,我们不应该认为这些行业之外的领域就不需要或者不聘用担任数据工程师功能的人才。相反,尽管“数据工程师”在某一个领域内已经流行开来,互联网科技公司—— 这个特定职位的用法仍处于初始阶段。这个领域内的技术、流程和思维方式正在开始延伸到其它的行业。
当我们看到聘用了数据工程师的具体公司时,他们在科技领域的受欢迎程度就更加明显了。在前十的公司里,只有两家公司不是专门从事技术或数据的:一家电信公司(Verizon)和一家金融机构(Capital One)。
【图表:TOP 50 聘用数据工程师的公司】
经常在数据大会上分享经验的 Amazon、Facebook,Netflix,CapitalOne 等公司,都是业界数据应用的非常成功的公司,和其雇佣的数据工程师的人数呈正相关。
很有趣的是,一些公司聘用了不成比例的数据工程师。比如 Spotify(1600+ 雇员)比起必能宝(Pitney Bowes)(16,000 雇员)要小得多,但他们聘用的数据工程师数量相当。
这些数据清晰显示,现在的一些科技 “独角兽” 高度重视数据工程师一职。同时,考虑到三藩市目前有 6600 家公司在找数据工程师,这个趋势短期内似乎不会改变。
数据工程师干的活大体分为两个部分:
在整个业务流程,让消费者能接触到数据
打造 “产品化” 的算法,将其变为数据产品
总体而言,直接与数据相关的技能获得了越来越多的重视,另一方面,某些核心的软件技能也为数据工程师所青睐。
【图表:TOP 20 数据工程师的基本技能】
从图上可以看出用 SQL 来回答分析型的问题、写脚本来做数据集成、清洗这样的 ETL 任务和使用Hadoop生态的工具是数据工程师的主要工作。
No.1 SQL(Structured Query Language:结构化查询语言):
即便在数据技术领域,很多 NoSQL 倡导者 “欲除之而后快”,但 SQL 仍是数据工程师最普遍具备的技能。
No. 2 Java:
Java 是最受数据工程师欢迎的编程语言。自从分布式系统基础架构 Hadoop 在 2000 年左右被开发出来后,JVM(Java Virtual Machine:Java 虚拟机)便处于数据处理的中心。
No.3 Python:
不仅被应用于数据工程,还能为分析任务服务——相较而言,总是和 Python 一同出现在新闻里的 R 语言,更专精于分析与统计,这应该也是 R 没有上榜的主要原因——在数据科学圈,数据工程和分析二者并重。
专家洞见:
Mike Xu, Looker 的数据架构师:“弄明白你想要哪款数据工程师?”
Mike 的职责之一是倾听开发者的心声:哪些事情让他们开心?哪些让他们不爽?最多的抱怨是什么呢?嗯,不同的数据工程角色间是有细微差别的,但很多公司却不懂行。
在 Mike 看来,数据工程师主要有 4 种角色——这也是招聘者应该弄明白的事情:
数据仓库:专注于为分析来优化数据仓库,主要是负责数据的读写和管理。
工具:总能在一系列数据工具箱里,极其擅长一、两样特定的工具(编者按:类似于 Hive, Hbase,ElasticSearch 等)。
架构:才华通透、“端到端” 的思考者,无论是数据收集,还是收集后帮助团队使用数据,他们需要考虑的事情多而杂,贯穿业务的很多环节。
运维(Ops):主要把时间花在建立数据库等事项,还要管理权限、操心数据安全。
作为数据工程师,同样需要认真应对公司和业务的规模化所带来的挑战——业务更多,数据集 (Dataset)的规模也更大,所需求的数据能力和工作方式也要随之演化。
姑且做个猜测:规模越大的公司,对规模化相关的技能越加看重。是否真的如此?我们先查看查看下面的图表。
【图表:不同公司的数据工程师之间的差别】
纵轴表示技能,横轴则表示相对偏差(Relative Difference:某一次测量的绝对偏差占平均值的百分比)。深蓝色、天蓝色、橘色分别代表三种公司规模:1-200人、200-1000人、1000人以上。越接近图表顶部,该技能越应用于较小的公司,反之,位于底部的技能更普遍地出现在 1000 人及以上的公司里。
看完表,我们可以用数据回答先前的猜测:NO。
真实情况是,在规模更大的公司,数据工程师更在意 “企业级” 相关的技能,比如 ETL(Extract-Transform-Load)、BI(Business Intelligence:商业智能)、数据仓库等,而在较小的公司,数据工程师更多的把心力花在 Python、Java 等编程语言上(编者按:Python 和 Java 作为普通的编程语言,可以用来构建产品,这对于小公司来说属于核心业务。)
专家洞见:
Will Smith,MIT 的主数据工程师 / 架构师:“数据工程 @大公司 VS. 初创公司”
Will 曾为 Nokia、Warner Bros Games 这种大公司打造过数据技术。在他看来,数据工程师所仰赖的技术,不那么取决于公司规模本身,而更应该从这么一种角度出发:你所负责的数据是“写时模式”(schema-on-write)还是“读时模式”(schema-on-read)?
他认为,大公司往往在处理数据工程的 BI 方面有所积累,Informatica、Oracle、SAP 都会接触和使用。这类公司往往在“写时模式”的环境里工作。
但现如今,很多打造数据科技的公司实际作业的环境是“读时模式”。“想象一下,公司交给你几个 TB 的日志数据,用的 JSON,是关于广告效果的。数据工程师不知道能从这堆数据中挖掘出什么,所以你需要开发者写代码去做数据发掘,而不是一上来就直接套用 SQL。这和大公司在 ‘写时模式’ 的环境中做事很不一样。”
2011年时,Will 正效力于诺基亚 (Nokia)。尽管当时主要经手 “企业级的数据”,但团队却选择“读时模式”的思路去开展相关工作。
“现在很多数据工程师都这么做,比较适合规模化的需求。这样设计和开发出来的东西,可以消化掉来自于各种来源的数据。传统老旧的 BI 系统就没这能耐——主要是因为以’写时模式’为基础吧,这种老技术不知道在一堆数据里都有什么,这么一来我们这些工程师也没啥头绪了。”
这个数据集体现了数据工程师与数据科学家之间的明显的技能差异,由此可以将数据工程师与数据科学家的技能构成看作一个频谱的两个对立面。
以下这张图表显示了一张数据技能频谱图,频谱图顶端的技能在数据工程师的简历中更为常见,而频谱底端的技能更常出现在数据科学家的简历中。
【图表:数据工程师与数据科学家的区别】
从图表的技能构成可以看出,数据工程师更倾向于掌握 “战术层面” 的具体数据技能,专注于使数据可用并能够在生产环境中对数据进行处理,如具体的编程语言、操作系统与数据库等;而数据科学家更倾向于“战略层面”的数据技能,如数据分析、数据挖掘、统计分析、机器学习等。
数据工程师与数据科学家之间的差异是十分明显的,那么数据工程师与软件工程师之间的技能差异又是怎样的呢?毕竟,正如我们之前所展示的那样,大部分的数据工程师都具有软件工程师的背景。
【图表:数据工程师与软件工程师之间的区别】
以数据工程师为中心的最多人选择的技能是 Hadoop,数据仓库和 BI——正如你所期望的那样。与之相反,在软件工程师端列出的所有技能几乎都与 web 前端开发相关。最大的两个例外是 C 语言和 C++ 语言,这是在现代大数据技术栈开发中不常用到的编程语言。
虽然许多数据工程师具有软件工程师背景,但他们并不是简单的为了博取加薪而转换一个新的工作头衔;他们不得不通过学习新的技能来适应新的角色。
专家洞见:
Ryan Orban,Galvanize CTO:“在数据工程师和数据科学家之间建立更好的关系”
“想一想设计师和前端开发工程师之间的关系,” Ryan Orban 说,“一个角色负责通过想法完成工作,而另一个角色负责将想法付诸实施,这之间可能会导致很多的紧张对立情绪。” Ryan 认为,数据工程师和数据科学家之间的关系与之类似,因此缓解两者之间的紧张情绪的方法也是相似的。“正如设计师经常被告知需要学习编写一些代码,而前端开发工程师也经常被告知要制作一些原型,我鼓励数据科学家和数据工程师相互学习一些对方所需要掌握的数据技能。”
那么,数据工程师需要多深入的了解数据科学家的世界呢?
“数据工程师应该对机器学习有一些基本的了解”,Ryan 说,“他们不需要了解所有的数学理论,但是他们应该能够判断效率和准确性。相反,数据科学家应该了解架构,以及如何对架构进行扩展,并初步了解生产级的编程语言。”
这种深入了解其他相关学科专业知识的转变也发生在其他领域。公司习惯于聘请数据科学家来负责市场、产品或者业务分析方面的工作,而聘请数据工程师来完成更广泛的工程功能。这造成了目标错位。Ryan 认为这种趋势正在改变:“ ‘数据团队’ 是由数据科学家和数据工程师共同构成的这一概念越来越受欢迎。这一如此简单的改变将很大的改善两组人员之间的关系。”
扫一扫 加微信
hrtechchina