I read Joel Spolsky's review of The Art of Unix Programming by Eric Raymond with interest. Joel seems at least marginally versed in using Linux and associated tools, and at the same time highly versed in Windows platform development. I've found him to be very level headed and rational about certain subjects, and seemingly dogmatic and irrational about others. Thus, I read his characterization of the two "cultures" of Unix and Windows development with interest.
I feel able to comment on this subject with some credibility. My first three years in employment as a programmer were spent doing Windows development. I maintained wrote GUI applications and also wrote COM servers and ActiveX controls. I became as intimately involved with these things as I care. It wasn't until during my last year of Windows development that I started using Linux and became acquainted with Unix and Open Source development. Since then, I have done all of my personal and professional development on Linux.
I think, on the whole, Joel's characterization of the two cultures to be accurate. Good Unix programmers program for other programmers. I think it has a bit to do with the "scratching your itch" motivation ESR talks of with open source development. I am a programmer, and if I am scratching my own itch, I am targeting programmers. Windows developers, however, target end users. As a programmer I found this to be extremely difficult to deal with. I felt like it made development extra hard for me task as a developer. The tools and libraries available under Windows made some things very easy. Yet, at the same time, some things were very difficult. Yes, because I didn't have the source to the libraries available, it made some things very very difficult. That said, I do find development to be much easier in the *nix world.
Yet, it is here where I depart from Joel's assertions. He seems to think that being programmer-oriented necessitates being non end-user oriented. I don't want to turn this into a "viability of Linux on the desktop" or "Linux will beat Windows on the desktop" argument. But using the development of the two major desktops for Linux (Gnome and KDE) as examples, I think it is clear that valuing code both for programmers and for end-users is entirely possible. The group behind each desktop, within their own philosophy and goals, seem to optimize for both. The developers care very much how their APIs are structured and the tools and frameworks that go behind their respective desktops. At the same time, much effort is going into giving what they feel is the appropriate user experience. As their APIs and frameworks mature, more time is spent focusing on making productive applications and on human interface guidelines and the like.
I would contend, however, that the opposite is much more difficult to achieve. In closer examination, I could anticipate objections to this. Given my separation from the Windows and closed-source programming world for the last few years, I am not as fully qualified to answer. I suppose one could say that Microsoft's introduction of the .NET platform and C# have been developer focused efforts. Windows developers I know say that developing GUIs in C# is much easier and enjoyable than was previously possible in MFC.
Joel complains about Unix developers being "religious" about certain issues. One of these would be the open-source versus closed-source debate. For me, however, this issue is one that stems at the heart of why Unix development is easier for me. I can't look at the issue of Windows development versus Unix development without bringing it up. But I also can look at the issue separate from that, and with my experience, attempt (as I have here poorly) to explain my position.