By Deane Barker on July 30, 2005

Biculturalism: This is old Spolsky, but it’s still good Spolsky —

In this essay from 2003, Spolsky responds to Eric Raymond’s just-published (at the time) book, “The Art of Unix Programming”. That book is a classic that just drips with old-school Unix disdain for anything else. (Don’t confuse that statement with negativity — the book is excellent and a must read for any programmer. You can read it for free at the link above.)

Anyway, Spolsky praises the book for its general content, but takes exception to Raymond’s general tone:

Raymond does attempt to compare and contrast Unix to other operating systems, and this is really the weakest part of an otherwise excellent book, because he really doesn’t know what he’s talking about. Whenever he opens his mouth about Windows he tends to show that his knowledge of Windows programming comes mostly from reading newspapers, not from actual Windows programming. That’s OK; he’s not a Windows programmer; we’ll forgive that. As is typical from someone with a deep knowledge of one culture, he knows what his culture values but doesn’t quite notice the distinction between parts of his culture which are universal (killing old ladies, programs which crash: always bad) and parts of the culture which only apply when you’re programming for programmers (eating raw fish, command line arguments: depends on audience).

In general, Spolsky makes a good point about the difference between commercial programs and open-source programs: commercial programs are written for users to enjoy. In contrast, open source programs are usually written for programmers to enjoy. Big difference.

Suppose you take a Unix programmer and a Windows programmer and give them each the task of creating the same end-user application. The Unix programmer will create a command-line or text-driven core and occasionally, as an afterthought, build a GUI which drives that core. This way the main operations of the application will be available to other programmers who can invoke the program on the command line and read the results as text. The Windows programmer will tend to start with a GUI, and occasionally, as an afterthought, add a scripting language which can automate the operation of the GUI interface. This is appropriate for a culture in which 99.999% of the users are not programmers in any way, shape, or form, and have no interest in being one.

It’s pretty true when you think about it. I’ve written several things that could be released under the GPL, and — in each instance — I was thinking, “I bet there’s a lot of developers that could use this.” Never did I write anything where I thought, “This will make my mother’s life easier.”

What Links Here


  1. That makes me a “Windows” programmer then – I don’t give a rip about another developer’s opinion, but I do care greatly about whether or not my target users will be able to use what I’ve written and whether or not it helps them perform the taks the code was written to help with in the first place. If it doesn’t, I’ve wasted my time and efforts. Coding for the praise or critiques of other developers is snob factor times ten – or approval seeking in a small audience, if you prefer. I’d much prefer to hear “Thanks – I can get the job done quicker/easier/whatever” than “Your algorithm could use some tweaking but I admire the way you solved that problem – who do you plan on marketing this to?”

  2. I imagine it’s a lot like the Oscars. How many actors won Academy Awards for performances in limited-run movies that no one saw? And how many actors that were in hugely popular films that never won anything?

  3. I’m often dismayed, angered, disgusted, frustrated by the idiot programmers around me. I don’t think a particular leaning towards doing something in a certain style makes someone an idiot. What makes an idiot is the unwillingness to question. Questioning is the only way to really learn. Learning isn’t always necessary in a particular area, but idiots don’t even question that.

    Idiots accept whatever is shoved down their throats that will allow them to in turn produce enough crap to be paid and/or praised by other idiots. Idiots are sheep. They are the mass of followers marching to the same drum. They don’t care what they do as long as someone is patting them on the back. They never stop to wonder whether there’s a different way to do something. I hate idiots.

    Yes, I’m equating group think and stupidity. I feel it’s a one-to-one, if-and-only-if relationship.

Comments are closed. If you have something you really want to say, tweet @gadgetopia.