12 ms·
Programmer Competency Matrix (2016)
- uyoakaoma 10y agoI am still n2 programmer :)
- eps 10y agoOh, no. Not this bullshit matrix again.
- mgamache 10y agoWe need a competency matrix on Matrix Competency.
- taesis 10y agoMy 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?
- dasmoth 10y agoI'm not sure I'd quite go as far as revulsion but this sort of breakdown doesn't really appeal to me, and I think the reason is that it's possible to tick most, if not all, of the boxes without actually delivering working, useful, software -- let alone something that's actually pleasant to use. You can possibly argue that in this scheme, ability to think about the whole system falls under "systems decomposition" -- but that's just one box of many, and still doesn't quite relate to building things. Ultimately, I guess I'd be happy to ignore any and all of these things if someone can build what I want or need.
- cdegroot 10y agoI 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 10y agoassuming 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 10y ago... 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 10y agoExactly 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.
- theparanoid 10y agoBecause it's BS. The list measures how in love with technology you are. Not results. Smart and gets things done is a better measure and harder to BS.
- deleted 10y ago[deleted]
- Xcelerate 10y ago> I'm not sure why both spur an immediate sense of revulsion in me I get the same sense of revulsion, but I know exactly why. Because almost everything in that matrix can be learned within a day or two. Take any experienced programmer and pick out one of those concepts in the matrix that he/she hasn't used before. It would take very little time to grasp the concept. This isn't like teaching yourself homotopy type theory with only a calculus background. VP trees — have you ever heard of them? Neither had I until I needed to quickly search and partition a set of 3D points with periodic boundary conditions. It took about a day to become an "expert" on these trees and implement my own library. Isn't that a much more valuable skill than pushing yet another kind of data structure and its properties onto an "interview-ready" list of useless facts?
- rdiddly 10y agoProbably the sense that your livelihood (survival) is dependent on something arbitrary and potentially inaccurate/unfair. I think it has value as a framework for someone doing hiring, basically just as a memory-jog for what to talk about in an interview. This would be only after going through and editing it - refining a criterion here, redefining one there, adding a row here, deleting one there, to make it fit the situation. But even then, it shouldn't be taken too rigidly. It's an approximation.
- bonzini 10y agoWe have a similar thing for performance appraisal, but it does not evaluate technical competencies. Rather, it takes a generic set of skills ("focus on customer", "influence", "strategic thinking",...) and describes how someone in your role ("software engineer", "sales account manager",...) could apply these skills at the team, business unit or company level. The whole thing is a 100 page book, but really you only care about the 5 pages for your role (x2 if you are a manager). And it is explicitly not used for promotions. As a tool for identifying opportunities for improvement and personal development, I found it valuable.
- btschaegg 10y agoI get that this will sound overly snarky, but does "strategic thinking" for non-lead programmers involve "actively resisted multiple manager requests to implement a hack because of an arbitrary deadline"? (Of course it doesn't. But maybe it should...)
- bonzini 10y agoIt's not snarky, I agree with you actually. :) But seriously... In general, "strategic thinking" for junior people is basically understanding your role in the team, the team's long term strategy, the team's collaborations with other parts of the company, and stuff like that.
- MichailP 10y agoI wonder how this matrix will look like when AI becomes better in programming. :)
- jacques_chester 10y ago> 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.
- jplasmeier 10y agoWhile 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.
- deleted 10y ago[deleted]
- uhtred 10y agoI'm a 2^n programmer being paid a n programmer salary. I love capitalism!
- bobbington 10y agoThe beauty of capitalism is that you can just go out and start your own company if u are a great coder and make n to inviting basically
- userbinator 10y agocode 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 10y agoI'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 10y agoAbbreviations 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 10y agoI 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.
- scriptkiddy 10y agoI wouldn't have any problem with those abbreviations, I just wouldn't use them myself.
- diminoten 10y agoIf you're using an IDE, long variable names shouldn't matter due to autocomplete.
- skdotdan 10y agoOne 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.
- scriptkiddy 10y agoWhile 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 10y agoYeah, 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 10y ago> 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.
- BatFastard 10y agoThis 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 10y agoHey, don't diss code organization, it is the only part I can score above a 2 on!
- knz42 10y agoThis 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 10y agoThis 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.
- wishinghand 10y agoThis 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.
- unoti 10y agoIf 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.
- gjjrfcbugxbhf 10y agoInteresting 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.
- misja111 10y agoThis 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 10y agoThe 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?)
- awruko 10y agoI just wonder how someone like Jamie Zawinski would score.
- ajnin 10y agoThis 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.
- sidlls 10y agoThe "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 10y agoI couldn't have said this better-I read that section and immediately thought "Production" or "Infrastructure" engineering.
- ajarmst 10y agoObviously 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.
- CarolineW 10y ago</sarcasm>
- SomeCallMeTim 10y agoI 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.
- tcmb 10y agoI 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...
- iconjack 10y agoThere should be an n·log(n) column.
- bmcusick 10y agoWhat level is "makes a website that's usable on mobile"?
- scandox 10y agoThis 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-matrix/ http://sijinjoseph.com/2008/04/30/programmer-competency-matr... Also of note is that he explicitly says it is biased towards non-visual (I think he means non-GUI) developers.
- lennexz 10y agoWhat are some of the books that can help one move up the levels? Specifically from L1 -> L2 -> L3.
- diminoten 10y agoOpinions 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?
- agounaris 10y ago2016 and he says "Proficient in using CVS and SVN features."... fail
- CarolineW 10y agoReaders 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
- agounaris 10y agoSo log(n) in 2016 has used prolog professionally... what kind of matrix is this seriously!
- Twisell 10y agoHow can you trust someone that disable horizontal scroll on smartphones?
- neves 10y agoI prefer this Steve McConnel's Professional ladder: http://www.construx.com/uploadedFiles/Construx/Construx_Content/Resources/White_Papers/Construx%20Professional%20Dev%20Ladder.pdf http://www.construx.com/uploadedFiles/Construx/Construx_Cont...
- yo-code-sucks 10y agoThis fucking twat can't even write good HTML and CSS and we're supposed to read that?