NOTICE:
This content is in the "archives" of a retired blog called Gadgetopia. It has been moved to this subdomain as it is no longer considered relevant to the site. It is being hosted here for a indeterminate period of time. Its existence at this URL is not guaranteed, and it may be removed at any time. If you would like to refer to this content in the future, you are encouraged to save it to your local file system.

Some content from Gadgetopia was moved to the technical blog on deanebarker.net

Programmer Competency Matrix

Originally published by "dbarker" on 2008-06-30 17:18:00Z

Programmer Competency Matrix: This page presents a matrix of programmer skills and what it requires to be at different levels, 1-4, from novice to master.

For instance, for “data structures,” it outlines the following levels:

  1. Doesn’t know the difference between Array and LinkedList

  2. Able to explain and use Arrays, LinkedLists, Dictionaries etc in practical programming tasks

  3. Knows space and time tradeoffs of the basic data structures, Arrays vs LinkedLists, Able to explain how hashtables can be implemented and can handle collisions, Priority queues and ways to implement them etc.

  4. Knowledge of advanced data structures like B-trees, binomial and fibonacci heaps, AVL/Red Black trees, Splay Trees, Skip Lists, tries etc.

I picked “data structures” specifically for good reason: I still don’t know what a LinkedList is. I’ve always wondered, but I truly do not know. I’ve talked to Joe about it, and he claims I do actually know what they are and have used them, but since I have no formal training in computer science (I was going to be a lawyer, after all), I just don’t know one when I see it.

I looked through the entire list, and I average about the second level (level 1, because the levels are 0-based). That was a little humbling, but there are two points that are important to acknowledge here:

1.

I score much higher on some things than others. For instance, I’m probably at level 3 for “version control,” level 4 for “communication,” and level 3-4 for “code organization.”

Thankfully, besides than one blip on “data structures, “ I don’t think I’m a complete novice for anything else (maybe “systems programming,” just because I’m not 100% clear on the difference between a “linker” and an “interpreter”).

2.

This list is designed for pure programmers. If it was designed around Web development, I’d score much differently. Web development encompasses a wider variety of skills (both code and human-oriented), and it keeps you more superficial inside them. The reason I don’t know what a LinkedList is, for instance, is because I’m abstracted far enough away from C that I haven’t had to use them – there are usually three or four layers between me and the core implementation.

Even if these lists are totally arbitrary and just one guy’s opinion, they’re still valuable because they help you learn what you don’t know. If I really want to bone up on some aspects of programming, this matrix gives me a good roadmap of where to go.

Comment by "Eric" on 2008-06-30 09:10:00Z
There's help for you yet, Deane. :) [http://www.geeknews.net/2008/06/21/who-needs-a-computer-science-degree-when-theres-wikipedia](http://www.geeknews.net/2008/06/21/who-needs-a-computer-science-degree-when-theres-wikipedia)
Comment by "Tal Ater" on 2008-07-03 10:55:00Z
Humbling? That was damn right embarrassing! And to think the blog post I read right before this was about [Impostor Syndrome](http://webworkerdaily.com/2008/06/30/battling-imposter-syndrome/). I feel like giving all my clients a refund! I'm not worthy!
Comment by "Michel Bagnol" on 2009-08-25 12:30:00Z
Hi, I have "ported" the programmer competency matrix to Excel and added some self-evaluation functionalities. Please find the Excel version of the Programmer Competency Matrix here: [http://www.nodewave.com/programmer-competency-matrix](http://www.nodewave.com/programmer-competency-matrix)