Funny how people who write articles are what makes a good on their programming blogs often include "writes a programming blog" as one of the attributes a good candidate should have...
Hmmm, maybe my comment should read as: "it doesn't perfectly describe me in every way, hence it's a terrible list" ;) I'm getting too many 2's damnit!
Yep. It's a dick measuring contest, geek-style. At least I'm going to call it that since I did so badly. It's amazing I get anything done. And yet . . . I do.
It absolutely is, but it is slightly useful to at least attempt to measure competency.
Though, this chart implies all skills are equally worthwhile. There's another extremely important category missing here, which I'll call "solving the right problem". It might need to be split into a technical side and a business/marketing side. Solving the customer's actual problem, and using the correct technical approach vastly outweighs many of the categories listed.
"Solving the right problem" is like the skill of "big picture thinking". It's clearly important, but the evaluation of it is subjective and case-based. What's nice about this tool is that it's relatively objective, for the most part, although it certainly doesn't paint a complete picture of what makes a good programmer (which is context-driven, in any case).
It's not a different version... it's the same thing on the same site. Saying it's a different version is like pointing at a page in which an image is embedded and linking to the image itself and saying they're different versions.
This may be pretty useful for as a pre-interview form to fill. Definitely not as a tool to generate a score or to filter candidates, but as a way to easily get an idea about somebody's strengths and weaknesses and to start conversation. Also, if you have some code samples in advance (which you should always do) they're dead easy to verify. Actually just verifying them is not a bad interview in itself.
I don't like pre-interview surveys much. I tend to fill them out biasing against myself which tends to be a disservice to myself and to the employers.
To use an example. Lets say I'm considered an expert in a closed pretzel making community. I worked for the Bavarians who are renown in the pretzel making community. While there I made some waves in the pretzel making arts. Lets say the Bavarians are very secretive and won't talk about their pretzel making to other pretzel makers. They're Bavarians, they don't need to.
Later I saw a job at a medium sized pretzel factory in Portugal. I liked the location and applied as an operational pretzel maker. They asked me to fill out a survey and I listed that I didn't have experience with dough pullers and have only shaken the salt shaker a few times in recent history.
Quickly said factory sends a "you're not what we're looking for email". Needless to say, I was slightly perplexed.
The survey didn't give me a chance to state that I had invented new pretzel recipes (and pretzel making techniques that did not require dough pullers at that) and had a different view on pretzel making because I was working for the Bavarians for so long. They also missed out on my motivation to get closer to people eating pretzels and take my ideas outside of the schnitzel tower the Bavarian pretzel makers occupy.
In short, I wrote all this to say I'm not a fan of pre-interview surveys.
I did mention it shouldn't be used as a filter, for exactly this reason. A pre-interview form can be used during the interview, too. Instead of starting with a blank sheet in front of you, you have this chart. "I see here you have knowledge about VCS systems... which did you use?".
These all things can easily be learned. Anyone can jump from 2 to 4 in a couple of weeks by learning binary trees, SVN, starting to write unit tests, and do all the other skills. Wouldn't make him less of a moron.
It is the abstract thinking, akin to what is needed at TopCoder and mathematical olympiads, that makes a programmer great, not his fucking .emacs file or nice template for a file.
I'm surprised that I'm mostly 3s and 2s after 4 years of experience at Intel and 1.5 years experience doing side work at college jobs. Working on many projects has allowed me to focus strongly in a few areas. I'm still a "1" in TDD because I only write unit scripts after the code is written and focus more on getting stuff accomplished.
For a self taught programmer, I find it quite interesting to see which areas I've gotten up to 3 or 4 and which are 2. ( Thankfully none are lower! ) Though obviously it's going to come from one industry bias, it's still useful as a reminder of what areas I should do more reading in.
Honestly, I think everyone else is too. Most of the things aren't that advanced... or rather, I am not particularly proud that I know or do the things listed. (It does scare me that there are 1s and 0s, though.)
Quick issue -- there are many grades of levels 2 and 3 on that matrix (i.e. one could know what a red-black tree is and where it should be used -- or one could easily be able to implement it; one could know basic scheme -- tail recursion, continuations -- or one could have made a prolog compiler on top of common lisp (cf Norvig's book)).
In essence to put it this way:
"for $thing in ( technology, pattern, algorithm, methodology ):
it doesn't discriminate someone who've toyed with a $thing, someone who has made an implementation of that $thing for an employer or someone who has authored an all-new $thing."
I prefer a binary "Programmer Competency Matrix". Kinda like Hugh Jackman in the movie Swordfish...Get it to work in 60 seconds while getting sucked off with a gun to your head. All the rest is fluff.
I fall pretty dead on into the Level 1 category, though in certain areas I fall into the 2 and I think I managed a level 3 someplace... But, then I have < 2 years professional programming experience (proceeded by 3 years of management experience) and a masters in information systems, but even that is more management oriented.
Hopefully at some point I'll be able to make up for my terrible education in the areas of math and algorithms.
I think this is interesting, but wouldn't judge yourself too heavily on it. I think many of the lines are far too easy to get to the '3' category, and leave considerable room above for really gifted programmers.
My results are about 1/2 three, 1/2 two, a couple ones, and nothing in the gifted category. :) Background here is some (very bad) programming before undergrad, undergrad CS from a good school, then 6 years working in enterprise software.
I really don't think this chart categorizes what makes a programmer competent though. I value the knowledge of a programmer that is extremely deep in a couple categories more than someone who has a sprinkling of everything.
Hmmm, maybe my comment should read as: "it doesn't perfectly describe me in every way, hence it's a terrible list" ;) I'm getting too many 2's damnit!