在我的职业生涯中,没有一种技能比 SQL 更有用!
作者 | Craig Kerstiens
译者 | 阿拉丁
创业公司 CitusData(CitusData 是一家将 PostgreSQL 商业化的初创企业,也是 PostgreSQL 社区领导者,不久前被微软收购)的云产品负责人 Craig Kerstiens 近日发文表示,在他十多年的职业生涯中学到了很多技能,但没有一种技能比 SQL 更有用。他的文章在 Hacker News 上引起了热烈讨论,截至发稿之时已经收到 779 个点赞、372 条评论,网友纷纷表示:SQL 一直以来确实被严重低估了。下面就让我们一起来看一下 Craig 是怎么说的。
在我的职业生涯中,我学到了很多技能,但没有一种技能比 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。
在我的职业生涯中,没有一种技能比 SQL 更有用!的更多相关文章
- postgres中几个复杂的sql语句
postgres中几个复杂的sql语句 需求一 需要获取一个问题列表,这个问题列表的排序方式是分为两个部分,第一部分是一个已有的数组[0,579489,579482,579453,561983,561 ...
- 在SQL中取出字符串中数字部分或在SQL中取出字符部分
在SQL中取出字符串中数字部分或在SQL中取出字符部分 编写人:CC阿爸 2013-10-18 近来在开发一个项目时,一包含数字的字符串,需要取出中间的数字部分进行排序.经过baidu搜索.并结合自己 ...
- 【转】Oracle中如何用一条SQL快速生成10万条测试数据
转自http://blog.csdn.net/welken/article/details/4971887 做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入, ...
- 将EXCEL中的列拼接成SQL insert插入语句
工作中经常需要将EXCEL文件中的数据导入到各种数据库,但是对于不熟悉数据库的人来说,如果直接使用命令执行导入,这无疑是一个难题,也是一个风险.这里我们直接在EXCEL文件中拼接成标准的SQL ins ...
- SQL Server中存储过程比直接运行SQL语句慢的原因
原文:SQL Server中存储过程比直接运行SQL语句慢的原因 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1. 存储过程只在创造时进行编译即可,以 ...
- 理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(5)--案例:如何应对参数嗅探 我们抛开参数嗅探的话题,回到了本系列的最 ...
- 理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(1)--简介 本文介绍SQL Server如何编译存储过程并使用计划缓存 ...
- 第87节:Java中的Bootstrap基础与SQL入门
第87节:Java中的Bootstrap基础与SQL入门 前言复习 什么是JQ? : write less do more 写更少的代码,做更多的事 找出所有兄弟: $("div" ...
- mybatis中_parameter使用和常用sql
mybatis中_parameter使用和常用sql mybatis中_parameter使用和常用sql 在用自动生成工具生成的mybatis代码中,总是能看到这样的情况,如下: <sel ...
随机推荐
- 使用 Azure CLI 2.0 从自定义磁盘创建 Linux VM
本文说明如何在 Azure 中上传自定义的虚拟硬盘 (VHD) 或复制现有 VHD,并从自定义磁盘创建 Linux 虚拟机 (VM). 可以根据要求安装并配置 Linux 分发版,并使用该 VHD 快 ...
- wcf 配置与代码创建
<behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <s ...
- python 中的list&tuple
list Python内置的一种数据类型是列表:list>>> classmates = ['Michael', 'Bob', 'Tracy']>>> classm ...
- Hibernate初探之一对多映射 及 myeclipse自动生成hibernate文件方法
实现单向一对多: 1)在one方的实体中添加保存many方的集合 2)在one方的配置文件中添加<one-to-many>配置 实现单向多对一: 1)在many方的实体中添加one方的引用 ...
- mangodb驱动编译
1.Installing the MongoDB C Driver (libmongoc) and BSON library (libbson) Building on Windows with Vi ...
- PHP5.5的新特性
看了@轩脉刃 今天出炉的PHP 5.5 新特性.不过没有翻译全,我这里稍微补充下,整理成完整的一篇:) 原文:http://www.php.net/manual/zh/migration55.new- ...
- Quarzt定时调度任务
简介 Quarzt是一个项目中定时执行任务的开源项目,Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独 ...
- 在Vue-cli项目中引入Bootstrap
(1)到bootstrap官网下载所需版本的bootstrap.zip文件. (2)将bootstrap.min.css以及bootstrap.min.js解压到assets文件夹,另外还需要将fon ...
- 入门学习webpack笔记
注意事项: 1.预热知识:前端模块化.commonJS最好提前了解.commonJS语法最好熟悉. 2.commonJS中,module表示当前模块,module.exports(或者exports) ...
- webstorm window找不到文件'chrome'
1.打开webstorm设置: File->Settings->Tools->Web Browsers->更改谷歌浏览器的Path(获取方式:谷歌浏览器的快捷键->右键- ...