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.
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.