
Programmer Competency Matrix (2016) - weitzj
http://sijinjoseph.com/programmer-competency-matrix/
======
scriptkiddy
While there are some parts of this matrix I agree with, I have to say that it
seems rather "old school". The matrix seems to assume that all programmers are
systems-level programmers working with compiled languages. Dynamic languages
are only listed in the "scripting" knowledge section. There are tons of huge
projects written entirely in dynamic languages. Assuming that dynamic
languages are only for writing small scripts is disingenuous.

The next improvement I can suggest is to remove the implications that knowing
the FP paradigm somehow makes you a better developer, or that only a good
developer can use FP. FP is a useful tool just like OOP or imperative
programming. Generally speaking, a good developer should be able to compose
multiple paradigms together where they fit in the problem space. Maybe if this
section of the matrix were reworded to say something along the lines of "Able
to use multiple paradigms in their equivalent problem space including OOP, FP,
and imperitive programming to create quality software." it would be better.

I do like how the author included a section for communication skills. Too
often we, as developers, forget that we are ultimately only as good as the
team around us is. We should work our hardest to improve our team in order to
increase the quality of our work. That starts with effective communication.

~~~
ivraatiems
Yeah, this is clearly out of date. "Experimented with Git" is the highest
level in the version control row? Git is the standard now and has been for
years.

I think a bigger issue, though, is that some of these skills are very
valuable, and some of these skills are the ones companies hire on, and those
two sections are not always the same. Personally, I see myself as being
somewhere around the n level on the algorithms stuff, but well into the log(n)
level at the engineering/communication stuff. I've harped over and over on the
weirdness of prioritizing theory knowledge over practical skill in day-to-day
jobs where the practical is what matters - it's nice to see all the different
dimensions so clearly laid out and given (roughly) equal attention.

~~~
pjmlp
> Git is the standard now and has been for years.

Only in the open source world and a few SV darlings.

I am yet to do a project at a Fortune 500 among our customers that isn't based
in Subversion or TFS.

I have been using Git only on personal projects.

~~~
alexbanks
> Only in the open source world and a few SV darlings.

In the last year I've built internal-only systems for two Global Fortune 100
companies, both of them in Git.

I believe you are very incorrect.

~~~
pjmlp
You forgot to read the part "among our customers".

~~~
closed
I don't think they forgot anything. You mention your observations among your
customers, in order to support a more general point.

They are questioning whether that generalization follows from your
observations (using observations of their own).

~~~
pjmlp
For these customers it doesn't follow "Git is the standard now and has been
for years.".

~~~
alexbanks
Right. I am asserting that your experiences are not the norm, but in fact
outliers. Which means that Git is the norm, and those that do not use it are
outliers. Basically the opposite of your original claim.

~~~
pjmlp
To see who is actually right, we would need to take a measurement of SCM
systems across all Fortune 500 companies.

Writing statements about Git's adoptin on HN posts don't make them into facts,
unless they are baked by actual numbers.

The fact is that both of us are wrong, because neither of us have the data of
those 500 companies, only anecdotes.

~~~
alexbanks
Nope. I didn't make any claims that "all" Fortune 500 companies, or even
"most" Fortune 500 companies use Git. You said, verbatim:

> Only in the open source world and a few SV darlings.

This statement is _factually_ incorrect. None of the companies I've worked
for/done work for/communicated with were in SV and _all_ of them used Git. AKA
it is in fact _not_ just "a few SV darlings," because the companies I've
mentioned that use Git were neither of those things.

~~~
pjmlp
It is as factually correct as "Git is the standard now and has been for
years.".

------
ajarmst
Obviously as I am a well-above average programmer, any of these metrics that
do not clearly document this obvious fact about me are either old-fashioned
academic fashion that have nothing to do with the way real programmers write
code or pointless fads that will soon go out of fashion as we return to how
real programmers working on real problems have always done it. Of course, the
few that demonstrate my superiority are accurate, valuable insights into the
way true scotsmen program.

~~~
SomeCallMeTim
I originally skipped over this comment as too sarcastic, but you're hitting on
_so many_ of the responses below, that I had to come back to vote it up.

My only complaint about the matrix myself is that I only scored a level
1/partial 2 on the "books" section. I guess I don't own enough books. I don't
like learning from books, though.

Otherwise I hit level 3 on almost every single row, so when I see the folks
complaining about how this or that skill is irrelevant, well I have to say
that _every single row_ of the matrix has good information, and they should
hit the (virtual) books if they want to level up.

------
unoti
If I could zoom or scroll, I might be able to figure out where "allowing
content to be read on a mobile device" fits in this very interesting matrix.

~~~
submeta
On an iOS device Firefox will let you zoom out.

~~~
Vinnl
Reader mode (also Firefox) will probably help as well.

