Thursday, June 17, 2004

I Will Go Down With This Ship

Man, I had a scary dream last night -- my old high school friends Billy and Chris and I had organized this Fight Club-esque fighting tournament, and I ended up killing this guy I was fighting. And it was one of those awful dreams where it's not just the violence (which I think was sort of mercifully elided), but the entire guilty aftermath, in which it becomes clearer and clearer that you are in deep shit until you finally jerk awake. The thing is, though, a tangential aspect of the dream was that I figured out how to get this stupid light on my answering machine to stop flashing -- which it's been doing since we moved -- and I was kind of disappointed when I woke up to see that it was back to not being fixed. I mean, who do I have to kill around here to... right?

One of the things that has begun to tick me off about working for a corporate software company is how customer-driven the design process is. What I like about UNIX libc, for example, is that from a user's point of view, it looks very much like they've (the designers / developers) taken the time to read the research on things, they've thought about all the possible ways in which a piece of software might and should be used -- and not just in a commercial sense, in a "What if I did this?" kind of academic sense -- and they've written a really adaptive piece of software that fits in as best it can philosophically with what's already out there and allows new stuff to be built on top of it in a sane way. (There are a few exceptions to this, such as the various GLIBC binary compatibility nonsenses and the awful, confusing ctime() / time() / gettimeofday() / etc. functions.) The business software people are totally the opposite of this. They've got these ridiculous systems that are set up in literally the worst-possible-but-still-able-to-function way, and their attitude is, "Well, whatever new thing we're going to develop / buy / whatever, it should just work with what we've got." That little credo about things "just working" is the reason behind all this Windows virus / worm / whatever bullshit, if I may get self-righteous for a moment. And when you're designing software that caters to this attitude, you wind up with something that's very niche and isn't very interesting, and really just isn't further developable after a certain point because it's such a lopsided monster and the processes / systems it depends on have eventually been phased out because somebody realized they were bullshit.

And don't tell me it's about money. I know it's about money, but it's gotta be more expensive to finally overhaul a car-crash of a system than it is to make short term re-arrangements that keep you on the path to sanity. Maybe they're just so sure that by the time they have to seriously rethink their software architecture, they'll be out of business or the company itself'll have been drastically re-organized anyway that it's not worth the trouble.

And that doesn't always happen -- listen to this paragraph from Joel On Software about Microsoft:
I first heard about this from one of the developers of the hit game SimCity, who told me that there was a critical bug in his application: it used memory right after freeing it, a major no-no that happened to work OK on DOS but would not work under Windows where memory that is freed is likely to be snatched up by another running application right away. The testers on the Windows team were going through various popular applications, testing them to make sure they worked OK, but SimCity kept crashing. They reported this to the Windows developers, who disassembled SimCity, stepped through it in a debugger, found the bug, and added special code that checked if SimCity was running, and if it did, ran the memory allocator in a special mode in which you could still use memory after freeing it.
Oh my God. This is 100% absolutely the dumbest thing I have ever heard of. And fucking Spolsky thinks it's genius! The management people at Maxis who told Microsoft to do this should be fired, and the management people at Microsoft who agreed to this should be fired, too. When I first clicked his article on How Microsoft Lost the API War, I thought it was going to be about how no one writes Windows code because their API is such a convoluted disgusting mess and there's about 10 different, extremely complicated and varyingly buggy ways to do this tiny simple thing that you want; but it turns out that Microsoft lost the API "war" because their API isn't backwards-compatible any more. I mean, that's a problem, but the nicest thing I can think of to say about .NET is that at least it looks like they're trying to create a rational and consistent API for people to use, even if they had to rip it off wholesale from Sun. If they had done this to start out with, maybe you wouldn't have to pay people a million dollars to touch Windows code today.

No comments: