你该学 Python、Java 还是 Rust?美国开发者 Madhadron 给出的答案很不“培训班”:先别盯着语法表,真正决定学习成本的,是语言背后的思维母体。按照他的划分,当代软件世界大致建立在七种“ur-language(母语言)”之上:ALGOL、Lisp、ML、Self、Forth、APL 和 Prolog。
这套说法重要,不在于它又发明了一种程序员分门别类的方法,而在于它提醒了一个被入门教程长期忽略的事实:从 Python 切到 Java,往往只是口音变化;从 Java 切到 Haskell、Prolog 或 APL,才更像在换脑回路。对个人学习和企业招聘来说,这是比“哪门语言更流行”更接近本质的问题。
七种“母语言”,不是语法分类,而是思维分类
Madhadron 的核心观点很简单:很多语言表面不同,底层却共享同一套表达模式。比如 C、Java、Python、JavaScript 这些主流语言,大都属于 ALGOL 传统,程序由赋值、条件、循环、函数组成。你会写 for 循环、会拆函数,切换语言时不会伤筋动骨。
真正的门槛,出现在模式变了的时候。ML 系语言把递归和类型推导当成日常工具;Lisp 把“代码也是数据”做成宏系统;Prolog 不是告诉机器怎么做,而是告诉它什么是真的,再让运行时去搜索答案;APL 则把数组运算压缩成符号组合。作者把这七类视为现代软件中的“母语”,这个提法不算严格学术分类,但非常适合解释一个现实:为什么很多资深工程师会多门语言,却仍然会在某一类新语言前明显失速。
| 母语言 | 核心思维 | 代表语言 | 转换难度判断 |
|---|---|---|---|
| ALGOL | 指令、流程、函数 | C、Java、Python、JavaScript、C# | 主流开发者最熟悉 |
| Lisp | 宏、代码即数据 | Common Lisp、Scheme、Clojure | 适合做语言扩展 |
| ML | 函数、一等函数、类型推导 | SML、OCaml、Haskell、Idris | 对类型与抽象要求高 |
| Self | 对象与消息传递 | Smalltalk、Self、部分 JavaScript | 影响现代 OOP 深远 |
| Forth | 栈与极简组合 | Forth、PostScript、Factor | 适合嵌入式和特定系统 |
| APL | 数组整体运算 | APL、J、K | 短小强悍,学习曲线陡 |
| Prolog | 事实、规则、搜索 | Prolog、Mercury、Kanren | 接近数据库与推理思路 |
这件事真正重要的地方,在教育和工程现场
程序设计教育长期有一个误区:把“学语言”当成背关键词、记框架、做题库。作者这篇文章的价值,在于把焦点从工具名转回到抽象能力。很多高校和培训机构虽然课程名不同,实际仍在 ALGOL 一条线上打转:C、C++、Java、Python 轮番上阵,学生看起来学了很多,思维却没有离开命令式编程。
问题也恰恰在这里。今天工业界已经在悄悄吸收别的母语言成果。Rust 的模式匹配和代数数据类型,TypeScript、Kotlin、Swift 这些现代语言的类型系统增强,某种程度上都在向 ML 靠拢;JavaScript 的原型链历史上更接近 Self;数据库查询优化、规则引擎、约束求解,又经常借用 Prolog 式思路。也就是说,企业嘴上还在招“Java 工程师”,代码库里却越来越多地混入别的思想传统。只会一种母语言,职业上不一定立刻吃亏,但上升空间会很快碰到天花板。
一个很具体的事实锚点是,Java 虚拟机今天的性能神话,和 Smalltalk/Self 一脉相承。原文提到 Strongtalk 项目的研究成果,后来成为 HotSpot JIT 的基础。很多人把面向对象只理解成“写 class”,却不知道连现代运行时优化技术都部分来自 Self/Smalltalk 社区。这就是历史谱系的现实意义:它不只是学院派谈资,而是今天工具链的祖先图谱。
对开发者最有用的,不是七门都学,而是至少跨出去一次
如果你是学生或者转行者,这篇文章能帮你避开一个常见陷阱:把相近语言之间的切换,误认为自己完成了“广度积累”。从 Java 到 C#,从 Python 到 Ruby,当然有价值,但更多是生产效率上的迁移,不是思维升级。
更现实的学习建议反而很朴素:
- 主业在主流工程栈,先扎稳 ALGOL 系
- 至少补一门 ML 或 Lisp,训练抽象能力
- 做数据、金融、科研的人,可以接触 APL 系思维
- 做规则系统、编译器、类型系统的人,值得摸一遍 Prolog
企业管理者也能从这套框架里得到一点提醒。很多团队在招人时,过度强调“必须有某某语言三年以上经验”,其实是在把语法熟练度当成能力本身。对一线业务开发,这种筛选有效;但对基础架构、编译器、AI 工具链、数据库内核等岗位,候选人是否跨过母语言边界,往往比是否写过某个具体框架更关键。近两年 AI 编程工具流行后,这个判断更重要了:Copilot、Cursor 一类产品能帮你补语法,却很难替你建立新的问题建模方式。
这套分类有启发,但别把它当成新教条
原文最容易让人点头的地方,也是它最需要补充约束的地方:它强调“思维母体”,但弱化了工程生态。现实中,开发者选择语言时还要考虑岗位数量、现有代码库、招聘市场、团队维护成本。你知道 Prolog 很优雅,不代表你的公司愿意把核心业务系统押上去。日本上世纪 80 年代“第五代计算机”项目曾重押 Prolog,最后并没有改写产业格局,这就是典型历史参照。
这篇文章还有一个边界:它把谱系讲得很清楚,却没有完整覆盖近二十年的混血趋势。Rust、Scala、Elixir、Julia 这类语言,很难老老实实塞进单一祖谱。现代语言设计越来越像拼装车,而不是纯血家族。作者也承认很多语言会不断吸收其他母语言特征。我的判断是,这七类仍然足够解释“学习迁移成本”,但已经不太适合直接预测“哪门语言会赢”。后者更多取决于生态、资本投入、标准库、招聘需求和平台支持。
公开说法常常是“语言不重要,思想最重要”;行业现实却是“思想决定上限,生态决定饭碗”。把这两件事分开看,才不会学偏。
