Glean 拾遗
Daily /2026-07-07 / Weird Languages

Weird Languages

Source www.paulgraham.com Glean’d 2026-07-07 15:16 Read 2 min
AI summary

Paul Graham argues that 99.5% of programming consists of gluing library calls together, and all popular languages are equally good at that. The remaining 0.5% is disproportionately interesting. The weirdness of languages like Lisp is not accidental; it points to techniques beyond glue programming—for example, Lisp macros let you first write a language for a problem domain and then write your application in that language. Learning weird languages expands your concept of what programming can be and teaches you to think thoughts you couldn't think before.

Original · 2 min
www.paulgraham.com ↗
§ 1

Weird Languages

奇怪语言

§ 2

When people say that in their experience all programming languages are basically equivalent, they're making a statement not about languages but about the kind of programming they've done.

99.5% of programming consists of gluing together calls to library functions. All popular languages are equally good at this. So one can easily spend one's whole career operating in the intersection of popular programming languages.

当人们说他们经验中所有编程语言基本等价时,他们不是在评价语言,而是在评价自己做过的那种编程。

99.5% 的编程工作只是拼接库函数调用。所有流行语言在这方面都同样出色。因此,一个人完全可以在流行语言的交集里度过整个职业生涯。

§ 3

But the other .5% of programming is disproportionately interesting. If you want to learn what it consists of, the weirdness of weird languages is a good clue to follow.

Weird languages aren't weird by accident. Not the good ones, at least. The weirdness of the good ones usually implies the existence of some form of programming that's not just the usual gluing together of library calls.

但剩下的 0.5% 却格外有趣。如果你想了解这部分编程由什么构成,奇怪语言的“奇怪”之处就是一个很好的线索。

奇怪语言并非偶然变得奇怪——至少好的那些不是。好的奇怪语言,其怪异通常暗示着存在某种不同于寻常库函数拼接的编程形式。

§ 4

A concrete example: Lisp macros. Lisp macros seem weird even to many Lisp programmers. They're not only not in the intersection of popular languages, but by their nature would be hard to implement properly in a language without turning it into a dialect of Lisp. And macros are definitely evidence of techniques that go beyond glue programming. For example, solving problems by first writing a language for problems of that type, and then writing your specific application in it. Nor is this all you can do with macros; it's just one region in a space of program-manipulating techniques that even now is far from fully explored.

一个具体例子:Lisp 宏。Lisp 宏在很多 Lisp 程序员看来都很怪异。它们不仅不在流行语言的交集里,而且其本质决定了,若要在其他语言中正确实现,几乎必然会使该语言变成 Lisp 的一种方言。宏无疑是超越胶水编程的技术证据。例如,先为某类问题编写一种语言,再用该语言编写具体应用,从而解决问题。这还不是宏的全部能力;它只是程序操纵技术空间中的一小块区域,而这片区域至今仍远未充分探索。

§ 5

So if you want to expand your concept of what programming can be, one way to do it is by learning weird languages. Pick a language that most programmers consider weird but whose median user is smart, and then focus on the differences between this language and the intersection of popular languages. What can you say in this language that would be impossibly inconvenient to say in others? In the process of learning how to say things you couldn't previously say, you'll probably be learning how to think things you couldn't previously think.

Thanks to Trevor Blackwell, Patrick Collison, Daniel Gackle, Amjad Masad, and Robert Morris for reading drafts of this.

因此,如果你想扩展对编程可能性的认识,一种方法就是学习奇怪语言。选一门大多数程序员认为奇怪但使用者中位水平很聪明的语言,然后专注于该语言与流行语言交集之间的差异。用这门语言能表达哪些用其他语言几乎无法方便表达的东西?在学习如何表达你之前无法表达之事的过程中,你很可能也在学习如何思考你之前无法思考之事。

感谢 Trevor Blackwell、Patrick Collison、Daniel Gackle、Amjad Masad 和 Robert Morris 阅读本文的初稿。

Open source ↗