Programming Platforms are Cultural
Not too long ago I remember reading — and agreeing with! — a rant against the sorry state of software engineering.
At the time I agreed with him, and shared his wonder (and disgust) at how a language so badly designed could become so wildly popular. The author asserted that until we ‘grow up’ to become like the field of ‘proper’ engineering, we would forever be cursed to use bad tools and to suffer from crazy, years-old design decisions.
With time, however, I’ve begun to see that the author got it wrong. Software engineering is decidedly not like ‘proper’ engineering — we cannot move away from the platforms we have chosen. And this is because, while all fields are influenced by social processes, ours in particular is rather governed by them.
Hackers who are building technically better programming languages can thus be compared to the designers of Esperanto: Esperanto, as we may know, is an arguably better language than English. But few people use it, so it hardly ever gets used.
The obvious conclusion here is that the technical excellence of platforms is not sufficient (or perhaps even necessary!) in our field. Social processes (like the built-in virality of the platform in question, for example) matter far more than technical excellence.
This idea was best expressed in Richard P. Gabriel’s famous The Rise of Worse Is Better essay, which argued that it is better to build simple and wrong platforms (the examples he used were Unix and C) in order to have them spread quickly, and then work on making them right. Or, as he writes:
In concrete terms, even though Lisp compilers in 1987 were about as good as C compilers, there are many more compiler experts who want to make C compilers better than want to make Lisp compilers better.
Put another way: the platform that gets the most technical adoption wins, making alternative implementations impossible. This may not be a good thing. When the Unix authors decided to create a better successor to Unix (called Plan-9, they intended to rethink elements of their original Unix philosophy) they failed. Today, most programmers believe Unix is the best way, the only way, and they give no thought to alternative (possibly better) expressions of the Unix philosophy.