6 Apr 2011 (updated 6 Apr 2011 at 19:20 UTC)
»
Hating every existing language is the first glimmer of
awareness.
The second comes when you have started inventing
languages meant to be better, and find that they are all
worse, except the ones that are far, far worse. They share
almost all the fundamental flaws of the language you hate
most, but with extra fundamental flaws of your own. If you
are perceptive enough, you discover you have no idea what
really makes a language useful.
The third comes when you realize that no one language is
right for everything or everybody. You begin to think your
only hope is a completely specialized language, such as one
uniquely suited for left-handed color-blind cartoonists, or
for cats. ("No one could reject a language made just for
them!" But they do.) Real problems refuse to confine
themselves to what your language is supposed to be best at,
and keep washing over into where it is worst. ("But it has
first-order functions, and it's case insensitive! Who really
needs speed anyway?")
The fourth is when you realize that ideology works no
better in language design than in governance, and let real
problems constrain the design. Creativity thrives on
constraints. Discovering what are the real problems turns
out to be way harder, even, than getting a language to help
solve them without itself becoming a worse problem.
Poisonous complexity emerges at every turn. Formalisms
stubbornly refuse to solve problems all by themselves, or
prevent them.
Finally you realize that while luck is the lion's share
of what makes a language successful, failure can always be
traced to fatal flaws the designer was (and usually still
is) blind to. First your language has to be good enough,
which is nearly impossible, and then it has to be impossibly
lucky on top of that. Then you have to work hard, too.
People use a language despite everything about it. Now,
as in any quest for enlightenment, we return to the beginning.