Fog Creek Software
Discussion Board

Software Cultures

I read Joels review on biculturalism and most agree. As much as I dislike Eric Raymond for acting as a spokesman for people who never asked for it, his books contains a lot of intelligent insights and observations.

I think Joels news post on the other hand left a few dangling threads which I feel I'd like to respond to:

1. GNOME/KDE is not UNIX. The UNIX world Raymond describes is mainly the CLI tools. The KDE/GNOME culture represents people coming to UNIX because the free OSes today are the technically superior ones, and bringing in the end-user-Apple-esque culture. GNOME and the Windows shell are very culturally similar.

2. Joel is not Windows. Sometimes Joel, probably without meaning to, sounds like a spokesman for the Windows culture. The end-user-GUI-friendly culture would be better illustrated with the Apple culture, they do a better job at this.

Windows, being the most popular environment (much like English being a de-facto western world language) is a pragmatic bastardization of many cultures.

3. The reason Red Hat would recommend people to use Windows at home is probably the same reason I would: People, hardly ever seeing the whole picture, may be tempted to run Linux solutions because of the lower operating cost and the increased stability, should think twice because you can't just walk into a shop and buy accessories for "the computer". That would end you up with Windows-only stuff. You have to act much like a Mac user, only buying stuff with Linux (or Mac) support. The end users tend to stick with Windows because of its economic power in the marketplace.

4. Cultures are not first and foremost tied to operating systems. Most people are pragmatic and solution oriented. These people are the ones who use the Windows registry as to store the settings in their word processor thinking that most of their users would be in that environment.

They are however not part of any Windows "culture". If Mac or Linux had the dominance Windows have today, they would just as happily use rc-files in /etc (or the Mac equivalent).

So I think observing cultures on different abstraction levels is needed. And as Joel says, the broader your knowledge on other cultures, the better programmer you will be.

Jonas B.
Tuesday, December 16, 2003

I am a linux user (and yes, maybe the idiology has something to do with my decision to switch to linux some 5 year ago).
Yes, KDE/GNOME make a huge step towards Aunt Madge, but it is still not enough. For example, Aunt Madge will have to get used to the fact that the OK button appears on one application on the left, and on the other on the right of the dialog box.
She will have to get used that printer configuration may be done from some 16 different menus, that there are some options in the GUI that have no effect on the system behaviour (tear-off menus on kde 3.1) etc.

Tuesday, December 16, 2003

The reason Red Hat discourages Linux on the desktop is that they recently stopped selling Linux on the desktop.

Daryl Oidy
Tuesday, December 16, 2003

Am I bi-cultural if I spend about 40% of my time in Linux/Perl/C++ and 60% in Windows/MFC/C++?

The thing about generalizations is that they're too damned general.

Tuesday, December 16, 2003

Although I agree about the concept of two cultures, I don´t think they are as Joel says: programmers writing for other programmers and programmers writing to get things done. My opinion is that there are those people who fear that the development of programming has not yet reached sufficient maturity to write something that will work reliably in the hands of the general public and those who hope it has. Obviously we can now write small useful programs with a high degree of reliability, but large complex inter-dependent systems are still beyond us. Both cultures are aiming for the same end result: something useful, but I believe that we are still waiting for some new insight into writing programs, or maybe just an enlarged body of experience that will in the end allow the cultures to merge.

Tuesday, December 16, 2003

"printer configuration may be done from some 16 different menus"

A little harsh, most people would just use CUPS, the Common Unix Printing System.

