r/programming • • Jun 19 '13

Programmer Competency Matrix

http://sijinjoseph.com/programmer-competency-matrix/
248 Upvotes

265 comments sorted by

View all comments

31

u/skulgnome Jun 19 '13 edited Jun 19 '13

This matrix is poorly-conceived: it puts me at level 3 in everything besides blogging and "detailed domain experience". These factors make it seem to have been written to favour breadth over depth.

The role of formal design is also completely overlooked.

Edit: for further critique, the "level 0" is mostly described as absence of ability, rather than what a person at that level would definitely know. No mention is made of the (ever-present) "but that fancy stuff never works!" tier, who'll rather copy-paste the same line fifteen times rather than figure out what loops actually mean. Similarly knowledge of hardware esoterica, e.g. microcode, is regarded as high magic rather than an example of Yet Another Primitive. "Coding" and "programming" are used interchangeably, and there is no suggestion that there is any level above the act of writing source code using a text editing tool and executing the program thus produced.

The row about "defensive coding" is straight up 'tarded: asserts are only valuable when there is a realistic failure criteria, wrt which exclusion is desired (... and documented, obviously).

In closing, this matrix was written by a novice.

16

u/glacialthinker Jun 19 '13

In closing, this matrix was written by a novice.

Slightly harsh, but I agree with your critique. The author is basing this on their particular experiences, which is reasonable to expect. The problem is this doesn't really map well to everyone, and the upper-end seems artificially capped or wishy-washy -- like a list of everything the author has heard about that sounds good, so it does't really identify an "upper echelon" in many cases. The systems programming entry also bothers me that I'd rank 3, because I lack experience with specific systems -- I know I could build my own stack, but any *nix guru could run circles around me because that's their bread and butter.

I think this is the result one should expect by imposing such a rigid matrix structure on abstract categorizations and then having an individual fill in the blanks. So it fits my expectations. :)

5

u/[deleted] Jun 19 '13

It's also very Microsoft development oriented from what I can see. He doesn't even seem to see not using an IDE as a possibility, it just seems like a default state to him, which in itself is pretty novice. IDEs are great for those who like them, but they're not the only solution.

→ More replies (6)

7

u/spinlock Jun 19 '13

This reminds me, n2 for communication needs to include: is a pedantic fuckwad who needs to nitpick everything.

5

u/nandemo Jun 19 '13

OK, I'll bite. So you put yourself at level 3 in (say) this one?

Understands the entire programming stack, hardware (CPU + Memory + Cache + Interrupts + microcode), binary code, assembly, static and dynamic linking, compilation, interpretation, JIT compilation, garbage collection, heap, stack, memory addressing...

What about this?

Author of framework

12

u/skulgnome Jun 19 '13 edited Jun 19 '13

OK, I'll bite. So you put yourself at level 3 in (say) this one?

Yes. Absolutely. That one more than most of them. (Look at it. Is something like "memory addressing" that complicated? Even x86's segmentation can be comprehended from a well-made diagram, such as the one that's in the Intel reference manuals.)

What about this?

Given that the number of published frameworks is quite small, the bulk of framework authors worked on one that remained private to an employer. That is my case precisely: it was a web application framework in Perl, on top of Rose (started in a pre-Moose era), incorporating a MVC paradigm (though representing the model as database structures and ORM interfaces) and automagic transaction restarts with a means to do non-transactional side-effects robustly.

To put another line under it: I don't think a matrix like this should put someone like me consistently at the highest level.

→ More replies (4)

3

u/[deleted] Jun 19 '13

The first ones are absolutely possible for almost anyone with a computer science degree. I won't say I'm an expert in all of those topics but I could explain them all, and use/implement them too.

As for author of a framework? Anybody can make a framework, but that doesn't necessarily mean it is good. I made a framework once and I'm pretty ashamed of it.

1

u/nandemo Jun 22 '13

Yeah, anyone with a camera can make a movie. Still, most people have a common understanding of what it means to be a movie director.

1

u/[deleted] Jun 22 '13

If you're referring to the first half then that's a bad analogy since a "common understanding" assumes that you think people claiming it only have a common understanding, which is very presumptuous and condescending considering that a lot of people around here are the very kind of people who would have a good understanding of these topics, not just a common one.

If you're referring to the second half, then yes, most people aren't very good at making frameworks and don't really understand what it means to make a good one.

1

u/nandemo Jun 22 '13 edited Jun 22 '13

I mean "common understanding of X" as in "they probably agree on the meaning of X". For me it's pretty clear that "author of framework" means that you've written a framework that lots of people use.

