做者 | Craig Kerstiens前端
译者 | 阿拉丁git
创业公司 CitusData(CitusData 是一家将 PostgreSQL 商业化的初创企业,也是 PostgreSQL 社区领导者,不久前被微软收购)的云产品负责人 Craig Kerstiens 近日发文表示,在他十多年的职业生涯中学到了不少技能,但没有一种技能比 SQL 更有用。他的文章在 Hacker News 上引发了热烈讨论,截至发稿之时已经收到 779 个点赞、372 条评论,网友纷纷表示:SQL 一直以来确实被严重低估了。下面就让咱们一块儿来看一下 Craig 是怎么说的。程序员
在个人职业生涯中,我学到了不少技能,但没有一种技能比 SQL 更有用。SQL 在我看来是最有价值的技能,由于:sql
让我进一步探讨这些问题。数据库
1 SQL 是一个能够处处使用的工具编程
不管你扮演的是什么样的职业角色,总能从 SQL 中找到一种方式让你的生活变得更轻松。做为一名产品经理,我要查看数据,分析产品的有效性以及制定产品路线图。若是咱们刚刚发布了一个新功能,那么是否有人使用过新功能的相关数据极可能被保存在关系数据库中。若是我正在关注一些关键性业务指标(例如月增加),那么这些数据极可能就存在某个关系数据库中。咱们面对的多是一个支持 SQL 的记录系统。知道如何以最原始的方式访问它能够为我节省大量的精力,由于我不须要再向其余人索要这些业务指标数据。后端
在成为产品经理以前,我已经在使用 SQL 来了解系统内部发生了什么事情。对于工程师来讲,使用 SQL 一般能够更快地获取想要的信息。当 Web 应用程序的运行速度变慢时,了解应用程序中运行的 SQL 以及如何优化它是不可或缺的技能。固然,这超出了对 SQL 基本了解的范畴……但为了加快查询而添加索引而不是去折腾缓存,仍是很是值得花费额外的时间去学习的。缓存
2 SQL 是永久不变的数据结构
记得大约在 20 年前,我建立了第一个网页。当时以为这是一件很是神奇的事情,而后我加入了一些 JavaScript 代码,提示用户点击是否选项或输入一些东西。大约 10 年后,jQuery 出现了,虽然它有时候比较冗长,并且还须要学习一些新东西,但整体来讲,它让一切变得更好了,因此我决定花时间学习 jQuery。而后是 Angular、React、Ember,直到如今,我已经有了一个完整的管道,能够将基本的 JavaScript 代码引入到个人网站中,但现实倒是我如今仍然在努力实现 20 年前的事情,就是让用户单击是否选项。架构
但 SQL 却几乎没有真正发生什么变化。但须要注意的是,它其实已经发生了一些变化——有了现代的 SQL(https://modern-sql.com/),但我仍然认为它不如其余语言那么引人注目。每隔几年就会出现一个新标准,偶尔还会出现一些新的东西,好比对窗口函数或 CTE(公用表达式)的支持,但 SQL 的基础是永久不变的。学习 SQL 一次,就能够在你的职业生涯中重复使用它,不须要再从新学习。但不要误解了个人意思,我其实很喜欢学习新东西,但我会选择学习一些真正有用的新东西,而不只仅是另外一种完成一样任务的方法。
3 SQL 让你看起来像个超级英雄
SQL 是一个被低估的技能,大多数应用程序开发人员不肯意去学它。由于不多有人真正了解 SQL,因此你的 SQL 技能可能看起来比实际的更优秀。过去,在一家拥有数百名工程师的公司里,无论是初级工程师仍是高级工程师,他们每周都有好几回会问我这个问题:“嘿,你能告诉我怎么写好这个查询吗?”由于你擅长其余人不擅长的事情,你就能够为他们提供帮助,而当你向他们寻求帮助时,你的生活会变得更轻松。
因此,若是你还不精通 SQL,那么还在等什么,你想让本身看起来像一个 SQL 蠢货吗?
4 外网网友怎么看?
网友 slap_shot:
SQL 是我所知道的最神奇的概念之一。它已经有近五十年的历史,并且没有被其余东西替代的迹象。咱们已经建立了无数种技术来存储和处理数据,但彷佛老是尝试在这些技术中从新实现 SQL(例如 Hive、Presto、KSQL,等等)。
我经营着一家为企业构建分析基础架构的初创公司。咱们很是重视 SQL,也很是赞同 Craigs 的这篇文章,它比以往任什么时候候都更加真实。
与典型的软件工程师相比,分析师和数据科学家在企业中编写的 SQL 代码愈来愈多。
MMP 数据仓库(redshift、bigquery、snowflake 等)的出现使得即便是预算最有限的公司也可以使用 SQL 来存储和查询大量数据。SQL 比以往任什么时候候都更强大,更有价值。
若是你仔细研究一家典型的企业,你会发现大多数软件工程师并不擅长 SQL。他们为何要擅长 SQL 呢?大多数复杂的查询都是分析查询。ORM 已经提供了大多数本来须要经过应用程序代码来实现的基本函数。
或许与 Craig 的观点不一致的地方在于咱们已经为大部分后端工程师、前端和移动端工程师抽象了 SQL。你能够成为一名优秀的开发人员,尽管对 SQL 不太了解。
另外一方面,大量“数据工程师”拥有初级或中级的 HDFS、流式数据或其余各类 NoSQL 技术的知识。他们一般比初级工程师对原始 SQL 了解得更少,由于 SQL 通常排在他们的大数据工具以后。
如今彷佛精通 SQL 的人很少,若是你真的了解 SQL,那么你就拥有了巨大的力量。
网友 redicalbyte:
若是你能理解 SQL,它会让你大吃一惊。你须要从多个角度考虑事情,就像函数式编程范式或递归,一旦你真正“了解它”,你就会以为本身像个绝地大师。
惋惜的是,绝大多数 SQL 用户并不那么精通。要精通 SQL 很难,由于只能经过长时间的实战才能掌握好它,并且须要应付足够复杂的数据模型。
若是不是由于在前两份工做中天天都处理数据模型,我可能永远不会精通 SQL。
网友 grigjd3:
做为一名后来才开始学习 SQL 的软件工程师,我很是不一样意这种观点。在某些方面,SQL 是一门很是好的语言,它比 Python 或 Scala 等工具更容易用来探索和操做数据。但这并不意味着 Python 或 Scala 就很差,但我确实看到有一些问题很是适合使用 SQL 接口来解决。
网友 neokanitian:
“学习 SQL 一次,就能够在你的职业生涯中重复使用它,不须要再从新学习”。
与其余抽象概念同样,SQL 是数学理论的实际表达。SQL 使用 Zermelo-Fränckel(ZF)集合论来推理数据集。
虽然咱们很容易对随意作的事情(其实是随意试错)提出尝试性的实现,但众所周知,要开发出 ZF 这样的系统公理化是很是困难的。数学不会改变,并且很难被战胜。这就是为何基于数学的知识和技能能够跨越整个职业生涯而不须要从新学习。
当 David Child 在 1968 年 3 月的论文“一组理论数据结构的描述”中解释说程序员可使用集合理论表达式而不是经过导航固定结构来查询数据时,SQL 迈出了第一步。1968 年 8 月,Childs 发表了“集论数据结构的可行性。一种基于重构集合理论定义的通常性结构”。
1970 年,Ted Codd 在其著名的论文“大型共享数据库数据的关系模型”(ACM 通信,第 13 期,1970 年 6 月 6 日)中明确提出,依赖集合理论构造的数据独立性是关系模型的主要目标之一。
基于 Codd 的工做,IBM 的 Donald Chamberlin 和 Raymond Boyce 在 20 世纪 70 年代早期开发了后来成为 SQL 的东西。
网友 JimmyAustin:
我在大学毕业后加入了一家咨询公司(这家公司足够大,大家应该知道它)的分析团队,他们使用的是 MS SQL Server。
数据清理? 使用 SQL。特征工程?使用 SQL。
存储过程管道被存储在其余存储过程当中。其中一些存储过程太过复杂,以致于它们输出了包含 700 多个特征的表,查询代码有几百行那么长。
每一个输入、存储过程和输出都有时间戳,所以修改一个脚本须要修改其下游的每一个存储过程。我要求使用 git 的呼声没有受到重视(须要提高团队中每一个人的技能)。
这多是我生命中最糟糕的一年。到最后,我使用 T-SQL 构建了一个能够生成 T-SQL 脚本的框架。在项目的最后一周(每周 60 到 70 小时),项目的合做伙伴看到使用这个框架编写的存储过程,要求将它们所有转换回原始 SQL。几个星期后,我换了个团队。
这件事情的惟一好处是,我如今很擅长 SQL。它确实是一个很是强大的工具,更多的开发者应该使用它。
网友 hardwaresofton:
在我看来,SQL 是有史以来在关系数据库方面发明和普遍实现的最强大的查询语言。每当看到有人从新发明本身的查询语言时,我几乎老是嗤之以鼻(就像他们要发明本身的配置语言)。
Prometheus 和 GraphQL 是最明显的例子。
Kafka 意识到了这一点,基于他们本身的东西来提供 SQL 功能,也就是 KSQL。
英文原文:
http://www.craigkerstiens.com/2019/02/12/sql-most-valuable-skill/
昊合数据整合平台HaoheDI(http://www.haohedi.com),会用SQL就能垂手可得搞定ETL。