Over the 6 years period when I have worked as a software developer, my work has been split mostly between python and ruby, solving problems in different domains based on what was required as part of my job. However when interviewing at Ruby or Python dev companies, a lot of questions asked are very specific to language based design patterns/concepts which I end up being unable to answer because of not being aware of the exact vocabulary or because I have never encountered them. Does that make me a bad hire ? Maybe. Maybe not. Does it mean it that the interviewer is asking the wrong questions ? No, they are asking questions on what they have worked on and is possible for them to evaluate.
After realizing this while interviewing candidates myself, I allow candidates to search for concepts that they are unaware of, and demonstrate what they understand or how they would use it given 5-10 mins of going through any documentation they find(or I can provide). Because (1) there is a limited amount of information a person can store and reliably extract from memory and (2) just because someone is not aware of a design pattern/concept, it does not imply that they cannot adopt it.
This feels like something I'd come across in an archeological dig, something that tells us about our past, and how far we've come since then.
https://weblogs.asp.net/sjoseph/programmer-competency-matrix
First of all, the third column here is highly editorialised. If you have a look at anything related to languages, he always lists Erlang, Oz, Prolog -- I wonder why? I won't go into a diatribe on this-or-that nonsense but it would be fairer to talk about languages by their capabilities i.e. either include more languages like Ocaml (which is my hill to die on for "high-society" languages) or just say "has pattern-matching and concurrency primitives".
As for the Systems Programming section, does he really think that knowing how a compiler works is a system-related topic?? and why is that level 1? shouldn't the first level be understanding things like system calls, filesystems, drivers, kernel operation? processes? etc. Once again I think this matrix has been constructed with little consultation from domain experts for that area.
I agree for the most part with the criteria for programming itself, but I need to nitpick at the claims about using IDEs. Why is "written a custom macro" a tier-3 requirement for IDE proficiency? wouldn't it be more reasonable to say "has written a plugin"? and moreover what does this really have to do with programmer competency? a beginner could write a macro or plugin for VS Code for example. Therefore I don't think it's a good marker.
I guess like most discussions on programming, it is about 60:40 in terms of objectiveness. The remaining 40% is largely grounded in the author's personal experiences and you can tell that he had trouble deciding what the top-tier programmers would be capable of, preferring largely complexity-increasing exercises instead of complexity-reducing tasks. And for me the latter is the sign of an expert.
I think the idea is that most people will start exploring the world of programming from higher layers working their way down. People use software, then they write software with tools (languages), then they try to understand the tools, then they try to understand what the output of the tools mean on a yet deeper level, going down the rabbit hole all the way down (to physics? but I guess the lines is drawn elsewhere).
This may be wrong but it's obvious from the rest of the matrix that this is probably just based on how the author and maybe their friends gained "proficiency".
None of this is generally applicable. I do think the,matrix is still valuable. It provides a view of how some people may evaluate competence (even if misguided wrt ordering/levelling) and provides a set of goals that are not bad per se. Being on the highest levels mentioned there does probably in fact translate to a certain high degree of experience and competence.
Block-chain Dev, Android Dev, AI/ML devs are domain specific but in each of those there are atleast 3-4 domains mapping out in general from the PCM.
There will be a domain specific competency matrix on top of PCM.
I usually ask the candidate for a live coding test over zoom. "Here's what you need to code, please share your screen while you're doing it so I can see how you work. You're free to google, of course, because that what we all do at work. The guy who wrote the quiz did it in 5min, I did it in 10. I give you 20 just in case. Please start now."
Then I watch them code. After that, we discuss their approach. But usually the second step never happened, because as soon as the timer stops and I see their code, the code (and how they're writing it) usually tells everything.
this page must be dated! I wonder how many other cells contain errors as well...
If you're doing server administration, not being able to use vi is unacceptable; but these days everything is deployed by container and logging into raw linux systems is not really a thing as much (your company may beg to differ and that's fine).
Some might say the best IDE
- thinks Pandas is a subreddit
- said they have dplyr in his Magic deck
- saw data mining in a documentary about bitcoin once
There should be some interpersonal stuff on here. Met plenty of devs who limit themselves by being all "I'm too busy to be interrupted to help others"
Note that -1(') devs might yet be a good fit for a place like google where shaving off 10ms off of a good chunk of requests worldwide is worth tons of money, and there are tons of other teams that can make up for that dev's shortcomings by building up protective infra.
However, one criterion I disagree with is years of experience. I suspect (based on personal experience) that the variance of the other categories with respect to years of experience is a lot higher than one would think. So there's no real utility to including it.
In any case I agree with the majority here that this tool is akin to standardized testing which at long last is seen for the bad tool that it is for finding objective quality.