Wednesday, August 05, 2009

The Suck/Rock Dichotomy

Lots of people are passionate about software development (much to the confusion and chagrin of our significant others), and that unfortunately leads to what I call the "Suck/Rock Dichotomy": everything in the software world either sucks or rocks, with nothing in between. While this may lead to interesting, endless debates (Emacs vs. vi, anyone?), ultimately it ill serves us as a community.

Having been in software communities for a while, I've seen several tribes form, thrive, then slowly die. It's a sad thing to watch a community die because many of the people in the community live in a state of denial: how could their wonderful thing (which rocks) disappear under this other hideous, inelegant, terrible thing (which sucks). I was part of the Clipper) community (which I joined at its height) and watched it die rather rapidly when Windows ate DOS. I was intimately part of the Delphi community which, while not dead yet, is rapidly approaching death. When a community fades, the fanaticism of the remaining members increases proportionally for every member they lose, until you are left with one person whose veins stick out on their forehead when they try to proselytize people to join their tribe, which rocks, and leave that other tribe, which sucks.

Why is this dichotomy so stark in the software development world? I suspect a couple of root causes. First, because it takes a non-trivial time investment for proficiency in software tribes, people fear that they have chosen poorly and thus wasted their time. Perhaps the degree in which something rocks is proportional to the time investment in learning that technology. Second, technologists and particularly developers stereotypically tend to socialize via tribal ritual. How many software development teams have you seen that are not too far removed from fraternities? Because software is fundamentally a communication game, I think that the fraternal nature of most projects makes it easier to write good software. But tribal ritual implies that one of the defining characteristics of your tribe is the denigration of other tribes (we rock, they suck). In fact, some tribes within software seem to define themselves in how loudly they can say that everything sucks, except of course their beautiful thing, which rocks.

Some communities try to purposefully pick fights with others just so they can thump their collective chests over how much they rock compared to how much the other guys suck. Of course, you get camps that are truly different in many, many ways (Emacs vs. vi, anyone?) But you also see this in communities that are quite similar; one of the most annoying characteristics of some communities is how much some a few of their members try to bait other communities that aren't interested in fighting.

The Suck/Rock Dichotomy hurts us because it obscures legitimate conversations about the real differences between things. Truly balanced comparisons are rare (for an outstanding example of a balanced, well considered, sober comparison of Prototype and JQuery, check out Glenn Vanderburg's post). I try to avoid this dichotomy (some would say with varying degrees of success). For example, for the past 2 years, I've done a Comparing Groovy & JRuby talk at JavaOne, and it's been mostly well received by members of both communities. Putting together such a talk or blog entry takes a lot of effort, though: you have to learn not just the surface area details of said technologies, but how to use it idiomatically as well, which takes time. I suspect that's why you don't see more nuanced comparisons: it's a lot easier to resort to either suck or rock.

Ultimately, we need informed debates about the relative merits of various choices. The Suck/Rock Dichotomy adds heat but not much light. Technologists marginalize our influence within organizations because the non-techies hear us endless debating stuff that sounds like arguments over how many angels can dance on the head of a pin. If we argue about seemingly trivial things like that, then why listen to us when we passionately argue about stuff that is immediately important, like technical debt or why we can't disprove The Mythical Man Month on this project. To summarize: the Suck/Rock Dichotomy sucks!


Anonymous said...

Great post Neal. As you well know, one solid example of this is Ant vs. Maven. I can actually articulate a use case for each one, but many of the Maven naysayers cannot. The worst part is that the sucks/rocks dichotomy mutes people's ability to discuss the technical facets of the tools in question.

Dan Tanner said...

Except for Websphere. It really does suck ;)

Also amusingly, I saw advertising on this page for Mingle, with the words quoted under it "Mingle 2.0 rocks hard".

Unknown said...

Thanks for the kind words about my Prototype/jQuery post. But I'm not content for you to mention just one of my blog posts. :-) A few years back, I wrote explicitly about one aspect of the suck/rock dichotomy. You might enjoy this post as well.

Ontosophy said...

One of the main reasons I see for the suck/rock phenomenon is that with computer languages, we are dealing with something that mirrors, more or less well, our own thought processes: someone who thinks like us created this, so it's easy for us to use it.

For me, as an example, I find Groovy very comfortable and natural (now that it has stolen so much from Ruby and others), whereas I experience Ruby to be object-oriented Perl, and Perl just grates my nerves because my mind doesn't think that way, so I find Ruby irritating.

Since, as we all know, the whole world should be exactly like me, therefore, Ruby, and everyone who likes it, sucks, while Groovy, and everyone who likes it, rocks.

The problem, you see, is the emotional immaturity of the folks who gravitate to this profession. We tend not to have the maturity to be confident in our differences.

Philip said...

Great post. I agree completely.

Oh...and Ruby sucks ;)

Mike Bria said...

Well put, rather interesting indeed.

BTW...Windows sucks.

Unknown said...

Great post.

Even if it doesn't match completely: You will even find engineering teams where "team members" are put either in the sucks or rocks bucket. This is not only about programming languages or technology.

Bailey W. said...

Good one... How about tribal software behavior just "sucks rocks"? :)