Lisp Wins (I think) — cover art: a contemplative beaver in a leather apron at a Victorian workbench, an enormous brass scaffolded contraption labelled with abstract Java-style girders on the left, a small elegant nested-parenthesis abacus on the right glowing in lamplight. 👍

2004 · Drunken Blog Rants · Rant

“Java's running out of steam for being too bureaucratic. Both are widely beginning to be perceived as offering too much resistance to getting cool software built. Mostly I'm a Java programmer. I realized, about eighteen months ago, that I was getting sick of Java.”
— From Lisp Wins (I think), 2005
Read the essay

© 2004 Steve Yegge. Originally published at Drunken Blog Rants.

Author’s note

This one is better-written than many of my other posts trying to say exactly the same thing. From a personal standpoint, I think the most interesting bit is the biographical timeline of programming languages I'd used, starting in 1986.

It's easy to forget that we have a huge selection of really awesome languages today, that I didn't have access to back in 2005. Today we have Rust, Go, TypeScript, Kotlin, Dart, and Swift to name just a few. Back then the options were really bad, and it was frustrating as hell.

AI Notes

Steve opens with a confession: after seven years and half a million lines of Java, he's spent a year quietly hunting for a replacement. The core of the essay is a small comparative study — print the squares of 1 through 5, separated by spaces. Perl does it in two lines, Ruby in one, Python in one, Java in roughly twenty; the Java 5 cleanup with autoboxing and the "smart" for-loop saves almost nothing. The verbosity is a symptom; the disease is that Java offers no way to make your own shortcuts. Without macros, without templates, without a way to lift recurring patterns into the language itself, the boilerplate accumulates forever. From there Steve walks the metaprogramming landscape — C++ templates, AspectJ, and operator overloading (each a partial answer, too verbose for the power), Ruby and Python's MetaObject Protocols (semantics only, not syntax), Smalltalk, OCaml's macro system — and lands on Common Lisp as the only language where syntax is genuinely up for negotiation, "the gold standard" where good programming is refactoring via macros.

The closing caveat — appended after the essay went up — is the most-quoted bit: Lisp may win on language, but Java still wins on platform, and Steve is, at the moment, uncommitted. The piece is Steve's most candid statement of the choice he was wrestling with in 2004, written in the gap between two careers' worth of Java code and the decade of writing about why something better was still possible.

Related listings