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

Programming

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 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

Experience

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.

Knowledge

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.