September 01, 2007 at 09:16 Tags Programming

I read an interesting discussion with this topic on Joel's discussion group today. Basically, the OP asked if the following is true:

The great programmers tend to regard certain languages better than others - a person proficient in Lisp, Python or Ruby is considered to be a better programmer compared to one proficient in Java, C# or VB.

While this is unpleasant to admit for some people, I believe that in its core this statement is true1. Sure, what else would I think, given that I'm such a person myself (believing that Lisp and Ruby are more powerful than Java and C#), and most people think they're way better than average. However, I'm writing this post to defend this position.

What really makes programmers good is not which language they are proficient in, but rather whether they took the effort needed to master other, more powerful languages. Suppose Bob programs in Java for 5 years. Java is all he knows, and he's pretty good at it. Now, his friend Alice also has 5 years of Java experience. However, in the past couple of years Alice has picked up Ruby and now writes some of her code (mainly scripts and prototypes) in it. Recently, Alice also began dabbling in Lisp after hearing that all those cool functional features of Ruby come from there. Who is the better programmer?

Most chances are that Alice is. Because while she was happily programming in Java with Bob, she actually had the curiosity to ask herself if there's anything better, more powerful out there. She wrote a mountain of repetitive code and felt bad with it, so she looked around and found out there are actually languages out there where these things are easier. All this while Bob was happy pushing hills of Java code.

Naturally, there is more - the mere fact that Alice knows several programming languages makes her better in some sense, given that these languages are different enough2. It's that old and corny toolbox analogy - to be able to use the right tool for the job, you must have a lot of tools. I've seen good C programmers with years of experience struggling terribly when the time came to write a simple text-munging script. They usually ended up writing a 500-line long C program to do that, instead of using Perl.

However, it is not the main point. The main point is the one stated before - good, truly good programmers aren't content with the tools they're given. They are only while they're still apprentices, but pretty soon they start to feel the limitations of their tools and seek better tools. This is the barrier between really good programmers and code monkeys. The really good programmers usually love what they do, they love learning about new programming techniques, love comparing languages and libraries. It doesn't necessarily mean they still don't write Java for their day-job, but their understanding of other languages and systems greatly enhances their skills. They resent the "it pays the bills" approach of the code monkeys who are content with whatever tool they're given.

So yes, this is about craft, about art, about love. Only people who truly love what they do are truly good at it. And I don't know of any truly passionate programmer who didn't give a try to one of the more powerful programming languages, even if just to learn something new.

P.S. You should really read Paul Graham's Beating the Averages. He is much better than me in explaining pretty much the same point.

1 I would just add the restriction: a person with several years of programming experience proficient in Lisp..., to exclude all those newbies that just recently began programming and picked Python or Ruby because they are popular and easy to use. Such people are not yet in a position to decide which programming language is better, and can't be judged by this criterion.

2 If I know C, Pascal and Fortran I certainly have less tools in my disposal than someone who knows C, C++ and Perl.