Sunday, March 18, 2012

The far corners of the Earth

I am fascinated by extremely remote places. I want to visit them. Specific destinations I have in mind:

I don't know why they fascinate me; most of them are quite cold. There are other places that I've come across in Wikipedia that I can't remember.

Saturday, March 3, 2012

Not stupid: 640K ought to be enough for anybody

Supposedly, Bill Gates once said, "640K ought to be enough for anybody." Maybe he said it, maybe he didn't. Let's say he said it. Also ignore that the decision decision wasn't entirely his; IBM had their own requirements.

Anyway, he got ridiculed for it, but it was actually a pretty sane decision. The target microprocessor only supported 20-bit addresses, meaning it could deal with at most 1MB of RAM. The 640K of RAM was for OS and application stuff, leaving 384K for supporting services like video. You could argue that the line should have been drawn in a different place, but the implication of those mocking that quote is that he could have avoided drawing a line.

Okay, so it's 1981, and you're working on this operating system for the original IBM PC. You have an easy way to support 640K of RAM. Do you stick to that or go for the fancy way of doing things that allows you to use more? If you go the fancy route, you:

  1. Take more time to develop

  2. Introduce complexity

  3. Risk doing it wrong

The last part is the most important one. The machine supported 64KB RAM standard and 256KB if you maxed it out. Nobody had experience with a PC-like system that needed much more RAM than that. They could have guessed what future systems would need, and they'd probably be wrong. Not only would they be wrong, but they'd be wrong and boxed into a naive, ignorant implementation.

Better to kick that can down the road to a time when they needed to solve it. Waiting until then isn't (just) lazy, it's also a way to increase the chances of solving the problem right, because waiting until you need something generally means you end up with a pretty good idea of what you need.

"640K ought to be enough for anybody who's running DOS." If they get to a point where they need more than that, they're already so far beyond DOS's design that the 640K RAM limitation will be only one of multiple. Why eliminate just one of the blockers to that future user? It costs more now, costs more later, and doesn't even help. There's no such thing as infinite scalability, and building in hard limits to a system's capacity is the only sane way to build anything.

You have to draw a box around what you're trying to do. You've got to say, "I'm only going to solve this much." If you make the box a little too big, you probably won't solve anything well. If you make the box much too big, you won't solve anything at all. Solve the smaller problem well, and then come back later to make the box bigger.