------
knz42
This matrix uses period-sensitive knowledge as milestones and is esentially
focused on knowledge (how much one knows) as opposed to proficiency in the
programming activities.

I found it more useful to evaluate competency based on activities instead of
particular data structures / algorithms / languages:
[http://science.raphael.poss.name/programming-
levels.html](http://science.raphael.poss.name/programming-levels.html)

~~~
DenisM
This is so much better. More universal, less fady.

It also declares the intended use of a the matrix, unlike the topic article,
and I find it agreeable.

------
taesis
My workplace uses a rubric for determining when a developer qualifies for a
promotion (+raise), which seems very similar to this. I'm not sure why both
spur an immediate sense of revulsion in me, but they certainly do and the
feeling is intense. Just wondering, but does the same happen to anyone else?
Did you ever figure out its root cause?

~~~
cdegroot
I have no clue. I mean, on the one hand I don't like evaluating people by
checklists/matrices, but on the other hand - assuming that having to evaluate
people for raises and promotions is a given - what's the alternative?

~~~
userbinator
_assuming that having to evaluate people for raises and promotions is a given
- what 's the alternative?_

... by looking at their accomplishments?

Ultimately, productivity is not about how many tools/frameworks/languages/etc.
you claim to "know". It's about what you can _do_ with what you know.

~~~
dasmoth
_... by looking at their accomplishments?_

Absolutely agree, but with the caveat that the software world currently seems
to be on something of a "teamwork is everything" kick which can sometimes
obfuscate what individuals are capable of. So judge results -- but be sure
everyone is getting a chance to spread their wings at least some of the time.

~~~
cdegroot
Exactly that. You do agile, you do teamwork is everything, but at the same
time you see people perform at more than their pay grade and you want to
promote them. Some modicum of objectivity is needed - accomplishments are
_mostly_ the team's accomplishments (I guess that is the main reason we all
want lunch&learn talks, so you have some individual accomplishments), so
looking at skills seems to be a decent next best thing.

------
jplasmeier
While this can easily be reduced to petty arguments and farm animal related
epithets, I think this at least a reasonable enumeration of skills one can
aspire to learn in their free time.

