创业公司 CitusData(CitusData 是一家将 PostgreSQL 商业化的初创企业,也是 PostgreSQL 社区领导者,不久前被微软收购)的云产品负责人 Craig Kerstiens 近日发文表示,在他十多年的职业生涯中学到了很多技能,但没有一种技能比 SQL 更有用。他的文章在 Hacker News 上引起了热烈讨论,截至发稿之时已经收到 779 个点赞、372 条评论,网友纷纷表示:SQL 一直以来确实被严重低估了。下面就让我们一起来看一下 Craig 是怎么说的。
在我的职业生涯中,我学到了很多技能,但没有一种技能比 SQL 更有用。SQL 在我看来是最有价值的技能,因为:
它对于不同的职业角色和学科来说都是有价值的;
一旦学会了就不需要重新再学;
它让你看起来像个超级英雄。一旦你掌握了它,而其他人不懂,你就显得特别强大。
让我进一步探讨这些问题。
SQL 是一个可以到处使用的工具
无论你扮演的是什么样的职业角色,总能从 SQL 中找到一种方式让你的生活变得更轻松。作为一名产品经理,我要查看数据,分析产品的有效性以及制定产品路线图。如果我们刚刚发布了一个新功能,那么是否有人使用过新功能的相关数据很可能被保存在关系数据库中。如果我正在关注一些关键性业务指标(例如月增长),那么这些数据很可能就存在某个关系数据库中。我们面对的可能是一个支持 SQL 的记录系统。知道如何以最原始的方式访问它可以为我节省大量的精力,因为我不需要再向其他人索要这些业务指标数据。
在成为产品经理之前,我已经在使用 SQL 来了解系统内部发生了什么事情。对于工程师来说,使用 SQL 通常可以更快地获取想要的信息。当 Web 应用程序的运行速度变慢时,了解应用程序中运行的 SQL 以及如何优化它是不可或缺的技能。当然,这超出了对 SQL 基本了解的范畴……但为了加快查询而添加索引而不是去折腾缓存,还是非常值得花费额外的时间去学习的。
SQL 是永久不变的
记得大约在 20 年前,我创建了第一个网页。当时觉得这是一件非常神奇的事情,然后我加入了一些 JavaScript 代码,提示用户点击是否选项或输入一些东西。大约 10 年后,jQuery 出现了,虽然它有时候比较冗长,而且还需要学习一些新东西,但总体来说,它让一切变得更好了,所以我决定花时间学习 jQuery。然后是 Angular、React、Ember,直到现在,我已经有了一个完整的管道,可以将基本的 JavaScript 代码引入到我的网站中,但现实却是我现在仍然在努力实现 20 年前的事情,就是让用户单击是否选项。
但 SQL 却几乎没有真正发生什么变化。但需要注意的是,它其实已经发生了一些变化——有了现代的 SQL(https://modern-sql.com/),但我仍然认为它不如其他语言那么引人注目。每隔几年就会出现一个新标准,偶尔还会出现一些新的东西,比如对窗口函数或 CTE(公用表达式)的支持,但 SQL 的基础是永久不变的。学习 SQL 一次,就可以在你的职业生涯中重复使用它,不需要再重新学习。但不要误解了我的意思,我其实很喜欢学习新东西,但我会选择学习一些真正有用的新东西,而不仅仅是另一种完成同样任务的方法。
SQL 让你看起来像个超级英雄
SQL 是一个被低估的技能,大多数应用程序开发人员不愿意去学它。因为很少有人真正了解 SQL,所以你的 SQL 技能可能看起来比实际的更优秀。过去,在一家拥有数百名工程师的公司里,不管是初级工程师还是高级工程师,他们每周都有好几次会问我这个问题:“嘿,你能告诉我怎么写好这个查询吗?”因为你擅长其他人不擅长的事情,你就可以为他们提供帮助,而当你向他们寻求帮助时,你的生活会变得更轻松。
所以,如果你还不精通 SQL,那么还在等什么,你想让自己看起来像一个 SQL 蠢货吗?
HackerNews 网友怎么看?
网友 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/
评论