This video was linked from the “why do we number things from zero?” article yesterday. I’m conflicted! Certainly when it comes to game design, I’ve said something very similar: why have we abandoned all these great ideas from the past and settled on a few bland genres? But less now. With things like Spelunky and Minecraft around, it’s clear that people actually are building on the great ideas of the past; and in Minecraft’s case, it’s the sort of thing that you can’t do until Moore’s Law gets us enough memory (and, I guess, processor) to actually build it.

But there’s another class of great ideas that never quite got built: all the demos in that video, plus things like Shrdlu and Eliza on the AI front, picked the lowest-hanging fruit in the late ’60s. But the gulf between those prototypes and full visual or DWIM programming languages (to say nothing of the full natural language/AI problem) is really, really large! But the reason we don’t have it now isn’t that nobody thinks it’s awesome, it’s that they have been trying and not making the kinds of progress that draws attention. And as far as visual programming goes, it also needs inspiration; every attempt I’ve seen just hasn’t been faster to make or easier to read. There’s a reason recipes are a list of ingredients followed by an ordered list of instructions.

(in the world of games I’d put the automatic story generator and the swordfight simulator in this category; thinking it would be awesome is the easy part.)


Patrick Wyatt’s saga of programming Warcraft and Starcraft continues; he’s in fixing bugs and shipping territory:

Some bugs were related to the development process itself. The Protoss Carrier regularly lagged behind other units because it had its own way of doing … everything. At some point in time the code for the Carrier was branched from the main game code and had diverged beyond any hope of re-integration. Consequently any time a feature was added for other units, it had to be re-implemented for the Carrier. And any time a bug was fixed for other units, a similar bug would later be found in the Carrier code too, only more devious and difficult to fix.

It was worth it, probably? Carriers are the best!

But this decision bit them in the ass and kept on biting: keep the square grid from Warcraft 2, and just put diagonal art on it. They were always almost going to ship, so they could never afford to spend the time to do it right, and just slapped hacks and bandaids on until it finally worked well enough.

Which has got to be frustrating. Not only frustrating to live through, but…I’ve been there: you’re stuck with some tech that isn’t quite right, an engineering decision made for a different game that you have to keep working around in increasingly cumbersome ways. But you power through and release something mediocre, knowing that if you’d just done it right from the start the game would be better off for it. But this is Starcraft! Perhaps the best game ever of all time! The alternative might be even scarier: maybe code quality just doesn’t matter.

(except that it makes your lives more pleasant while you’re working on it, of course.)


Interactive regex tester! If, like me, you use regular expressions about once every six months and can’t be bothered to develop the necessary habits.

Learnable Programming

Bret Victor has a neat essay on Learnable Programming, taking the interactive demo/visualization-over-time stuff from his Ladder of Abstraction essay into the realm of programming.

I don’t have a very good intuitive grasp on how useful it would be as an actual product, or whether it’s one of those things that fits so perfectly the simple use case it’s demoed on but blows up into incoherence as soon as you get even a little bit more complicated. Not even into actual, real-life applications territory, but just second-half-of-CS-101 problems. Then again, that might be enough: pick up the basics of how things work in as transparent a system as possible, and then write fancier programs in a black box once your imagination is up to the task.

On the other hand! I use more and better training wheels now than I ever did while learning. Certainly some of the interactive visualization stuff would come in handy when I write code and hand it off to designers to use; I do my best to give things evocative names and explain what’s going on, but there’s still a lot of blind experimentation.

Food for thought, at least.