So I skipped the internet this weekend and missed a really fun thread that seemed to be mostly about cheese, but was also asking why anyone would donate to a project that hasn't borne fruit for over a year.
First my qualifications: I've been writing code since I was 11. I am now 31. That is 20 years of continuous experience. 10 of those were as a professional, where peers with big budgets gave me actual cash money to deliver working software to them. 7 of those years have been creating and contributing to open source projects.
That said, I am a bad programmer. All of us are. There is a measure of every program called
Cyclomatic Complexity. This is the raw number of realities that can exist in a program. Loops, conditionals, input, time, and state all MULTIPLY complexity of a program. A program with as many possible conditions as DF has a CC score in the millions if not billions. Humans are incapable of storing a logical graph of that size in their heads. Which is why we put it into a computer in the first place.
As features increase linearly, complexity increases exponentially. Which is why we don't have things like SkyNet. This is a fundamental problem with programming, and you can read about for the next several months if you're interested.
So you may wonder, why is this guy going on about complexity? Well, because high complexity leads to regression traps. A regression is when a coder changes a feature with a certain intent and inadvertently breaks an existing feature. As your complexity score climbs in to the millions and billions of possible state combinations these become harder and harder to find or prevent. This is why MS Office has a QA department of over 500 people. Several of them are there to make sure you can still open an Excel spreadsheet from 10 years ago.
DF has gotten complex enough to be a regression mine-field. Where every good-intentioned "easy" problem, can cause the breakage of an unknown number of other items. For this reason alone, feature-addition speed is reduced, and will keep declining. But there is another reason: Labor of Love.
<<INTERMISSION>>
(please visit the snack bar)
Most readers have come into contact with Labor of Love software at one point or another, and unfortunately judge it unfairly against a corporate software bar. Some folks hit on this in the thread I was originally referring to. But with no QA department, or accounts receivable, or shareholders driving the agenda, Toady has to be all of those people. He is simultaneously thinking about high-quality, broad platform support, performance, increased revenue, advertising, support, let alone game-play. And do you know what wins in all of those internal conflicts? "What is fun?"
You may think you're oppossed to this method of development, but I'd bet even money that is why you're here. Because what is fun to Toady lines up with what you think is fun. I sometimes log into my development account for Dwarf Therapist, see 160 bugs, decide I only care about 3 of them, still decide not to fix a single one, and then go add a scripting engine for filtering. See what I did there? I have a public record of what people want, I even have donations from some of them. I have bugs that I agree should be fixed, and you know what I do? Ignore all of it and do what makes me happy.
Now I do fix those bugs eventually, but I didn't start my project to make everyone else happy. I did it because I wanted the fruit from that tree. I can't speak for Toady, but I know that's why he works on DF: HE WANTS A GAME LIKE DF TO BE IN THE WORLD.
I gave him some cash frankly because I had some, and I respect the amount of love he's baked into this game. I see him as a fellow craftsman, and I know a lot of his pain and joy, although I've never undertook something of this magnitude.
To sum it up, I will steal (selectively) from ESR in his paper "The Cathedral and the Bazaar"
* Every good work of software starts by scratching a developer's personal itch.
* Good programmers know what to write. Great ones know what to rewrite (and reuse).
* If you have the right attitude, interesting problems will find you.
* When you lose interest in a program, your last duty to it is to hand it off to a competent successor.
* Release early. Release often. And listen to your customers.
* Smart data structures and dumb code works a lot better than the other way around.
* If you treat your beta-testers as if they're your most valuable resource, they will respond by becoming your most valuable resource.
* Perfection (in design) is achieved not when there is nothing more to add, but rather when there is nothing more to take away.
And from E.W. Dijkstra (my personal hero)
"We understand walls in terms of bricks, bricks in terms of crystals, crystals in terms of molecules etc. As a result the number of levels that can be distinguished meaningfully in a hierarchical system is kind of proportional to the logarithm of the ratio between the largest and the smallest grain, and therefore, unless this ratio is very large, we cannot expect many levels. In computer programming our basic building block has an associated time grain of less than a microsecond, but our program may take hours of computation time. I do not know of any other technology covering a ratio of 10
10 or more: the computer, by virtue of its fantastic speed, seems to be the first to provide us with an environment where highly hierarchical artefacts are both possible and necessary. This challenge, viz. the confrontation with the programming task, is so unique that this novel experience can teach us a lot about ourselves. It should deepen our understanding of the processes of design and creation, it should give us better control over the task of organizing our thoughts. If it did not do so, to my taste we should not deserve the computer at all!"
tl;dr Take your Ritalin and try again