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?
"Not Invented Here" Versus Developer Sanity
Developers, working independently, are all pushing to advance the state of the art, to try to make things better. The combined effect is to make things more chaotic and frustrating in the short term.
Early PC video cards rapidly advanced from bizarrely hued CGA modes to the four-bit pastels of EGA to the 256 color glory of VGA, all in six years. Supporting the full range required three sets of drawing routines and three full sets of art.
iPhone resolution went from 320x480 to 640x960 to 640x1136 in less time. Application design issues aside, the number of icons and launch screen images required for a submitted app exploded.
Windows 95 offered huge benefits over odd little MS-DOS, but many companies selling development tools were unwilling or unmotivated to make the transition and those tools slowly withered.
Starting with iOS 5, Apple required applications to have a "root view controller," a simple change that resulted in disproportionate amount of confusion (witness the variety of fixes in this Stack Overflow thread).
GraphicsMagick is smaller, cleaner, and faster than its predecessor ImageMagick, but that's of no consolation if you're reliant on one of the features dropped from the latter in the name of simplicity and cleanliness.
Keeping up with all of these small, evolutionary changes gets tiring, but there's no point in complaining. Who doesn't want double iPhone resolution, the boost that DirectX 9 gives over previous versions, or the aesthetics of curve-based, anti-aliased font rendering instead of 8x8 pixel grids?
Sometimes, occasionally, you can hide from the never-ending chaos. You can take refuge in your own custom crafted tools--maybe even a single tool--that does exactly what you need it to do. A tool that solves a problem core to your area of focus. A tool that's as independent as realistically possible from the details of a specific operating system and from libraries written by people with different agendas.
This isn't a blanket license for Not Invented Here syndrome or reinventing the wheel. If you have a small (small!) library or tool that does exactly what you need, that you understand inside and out, then you know if your needs change slightly you can get in there and make adjustments without pacing back and forth for a new release. If you have an epiphany about how to further automate things or how to solve difficult cases you didn't think were possible, then you can code up those improvements. Maybe they don't always work out, but you can at least try the experiments.
Mostly it's about developer sanity and having something well-understood that you can cling to amidst the swirling noise of people whose needs and visions of the right solutions never quite line up with your own.
permalink December 5, 2012
previouslyAn Outrageous Port
OOP Isn't a Fundamental Particle of Computing
The Background Noise Was Louder than I Realized
Do You Really Want to be Doing This When You're 50?
Digging Out from Years of Homogeneous Computing