Programmer Competency Matrix
indiangeek.net
indiangeek.net
If you could make it into a wiki, it would be good since then the hole's in the author's experience could also be filled.
What I would change: - add mention of RFCs, e.g. 2616 (HTTP) and 1738 (URL)
Understanding make (dependency graphs, splitting up the build process into small tasks which can be parallelized, restarted, and leave an exact record of how much was succesfully built) I consider a valuable trade and magnitudes better than “writing your own build script” (as is presently what is the level 3 skill).
The value in an exercise like this is the insight into the collective assessment, especially spanning different software disciplines, and with broader expert input.
As an aside, I do believe that DVCSs are somewhat more complicated than their centralized counterparts. This is mostly because they are young and lack the mature tool environment that things like SVN do. As a result, users are forced to understand how they work, instead of relying on pre-defined sequence of work->save->test->commit. If SVN was the new hotness, people would have written reams about the theoretical motivations behind a a centralized server, copying-as-branching, etc. But it's not, so git/hg/bzr get all the credit for being algorithmically interesting. In the end, this means that if you don't want to think about it, go with a VCS that's a little older, and I think that justifies the ordering in the chart.
Where are the finger trees? Array-mapped hash tries? Cuckoo hashes? Where's the domain-specific algorithm knowledge, like machine learning or information retrieval or computer vision? The IDE plugins? "Let it crash" and supervisor processes for error handling?
It's also depressing that O(log N) for "years of experience" = 10+. A motivated and reasonably intelligent student can get to O(log N) in all the other categories with an undergraduate CS degree and about 2 years of work experience at a good employer.
These probably are crucial for the kind of programming done at the startups, though.
I score as Level 1 or Level 2 at most on almost all the items, some Level 3 points don't seem relevant (why should I need a license header for my work programming?).
What I believe is that some of the points are WAY more important than others, I personally place great value on my domain and business knowledge and believe that is a trend going forward.
Still, thanks for making it available, reminded me I have to do some more studies.
Its very cute to divide programmer competency into a clean matrix - its never that simple.
My boss says "I fall into the first category but clearly I'm a great software architect." giggle
Well, it is December 30th so probably likely to be slower than average...
That's what just comes in my mind..
There are many well-educated failures, and as many (some might say more) un-/under-educated successes.
I hate seeing wasted money and stupid solutions succeed like the next guy and maybe we're talking about different things. But whether things got done should be decided by the customer not your TDD fanatic coworker.
Now, I'll always prefer clean organized code, even if it doesn't work. I can always hire someone or jump in myself and make the changes that are necessary.
It is safer to assume that all code is broken in some way. E.g. If someone says that code "works", what they usually mean is that the software is broken in ways that they doesn't understand. When someone says a system is "secure", it means that it contains vulnerabilities that they haven't yet discovered.
A pessimistic attitude, but it has served me well.
That's why you need somebody who is both smart (can see the elegant solution) and gets thing done (will ship a minimally acceptable solution and re-factor when needed).
[ build something that people will pay money for by any means necessary ]
Much easier to remember.
If people started demanding software as reliable as the things produced by other engineering professions (buildings that don't collapse, etc.), then being a good programmer would be strictly tied to making money. But right now, the code is the least important part of software companies. The idea and the marketing is significantly more important. (Hello, Twitter.)
Also, people are quick to associate personal gain with the economic value of a program. The Facebook founders may be rich, but automatic trading systems handle a lot more money (even though the programmers didn't necessarily get rich writing it). Facebook can have as many bugs as it wants, and they will be fine. An automatic trading system can ... cause problems ... if it is not bug-free (and well-written, or written by good developers). But you never hear about that sort of thing from these people; only how their blog makes $10/day and that how they are a genius and visionary for doing that.
There are already dozens of dimensions that you could use to measure programmer greatness: being able to solve very difficult problems, writing very maintainable code, writing working code very fast, writing very rigorous mathematically correct code, debugging very fast, having good intuition about how the project will evolve over its life, working well in a particular team, working well with other disciplines, being able to deal with corporate politics and still get shit done etc.
Tying product design and marketing to this plethora is a wholly unwarranted conflation. Even if it's just two software developers in a garage.
So by that line of reasoning I assume that O(1) is reserved for the author.
data structures: creator of skip lists
algorithms: creator of genetic algoritms
systems programming: lead engineer on JVM HotSpot
source control: "subversion sucks, here's Git"
build automations: creators of Maven
etc. (You can go down the whole list and figure out exactly what O(1) is and who belongs to that set.)
I also use Git exclusively, that doesn't mean I'm proficient with SVN.
Et cetera.
Where does "basic HTML" come in the matrix?
PS Flagged, dupe.
".....How do I stop myself from Being just a number How will I hold my head To keep from going under.........."