Programmer Gore
blog.jgc.org
blog.jgc.org
So now, if I can afford it I really want to know where things went wrong. Usually that means a longer time-to-fix but what's fixed that way usually stays fixed. The 'band-aid' type fixes tend to lead to subtler problems that are harder to fix later on.
If it breaks, let it please break now and in as spectacular a fashion, without any band-aids, that way we can stay away from the kind of bugs that only happen during full moon and Eastern wind.
Which reminds me, I really should have a look at the guts of some software that currently runs in a wrapper script because it crashes once every 3 months or so without any apparent cause.
Edit: Wrong Steve and wrong book -- it's a running example in "Writing Solid Code" by Steve Maguire.
In the software I wrote about above I suspect a very subtle resource leak.
A nice example of such a leak is for instance forgetting to close an opened file descriptor if some other rare error condition occurs elsewhere in the code (not that that's it, but that's how you can get to the point where something will run for months on end without crashing and then suddenly it does).
File descriptor leaks can be relatively easily traced using lsof by the way (one of the step-child utilities that really should be in every coders toolbox, right next to gprof and make).
For my biggest running project, I customize about 1GB of source code not written by me. Every bug needs to be chased until one actually understands why it happened otherwise it's too risky to just make a patch that "seems" to fix it.
Plus, in the process you usually learn a new and interesting thing about a previously unknown part of the codebase.
Of course, very few customers actually understand the importance of this and have the budget to allow you this "luxury".
Fixing the bug for most of the servers and leaving a small fraction with the old codebase to investigate the bug some more sound interesting but I couldn't be doing that.
yulia:/usr/src# bzcat linux-source-2.6.32.tar.bz2 |wc -c
382382080
382M. Tho' is it really one "thing"? A lot of that is device drivers, loadable modules etc that no single install will ever have.It's certainly one thing in that it all uses the same build script; and any of the pieces are pretty worthless on their own.
Of course, this doesn't actually matter as I don't touch most of the code and the "recently active" part seems to measure only about 275 KLOC. But when a bug arrives it might take me anywhere; even so, I don't think I've visited more than 35% of the codebase.