Satya's blog - Houses and computers
People don't seem to get that computers are complicated. Insanely complicated. More complicated than any otehr machine they have ever used. Think TVs and VCRs are complicated? Simple, very simple. Think cars are complicated? Not as much as a desktop computer.
A co-worker used to work construction, but now does computer stuff. (Yeah, "stuff". Most people reading this would understand if I said what he does, but I'm not going to. It's work stuff.) So today I'm going to compare the complexity of building a house (a subject I know little about) with the complexity of a computer (something I know a lot more about, but by no means do I know everything.)
A house. What've you got? Walls, floors, roofs, studs, joists, beams, electrical, plumbing, *planning* the thing in the form of an architectural ... er, plan? Permits, zoning, and so on. Figuring out what's wanted, designing the thing. A garage? 1 or 2 car? Or are we talking condos/apartments/townhouses? (Servers, versus desktops.)
What color? Well, that's fairly superficial. A big job, but still can be done after the whole thing is finished and lived in for a few years. That's like asking to change the color scheme of a web site -- can be a pain, but doesn't usually involve a rebuild.
Oh, you wanted brick with aluminium siding? Not the concrete/wood with wood siding we've done, that you hinted at? And when we said "okay, we'll do concrete with wood" you said "yeah whatever I don't know much about those house things", and then you signed off on it? So you want us to change the basic structure of the thing, expect it to be done in 2 days while your in-laws are visiting, and expect it to be free/cheap because we "know about that house stuff"?
That's like asking for your PHP site to be designed in MySQL (real computer people are cringing now) when, in the beginning, you didn't care what we did as long as we did it in a week and it had "social networking, videos, email, and a forum blog". We threw together something slick in Wordpress, you liked it, but now you realise what you really wanted was a forum with a document sharing area. Tough noogies. And the weeks of meetings that you spent deciding on the exact shade of blue in the footer (or, the exact pattern of the crown molding)? Worthless.
Now say you want the kitchen at the other end of the house. Sure, we can do that. Oh, the laundry room too? So you want us to reroute the plumbing and the electricals (the 3-phase supply for the dryer), again in 2 days and cheap? Suuuure. That's the same as when you ask us if the site can have fine-grained permissions bolted on later. And it should support frames (What the hell? You're not qualified to decide that. That's like you asking for the house to be built with 1 room on the 1st floor, 2 on the 2nd, 3 on the third, and so on. It's stupid. It might work in some special case, but generally it's stupid.)
Now, about the materials and construction. Do you realise that the video card in your desktop has more components than your entire house? How many in your house? Let's count every sheet of wood, every 2x4, every pipe and fixture. Let's not, actually. Take a pipe. What does it take to build one? Does every inch of it have to be designed individually? No, you probably roll some steel, thread the ends, and voila, your basic pipe (again, my knowledge of manufacturing fails me). The video card? Yeah, okay, so you can take some standard components and fit them together. I'll give you that. I know it's not true, but fine, whatever.
Now, when you have a leak. Most times you can see it -- there's water on the floor, or whatever. Or your faucet doesn't. A memory leak? What do you get? Random crashes. The application hangs. If you're lucky, it'll be consistent. Otherwise, someone has to go in with a memory debugger or leak tester (in the case of the water pipe -- it's an acoustic device, I think). And believe me, the debugger is a lot harder to operate.
Take tools. When the carpenter re-uses his (or her. I'm not going there.) hammer on various projects, do you scream copyright violation, intellectual property violation, and so on? Does the plumber have to sign a non-disclosure agreement? Can your electrician use the experience gained on his next project? Sigh.
Back to trouble-shooting, which was supposed to be the point of this article. Something goes wrong with your house (computer). Do you call the police (helpdesk) and yell "help it doesn't work"? For that matter, do they say "try re-inserting the key (rebooting)"? Okay, so they say "what's the problem"? and you say "I can't use my GE (Microsoft)", meaning your fridge (word processor). Okay, why? In cvase of the fridge, it could be any number of things, from a stuck door to leaks in the freon. In case of your computer, it could be anything, from the keyboard down to the RAM. In both cases it could be user error or power failure. It could be a corrupt file or mold in the vents. Point is, in case of your applicance there are much fewer points of failure.
If it's a web site or web application I've built, the points of failure are much more. I can replace the RAM, but any number of lines of code could be bad in the web app -- and I have to find out where the errors are. I can't replace the whole app, can I?
I seem to have lost my point somewhere.
Update July 30 2008: I managed to put this more briefly on chat today: Fact is computers are complicated and need maintenance. You take your car in for an oil change every 6 months? Computers are 2 orders of magnitude (200 times for the proles) more complicated. That means an "oil change" every day, and a complete overhaul every 6 months.
Last updated: Jul 30 2008 10:38