Programmer Competency Matrix

Posted on Jan 12, 2010

I found this matrix somewhere and after reading through it, am left with some thoughts.

The first couple of sections are rather useful. I’ve met a lot of programmers who are really good at what they do, but looked at me like I was a talking chicken when I tried to tell them that Python lists are arrays, not lists. Apparently the difference between linked lists and arrays is not too important to some people. Whereas these same programmers could run loops around me in other areas in the matrix that I felt I lacked in. If you are any kind of programmer, I recommend reading the first sections on “computer science,” “software engineering,” and perhaps the first few rows of “programming.”

However, from there it kind of devolves into trivial attributes. Such attributes as “API,” “frameworks,” “languages exposed to,” and worse, “blogs,” make little sense. They don’t really give any sort of indication of competency and instead display only the author’s bias in my opinion. For example, it’s not entirely impossible that your first language could be Lisp or even Haskell. Exposure to these languages basically guarantees at least partial knowledge of functional programming and its related concepts (currying, lazy evaluation, etc). For the “languages exposed to” row, this would put you at level two in the programmer category. Yet you would likely be a level zero in the “languages with professional experience” row. While the distinction between knowledge and experience can be made, in the context of professional versus academic experience the distinction means very little. The astute reader might find more odd entries as the ones I’ve pointed out are just the tip of the iceberg (“IDEs,” really?).

It could be a useful aid though, for those of us who have to interview new programming candidates. Perhaps someone could take the lead and refine this matrix a little more? I would start by removing the frivolous rows and cross-checking inconsistencies between existing rows (professional versus academic as noted above, for example).