Reddit’s “Programming” section can be really curious at times. For those of you who don’t know it: Reddit is a social news site (and I think the fact that I looked that up on Wikipedia not only makes me a dork, it also shows that nobody can escape Web 2.0). Anyway, so Reddit has a “Programming” section that most of the time is a very interesting read. It often features links to scientific papers or extremely well written blog articles on topics ranging from basic software engineering to things like garbage collection, just-in-time compilation and many other things of that nature. I guess the breadth of topics covered is what makes Reddit so interesting to me and to many others. It’s an unusual mix and as you would expect, the quality of the articles featured varies greatly.

Recently, there have been a whole lot of articles on “how to identify a good programmer” or on the different “levels of programming competency”. For example, at the moment the number one link on “Programming Reddit” is one called Programmer Competency Matrix. In that article (if you want to call it that), the author composes a fairly complex chart of what he believes the different levels of programmer competency to be. He proposes four “levels” of competency with level 0 being the lowest and level 3 being the highest. What he seemed to have forgotten however is “level 4”, which is where the programmer starts to realize that sometimes it is best not to categorize everything. Let me explain.

Whenever I get to talk someone who really excels at what they’re doing, I realize that the reason why they’re so good is because they have a clear focus. At some point they decided “I’m going to be the compiler guy” and they began to absorb everything there is to know about compilers. At the same time, they might be absolutely clueless about Web Services or relational databases. Is someone like that less of a programmer than someone who has an understanding of all of those things but doesn‘t excel at any of them? I don’t think so. Of course being “just” the compiler guy may not be a good idea either because technology changes and it may change into a direction that you haven’t anticipated. Let’s say you’re a Java kind of guy now, but at some point in time Haskell takes its place. If you’ve never done any functional programming in your life, you’re probably screwed. So yes, it’s good to have a solid and diverse foundation to build upon but if you’re going to become really good at something, quite obviously other things will have to fall short.

So the next time somebody tells you that you need to know assembly to be a good programmer, tell them (in the nicest way possible) to fuck off. It doesn’t hurt to know assembly, but then again it also doesn’t hurt to know particle physics and not an awful lot of people do. Any kind of general categorization of “programmer competency” will always fail or it will be outdated in a matter of a few years, unless you keep to the very basics. Also, like all programmers, the people writing those charts or “top lists” will always be biased towards what they’re good at – nobody makes a chart that will call them anything but a genius programmer.

And to those making those charts/blog posts: please stop. Just because you’ve been “hiring people” for the Web 2.0 start-up that you run from your mum’s basement doesn’t mean you should be telling people that they’re bad programmers because they don’t know how to set-up a CVS server.