Monday, July 24, 2006

Creating an Application in Five Minutes

It used to be really hard to build a new application. If you find a copy of the original Inside Macintosh there's a "roadmap" application which is, in essence, the sketch of a minimal Mac app (actually, it's not even that, because it doesn't implement multiple windows, or a bunch of other things). This simple text editor program occupies four large pages of commented source code, and figuring out what it all means will involve many trips through the first three volumes of Inside Macintosh.

Writing applications for the Amiga and Windows wasn't much (any?) easier. Note that I say "writing applications" and not "programs". Writing computer programs had been really easy up until then...

E.g. almost everyone who had used a computer knew you could do something like:

> 20 GOTO 10

on a computer in a department store and the screen would fill with "HELLO"s and the computer would kind of lock up until a salesperson unplugged it or (and this would be astonishing when it happened) typed CTRL-C.

It was even pretty easy to write a program for a mainframe computer. Something like:

void main (){ printf("hello"); }

could actually be turned into a reusable executable fairly easily. (You also needed to type some arcana to compile it.) Shell scripts were even easier.

But it took a long time for graphical user interfaces to actually simplify the task of programming, and there were many missteps and dead ends along the way.

Probably the first truly easy-to-use GUI programming tool was HyperCard. HyperCard was so easy to use and so good at what it tried to be (and so oddly implemented) that it has never really been bettered. Even the various attempts to clone HyperCard (notably Toolbook, SuperCard, Runtime Revolution) ever succeeded in making a completely live development tool (i.e. where using your program and developing your program were seamless acts). Indeed, I would suggest that a web-based HyperCard clone is a true killer app.

Various less ambitious but more conventionally useful imitations of HyperCard, notably Visual Basic and Delphi, appeared, as did class libraries which allowed you to subclass a bare-bones application and its components, such as MacApp, PowerPlant, and MFC. Today, most of our development tools are spiritually derived from Visual Basic and its brethren, i.e. HyperCard with a sharp line between "development" and "use", or MacApp and its brethren, i.e. a class library which assumes you'll be writing a "totally general" app, where "totally general" means "something a lot like a common office app". Some of our development tools are more primitive than either, but let's not discuss Perl, PHP, et al here ;)

What all this means is that you can write "hello, world" using a GUI-based IDE in about fifteen seconds, except that it takes 15s to launch your development environment, and about 30s to five minutes to compile and run it. Versus getting the same thing done instantly in UNIX or on a Commodore 64 twenty-something years ago.

I've recently started using a new Mac-based game development tool called Unity and it's interesting ... amazing even ... to realise that in many ways it's closer to HyperCard than Visual Basic. You do need to explicitly save changes (probably not a bad thing). You can create a 3d game application (well, you know, the gaming equivalent of "hello, world") in about thirty seconds. There is no sharp line between playing and development. It still takes fifteen seconds to launch the IDE and 30s to compile, but...

Game development just got a little more interesting.