Loving and Hating programming languages

Yesterday I was involved in an interesting discussion about how, as developers, we tend to favor one programming language over the other. In fact developers are so passionate about their language choices that ‘favor’ is probably not the right word here. We often say we ‘love’ one language and ‘hate’ another – we’re passionate about this stuff!

So the discussion revolved around whether or not this is a good thing. For example, some developers are so passionate about Ruby that they have advocated that we shouldn’t be working in any other language. The opposite end of the spectrum would be for us to be completely language-agnostic and always try to choose the best language for the problem at hand. In my experience most developers fit somewhere between ‘preferring’ a certain language and being a complete fanatic for a certain language and hating all others.

Why are we so passionate about this?

I tried to explain why developers are so passionate about their choice of language. I argued that we are passionate about our work and that it’s impossible to have an in-depth knowledge of multiple languages. I made some points about certain languages being more ‘expressive’ and giving us more options.

I thought about it some more and realized that my answers didn’t really convince myself. Sure it’s difficult to have an in-depth knowledge of multiple languages, but I don’t think this is what’s really holding us back. Sure, we can be lazy (just like everyone else on earth), but the challenge of learning a new language is pretty attractive. Yes, some languages are more expressive, but a more restrictive language often helps in creating consistent code (which is something we all love).

After some thought on the topic I have come up with 2 – more basic – reasons.

Not all languages are created equal

A programming language is not merely made up of syntax, language features and a compiler/interpreter. When I think of a language I also think of the different frameworks available – Ruby has Rails, C# has ASP.Net and Java has some web-thingy that old men with beards use. (See what I did there?) Ruby has RSpec/Cucumber, C# has NUnit and Java JUnit. There is a very long list of these examples.

What this means from a developer’s point is that all the different frameworks and tools available in each environment has a major impact on what you end up doing during a typical development day. There is nothing more frustrating than spending days or weeks implementing a feature in Rails that you know would only be a simple configuration setting in C#. Having to find a really roundabout way of doing something in C# simply because it’s a statically typed language is no fun at all. It’s the same with testing – running into quality problems because the testing framework doesn’t support everything we want to do makes us – well, sad. And more passionate about the languages with better testing frameworks.

We consume software to create software

As a software developer I spend 90% of my time in front of my laptop (ballpark figure). So while I spend the majority of that time creating software, I spend all of that time consuming software. That means my choice of language also dictates what stream of software I’ll be consuming for the majority of each day. Will I be fiddling in TextMate/MacVim/Terminal on OSX doing Ruby? Will I be compiling in Visual Studio and writing queries in SQL Server on Win7 doing C#? Eclipse/Ant/Git on Debian?

Keep in mind that since we understand how software works we’re often much less accommodating of the different annoyances we encounter within each environment. The fact that Windows Update is a terrible system makes me like C# a whole lot less. You can argue that C# in itself is a great language, but when you’re spending half an hour each morning (and after each crash) waiting for Windows to start and Visual Studio to load, all those arguments go out the window. And you tend to enjoy the language in that environment a whole lot less.

Conclusion

As passionate developers of software we are also passionate about the tools, frameworks and platforms we play around with. We’re consumers of software first and foremost, and – just like everyone else – we enjoy using great software.

I’m aware that many of the example I used here might be way off the mark – I was simply trying to illustrate that different language choices have a much larger impact than the syntax I end up using. Happy coding.