11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

在我的职业生涯中,没有一种技能比 SQL 更有用!

  • 2019-02-16
  • 本文字数:3374 字

    阅读完需:约 11 分钟

在我的职业生涯中,没有一种技能比SQL更有用!

创业公司 CitusData(CitusData 是一家将 PostgreSQL 商业化的初创企业,也是 PostgreSQL 社区领导者,不久前被微软收购)的云产品负责人 Craig Kerstiens 近日发文表示,在他十多年的职业生涯中学到了很多技能,但没有一种技能比 SQL 更有用。他的文章在 Hacker News 上引起了热烈讨论,截至发稿之时已经收到 779 个点赞、372 条评论,网友纷纷表示:SQL 一直以来确实被严重低估了。下面就让我们一起来看一下 Craig 是怎么说的。


在我的职业生涯中,我学到了很多技能,但没有一种技能比 SQL 更有用。SQL 在我看来是最有价值的技能,因为:


  1. 它对于不同的职业角色和学科来说都是有价值的;

  2. 一旦学会了就不需要重新再学;

  3. 它让你看起来像个超级英雄。一旦你掌握了它,而其他人不懂,你就显得特别强大。


让我进一步探讨这些问题。


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/


2019-02-16 13:465197
用户头像

发布了 38 篇内容, 共 29.2 次阅读, 收获喜欢 205 次。

关注

评论

发布
暂无评论
发现更多内容

Committer 郭吉伟专访:做开源不是搞慈善,用开源也不是薅羊毛

Apache Pulsar

开源 架构 云原生 中间件 Apache Pulsar

Tcp网络模型

你?

只有天空才是你的极限,我们热爱探索的过程并沉浸其中丨图数据库 TiMatch 团队访谈

PingCAP

ReactNative进阶(二十四):react-native-scrollable-tab-view 标签导航器组件详解

No Silver Bullet

1月月更 ReactNative 标签导航

Spring的底层实现机制

编程江湖

Spring JPA

架构训练营 week5 课程总结

红莲疾风

「架构实战营」

模块 5 作业

miliving

设计模式【11】-- 搞定组合模式

秦怀杂货店

Java 组合模式

带你读AI论文丨RAID2020 Cyber Threat Intelligence Modeling GCN

华为云开发者联盟

网络威胁情报 CTI 异构信息网络 GCN HINTI

博文推荐|深入解析Apache BookKeeper 系列:第一篇 — 架构原理

Apache Pulsar

开源 架构 云原生 中间件 Apache Pulsar

SIG技术直播来了!技术专家教你,如何使用 iLogtail 采集可观测数据?

OpenAnolis小助手

Linux 开源 数据 直播 采集

社区知识库|常见问答 FAQ 集合第 4 期:消息保留及延迟、Broker、Pulsar 权限等相关问题

Apache Pulsar

架构 云原生 开源社区 消息中间件 Apachepulsar

博文推荐|Apache Pulsar: 统一消息流平台

Apache Pulsar

开源 云原生 broker Apache Pulsar 消息中间件

大数据开发之Flink SQL建设实时数仓实践

@零度

大数据 flink sql

社区知识库|常见问答 FAQ 集合第 2 期:Topic 配置、ACK 等问题的解决

Apache Pulsar

架构 云原生 Apache Pulsar 开源社区 消息中间件

社区知识库|常见问答 FAQ 集合第 3 期:Topic 数量、Broker 设置等相关问题

Apache Pulsar

分布式 云原生 Apache Pulsar 开源社区 消息中间件

1月月更|推荐学java——Spring集成MyBatis

逆锋起笔

mybatis ssm Spring Framework spring aop spring+mybatis

Spring中部署Activiti流程定义的三种姿势

华为云开发者联盟

spring 工作流 Activiti流程 Activiti框架 Activiti Explorer

2022AJAX常见面试题分享

编程江湖

ajax

HarmonyOS工程【鸿蒙开发02】

坚果

鸿蒙开发 1月月更

Go 语言快速入门指南:Go 结构体

宇宙之一粟

Go 语言 结构体 1月月更

web技术分享| 白板SDK之函数和方程式的运用

anyRTC开发者

前端 音视频 视频会议 白板 web技术分享

Flume日志采集框架构成组件

编程江湖

flume

鸿蒙开发初体验【鸿蒙01】

坚果

鸿蒙 1月月更

低代码实现探索(二十四)业务的领域可视化构思

零道云-混合式低代码平台

Linux之date命令

入门小站

Linux

在线XML转HTML工具

入门小站

工具

HTTP跨域小结

wong

nginx HTTP cros

Form 表单在数栈的应用(下):深入篇

数栈DTinsight

前端

详解 Flink 中 Time 与 Window

五分钟学大数据

flink 1月月更

前端开发之样式调试

@零度

前端开发

在我的职业生涯中,没有一种技能比SQL更有用!_文化 & 方法_Craig Kerstiens_InfoQ精选文章