tags:

views:

629

answers:

8

Possible Duplicate:
What metrics would be usable to determine expertise level in a particular programming language

I understand this is a subjective question and very likely could be closed, and although there is no right or wrong answer I do believe its a legitimate question.

At what point do you no longer consider someone a beginner (ie knowledge of loops, encapsulation, instantiation), an intermediate (design patterns, reflection, delegates, interfaces) or an expert (architecture, multi-threadding).

My rationale for asking such a question is two-fold, first, when do I stop labeling my questions as beginner and during a job interview how should I categorize myself?

+25  A: 

You can use the following Programmer Competency Matrix to evaluate your knowledge.

Giorgi
+1 Thanks. That's actually really useful. Although some of it makes me sad when I apply it to myself...
David Relihan
+1 - that's a great link. I hadn't seen that before.
j0rd4n
It's great but depressing enough to prove that I really know very little!
djhworld
It is a nice chart, although I don't agree with the Prolog bias :-)
Ukko
+1  A: 

I know this isn't a direct answer, but Andy Hunt's book "Pragmatic Thinking and Learning" has a ton of insight into this. If you are really interesting in expanding your thinking and problem solving skills, I highly recommend picking this book up.

j0rd4n
+10  A: 

In my experience, anyone who labels himself an expert is full of crap. If you wrote the language, or if you wrote a book or 10 on it, or if you have 20K points from answering questions on SO about it, I will accept that you might be an expert. Otherwise, ...

But in an interview, as soon as I hear someone say he is an expert, I ask a relatively simple question and it turns out he is a moron, or to be even more critical, is lying. So my recommendation is that during an interview, you humbly admit that while XXX may be your strongest language/technology/framework or whatever, you still are learning and will continue to do so as long as you continue working.

MJB
Don't forget when trying to get a job, when it's no time to be modest. It's not so much that claiming to be an expert makes you full of crap; it's that people who are full of crap tend to claim to be experts.
Jon Purdy
@Jon: I agree. I hope that I didn't convey the wrong sentiment when I wrote my answer.
MJB
@MJB: Not at all. I just thought I'd add a polite footnote. Politeness seems to be sorely lacking on this site...
Jon Purdy
Mainly because everyone thinks they're experts...
Sir Graystar
A: 

As much as people would like to grade themselves (and others) in a single dimension ("programming ability"), the problem is that that ability really has innumberable dimensions. I don't think there are many people in the world who would qualify even average in all those dimensions. A brilliant embedded programmer may have never heard about "design patterns". A brilliant architecture astronaut may have no idea how to do floating-point calculations without floating-point hardware. A brilliat web programmer may have no idea what's the difference between heap and stack.

I think labeling people and questions is plain useless. As for job interviews, just tell - or better, show - what you've done. Anyone can call themselves "expert" and those who have years of experience have, well, just that - years of experience. But those, who've actually done something, stand out anyway.

Joonas Pulakka
+13  A: 

There is a joke from academia that is related to this question that goes something like, for each degree you earn:

  • B.S. You think you know everything.
  • M.S. You realize you don't know anything.
  • Ph.D. You realize nobody else does either.

Once you are competent you are no longer a beginner, after that it is a head long rush into increasing uncertainty ;-)

To be fair not everyone takes that tack, but I find that it is really the mark of someone who is expert in their field that they become less certain and more nuanced in their thinking.

Edit: You may also want to look into the Dunning-Kruger effect which points out that incompetent and inexpert individuals tend to over estimate their abilities while the proficient tend to underestimate their abilities. The important thing is if you can learn to recognize your own failings and improve on them.

Ukko
A: 

Like you say yourself, grading yourself (objectively) is difficult to impossible. Ask others what they think of you. Recommendations by others could count for something. Think of the old journeyman to master system: others determined for you whether/when you were (ready for/at) that next level.

peSHIr
+3  A: 

Here are the definitions I use in job descriptions:

  • Beginner -- still learning. Will require assistance and training.
  • Experienced -- shows effectiveness and efficiency in the execution of the job. No regular requirement for assistance or training.
  • Expert -- experienced and capable of troubleshooting own and others problems. Has the knowledge, if not the aptitude, to train others.

As you see they are, deliberately, not domain-specific. But you can probably quite easily translate them for your particular circumstances. You may want to assess your abilities along multiple axes -- you might be an expert Java GUI programmer, but a beginner at Java 3D graphics while being an experienced use case writer.

It can be very difficult to classify someone into these categories during an interview so I tend to invite interviewees to classify themselves. Anyone who is later exposed as having inflated their grade might suffer sanctions.

High Performance Mark
don't we all still learning, require assistance and training at some point ?
eugeneK
@eugeneK: what I'm suggesting is that an Expert is someone who (can) teach him (or her) self and others
High Performance Mark
A: 

Two ways that I can think of:

  1. Use your TopCoder algorithm rating as a measure of your programming ability.
  2. If you haven't read Structure and Interpretation of Computer Programs, you're a beginner. If you have read it and you've done all of the exercises, you're at least an intermediate. If you've read Knuth's Art of Programming and done all of the exercises, you're an expert.

Probably none of us are experts.

Paul Reiners