创业公司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/