From: rrt@sc3d.org
Date: Thu, 12 Jun 2008 09:00:00 +0100 (BST)
Subject: Blank Canvases

Triggers: "pointlessness of yet more blank canvases" (late 2007), Milton's "I must make my own system" (Tom Lynn tagline? June 2008)

In computing, as in philosophy, and perhaps for the same reason, there is a great tendency to try to start from first principles. This is often driven by the egotistical certainty of being able to succeed where others have failed, along with the closely related desire to avoid or repair the mistakes of old systems. This is often a smokescreen for the laziness of not wanting to learn existing systems coupled with the desire to have a system all one's own, and the result is generally to repeat the mistakes of the past. Even where a new system's design starts from a study of the failings of old systems, it's easy to overlook some and thus fail to avoid making old mistakes. Either way, without genius and a great deal of luck one is likely either to repeat historical error by not having studied it, or be constrained by old ways of thinking.

By now, there's a great deal of good in existing systems of thought and programming, and most people are likely to make a greater contribution by working with them than by trying to reinvent them. Further, I'd suggest that few successful new general systems were conceived as such, but that most were based on a special insight which turned out to need a new system to accommodate it. This is especially true in the area of programming languages. This is particularly odd given the number of projects which set out to do nothing new, but simply neatly consolidate existing practice. Who uses Cobra, Scala, Kaya, Heron, Haxe or Modula-3? By contrast, look at Python, Perl, Lua and PHP. It's ironic that the seemingly sensible approach of designing for general-purpose use based on the lessons of the past is generally less successful than that of designing for a particular need, adding features as required, even though as any language matures its design usually comes to be dominated by general concerns. C, Java and C++ may be adduced as counter-examples, but only the first is a good example. Java had a new feature, binary portability, that happened not to be directly a language feature, whereas C++'s success is based on its relationship with C, and its status as the only ubiquitous high-performance compiled language higher level than C. C itself is beset with major difficulties and annoyances compared to more modern languages; its authors claim it has aged well; i would say rather that it's astonishing that it has no generally agreed successor in either the performance-critical or the system software domain.

It's also ironic that the lesson appears to have been better learned in philosophy, where it's less needed: there are surely bigger gains to be made in the realm of pure thought than in the programming of von Neumann machines, and they will be more generally beneficial to humanity.
