对数据工程而言不存在路线图

本文翻译自《There is no Data Engineering roadmap》一文,译文标题略微进行了改动;原作者 Alasdair Brown 是一名大数据方面的顾问,也关注于网络安全与实时分析领域;

在 Reddit、推特(Twitter)、领英(LinkedIn)以及一些 Slack 社群中,我看见过很多入门人群想要进入数据工程领域并寻求建议。每一天都有许多人询问是否有类似“路线图”或者入门课程来帮助他们找到理想的工作。我并不认为这样的路线图存在。

欢迎新人 👋

我看到有些人说“数据工程并非属于入门级别的事情”,这些纯粹是过河拆桥的说法。数据工程不会比其他软件领域要更简单或复杂。每一个领域都是为新手敞开大门的。如果你希望能对数据更了解,那么你就可以做到它。你并不需要从其他的领域来“升学”到这里。

从其他领域侧面转移到数据工程的情况非常普遍,并不是因为数据工程很必要,而是因为数据工程相对于一些已经被挖掘深入的工作领域而言还很新。数据工程团队并没有变得很普遍,事实上来讲,有许多行业都仍然处于起始阶段。许多数据分析师与软件工程师已至少拥有一些对于数据的处理经验,因而利用并且发扬这些经验是完全合理的。这在整个工程领域的每一个工程角色中都发生过。但只有一小部分人决定转行,你也不能将你其他团队的所有人都转移过来。因此,数据工程领域绝对需要入门等级的工程师们。

人们曾经说过,“软件工程不是一个入门性的工作”。他们不再这么说了,因为人们知道这完全是在胡说八道。

欢迎大家来数据领域。

你所需的只是 love SQL ❤️

那么,如何入门成为一名数据工程领域的入门级工程师呢?

首先,去取消关注所有在领英以及推特上的社交名人。你不需要他们,实际上,他们很危险。他们在这里并不是为了指导、教你或者帮助你。他们会拖你下水,以便你更容易为了一时的成功而付钱给他们。

一旦明确了这一点,就要理解这件事并没有个路线图。没有单一的路径,不存在清晰的线性的知识进展。没有人可以告诉你只要先学 A,再学 B,然后学 C,你就一定能成为杰出的数据工程师。

同样的道理也适用于所有工程职位:前端、后端、嵌入式系统、网络、分析,等等。

在所有的这些情况里,有一些基本知识是每个人都应该熟悉的,这些知识通常能让你找到第一份工作。请记住,“我怎样才能得到我的第一份工作?”与“怎样增进我的职业发展?”是有本质性的区别的。

对数据工程来说,只有一个你必须要首先掌握,并且没有任何妥协的技能:

SQL

是的,SQL。它并没有消失。也永远不会。SQL 是数据届打不死的小强,它不会离开。人们尝试取代它,但都失败了。

一张名人语录,写道“The report of my death was an exaggeration. - Mark Twain”,其中署名部分被划线删去,改为 SQL
“我死亡的报告被夸大了事实”

SQL 是唯一一个每一位数据工程师每天都使用的技能。没有任何其他的技能或者工具达到这样的程度。Python 很普遍,但一些替代者可能会用 Scala,Snowflake 也很流行……但没有使用这些工具的团队比使用他们的要更多。SQL 不是这样的。

你是一个入门级别的工程师,你不需要精通 SQL。你需要能够解决问题。当你写了一些像屎一样的 SQL 的时候,你一定希望这两件事中的某一件发生:

第一件,有人会告诉你它们简直是一坨屎,然后你会学习到如何做的更好。

第二件,人们会感谢你解决了这些问题,并且让你继续做别的事情。

双赢。

我怎么学 SQL ?

如果你从来没有接触过 SQL 和数据库,你应该知道的是“SQL”非常的不标准化。你会听到有一些人说“ANSI SQL”指的是某一种标准,但并不是。无论如何,如果一些话题吸引了你,就继续读下去。有一个常用的 SQL 核心,但基本上每一个数据库都对 SQL 进行了它们想要的一些定制和拓展。

