Why Clint Eastwood is My Programming Hero

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.


Posted

in

, , ,

by

Tags:

Comments

2 responses to “Why Clint Eastwood is My Programming Hero”

  1. Mike Lindegarde Avatar
    Mike Lindegarde

    As a whole, your post is spot on; however, there are a few things I’d like to comment on.

    The var Keyword
    Make sure you ask the necessary supporting questions when asking a potential developer about the “var” keyword. Being ignorant as to exactly how the “var” keyword works does not automatically mean they are ignorant when it comes to the .Net type system. I was stuck using VB for my .Net development for years. As you may or may not know, VB does not have the “var” keyword. The fact that I used VB does not mean I’m any less of a .Net developer because I don’t know the C# var keyword. I’m pretty sure the type system is still the same.

    Even if the developer has been working with C# for a bit, if they haven’t done much with Linq they may not be aware of the var keyword. Given that var was introduced to handle anonymous types and not really intended as a substitute for typing out long data types not every developer has embraced or had a reason to use var quite yet.

    Instead, consider asking about boxing and unboxing. What happens when you call ToString on a value type that doesn’t override the method inherited from Object in terms of the impact on performance and memory allocation? That actually tests their understanding of .Net type system issues rather than their familiarity with a new C# keyword. Explaining to a knowledgeable developer that var is implicit typing is a hell of a lot easier than explaining the concepts of boxing / unboxing, heap vs. stack, value vs. reference, etc… to someone who just happens to have seen the var keyword in the list of what’s knew in .Net (which happens to be where I saw it before my first conversation with you).

    When Worlds collide
    I firmly believe in the best tool for the job. I refuse to believe that one development methodology is better than another in all cases. Those arguments are a lot like trying to argue that a race car is the best way to get from point A to point B in downtown Boston or that a taxi cab is the best way to get from point A to point B in the Indy 500. I don’t know why more developers don’t see that. This applies to all aspects of development: the architecture you use, the implementation language of choice, the IDE you use or don’t use, etc… Consider all aspects of the problem (developer knowledge base, existing code libraries, strengths and weakness of a language or paradigm, etc…) and then make your case for tool A over tool B.

    What I don’t really go along with is mixing tools (I’m using “tools” as an all encompassing term here) for no reason other than “its easy”. If your architecture has set forth a specific pattern that is used in 90% of the application, don’t introduce a new one because it’ll save some time: stick to the pattern. I also don’t really get behind using things in ways they were not intended. As a C++ developer at heart I’m very familiar with “how dangerous C++ can be” because novice developers tend to abuse C++ features and leverage them in unintended ways (e.g. overloading operators in unexpected or incorrect ways, using multiple-inheritance the wrong way, using void* to dance around type checking…). Use things as intended: if you don’t know how something was intended to be used then don’t use it.

    If you’re working in a strongly typed imperative / procedural environment then develop in that fashion. If you’re doing something declarative in nature then take your imperative logic elsewhere (i.e. keep IF statements out of your SQL).

  2. Stefany Standish Avatar

    I thought Clint Eastwood was great in Gran Torino. A friend of mine saw Here After last night and told me nothing really happened in it but was a cool idea.