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