------
misja111
This matrix is older than from 2016. It was posted on HN in 2015 already:
[https://news.ycombinator.com/item?id=9341146](https://news.ycombinator.com/item?id=9341146)

edit: and in the comments of that earlier post, someone mentioned that it was
posted in HN in 2008 already ...

~~~
jt2190
The 2008 version:
[https://news.ycombinator.com/item?id=232192](https://news.ycombinator.com/item?id=232192)

(edit: Mods, can we get a 2008 on the title?)

------
eps
Oh, no. Not this bullshit matrix again.

~~~
mgamache
We need a competency matrix on Matrix Competency.

------
userbinator
_code readability Mono-syllable names_

This just seems to encourage enterprise-y ridiculous verboseness, which does
not help with readability either. By this measure, people like the original
UNIX authors would be deemed incompetent; and the opposite would apply to the
architecture astronauts.

~~~
scriptkiddy
I've always taken the approach of making variable/function/class names as
verbose as they need to be. I do not use any sort of abbreviation in function
or class names. However, I will sometimes use abbreviated variable names or
function arguments. For instance, if I had a function that searched for and
returned an object that has a specific property from a list, I might use the
name 'find_object_with_property'. The arguments might be 'list' and 'prop'.

It's been said many times that naming things is the hardest problem in
programming.

~~~
jimmaswell
Abbreviations are appropriate in methods/classes/variables often enough as
long as they're unambiguous. Some common ones are Camera->Cam, Position->Pos,
UI/GUI/HUD, and of course you wouldn't type out the full names of XML or TCP.

~~~
rileymat2
I would argue that consistency in the creation of abbreviations is also
important. It is a headache to take over a codebase written by several people
who abbreviated things differently.

------
BatFastard
This matrix is an interesting way to show many of the area's that are
important to becoming a well balanced software developer.

That said I don't agree with many of the criteria for the levels. And in
general its a bit too theoretical rather then practical.

The next thing that is important is how do these criteria map to your
organizations needs?

I do notice as someone who has built tools for just about everything
imaginable I lack of awareness of UX and its subtleties. Also optimization,
GPU, graphics in general. He has obviously never worked as a game developer.
The "systems programming" section should be a section in and of itself. Having
"code organization" a sibling of system programming is a joke. But its a
start.

~~~
valuearb
Hey, don't diss code organization, it is the only part I can score above a 2
on!

------
CarolineW
Readers may be interested in seeing previous discussions of this item - not
everyone thinks it's a "Good Thing(tm)".

Here are some previous submissions of exactly this, nearly this, or closely
related items:

[https://news.ycombinator.com/item?id=4626695](https://news.ycombinator.com/item?id=4626695)
(122 comments)

[https://news.ycombinator.com/item?id=1949915](https://news.ycombinator.com/item?id=1949915)
(106 comments)

[https://news.ycombinator.com/item?id=9341146](https://news.ycombinator.com/item?id=9341146)
(51 comments)

[https://news.ycombinator.com/item?id=1022394](https://news.ycombinator.com/item?id=1022394)
(40 comments)

[https://news.ycombinator.com/item?id=554338](https://news.ycombinator.com/item?id=554338)
(33 comments)

[https://news.ycombinator.com/item?id=232192](https://news.ycombinator.com/item?id=232192)
(33 comments)

[https://news.ycombinator.com/item?id=5905330](https://news.ycombinator.com/item?id=5905330)
(13 comments)

[https://news.ycombinator.com/item?id=12081124](https://news.ycombinator.com/item?id=12081124)
(2 comments)

[https://news.ycombinator.com/item?id=2823912](https://news.ycombinator.com/item?id=2823912)
(1 comment)

There are also submissions with no comments:

[https://news.ycombinator.com/item?id=8966791](https://news.ycombinator.com/item?id=8966791)

[https://news.ycombinator.com/item?id=3434350](https://news.ycombinator.com/item?id=3434350)

[https://news.ycombinator.com/item?id=298135](https://news.ycombinator.com/item?id=298135)

------
sidlls
The "software engineering" section seems like it was composed by a person who
has conflated "configuration management" with engineering, and also asserts
that "TDD" is something that describes a "high level" of proficiency (an
assertion which isn't generally true, in my view). In fact, a lot of the items
under the "Programming" section should be under "Software Engineering."

~~~
johnbellone
I couldn't have said this better-I read that section and immediately thought
"Production" or "Infrastructure" engineering.

------
scandox
This appears to be a refresh of a 2008 post? He originally links to it from
this post:

[http://sijinjoseph.com/2008/04/30/programmer-competency-
matr...](http://sijinjoseph.com/2008/04/30/programmer-competency-matrix/)

Also of note is that he explicitly says it is biased towards non-visual (I
think he means non-GUI) developers.

------
wishinghand
This table isn't readable in mobile- I can only read most of the 2nd tier for
each category. I can't slide it around or zoom out.

------
uhtred
I'm a 2^n programmer being paid a n programmer salary. I love capitalism!

------
gjjrfcbugxbhf
Interesting and useful but in my opinion some of these are a little bit
unfair.

In python level 3 error handling is unpythonic.

I've written libraries on top of apis i haven't memorized.

Also I'd argue that the ability to efficiently start using a new api is a
bigger skill.

------
ajnin
This matrix seems very inconsistent, or at least you wouldn't want to rate
someone based on simply counting the number of checkmarks in the higher
columns. For example "Wrote his own macros in an IDE" rated the same as
"Author of a framework", or "Able to visualize and design complex systems with
multiple product lines and integrations with external systems" valued the same
as "Has tried out Bzr/Mercurial/Darcs/Git". Seems skewed also towards
classical compiled language or systems programming.

------
jacques_chester
> _Working with someone who has a good topcoder ranking would be an
> unbelievable piece of luck!_

There's a difference between "is this person capable?" and "is this person
personable?

You kinda want both.

------
bmcusick
What level is "makes a website that's usable on mobile"?

------
diminoten
Opinions on the importance of algorithms and data structures aside, can one
acquire the requisite knowledge to pass most interview questions related to
those categories by focusing explicitly on interview questions, or will there
be too many gaps to be effective in interviews if one tries to "shortcut"
completely learning the categories?

------
neves
I prefer this Steve McConnel's Professional ladder:

[http://www.construx.com/uploadedFiles/Construx/Construx_Cont...](http://www.construx.com/uploadedFiles/Construx/Construx_Content/Resources/White_Papers/Construx%20Professional%20Dev%20Ladder.pdf)

------
tcmb
I think this misses an important part: collaboration in a team. Ability to
explain their preferred solution, experience with effort estimation, reading,
reviewing, and improving other people's code, being able to compromise between
the perfect solution and the practical solution, teaching colleagues...

------
skdotdan
One thing which I find very frustrating is that I don't remember some concepts
which I have studied and understood in the past. So, in my case, that matrix
should have to be filled with dates, not only with ticks.

------
agounaris
So log(n) in 2016 has used prolog professionally... what kind of matrix is
this seriously!

------
uyoakaoma
I am still n __2 programmer :)

------
MichailP
I wonder how this matrix will look like when AI becomes better in programming.
:)

------
agounaris
2016 and he says "Proficient in using CVS and SVN features."... fail

------
Twisell
How can you trust someone that disable horizontal scroll on smartphones?

------
awruko
I just wonder how someone like Jamie Zawinski would score.

------
iconjack
There should be an n·log(n) column.