This can handle System V and BSD print commands (lp and lpr), and of course the KDE spooler "kprinter".  By the way,
KDE users working with non-KDE apps like Mozilla and OpenOffice can replace the call to "lpr" in the Print Command box (via the program's Properties) to use "kprinter" instead.

David B. Wildgoose
Tuesday, December 16, 2003

"You can just...<insert long description my mom couldn't follow here>" is the flip side of Unix elegance.  Not only can you do it one such way, but there's several choices available, each with different pros and cons.  Do both and let the user choose is a good solution in the Unix world.

That amazing amount of configurability comes at a cost, and having maintained and supported that app...  At that particular company, it was a three customers per support person max.  And if support had a configuration issue, they pretty much had to wait for the person who'd last coded the appropriate module to come back from vacation.

It seems to work for them, and I'm not trying to say it doesn't, just that making software I can barely use myself drives me mad.

Tuesday, December 16, 2003

I think there is a new player that may bridge some of the gap between Unix/Linux.  I have been following a new company for the last year. has a Linux OS that is geared for the masses.  From my read their desire is to give choice to Aunt Madge without the sacrifice of quality.  Many of the testimonial I've seen from them talk about how non-techies love the quick easy install and prefer it to Windows.  They even made it easy to find and install other Linux applications like OpenOffice.

Just my .02

Dave Hickman
Tuesday, December 16, 2003

Ease of use is one thing. Availability of quality software is another.

Generally speaking, OSS is
- often not feature-completed (the developer's itch was scratched at that point, I guess),
- documentation is at best incomplete at worst not available or understandable for newbies to the application or the field altogether
- the multiciplicity of toolkits and components make even basic tasks as copy/paste or drap 'n drop impossible, etc.

And I'm not sure what we would gain with again closed-source applications on Linux, since the very reason people use OSS is to avoid lock-in's as much as possible.

Frederic Faure
Tuesday, December 16, 2003


Most of the code that runs on the world today is backend server code written in C or Cobal and doesn't know or care about the end user. And it runs on mainframe or unix (there are at least three cultures by the way not two.)

If you are writing a front end user driven appliaction then by all means you best keep the front end user in mind. This is not every application however, or even most applications.

Fatal Error
Tuesday, December 16, 2003

"By the way,
KDE users working with non-KDE apps like Mozilla and OpenOffice can replace the call to "lpr" in the Print Command box (via the program's Properties) to use "kprinter" instead. "

I think you just proved a point by trying to argue the other side.

Mr. Fancypants
Tuesday, December 16, 2003

Mac OS X is, at it's core... unix.

How does this affect what Joel says?

Tuesday, December 16, 2003

The weakest part of the book is not its comparison
of OSes.  The weakest part is clearly the comparison
of programming languages.  It would be hard to agree
with any of his conclusions.

No doubt other "weakest" parts will be more evident
to others.  The book has enough strengths to stand
having this many weak spots.

Nathan Myers
Tuesday, December 16, 2003

>>How does this affect what Joel says?

If you read the article you will find out.

Tuesday, December 16, 2003

Please wake me up when Eric Raymod writes or says something original.

The so-called Unix culture predates Apple/Windows by about ten years, and developed in a world of slow and expensive hardware. The cultural divide he describes is between open source Linux advocates (including the slashdot karma whores Joel describes) and everyone else in the big bad proprietary non-open source world, not between serious developers in the Unix and Windows worlds.

I skimmed through Raymond's book and thought, here he goes again, taking credit for someone else's work. If you want to read about Unix culture from the people who started it, read "The C Programming Language," or "The Elements of Programming Style," or "Software Tools," or "The Unix Programming Environment." Anything by Kernighan, Plauger, Ritchie, Thompson. Get a copy of the famous Bell Labs Technical Journal that describes Unix and C. Learn about it from people who know what they're talking about.

Open Source does not equal Unix; until the BSDs and Linux came along you could not easily get access to Unix sources.

The lengths Raymond will go to in order to blow his own horn really defy belief. He must be the only person in the world who would call (buggy) fetchmail a core Unix utility. But then again, what do I know... I'm not one of the few elite people who make important decisions about the future of Linux.

I've programmed on mainframes and minicomputers running Unix, on Macintoshes, and for Windows. I know plenty of other programmers who have worked across those platforms. The "cultures" Raymond tries to invent just aren't there; he's interpreting the noise made by a few maladjusted Microsoft haters and people who write tools of fetchmail stature for the slashdot crowd as a culture.

To expand on Joel's sushi vs. hamburger culture metaphor, there are people who think everyone in Holland wears wooden shoes because that's what they've seen in story books. That's the depth of Raymond's insight into the Unix and Windows worlds.

Greg Jorgensen
Tuesday, December 16, 2003

Well, it appears to me that Windows "culture" thing is a fruit of Joel's imagination. It's just too hard to resist thinking that there's a lot more to your job than plain money-making, even when it's not.

Culture, even a software one, is more a social than a technical or business phenomenon. Things that people HAVE to do on their jobs don't make them adepts of any culture.  Local user groups, online communities, mailing lists and volunteer efforts is where software cultures manifest themselves. Good luck finding the "Windows-cultured" there.

Joe the Windows Developer doesn't "value" the code for the end user. He has to write such code, or he'll be fired.

Egor Shipovalov
Wednesday, December 17, 2003

Egor, I think that's a harsh statement to suggest there's nothing to "Windows culture" except for making money. You make it sound like "given a free choice, no real programmer would work on Windows."

That's just plain untrue. There's plenty of people out there who write Windows programs for free, for themselves. I'm one of them for starters. It might be construed that the end goal is to get experience ready for future jobs or something to add to your resume... but that kind of thing can easily be levelled at the liberated Unix programmers too, many of which also work for money.

Define culture in whatever manner you like, but there is a Windows community, which can be evidenced in part by the contributions to this forum.

Wednesday, December 17, 2003

Wow!  So much noise and so little light.

Right off the bat I'll come out and say I haven't read Raymond's book.  He sometimes comes off a little snooty, but usually has some excellent observations.  Most of my comments will cover Joel's observations.

First, my perspective that of someone who has programmed the following series of machines: HP2000e (1975)  in BASIC; PDP11 in FORTRAN, FOCAL and Assembler; ALTAIR and IMSAI in 8080 ASM, MSBASIC, FORTH; TRS80 in MSBASIC, Z80 ASM, FORTH, FORTRAN, C; DG ECLIPSE in BASIC, IBM 370 series mainframes in FORTRAN IV, WatFor, PL/1, Pascal, BAL, COBOL (blecch!), SNOBOL (nice); Apple IIe in UCSD Pascal; ATARI 800 in BASIC, 6502 ASM, FORTH, C; Amiga in BASIC, C, 68K ASM, FORTH; Various Windows Boxen using DOS, Win and Win32 API in BASIC, C, C++, Pascal, LISP, Prolog, 80x86 ASM, FORTH, multiple compilers and libraries and foundation classes; Linux using C,C++,  communications and kernel software, X Window, GTK and some KDE/QT, some FORTH and LISP, PERL, Python; MAC OS X in ObjectiveC; Web Environments including Apache, Website, IIS, PHP, PERL, Coldfusion; assorted VAXen, MUMPS and other strange critters and some that weren't important, so I'd like to think that gives me some perspective.

I wish I only had to do sweet little command line unix tools, exotic AI projects or CAD systems during my career, but St. Louis is not the Valley and occassionally I had to write boring applications to make ends meet.  So yes, I had to write stuff for Aunt Marge.  Sometimes I had to teach Aunt Marge how to click on icons and other stuff.  From time to time I taught programming courses.

While it is impossible to nail down culture's', this is what I've noticed since I began in 1975.

Programming Culture

Anyone serious about programming is a part of a greater culture.  One that revels in the design of a good algorithm elegantly expressed or the mysterious optimality of QuickSort.  In the correct consrtuction of a collection of objects.  In the simple beauty of a minimal GUI that achieves exactly what it needs to and can be extended by the user.  The Zen in a collection of small and elegant multi-purpose command line tools (UNIX or not).  In Zork's more interactive form of fiction.  In the practicality and ease of use of Wordpad.  In the power and simplicty (and mysterious frustration) of LISP and FORTH.  In the amazing wonder of Conway's LIFE or Mandelbrot Explorers or the wonderful but forever lost Lightflow global illumination renderer, or the processors that assisted in the landing of the lunar module on Apollo 11 or Sprit landing on Mars.  The fantastic and utterly unexpected wonder of the Tierra artificial life system.  The first Bell Labs speech synthesizer singing 'Daisy, Daisy'.  Luke Skywalker's uber-cool Heads-Up-Display  in the "Trench Scene" and the Rebel Alliance pilot briefing graphics (both by Larry Cuba while at UIC,  Atari Tempest, MIT Spacewar, Super StarTrek and Deus Ex.

The Internet.

As Lao Tsu says in the Tao Te Ching, 'The Ten Thousand Things' (and I almost named them all ;-)

That is why we choose to do this.  To explore the nearly limitless noosphere of computers.  If you are only here for a paycheck, I pity you more than the most ignorant and unwashed savages in the outer reaches of civilization because you are a slave and a blind one at that.

Joel, I think you need to rethink your boundaries.  Don't confuse the guy who loves to program under UNIX with Open Source Advocates.  Not because I don't necessarily agree with much of the Open Source movement, but you confuse your issues.  Most of what you observe as differences in Operating Systems are actually programmers fulfilling different tasks.  The systems programmer vs. the applictions programmer.  Some of us do both.  Some do both on Linux and Windows.  "We have both kinds of music, Country *and* Western."

Some applications are more interesting than others.  As a great piece of software craftsmanship I doubt that  Mr. Raymond would turn his nose up at the Windows version of Lightwave.  I think most Windows programmers would doubtless appreciate the power of the 'zsh' command processor in unix/linux as apposed to the brutish shovelware that passes for a CLI in Windows.

The differences are a lot more clear when it comes to Open Source software.  Despite all the hoopla it's really about a different way of funding software development and not having to recreate the wheel every couple years.  Let's face it, 99.9% of the software created is paid for once and milked for all it's worth.  Then it's usually tossed aside. Open Source is a way to let software live a little longer, and maybe forever.  Many times the software lives longer than the programmer.  People are still running MIT Spacewar on emulators and a few of those programmers are *dead*.  A little bit of immortality.

The UNIX mindset, if there is one, is about creating re-usable tools and sharing/selling them.  If you are a GUI programmer that means UI toolkits/classes etc.  If you are a systems programmer that means something else.  Mostly it's about keeping the best code and salvaging the the best of the rest.  Not throwing away human effort.  Building on the effots of talented engineers.  In that sense the UNIX mindset is everywhere in the programming community.  Even plugins in that language we all love to hate, VB, are synchronous with the 'UNIX' mindset.

I know there are other programmers on this board and we have all been on one or more projects that we've thrown a vast amount of effort, quality and creativity into only to see it languish or get tossed because some AVP got caught boning the VP's secreatary at lunch.  Programmer years are wasted in such ways.  Some of us programmers take pride in our handiwork.  We'd like to think that by retirement age we have something to show for all those years of debugging.  The Architect has his diagrams and pictures hanging on the wall and if he's lucky, buildings.  The ditch digger at least has his ditch.    All but the luckiest programmers have nothing but ephemeral bits dissapearing into the memory hole.

Maybe rather than arguing about the purity of UNIX vs. Windows programming we can see a wondrous vision of computers that extends beyond those limited temporal boundaries.

  Luminous beings are we...not this crude matter.
      -- Yoda

Jim Burnes
Friday, January 09, 2004

*  Recent Topics

*  Fog Creek Home