这意味着你为 Postgres 编写的 SQL 也许能在 MySQL 中运行,但不行的时候也不要惊讶。同样的情况也在 Microsoft SQL Server、Oracle Database、BigQuery、Redshift、Snowflake、ClickHouse 以及其他的数据库中出现。这些数据库使用的不同 SQL 的变体又被称为“方言”(Dialects)。

这可能让人感到有些不知所措,但其实与学习软件工程并没有什么不同。世界上有百万种编程语言,大多数人会选择其中一种,然后在尝试其他的一些。

所以,随便选个数据库,别担心有关方言的问题。数据库就像是你学习 SQL 的载具。

被困住了?那就从 Postgres 开始吧。这是世界上最受欢迎的免费、开源数据库。选 Postgres 肯定没错。

遵循一些简单的教程;把它跑起来,加载一些数据进去,然后开始使用 SQL 进行查询。

Google 搜一下“SQL 挑战”(SQL Challenges),然后就有许多内容。一些比另一些要更好,你只需要跟着它们,然后把所有挑战自己做完就好。伴随着你的知识的拓展,找一些更难的问题、更大的数据集。

当你开始感觉有一些信心的时候——更换你的数据库。试试用 MariaDB 来解决相同的问题。然后去试试谷歌的 BigQuery(BigQuery 有一个非常慷慨的免费层级,注意一下它的限制,你就可以不用付任何钱)。

要注意一下你的查询是怎么改变的,尤其是面对更复杂查询的时候。留意在不同的数据库中,不同种类的查询可能会更快或者更慢。读一读每一种数据库的 SQL 参考文档。

如果你需要一些内容更详尽的解释,互联网上有许多——成千上万的——免费 SQL 资源。跟着一个免费的 SQL 介绍课程来学准没错,但是要经常将你学的东西应用到不同的数据库中。

你未来也会花时间在工作中去专攻特定的数据库,但现在还不是时候。

如果你住在英国,英国政府资助了一系列面向各个领域的入门级课程。其中一个最大的资助领域就是数据工程。我并不能给它们打保票,一些课程看起来比另一些更好,但是它们都是免费的,所以如果你符合资格的话,为什么不开始学呢?https://www.gov.uk/guidance/find-a-skills-bootcamp/

我真的了解 SQL 会怎样?

如果你之前有数据分析的背景,或者你之前已经从事一些面向 SQL 打交道的角色,那你就很简单了。有这些背景的人应该都可以直接上手一个入门级或者初级的数据工程岗位。

如果到今天你已经有 15 年的分析师经验,那么你也许不愿意再去做回一些初级的岗位——但这就是不同的选择了。

然后呢?

要不要学 Python?Pandas?dbt?Rust?Airflow?Spark?

以后再说。如果你的工作真的需要的话,这些都是你可以从工作中学习的东西。

去找你的第一份数据工作吧。我并不是要告诉你这会很简单。在工程的所有领域,都有很多人为了找一份合适的入门级工作而困扰。

但是当你上手了之后,你的首要目标要是从你的新挑战中吸纳知识。每天都要学一些东西。

当学习停滞下来时,要继续前进。使用你学到的东西来获得加薪,然后找到新的人们来学习。

洗干净,然后重复。这就是你的路线图。

其他的事情都会随后而来,开始动手吧。

🌶️ 一些抱怨 🌶️

不幸的是,我看到过许多不好的建议。其中很多只是别人无意中分享的观点,但往往背后都有明显的经济利益。厂商们希望他们的工具成为整个行业的“基准”。所以他们去找一些所谓“意见领袖”来给他们报酬,或者想说服你去买他们的培训班。因为,如果数据工程看起来神秘又复杂,你更有倾向去买他们的“90 天找到你的第一份工作”课程,对吧?

其实厂商宣传他们自己的工具,或者一些人写出来真正有用的东西来帮助他们谋生,都没有任何问题。工具在世界上总占有一席之地,创作者们也是如此。但是面对那些专门盯上不能有效地从真正有用的建议中分辨出那些明显胡扯内容的初级或者入门工程师的不良分子来说,要提高警惕。

致谢

在翻译本文的过程中,特别感谢 Ricky Li 的改进建议。