Code &Random 06 Jan 2014 15:53:14

The Competency Matrix and Me

I recently stumbled upon the well known Programmer Competency Matrix again, so I figured this time I’d store where I think I fit on it. I’ll use the linear 0-3 scale, since that’s easier for the in-between values.

Computer Science

  • data structures: 3
  • algorithms: 2.5 – I do use most of level 3, but I can’t always identify that I am doing so.
  • systems programming: 3

Software Engineering

  • source code version control: 3
  • build automation: 3
  • automated testing: 3


  • problem decomposition: 3
  • systems decomposition: 3
  • communication: 2 – this is an area where I can definitely improve, but haven’t really had the need to.
  • code organization within a file: 2.5 – definitely also need some improvement here, but overall it’s pretty good.
  • code organization across files: 3
  • source tree organization: 3
  • code readability: 2.5 – I can still happily write functions that nest 10 levels deep, though I am trying to kick that habit.
  • defensive coding: 2 – testing failure cases tends to be forgotten, but in my defense they almost never happen.
  • error handling: 2.5 – well, I quite firmly believe that exceptions should only be used in exceptional cases, so while I like to prevent them I will mostly just let exceptions through; if one happened, there’s probably good reasons for it.
  • IDE: 2 – there is very little that I change in the stock IDE configs, since I tend to use different ones across platforms so it never really pays off to customize too much.
  • API: 3 or 0 – I’ve written several wrappers to fill API gaps, but I also work with so many different APIs that I often have to look up documentation. This is a weird category.
  • frameworks: 2 – I have no desire to write yet another framework, but I could if I wanted to.
  • requirements: 3
  • scripting: 3
  • database: 3


  • languages with professional experience: 1.5 – I can read functional, concurrent, and logic code, but have no reason to write in any of those. And I don’t like the constraints they impose. C++ lets me mix and match paradigms as I want.
  • platforms with professional experience: 3 or 2 – depends on how you define platform.
  • years of professional experience: 3
  • domain knowledge: 3 or 2 – weird like API, and this really depends on what domain you’re talking about.


  • tool knowledge: 3
  • languages exposed to: 2.5 – as said above, I can at least read them.
  • codebase knowledge: 3
  • knowledge of upcoming technologies: 3
  • platform internals: 2.5 – I used to write such little tools, but haven’t needed to for a long time. Existing tools do the job nicely.
  • books: 0 – I have not and do not read programming books, which I’ll admit was a horrible way of trial’n’error learning all that I know. But these days I can find everything online with multiple sources and differing opinions.
  • blogs: 3 – well, you’re reading this post somewhere, right?

In a year or two (or five) I can come back and see if I actually improved where needed.

Subscribe to the comments through RSS Feed

Leave a Reply

To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image