编程语言为何消亡:不够有趣
Because It's Not Fun Enough: why languages fail
Andrew Oram 探讨编程语言兴衰时指出,技术优劣并非决定性因素。Simon Peyton Jones 认为,语言的成败更多取决于社会和经济因素。编程对开发者而言既是职业、艺术也是工作,任何让这三者变得艰难的语言终将被淘汰。C++ 和 Rust 虽难却因高回报而长存,Ada 和 Pascal 则因缺乏乐趣或实用性而衰落。语言的生死不在于基准测试,而在于是否让人愿意使用。当替代方案出现,唯一的问题是:它有趣吗?
编程语言不会输掉基准测试,它们输掉的是人心。
HN 评论区
138- jillesvangurp
一门语言的价值远不止语法。库、工具以及开发者生态(文档、支持等)要重要得多。有不少学术界的语言挺有意思,却从未真正流行起来,因为背后的团队从未致力于构建完善的生态。
切换语言需要投入大量时间。至少过去是这样。现在有了 AI 编程工具,我在大多数语言中都能迅速上手,所以我对换语言的态度更开放了。但即便如此,学习一门语言、它的惯用法、它的做事方式,以及所有的工具、库和框架等,依然是一项时间投资。这不是一件下午就能搞定的事,更不可能在项目中途进行。
人们倾向于选择那些看起来安全、能经得起未来考验的语言。既然要投入这么多精力去学习,你自然希望这是一笔好投资。成功的语言通常拥有大量用户、不错的工具、优质的库等。或者至少,它们背后看起来有一群认真的人在支撑。很多人在职业生涯早期就做出了这种选择,然后一直坚守。我认识不少和我同龄的人,至今还在用 Java。因为那是他们二十多岁时学的。我现在 51 岁了。
Rust 就是一个很好的例子:它很难学,但因为背后有一群靠谱的团队,所以成功站稳了脚跟。它不仅仅是一个学术练习:Mozilla 当时正试图……
- thataccount
我对此表示强烈反对。学习语言,在某个阶段,总是枯燥乏味的。无论是计算机语言,还是像希腊语这样的自然语言,总会有一个时刻让你开始“苦行”。人们之所以愿意“苦行”,是因为他们心中有个目标,这让他们能够忍受这个过程直到目标达成。乐趣来源于不必重复解决同一个问题六十次,或者不必手动整理百万个文件,而程序只需 3 秒就能搞定。
- Zak
我原本指望文章会提到 Lisp。
Lisp 很有趣。Lisp REPL 的交互性和即时反馈,至今鲜有其他语言能与之匹敌。Common Lisp 还解决了一个其他语言直到很久以后才妥善处理的重要问题:在千禧年之际,能够在廉价的硬件上编写运行速度很快的高级代码。
但 Lisp 在千禧年之际并没有流行起来。像 Naughty Dog、ITA 和 Viaweb 这样的成功案例寥寥无几,当时占主导地位的语言似乎是 Java 和各种以字母 P 开头的脚本语言。
- mojuba
以上说的都对,但我有个私人的理论:语言的兴起往往依赖于一两个推动整个行业前进的“杀手级特性”,而不是整体的可爱度或讨喜程度。
我可以列出每种流行语言的一个杀手级特性,也就是这些语言率先引入并影响了众多后继者的东西:
C: 极致的简洁
C++: 隐式析构函数 / RAII
Python: 去掉了花括号
Java: 极致的可移植性
JavaScript: 呃……
PHP: 设计上就嵌入在 HTML 中
Rust: 编译时的内存管理
Swift: 结构化并发(6.0 之前可能纯粹是靠可爱)
等等。
- rzwitserloot
再补充几个影响局势的冷门案例。请记住,默认情况下,新语言都会失败。要成功,许多因素必须同时完美配合,这意味着不存在单一要素,只要做对了就能保证语言成功(恰恰相反:如果关键因素中哪怕有一个错了,它大概率就会失败)。
* 这只是个猜测,但 Java 成功的一个关键因素(如果没有这个,它就不会成功)是:它尽可能地在任何地方都宗教般地复制 C 的风格。这给语言本身造成了一些伤害,过去十年里它才修复了一些(比如 `switch` 的风格和行为非常怪异——但它却宗教般地完全遵循了 C 中的工作方式!)
* 有些语言的失败部分归因于社区氛围。Scala 的核心社区以高度激进和精英主义而闻名,或者委婉点说,他们“对编程概念理解有限的新手不够包容”,这远非最优状态。此外,与 Java 生态不同,他们愿意迅速停止对某些功能的支持,这意味着:在现实生活中真正使用 Scala 作为基础,要么你是在维护一个无可救药的过时代码库,要么你几乎每隔几个月就得花时间重构它。Scala 的采用率正在下降,从未达到过它曾经被吹捧的未来。
* 如果一门语言是“原生于某个平台”的……
- asa400
很遗憾,许多有着有趣故事的语言要么被一笔带过,要么被完全遗漏。
Clojure 是对 Java 那种无聊笨拙的彻底革命,如今许多企业正悄悄靠它赚钱。Hickey 甚至明确地用学习拉小提琴的语境,评论了专业性问题(即 OP 讨论的 Rust 和 C++ 是否值得学习)。
Ruby 宣称自己的一切都是关于“程序员的幸福感”,虽然可能不是专门针对 Java 的反叛,但它吸引了大量对 Java 感到倦怠的人,这些人后来用 Ruby 创立了数千家初创公司。Ruby 在 Web 应用领域依然巨大,Rails 相比许多替代方案依然极受欢迎。
Scala 与上述例子类似,是一种带有 Haskell 风味的类 Java 语言,它从学术实验室中逃逸出来,因为用它写了 Spark,从而在 2010 年代意外席卷了“大数据”热潮。如果你当时在场,Scala 那时确实火得一塌糊涂。
当然还有其他例子,但我发现 OP 中的例子只是对过去 20 年里经历了绝对爆炸式多样性和创新性的领域进行了相对表面的分析。
- nyeah
> 那段引文就是文章的核心,令人有点惊讶的是它被埋得这么深
在 2026 年这真的令人惊讶吗?如今的网络写作风格主要不是为了沟通,而是为了尽可能长时间地让读者保持“参与”。读者的时间是一种需要被榨取的资源。
我绝对不是在针对这位作者个人。这是整个网络的写作风格。
- npn
同意。我觉得人们往往忘了:
你不必只选一门语言。为了某个单一库而使用另一种语言是微不足道的。有很多通信方式,方法调用并不总是硬性要求。
既然不必只选一门语言,那么该语言的“杀手级特性”大多也就没什么用了。即使没有其他语言拥有类似特性,人们也会写一些胶水代码将其与主代码库桥接起来。而且通常,根本不存在只有单一语言才有的独特特性。当然,对于某些用例,在该语言中实现可能更容易,但即便如此,一个桥接文件通常就足够了。也就是说,没人会为你的语言投资。
写软件大多是在使用别人的库。我们写得最多的是一些通用的业务逻辑,因此语法格外重要,或者说,开发者体验(DX)才是最重要的。天哪,如果体验足够好,我甚至愿意花几千个小时自己写库/框架,这(通常)并不难。
看到新推出的语言在语法上完全是 Rust 或 C 的复制品,总是让我很反感。谢谢,如果你连语法都不愿意思考,我们凭什么相信你能带来真正的创新?