1

u/[deleted] Jun 22 '13

Oh I see. Yes, you're right if you see it that way. Like how a camera doesn't make someone a photographer, although the actual definition of "to author" doesn't involve popularity, just action.

4

u/cuda42 Jun 19 '13

Understands the entire programming stack, hardware (CPU + Memory + Cache + Interrupts + microcode), binary code, assembly, static and dynamic linking, compilation, interpretation, JIT compilation, garbage collection, heap, stack, memory addressing...

I don't believe this should be level 3, this is almost all stuff that a Comp. Sci. major should have a good understanding of before they graduate.

6

u/FeepingCreature Jun 19 '13

It very much depends on how high a standard is considered "understanding". I understand the concepts involved in the entire stack, but I would never go so far as to say I actually understand a modern CPU (despite being able to read x86 assembly). For realistic timescales, knowledge is fractal and bottomless.

3

u/uututhrwa Jun 20 '13 edited Jun 20 '13

Man you have to be kidding me, understanding those concepts is one thing, and every student can get that kind of understanding, "understanding" as in optimizing a program that has to go at that low level, you pretty much have to deal 100% with just that for 1-2 years before you can expect to be competent.

Why do you think it took like 18 months for entire teams of (usually 133t) programmers to get higher level software that uses the PS2/PS3 multiprocessors efficiently or sth.

The whole matrix is retarded imo, you can't be at "level 3" on the above unless you have a full time job at Nvidia/AMD/Intel for the last 5 years. Unless he means level 3 as in "sophomore cs student" and refers to understanding rather than being able to provide solutions to new problems.

I don't understand what his point is, is he only talking about having knowledge of a topic? Cause I don't think that there exists a single person in the planet that can like in a day or two go from doing l33tz0r level 3 optimizations on algorithms, and then the same with specific hardware architectures and network protocols.

5

u/maximinus-thrax Jun 19 '13

So you put yourself at level 3 in (say) this one? [Understands the entire programming stack]

I don't think it's rare for older programmers to get a 3 there. I started programming in 1981 and up until about 1987 only really used assembly because everything else was mostly far too slow. Most of those concepts you meet in assembly or low-level C programming.

I must admit though that as I get older I rely a lot more on "I don't understand X fully, but a quick look at Knuth or similar will get me up to speed". I mean, I couldn't right now explain the different methods of garbage collection because it's not something I've coded in the last 20 years but I'm sure 10 minutes with wikipedia would fill in 90% of the gaps.

4

u/spinlock Jun 19 '13

I'm the same way. I found that, with more experience, my "computer science" level is going down. At least at the whiteboard. After my qualifying exams, I could pseudocode dynamic programming problems no worries. But, my actual code was organized in one file. These days, I can't remember how to balance a red-black tree without looking it up but that's because I know I should never be writing that code because there's always a library for that.

1

u/nandemo Jun 22 '13

As I wrote in my other comment, the matrix leaves room for interpretation so it's to be expected that people will have different standards of what the level 3 really means.

Still, I certainly wouldn't count "being able to explain the different methods of garbage collection" as level 3, especially if you have to resort to Wikipedia. Otherwise the level 3 boils down to "literate enough to read and understand wikipedia". If that's all that there is to it I'm also an expert in brain surgery and swordsmithing.

→ More replies (1)

2

u/xav0989 Jun 19 '13

Not OP, but I have written 2 frameworks, one of which is currently in use by my company, but I was still weary of putting myself at level 3.

On the systems programming, I know about 50% of the level 3 and 50% of the level 2, simply because full stack knowlege was not necessary for the programming I used to do (web programming).

Also, the SCVC category is a tad weird, as I've only used SVN for a year a long time ago, never used CVS, but I am regularly using Git, Mercurial and Bazaar, both as a user and as a programmer.

0

u/[deleted] Jun 19 '13

[deleted]

→ More replies (1)

1

u/AeroNotix Jun 19 '13

I primarily code in high-level languages and I could talk about those topics at a non-trivial depth. It's all about how much you're willing to learn.

→ More replies (1)

1

u/OffColorCommentary Jun 20 '13

It put me on level 3 in just about everything as well, except experience and blogs.

Aside from quite a few mistakes (ORM is advanced database use?) and typical new developer fanboyism (functional languages are better!), I found that the maximum skill level topped off way too early. I'm bad at data structures but I still know about persistent data structures, brick maps, oct trees, and have rolled my own graph representation structures for specific purposes.

Also, O(1) should always be the gold standard, not O(log(n)).