Programming for People

In last week's Lilan, I introduced the idea of programming as the new writing, a form of expression that will enhance our thinking and allow a grand cultural explosion similar to but smaller than the cultural explosion that was classical Greece. However, there is one small catch: we need something that will do for programming what the alphabet did for writing. In other words, we need some means of making programming accessible to people without requiring years of training. This idea is not at all new; people have been designing programming languages for beginners for decades. BASIC, Logo, Pilot, and Smalltalk are just a few of many such efforts, none of which have ever amounted to anything. So why am I dragging out this dead horse for further abuse?

I think that the failures of the past arise from an underestimation of the amount of computer resource required to support the nonprofessional user. Here we come to a fundamental difference between computer writing and paper writing: computer writing is executed on a computer, where paper writing mirrors speech. Because computer writing must be executed on a computer, it is constrained by the limitations of the computer, and it must also consume some portion of the computer's resources. In times past, computer resource has been so limited that we could not afford to allocate much resource to the programming language. This is why we used low-level languages such as assembly language and C. But computers have grown vastly more powerful in the last decade. Fifteen years ago, I programmed an Atari 800 with 48K RAM and an 8-bit 1 MHz CPU. I write this on a PowerMac 8500 with 32M RAM and a 32-bit 110 MHz processor. This machine is perhaps a thousand times more powerful than the old Atari 800. Yet the programming language I use on it, C++, does not consume a thousand times more computer resource; I'd guess it eats up maybe fifty times more resource. It's as if we were ditch-diggers who've been using shovels all our lives, and one day they deliver a shiny new bulldozer with the horsepower to do the work of a thousand shovels -- only the blade on the front of the bulldozer is only three feet long, and so we can only do much work as fifty shovels. What a waste!

Alan Kay once observed to me that, with the 8-bit machines, 90% of the computer's power was used up doing the work, and only 10% was available for making the user interface more effective. He allowed as how computers wouldn't get really useful until those percentages were reversed. Well, we should have reached that point by now. If our computers of today are a thousand times more powerful than the 8-bit machines, then we could have ten times the raw computing power of those old machines and still have 99% of the computer's resource available for user interface. This, I think, is the biggest failure of the computer industry: the standards of user interface quality have gone up by a factor of ten while the basic hardware has improved by a factor of a thousand. Windows 95 is nice, but it should have been released in 1990. We're way behind the curve.

So if we are to design a programming language for normal people, using modern computers, we want something far more glorified than BASIC, LOGO, or even SmallTalk. This new language should be more removed from the mathematical constructs of conventional programming, and closer to the grammatical constructs that we understand from natural language.

So how will we concoct such a language? I see two possible strategies; I don't know if either one will work. The first strategy is to build a series of small special-purpose languages for single applications. We don't try to tackle some high-falutin general-purpose language; instead, we just build a bunch of narrow-purpose languages for particular tasks. As the years go by, we allow Darwinian factors to select the better language traits. Within a decade or so, perhaps we will be in a position to talk about designing a general purpose language.

Next week, I'll present some details of the special-purpose language that I designed for my Erasmatron. I'm quite proud of the innovations I developed for this language, but acutely aware of the unpolished nature of this. Although I will not recommend the specifics of my design on anybody else, I think that the general approach has value to all designers of interactive entertainment.