rss

First of all, there are a lot of people who say they're going to invent some new thing where the business manager is going to specify what they want the software to do and it will mechanically translate that specification, and brrrrt! The trouble is, this is a perpetual-motion machine. We keep inventing it, keep making companies to ship it, they're always wrong. The fundamental problem that you're trying to solve here is that humans think of things in vague, mushy terms. In order to visualize something, they don't have to actually visualize every part of it. Whereas the programmer, in order to actually implement that thing, to create it, needs to have every part specified.

So you can imagine an airplane without even knowing what a rudder is, yet without a rudder an airplane's not going to work very well. Partially that's just the way the brain works. The brain is totally optimized for just looking at one thing. Just think about how the eyes work. When you're looking at the world, you imagine that you have an extremely high resolution, extremely large screen full of billions and billions of pixels in front of you. Yet actually your eye has, I don't know how many, but under a million pixels. And what's really happening is, you're just moving your eye a lot. And your brain is filling in the rest and pretending. Because you can move your eyes so fast, anything you want to see you can see, and anything you want to focus on you can focus on very, very quickly.

So your brain doesn't actually work the way a computer works. Your brain doesn't assume that there's all this input coming in and then process it. Instead, it just has a variety of senses available to it, and it picks the ones it wants to answer whatever questions it has right now. So you ask questions, and your eye goes and finds out the information it needs. So you're used to thinking that you have the big picture, and you don't.

And with software, as soon as you start talking about how the pieces are going to fit together, you discover that the things you were imagining are going to be completely ambiguous or impossible or contradictory -- instead of being as simple as you say.

One of the biggest mistakes you can make in developing software is to say, "I'm going to build this thing and it's going to be super easy to use because it's going to be super simple, it's going to be unbelievably simple." And then you say, "OK, how am I going to do footnotes?" Oh, well that'll be real simple -- you just ask for a footnote and you type a footnote, and it'll just be there. Well, what if the footnote is too long to fit on the page it's currently on? Um, I don't know -- maybe you have to move part of the footnote onto the next page. Suddenly, it's not so simple.

As soon as you start to think about how to get everything to really, really, really, really, REALLY work, it becomes much more complicated. So software starts out with a simple vision and it grows a million little hairy messy things. And depending on the quality of the initial vision, those hairy things may be more or less hairy, but they're going to exist.

And therefore, because software seems so simple and is actually complicated, you can't implement it until you specify the complication. And all these people that are trying to make the same perpetual-motion machine -- where you just write your specification and it automatically becomes code -- don't realize that the specification has to be as detailed as the code in order to work.

I remember once, when my grandparents were alive but were old, they were trying to go out to a restaurant with me one night, and it took a half-hour from the time they were standing by the door to the time we got out the front door because my grandmother kept saying, "Do I have my keys?" Of course she did have her keys. "Did I turn on the burglar alarm?" She went and turned on the burglar alarm. And then she said, "Do I have my keys? Go check if the garden door's open; I think I was outside today." "Is the water running?"

Basically, by the time she got to be 65, every mistake she'd ever made in her life she had corrected by creating a new procedure by which she made sure that she never made that mistake again. For example, before she left the house, she double-checked that she had her keys, the burglar alarm was on and so forth. So she had been acquiring these habits to prevent making mistakes she had made in the past. And by the time she got to be 65, it took a half-hour to run through the whole checklist!

What has happened at Microsoft is that someone discovers, for example -- this is something I found on a blog at Microsoft, it's a real story -- that in Turkish there are two letter I's. There's I with a dot and I without a dot, and a capital I without a dot becomes a lowercase i without a dot, whereas in English a capital I without a dot becomes a lowercase i with a dot. So if you've got some code that's checking if something is an integer, and it's doing it by actually comparing the strings, and if your code just happens, in order to make it a case-insensitive test, to lowercase the thing first, that works fine -- until you're running on Turkish Windows. Then, the lowercase i actually wittily, and stupidly, becomes a lowercase Turkish i, which does not compare to an integer with a dot on the i, so that code doesn't work.

So I found on a blog some guy that was going through thousands and thousands of lines of code trying to find these cases. And he's writing about it on his blog so that nobody else would ever make that mistake. And you can sort of see that at some point the guy would say, "Before we ship, let's just make sure there's a representative of the Turkish Windows team in the room signing off." You can imagine them making up some system to prevent this mistake. And now it's gotten to the point where, as Adam Bosworth says, it takes 16 months to get out any release of any Microsoft product. They really can't steer that ship very fast. They spent something like a year on SP2 [Windows XP Service Pack 2] -- it's a good thing they did that, but it's almost all cleanup, maintenance, catch-up, for security reasons.

It's what the Army calls fatigue. Fatigue is everything in the Army that you do to keep your equipment in good working condition: polishing your shoes, brushing your teeth, making sure that you're ready and that all your bullets are clean and there's no sand in your gun. It's all called fatigue, and it takes about two hours a day for an infantry guy. And it's everything but the actual thing you're trying to do. Microsoft has now got to the point where it's like 80 percent, 90 percent fatigue. So even though they're still scoring a [perfect] 12 on the Joel test, we need another category, which is "and you're not Microsoft."

When a writer’s education on a topic consists in interviewing an expert, he is apt to offer generalizations that are banal, obtuse or flat wrong.

Racial purity is a laughable concept to anybody who knows anything about genetics, almost as laughable, in fact, as that creepy obsession with ancestry. Go back a few hundred years and everybody is descended from everybody else. Family trees are a joke and I reckon I should be King, but so, probably, should you. Anyway, claiming racial purity for the English is more than just laughable, it's insane. We are such hopeless mongrels, as Daniel Defoe pointed out with riotous good humour...

I refuse to become dependent on apps grown in their environment. To me it's like contributing to the enslavement of my brother and sister programmers. I don't care how sexy the environment is as a user or a developer, the fact that Apple holds up apps and rejects them often because they compete with their own software is to me like buying a coat made of the skins of endangered species. I won't use iPhone apps for ecological reasons.

I use my iPhone as a: 1. Phone. 2: Camera that can communicate (very valuable feature to me). 3. A Bluetooth tethering device for places my Sprint MiFi doesn't work (and that's a lot of places).

For that I pay about $100 per month. I think I'm being ripped off. (Sure of it.)

I follow medical advice in only one respect, which is to make sure that I swallow the two shots of alcoholic medicine that doctors now agree is essential for the heart and the arteries.  (And remember - no cheating. The New England Journal Of Medicine is very clear on this. At least two drinks, and every day. No skipping. No skimping, please.)

For the rest, a high-anxiety lifestyle and a minimum of strenuous exercise means that I can still see my feet (on a clear day, that is, and if for any reason I should wish to see them).

I also took special note of the recent finding that decaffeinated coffee beans are higher in cholesterol and that nicotine aids concentration and helps to ward off Alzheimer's disease.

My doctor keeps asking me how I do it. And that's the relationship I want to have with my doctor - giving him advice instead of taking it from him.

China's leadership isn't big on religion. And apparently they don't see any upside in war. They handle their money wisely. They put a lot of energy into building infrastructure. And they care more about stability than human rights. In other words, they value efficiency over feelings. It's exactly the way you'd expect a bunch of engineers to run a country. Obviously this approach has served China well.

The bad news for China is that their up-and-coming leaders have backgrounds in law, economics, and history. In time, the lawyers will start passing lots of laws that individually make sense while collectively strangling the business sector in red tape. The economists will all disagree with each other, and the historians will be planning for the past. So China is pretty much doomed. But they had a good run.