This article got me thinking. When I develop software, I do that from my background of Linux-like systems. I.e., I begin with a design, create some some command-line experiments, document the whole lot in plain unformatted text, and then I sometimes proceed to implement a graphical user interface. In doing so, I take a strictly engineering approach: I built something which has to be technically sound, and should be easily fixable if it breaks.

Unfortunately, that is not how the "real world" usually works. Market-driven software development requires companies to quickly make something that can be shown to potential customers. Whether or not it works (perfectly) is generally not relevant. Proof of this is the never-ending vast amount of patches which fix vulnerabilities in software that has been sold as "ready".

Joel summarizes this succinctly this as

"Unix culture values code which is useful to other programmers, while Windows culture values code which is useful to non-programmers."

The same holds true for documentation. I write technical documentation, which is aimed at developers, rather than end-user documentation which is littered with examples and screenshots. Eric S. Raymond, in his book The Art of UNIX Programming says about that:

"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."

A point on which I do not agree with Joel is the following

The cultural schism is so sharp that Unix has never really made any inroads on the desktop. Aunt Marge can't really use Unix, and repeated efforts to make a pretty front end for Unix that Aunt Marge can use have failed, entirely because these efforts were done by programmers who were steeped in the Unix culture.

This is no longer true. Distributions like Knoppix and Ubuntu provide excellent graphical desktop environments which are easy to use for end-users. I have tried to give my parents an Ubuntu desktop, and they have been using it for months without problems. A colleague of mine did the same, and his parents are most likely even more technological illiterate than mine. In my opinion, the real chasm between Windows users and Unix users does not manifest itself till users start to tinker with their OS. In this respect Unix undeniably has a steeper learning curve than Windows does.