Simon Peyton Jones 有句话,藏在一篇讲编程语言兴衰的长文倒数第二段,像是随手一提:一门语言能不能被采用,跟它的技术优点关系很弱,真正拍板的是社会和经济因素。
这句话如果成立,过去几十年很多语言的“死因鉴定”方向都错了——大家总在争论语法优雅不优雅、性能快不快,却漏了真正决定生死的那道题。
这篇长文来自美国 Linux 专业协会(LPI),按结局把编程语言分成三类:C、C++、JavaScript算不朽,Java算半个;COBOL、FORTRAN、BASIC、Perl活得体面然后退休;Pascal、Objective-C、PL/I、Ada、Tcl起了个好头,没能真正接上。这套分类是作者的解读,不是行业共识,但提出的框架值得认真看。
这套框架直接关系到两类人:还在纠结学什么语言的程序员,和正在评估技术栈迁移的技术负责人。如果衡量标准只剩跑分和社区热度,两边都可能算错账。
三笔账,语言靠这个活或死
程序员对一门语言,同时在算三笔账:天职账(认不认同自己在做这件事,不给钱也愿意碰)、创作账(写它是不是一种手艺乐趣)、生计账(靠它吃饭会不会比该有的更累)。任何一笔长期算不平,语言迟早会被换掉,跟它技术上强不强关系不大。
| 语言 | 亏在哪笔账 | 具体表现 |
|---|---|---|
| 标准Pascal | 生计账 | 缺好用的字符串类型,日常写代码比该有的累 |
| Ada / PL/I | 天职账 | 强制标准指派使用,从没被真心选择过 |
| Perl | 生计账(岗位) | 岗位市场转向Python,没再回来 |
| Haskell | 天职账(反向证明) | 主动追求“不惜代价避免商业成功”,也确实做到了 |
这套分类来自作者的解读,不是采用率或岗位数据的实证结果。但它至少给了一个能追问的问题:一门语言要是在走下坡路,先问它输在哪笔账上,而不是先问它性能差在哪。
难度分两种,摩擦才是死刑
C++依然难,活得好。Rust故意设计得难,还在往上走。这看着打脸“难度决定生死”,其实是难度本身分两种。
| 难度类型 | 代表语言 | 特征 | 命运 |
|---|---|---|---|
| 乐器式难度 | C++、Rust | 精确、费劲,但学会就有回报(模板技巧、借用检查器) | 难度本身不致命,甚至是护城河 |
| 纯摩擦式难度 | Ada、COBOL、标准Pascal | 消耗时间,不兑换任何一笔账的回报(合规文书、缺失的基础组件) | 替代品一出现,最先被换掉 |
司马迁那句“天下熙熙,皆为利来;天下攘攘,皆为利往”,放在语言江湖里照样适用。程序员选语言,很少出于技术信仰,更多是哪条路当下最省力、最有回报。
这也是JavaScript、Objective-C活着的真正原因:不是赢了技术辩论,是换语言的代价太高。JavaScript在“创作”这笔账上从不占优,但浏览器只认它,没有第二个入口。Objective-C别扭了十几年,靠的是它是通往iOS开发最赚钱的那扇门,Swift一出现,几年内就让了位。
COBOL和Ada是同一逻辑的另一面。COBOL活着,是因为替换一套跑了几十年的核心系统,成本高到没人敢批预算;Ada活在强制认证的行业里,难度更像一份工作要求,不是个人选择。
Pascal的故事值得单独说一句:它不是简单失败。Borland的Turbo Pascal和Delphi在PC开发上统治过十几年,Delphi的作者安德斯·海尔斯伯格后来做了C#和TypeScript,沃斯自己那条线经Oberon流进了Go。Pascal没有消失,它被拆解重装,换了张脸继续活着——语言“衰落”和语言“消失”是两件事,别轻易划等号。
这对你意味着什么
对程序员:选语言前先算三笔账,别只看跑分和社区热度。一门语言如果长期在“创作”和“天职”账上让你没有成就感,只靠岗位需求撑着,这种依赖比技术债更脆——岗位需求一转向,技能不会自动续命。
对技术负责人:评估迁移别只算重写成本,也要算团队“愿不愿意”的成本。COBOL、Ada式的续命靠的是迁移贵,不是技术占优。一旦有人真把迁移成本做低——工具链成熟、AI辅助迁移、新人不愿学旧语法——存量系统的续命理由会突然失效,不是慢慢失效,评估要趁早,不要等到强制迁移那天。
接下来最该盯的变量,是迁移成本会不会被真正打破。Rust在安全关键、嵌入式领域确实在推进,但离真正接管Ada或COBOL的地盘还有明显距离,这仍是方向性判断,不是已经发生的事实。目前还看不到COBOL迁移成本被大规模做低的信号——这个信号一旦出现,才是COBOL续命逻辑失效的真正开始。
语言不败于难,败于没有回报的等——护城河挡得住技术委员会,挡不住换语言变便宜那天。
