Spolsky, Raymond, and two cultures
Dec. 15th, 2003 02:50 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
I've been thinking for a while now of writing about my travails in trying to get Linux up and running. (Red Hat 9, specifically) There have been a lot of things that, when I try to do them, seem to involve either so much programmer-like behavior it gets really annoying, or things are broken down in such a modular fashion I just can't get the task done in the first place.
Well, Joel Spolsky beat me to it (again), which is why Joel is one of my favorite writers on tech subjects. He has a review of Eric S. Raymond's The Art of Unix Programming. The title of the review is "Biculturalism", and it has a great many sound observations -- pretty much what I was going to write, only better. Some examples:
"By now, Windows and Unix are functionally more similar than different. They both support the same major programming metaphors, from command lines to GUIs to web servers; they are organized around virtually the same panoply of system resources, from nearly identical file systems to memory to sockets and processes and threads. There's not much about the core set of services provided by each operating system to limit the kinds of applications you can create.
What's left is cultural differences. Yes, we all eat food, but over there, they eat raw fish with rice using wood sticks, while over here, we eat slabs of ground cow on bread with our hands."
"What are the cultural differences between Unix and Windows programmers? There are many details and subtleties, but for the most part it comes down to one thing: Unix culture values code which is useful to other programmers, while Windows culture values code which is useful to non-programmers.
This is, of course, a major simplification, but really, that's the big difference: are we programming for programmers or end users? Everything else is commentary."
"(T)there is a core value in the Unix culture, which Raymond calls "Silence is Golden," that a program that has done exactly what you told it to do successfully should provide no output whatsoever. It doesn't matter if you've just typed a 300 character command line to create a file system, or built and installed a complicated piece of software, or sent a manned rocket to the moon. If it succeeds, the accepted thing to do is simply output nothing. The user will infer from the next command prompt that everything must be OK... By contrast, in the Windows culture, you're programming for Aunt Madge, and Aunt Madge might be justified in observing that a program that produces no output because it succeeded cannot be distinguished from a program that produced no output because it failed badly or a program that produced no output because it misinterpreted your request."
"Let's look at another cultural difference. Raymond says, "Classic Unix documentation is written to be telegraphic but complete... The style assumes an active reader, one who is able to deduce obvious unsaid consequences of what is said, and who has the self-confidence to trust those deductions. Read every word carefully, because you will seldom be told anything twice." Oy vey, I thought, he's actually teaching young programmers to write more impossible man pages.
For end users, you'll never get away with this. Raymond may call it "oversimplifying condescension," but the Windows culture understands that end users don't like reading and if they concede to read your documentation, they will only read the minimum amount, and so you have to explain things repeatedly... indeed the hallmark of a good Windows help file is that any single topic can be read by itself by an average reader without assuming knowledge of any other help topic."
Spot on, up and down the line.
Raymond has a quasi-famous article called "How to Ask Questions the Smart Way". I've been fairly tempted to write a reply, "How to Answer Questions the Smart Way," precisely because of these very cultural differences.
Anyway, great stuff, and you should read the whole thing if you're at all interested.
Well, Joel Spolsky beat me to it (again), which is why Joel is one of my favorite writers on tech subjects. He has a review of Eric S. Raymond's The Art of Unix Programming. The title of the review is "Biculturalism", and it has a great many sound observations -- pretty much what I was going to write, only better. Some examples:
"By now, Windows and Unix are functionally more similar than different. They both support the same major programming metaphors, from command lines to GUIs to web servers; they are organized around virtually the same panoply of system resources, from nearly identical file systems to memory to sockets and processes and threads. There's not much about the core set of services provided by each operating system to limit the kinds of applications you can create.
What's left is cultural differences. Yes, we all eat food, but over there, they eat raw fish with rice using wood sticks, while over here, we eat slabs of ground cow on bread with our hands."
"What are the cultural differences between Unix and Windows programmers? There are many details and subtleties, but for the most part it comes down to one thing: Unix culture values code which is useful to other programmers, while Windows culture values code which is useful to non-programmers.
This is, of course, a major simplification, but really, that's the big difference: are we programming for programmers or end users? Everything else is commentary."
"(T)there is a core value in the Unix culture, which Raymond calls "Silence is Golden," that a program that has done exactly what you told it to do successfully should provide no output whatsoever. It doesn't matter if you've just typed a 300 character command line to create a file system, or built and installed a complicated piece of software, or sent a manned rocket to the moon. If it succeeds, the accepted thing to do is simply output nothing. The user will infer from the next command prompt that everything must be OK... By contrast, in the Windows culture, you're programming for Aunt Madge, and Aunt Madge might be justified in observing that a program that produces no output because it succeeded cannot be distinguished from a program that produced no output because it failed badly or a program that produced no output because it misinterpreted your request."
"Let's look at another cultural difference. Raymond says, "Classic Unix documentation is written to be telegraphic but complete... The style assumes an active reader, one who is able to deduce obvious unsaid consequences of what is said, and who has the self-confidence to trust those deductions. Read every word carefully, because you will seldom be told anything twice." Oy vey, I thought, he's actually teaching young programmers to write more impossible man pages.
For end users, you'll never get away with this. Raymond may call it "oversimplifying condescension," but the Windows culture understands that end users don't like reading and if they concede to read your documentation, they will only read the minimum amount, and so you have to explain things repeatedly... indeed the hallmark of a good Windows help file is that any single topic can be read by itself by an average reader without assuming knowledge of any other help topic."
Spot on, up and down the line.
Raymond has a quasi-famous article called "How to Ask Questions the Smart Way". I've been fairly tempted to write a reply, "How to Answer Questions the Smart Way," precisely because of these very cultural differences.
Anyway, great stuff, and you should read the whole thing if you're at all interested.