掌握SQL一次,受用三十年
速览
SQL作为关系型数据库的标准查询语言,自诞生以来一直是数据领域的基石。尽管新技术层出不穷,但SQL因其简洁性和通用性,依然保持着极高的行业地位。对于数据从业者而言,精通SQL意味着拥有跨越技术周期的核心竞争力,能够长期受益于这一基础技能。
AI 深度解读
一次学会 SQL,三十年受用不尽:唯一基于数学而非潮流构建的编程语言
背景
在技术迭代以“月”甚至“周”为单位的今天,软件开发者面临着巨大的认知负荷。前端框架的更迭、后端语言的范式转移、以及工具链的不断重构,使得“学习新事物”成为职业生涯的常态。然而,有一种语言却打破了这一规律:它诞生于上世纪 70 年代,历经三十多年的技术变迁,其核心语法和心智模型几乎未曾改变。
这篇文章源自 Hacker News 社区的一篇热门讨论,作者通过对比 SQL 与 JavaScript 生态系统的稳定性,提出了一个核心观点:SQL 是开发者唯一可以“一次学习,终身受用”的编程语言。 这种持久性并非源于怀旧,而是源于其底层根基——数学。
核心内容
跨越三十年的语法稳定性
文章开篇通过一个直观的实验展示了 SQL 的稳定性。如果你打开一本 1995 年的 SQL 教科书,找到如下查询语句:
SELECT department, COUNT(*) AS headcount
FROM employees
WHERE hire_date > '1994-01-01'
GROUP BY department
HAVING COUNT(*) > 5
ORDER BY headcount DESC;
将其粘贴到 2026 年的 PostgreSQL 18 数据库中,它不仅能完美运行,而且结果完全一致。语法没变,结果没变,开发者所需的心智模型也没变。三十一年间,零变化。
相比之下,JavaScript 生态则呈现出剧烈的动荡。如果尝试运行一个 2015 年的 React 组件(使用 React.createClass、mixins 和 componentWillMount),代码不仅看起来过时,更会在加载瞬间抛出 TypeError: React.createClass is not a function。为了使其在现代环境中运行,必须从头重写。短短十年间,React 框架就已经经历了三种不同的心智模型迭代。
作者分享了自己的职业经历:在十五年的职业生涯中,曾在五家公司工作,但第一家公司学到的查询模式,在最后一家公司依然有效。在他的技术栈中,没有任何其他语言具备这种特性。
数学 vs. 潮流:稳定性的根源
SQL 之所以能 enduring(持久),是因为关系代数(Relational Algebra)是数学,而数学没有发布周期。
- SQL 的基石:Edgar Codd 于 1970 年形式化了关系代数。SQL 建立在它之上,作为一个声明式(Declarative)接口。你只需描述“你想要什么”,数据库引擎决定“如何获取它”。引擎每年都在改进性能,但你的查询语句保持不变。
- JavaScript 的现状:JavaScript 是一种命令式(Imperative)语言,其发展受到浏览器战争、框架趋势和开源维护者偏好的重塑,每隔几年就会发生巨大变化。它奖励那些紧跟潮流的人。
- 核心差异:大多数语言奖励你追逐“下一个新事物”,而 SQL 奖励你“安坐不动”。
对开发者的建议:值得投入的 40 小时
对于初级开发者,作者认为“真正学会 SQL”是你能花费的最有价值的 40 小时。这指的不是简单的教程或 ORM 工具,而是真正的 SQL 核心概念:连接(joins)、子查询(subqueries)、窗口函数(window functions)以及查询计划(query plans)。这种投资将在你未来的每一份工作、每一个技术栈中,在数十年间持续回报。在软件领域,几乎没有任何其他技能拥有如此长的“半衰期”。
SQL 的代价:向后兼容的“疣”
对于高级开发者而言,这种稳定性是有代价的。SQL 积累了四十年的“瑕疵”(warts),难以轻易摆脱:
- NULL 的陷阱:NULL 引入了三值逻辑,打破了大多数新用户直觉。
- GROUP BY 的冗余:强制要求重复列名列表,且往往没有充分的理由。
- 日期处理的混乱:不同数据库厂商的日期处理方式是各自为政的混乱局面。
- 方言碎片化:每个数据库都有自己的方言,而所谓的“标准”是一份 4000 页的文档,没有任何单一实现能完全遵循。
这些是 SQL 在几十年前做出的权衡结果:选择向后兼容性而非优雅性。SQL 拒绝破坏旧查询,从而保证了 1995 年的教科书至今有效。但这种固执也意味着这些“瑕疵”将永远存在。
关键要点
- 唯一性:SQL 是开发者唯一可以“一次学习,三十年受用”的编程语言,无需重写心智模型。
- 数学根基:SQL 基于 1970 年确立的关系代数,数学没有发布周期,因此 SQL 具有极高的稳定性。
- 对比鲜明:与 JavaScript 等受框架趋势和浏览器战争驱动、每几年就发生范式转移的语言不同,SQL 奖励“安坐不动”的学习者。
- 高投资回报:花费 40 小时深入掌握 SQL 核心概念(连接、子查询、窗口函数等),其职业回报周期长达数十年。
- 稳定性的代价:为了保持向后兼容性,SQL 保留了大量历史遗留问题(如 NULL 逻辑、方言差异、日期处理混乱),这些是追求优雅性所必须付出的代价。
- 实用主义:大多数编程语言鼓励追逐新技术,而 SQL 鼓励掌握已有且经过时间验证的知识。
意义与影响
这篇文章不仅是对 SQL 价值的重申,更是对当前软件开发文化中“唯新主义”的一种反思。
- 重新评估基础技能的价值:在追逐 React、Vue、Next.js 或各类微服务框架的热潮中,文章提醒开发者回归基础。SQL 作为数据交互的通用语言,其底层逻辑的稳定性使其成为技术栈中最可靠的锚点。
- 长期主义的学习观:在技术快速迭代的背景下,选择那些具有长半衰期(Long Half-life)的技能进行投资,是应对职业不确定性的最佳策略。SQL 证明了,基于数学和逻辑的基础设施,比基于商业竞争和营销潮流的应用层框架更具生命力。
- 对工程权衡的清醒认知:文章没有神化 SQL,而是客观指出了其因向后兼容而积累的缺陷。这提醒高级开发者,在享受稳定性的同时,必须具备处理复杂方言、优化查询计划以及规避 NULL 陷阱的专业能力。
总之,SQL 的存在证明了在软件工程领域,“不变”本身就是一种强大的力量。对于希望构建持久职业生涯的开发者而言,深入理解并掌握 SQL,依然是性价比最高的投资之一。
