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?
Dangling by a Trivial Feature
I'm looking for a good vector-illustration app and download a likely candidate. I rely on knowing the position of the cursor on the page--strangely, some programs won't show this--so it's a good first sign to see coordinates displayed at the top of the screen. Now I drag the selection rectangle around a shape to measure it.
Uh-oh, it's still showing only the cursor coordinates as I drag. What I want to see are two sets of values: the cursor position and the current size of the rectangle. Now I could do the subtraction myself, but I'm using a computer that can do billions of calculations each second. I don't want to get slowed down because of mistakes in my mental computation or because I mistyped a number into the Erlang or Python interpreter I use as a calculator.
I set this app aside and start evaluating another. And that sentence should be utterly horrifying to developers everywhere.
A team of people spent thousands of hours building that app. There are tens or hundreds of thousands of lines of codes split across dozens of files. There's low-level manipulation of cubic splines, a system for creating layers and optimizing redraw when there are dozens of them, a complex UI, importing and exporting of SVG and Adobe Illustrator and Postscript files, tricky algorithms for detecting which shape you're clicking on, gradient and drop shadow rendering, text handling...and I'm only hitting some of the highlights.
Yet here I am dismissing it in a casual, offhand way because of how the coordinates of the selection rectangle are displayed. The fix involves two subtractions, a change to a format string, and a bit of testing. It's trivial, especially in comparison to all the difficult, under-the-hood work to make the selection of objects possible in the first place, but it makes no difference, because I've moved on.
These are the kind of front-facing features people use to decide if they like an app or not. Seemingly superficial fit and finish issues are everything, and the giant foundation that enables those bits of polish is simply assumed to exist.
(If you liked this, you might enjoy It's Like That Because It Has Always Been Like That.)
permalink December 23, 2012
previouslyThe UNIX Philosophy and a Fear of Pixels
"Not Invented Here" Versus Developer Sanity
An Outrageous Port
OOP Isn't a Fundamental Particle of Computing
The Background Noise Was Louder than I Realized