I'm James Hague, a recovering programmer who has been designing video games since the 1980s. Programming Without Being Obsessed With Programming and Organizational Skills Beat Algorithmic Wizardry are good starting points. For the older stuff, try the 2012 Retrospective.

Where are the comments?

twitter / mail / newsfeed

Slumming with BASIC Programmers

I'm a registered user of BlitzMax, an extended BASIC-variant primarily targeted at people who want to write games. It's also the easiest way I've run across to deal with graphics, sound, and user input in a completely cross platform way, and that's why I use it. Every program I've written works perfectly under both OS X on my MacBook and Windows XP on my desktop; all it takes is a quick recompile. The same thing is possible with packages like SDL, but that involves manually fussing with C compiler set-ups. BlitzMax is so much more pleasant.

But still, it's BASIC. BASIC with garbage collection and OOP and Unicode strings, but BASIC nonetheless. It doesn't take long, reading through the BlitzMax community forums, to see that the average user has a shallower depth of programming experience than programmers who know Lisp or Erlang or Ruby. Or C for that matter. There are misconceptions about how data types work, superstitions involving performance that are right up there with music CDs colored with green marker, paranoia about recursion. The discussions about OOP, and the endearing notion that sealing every little bit of code and data into objects is somehow inherently right, feels like a rewind to 15 or more years ago. In Erlang or Python, to report the collision of two entities, I'd simply use:

{collision, EntityA, EntityB}

forgetting that this can be made more complex by defining a CollisionResult class with half a dozen methods for picking out the details of the obvious.

(For an even better example of this sort of time warp, consider PowerBASIC, which touts a keyword for indicating that a variable should be kept in a CPU register. It's C's register variables all over again, the difference being that this is still considered an important optimization in the PowerBASIC world.)

By this point I'm sure I've offended most of the BlitzMax and PowerBASIC users out there, and to everyone else it looks like I'm gleefully making fun of Blub programmers. I may be looking down my snooty language dilettante nose at them, yes, but from a get-things-done productivity point of view I'm seriously impressed. There's a continuous stream of games written in BlitzMax, games that are more than just retro-remakes of 8-bit relics, from people with very little programming experience. There are games with physics, games with elaborate effects, 3D games written with libraries designed for 2D, games written over the course of spring break. I'm withholding judgement on the raw aesthetics and playability of these games; the impressive part is that they exist and are largely written by people with minimal programming background. (I've downloaded more than one BlitzMax game that came with source code and marveled at how the entire core of the project was contained in a single 1000+ line function.)

Compare this with any hipper, purportedly more expressive language. I've written before about how you can count the number of games written in a purely functional style on one hand. Is it that language tinkerers are less concerned about writing real applications? That they know you can solve any problem with focused grunt work, but it's not interesting to them? That the spark and newness of a different language is its own reward? Either way, the BASIC programmers win when it comes down to getting projects finished.


In Praise of Non-Alphanumeric Identifiers
Five Memorable Books About Programming
Back to the Basics of Functional Programming
Don't Structure Data All The Way Down
Garbage Collection in Erlang