I stumbled upon this old post by Joel Spolsky:
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. A cultural difference doesn’t mean that American stomachs can’t digest sushi or that Japanese stomachs can’t digest Big Macs, and it doesn’t mean that there aren’t lots of Americans who eat sushi or Japanese who eat burgers, but it does mean that Americans getting off the plane for the first time in Tokyo are confronted with an overwhelming feeling that this place is strange, dammit, and no amount of philosophizing about how underneath we’re all the same, we all love and work and sing and die will overcome the fact that Americans and Japanese can never really get comfortable with each others’ toilet arrangements.
…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.
…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. For example, Unix has a value of separating policy from mechanism which, historically, came from the designers of X. This directly led to a schism in user interfaces; nobody has ever quite been able to agree on all the details of how the desktop UI should work, and they think this is OK, because their culture values this diversity, but for Aunt Marge it is very much not OK to have to use a different UI to cut and paste in one program than she uses in another. So here we are, 20 years after Unix developers started trying to paint a good user interface on their systems, and we’re still at the point where the CEO of the biggest Linux vendor is telling people that home users should just use Windows. I have heard economists claim that Silicon Valley could never be recreated in, say, France, because the French culture puts such a high penalty on failure that entrepreneurs are not willing to risk it. Maybe the same thing is true of Linux: it may never be a desktop operating system because the culture values things which prevent it. OS X is the proof: Apple finally created Unix for Aunt Marge, but only because the engineers and managers at Apple were firmly of the end-user culture (which I’ve been imperialistically calling “the Windows Culture” even though historically it originated at Apple).
…There are too many monocultural programmers who, like the typical American kid who never left St. Paul, Minnesota, can’t quite tell the difference between a cultural value and a core human value. I’ve encountered too many Unix programmers who sneer at Windows programming, thinking that Windows is heathen and stupid. Raymond all too frequently falls into the trap of disparaging the values of other cultures without considering where they came from. It’s rather rare to find such bigotry among Windows programmers, who are, on the whole, solution-oriented and non-ideological. At the very least, Windows programmers will concede the faults of their culture and say pragmatically, “Look, if you want to sell a word processor to a lot of people, it has to run on their computers, and if that means we use the Evil Registry instead of elegant ~/.rc files to store our settings, so be it.” The very fact that the Unix world is so full of self-righteous cultural superiority, “advocacy,” and slashdot-karma-whoring sectarianism while the Windows world is more practical (”yeah, whatever, I just need to make a living here”) stems from a culture that feels itself under siege, unable to break out of the server closet and hobbyist market and onto the mainstream desktop.
I disagree with his defense of Windows. While there are many fantastic Windows programmers, brilliance is not what this culture is about. Spolsky puts the best face on it when he says “…Windows programmers, who are, on the whole, solution-oriented and non-ideological.” One has to be careful when generalizing about so many people, but I think the average Windows programmer doesn’t really care about programming. To say they are “non-ideological” is to put a positive spin on apathy.
Spolsky is exactly right when he sums up Windows programmers as having this attitude: “yeah, whatever, I just need to make a living here”. That is the attitude that I see everywhere when looking at Windows programmers. In general, people who go into Windows programming tend to simply be in it for the money. People who are, instead, attracted to Unix or Linux tend to be people who really care about the art of programming. Because of this, software built using .NET often sucks, whereas code written on Unix/Linux platforms is often very good.
Look at the best known web sites built various technologies: MySpace was built with .NET and it is a permanent disaster, always full of bugs. Meanwhile, Facebook was written in PHP on a Unix stack, and its architecture is so beautiful that they write about it in books called Beautiful Architecture.
Again, I’ll repeat, there are a lot of great Windows programmers, and you can write great software using .NET. However, overall, I think the Windows platform attracts people who simply want a job, and their lack of concern about quality is reflected in the code they churn out. By comparison, the Unix/Linux platform tends to attract people who care passionately about the quality of the code they write, so the software on this platform tends to be of a better quality.