This post has been stewing for a while. I’ve struggled for a way to describe the needless clash I see between the communities I work in. But I think I’ve found my analogy.
Ever watch a Clint Eastwood Western? Not Dirty Harry, or any the modern-setting movies he’s been directing lately, but the Westerns. In particular, the Man With No Name series and The Unforgiven. They were a culture shock when they came out. John Wayne, Roy Rogers, Bananza, etc all dominated the Western story telling. White hats and white horses. There might be a happy end, or a sad end, but the lines of good and evil were drawn, and Justice was a virtue.
It’s a misconception that Clint’s movies were different because he was the bad guy. But he wasn’t. He was an agnostic, or better yet, a mercenary in a world of gray. Rarely in those movies was any character purely good. His character, “the man with no name”, looked at the Civil War and didn’t see right and wrong, but death and corruption. He was brutally honest and indifferent at the same time. He evaluated options and propositions on his own terms, when needed. He took advantage of both sides.
And he clearly saw fault in himself, and everyone else. He recognized there was no innocent, and no perfect. Best embodied by the following line from Unforgiven when the Scofield kid is trying to justify a killing he feels guilty for by claiming “he had it coming.” Clint (Will Munny) responds:
“We all got it coming, kid.”
What’s all this have to do with development? I work in multiple environments. Most commonly .Net and Ruby. I’m reasonably active in the community going to user group meetings and conferences. I’m active on social networks and stackoverflow. And I listen to podcasts. All from both communities.
And I can’t get over the amount of criticism and disdain they have for each other.
What Ruby people say about .Net. Ruby developers talk about the ceremony of .Net. And the flawed use of compiler as a testing tool. And they talk about .Net developers relying on Microsoft for direction and enhancements. And every fictional .Net developer that a Ruby person talks about is over 40, works 9-5 and hasn’t gone to a user group in years.
What .Net people say about Ruby. They build simple commerce sites and blog engines, not enterprise applications (DHH didn’t really help that one with his infamous enterprise slide). Dynamic typing doesn’t work in larger applications. It’s slow. It’s not interoperable. How can you program without an IDE. Carl on .Net Rocks frequently says (or at least use to) that it’s very similar to Visual Basic.
What I think about the .Net community. Like all stereotypes, there are some truths in the fictional .Net developer. There are a lot who do not engage the community outside their workplace. And many developers are too reliant on Microsoft for innovation. And for all of their love of the type system, most .Net developers don’t understand it. One in ten .Net developers I interview correctly answers the “var” is still statically typed. And there are a lot of developers who cling to their architectures, unwilling to look at new patterns and practices. Stored Procedure experts who don’t want to hear with proper object caching and execution plan caching, an ORM can actually be faster than an ADO.Net solution (let alone and ORM using stored procs).
That said, there are a lot developers who care and do apply modern practices in .Net. Want proof? Google any of the following terms: StructureMap, NHibernate, Fluent NHibernate, NUnit, MSpec, SpecFlow, Castle Project, Mono, Ninject, etc. The ASP.Net MVC framework has a ways to go to catch up to Rails in maturity, but the reason it has seen such rapid adoption is that people in the .Net world do move to better tools given the right exposure. And community pressure can make a difference with Microsoft. Note the massive revamps by Microsoft in technologies that were launched badly (ie Entity Framework, Silverlight).
What I think about the Ruby community. While I agree with little of the technical criticism that .Net people have for Ruby, I have a big problem with attitudes and perceptions. As I see it, the Ruby community is currently the most elitist community in technology today. I started working with Ruby in 2005, and have written code generators, rake build, rails sites, a sinatra site and more in Ruby. Yet I regularly go to ruby presentations where the chatter is how .Net developers just aren’t enlightened yet. Apparently I’m part of some unwashed ignorant mass of people they need to save. Ruby and Agile compete for the biggest outbreak of “religion” in the technical community.
And they say .Net devs rely on Microsoft for answers. But these Ruby devs rely on 3 or 4 “Ruby”-gods on twitter to tell them what view engine or testing framework they should be using in their next project. And everyone thinks every piece of code should be a gem that can be used by the world. A recent Ruby Show podcast announced a gem for validating email addresses. So I should create a gem for every regular expression in my project and distribute to the community. Fantastic.
That said, Ruby has a great development story. As with any early adoption, the first people over were ambitious and risk takers. That has benefits. And these were people who cared about their coding, so the conventions, testing patterns, and developer experience are all very nice. They’re IDE agnostic. The documentation comes with it’s own server for hosting it, and it’s in simple HTML. How many vendor products would benefit from that approach?
Back to Clint. So how does this tie back to Mr. Eastwood? It’s frustrates me to see this useless struggle, and the mud-slinging involved. No development platform is perfect or all powerful. And being a member of a certain community doesn’t make you valuable, it’s what you do within that community and how much you learn and teach that says something. I would rather hire the most active and flexible member of the COBOL community, than to hire a programmer in a hip new framework that really has his or her head in the sand.
I’m grateful to work in multiple frameworks and languages. I try to take the best value and patterns from each and apply it to any programming I’m doing. And I don’t get religious or emotional about it. To put it in the man with no names terms, I ride in, take a honest look at myself at those around me, try to produce the most value, and then move along. Without expectation or attachment.
This same dichotomy exists in other forms. Agile vs the world. That would be an interesting post.
In the beginning, community enthusiasm and pride is necessary to get a community going. And early members are well intentioned. But when that turns to religion, zealotry, and segregation, things get ugly. And both communities suffer from that. In other words, we all got it coming.