tags:

views:

854

answers:

14

I've been asked to rank my coding "expertise" by a potential employer. I find I swing back and forth when I judge my own ability.

Face-to-face, in my real life I seldom find people that I feel humbled by (if I lived in San Francisco that would probably be a different story).

On the other hand, when I do research for projects online, there's always plenty of articles by people who know far, far more than I do.

My own inclination is to down-play my abilities, as I feel I have a lot to learn. But I have a nagging feeling that everyone else sucks too.

Any advice on how to rate myself. Online testing or something?

A: 

Complexity of the projects you developed can be one measure.

How many LOC (lines of code) did you best (own) project involve? Which algorithms did you use? Advanced programs you developed, in fields like 'speech recognition', 'sound synthesis', etc. can be a good estimate of your skills too.

friol
LOC measures cost, not accomplishment.
Darius Bacon
LOC can measure complexity too, IMHO. I would define "skilled" a programmer that did alone a 100k LOC project.
friol
I think 100k LOC only tells about the experience a programmer has, not his/her skill. Unfortunately there are experienced programmers out there that don't have a lot of skill.
Joachim Sauer
LOC tells how bad you can make a program, not how good
Stephan Eggermont
yeah, in fact Mozilla Firefox is 2 lines of code...
friol
A: 

Well for employers I'd demonstrate your expertise by showing them some results. If the employer is non technical they won't care how 'good' you are, just what you can do.

John Nolan
+2  A: 

When asked to rate your skills by a potential employer I tend to cringe a little. Most often I hear this from a head-hunter or recruiter who asks me to rate 10 technologies on a scale of 1-10.

The problem with this scaling is that most programmers answer 9 or 10 if they have used a language or technology for a couple of years (2+). In my mind, if I'm a 10 in a language, I can rewrite the compiler/interpreter without documentation and get it almost perfect. That puts a very well skilled developer somewhere around a 7 or 8 and it doesn't help the recruiter/employer evaluate you as a skilled candidate.

I would take the opportunity to explain the concepts you work with and how you influence the work of your peers through mentoring, training, etc. and effectively dodge any direct "scoring" of your skills in favor of quality narrative.

In other words....

Focus on your experiences and how you have contributed to successes in the past. Do you usually save the project? Do you need help to finish what you commit to? Track and measure your progress against estimates and then you'll know information like "I meet my estimates all the time", "I meet my estimates some of the time", or "I'm terrible at estimating."

Alex B
Rewriting the compiler doesn't mean you're good with the language. ;-)
TomWij
+2  A: 

For a potential employer I'd be as honest and humble as possible. The important thing is however much you (think you) know, make it 100% clear that there is always more that you can learn, and that you are fully prepared to carry on learning.

Steve
+10  A: 

Here's a general tool for rating your programming ability: the Programmer Competency Matrix. The creator identifies four levels of competency, from "exponential" competency (would not employ) to "logarithmic" (highly skilled). It seems to me that the levels themselves are a little contrived and not entirely relevant for all programming-related professions, but it's a good start for some meaningful introspection about your skills. That is, I doubt you could tell someone you are "linearly skilled", and some of the items are appealing to a potential employer whereas others might seem unimpressive.

Gracenotes
In most of those categories I tend to be between Level 2 and Level 3, there should be a lot more factors in this matrix.
TomWij
+1  A: 

You might want to take your efficiency in account too, there is a world of difference between using a simple editor and using a full-blown IDE with the best addons. Knowing a lot of the last one will provide you a more efficient way to work.

Besides that, how do you proof your code is right? Do you write tests? Are you using Test Driven Development? How much code is covered by these tests?

Do you use Code Metrics? Do you analyze your code? Do you profile your code? Do you comment your code? Do you try to keep line width lower than 80 characters? Do you try to keep a consistency in your coding conventions?

Do you use objects? Do you use references besides pointers? Do you try to keep functions small by extracting part of their (reusable) code to a new function?

There are a lot of factors playing in your coding skill, you need to be good in some to be called a good developer. When taking LOC (lines of code) as a factor I would say that less lines (to reach the same) are better.

TomWij
+8  A: 

I would seriously question working for them at all.

There is no single, correct, answer to that question. "How good is this car?". The only answer to that question is "Well, it depends, what do you intend to use it for?".

A person that can answer 10 on a scale from 1-10 I would expect to know everything. Nobody does that, so the scale is meaningless.

Personally I would rank 2-3. There's tons of stuff that I don't know, and each day on Stack Overflow shows me more stuff I don't know. Things like memory barriers in thread programming (seriously, I knew thread programming was hard but it's getting to be ridiculously hard), lots and lots of patterns and their usage, graph theory, compiler design (it is more handy than you think.)

But the thing is, if they use that kind of system, they're going to consistently either hire people with low levels because they acknowledge that the rank is meaningless, and in that case, why on earth are they using it? That kind of company is, in Joel's word from their last podcast, irrational, doing things just because, or they don't have a better way to measure potential hires. Either reason is scary.

On the other hand, if they keep hiring people who answer 8 on the scale, you will start working with a bunch of liars, or an army of Jon Skeet clones. I don't know if that's less scary (though it'd be fun to see the Jon Skeet clones argue which one has the rights to the reputation on SO.)

Always consider the hiring process in this context. Based on the questions you get, who else will be working there, and do I really want to work with them?

Lasse V. Karlsen
+1  A: 

I am more or less in agreement with lassevk - unless you really need the job, walk away. Without some sort of scale or context the question is meaningless. You more or less end up guessing what it is that they want you to put.

Add to this the Dunning-Kruger Effect and I'm surprised that anybody would even ask such a pointless question.

Dipstick
A: 

I've never thought about that, generally I have a feeling about how much I know a technology. But probably my brain does this: first I give ~10 to the person that I know that is the local (and with local I mean also on IRC, StackOverflow, friends around the world and so on) guru in a language. Then I try to estimate my experience-distance from her. I would also take into account how much of what she says I agree with when she tech-talks or how much I can understand.

tunnuz
+2  A: 

Pair program with Jon Skeet an he will tell.

Ricardo Acras
A: 

The answer I would give is a relative measure rather than absolute. A quip like, "I'm twice as good a developer today as I was this time last year" should prick up the ears of any manager worth their salt. Follow it promptly with, "and I expect that, with your support, this trend will continue."

In all the interviewing I've done, I look for developers who have "learned to learn" rather than ones that can simply regurgitate the last text book they read. I want developers who can adapt to the next-big-thing, not just work with the current-big-thing. I push professional development as something that is important, and if the interviewee doesn't respond with eyes full of joy, they are of no use to me.

It was once said to me that you need to watch out for someone who claims to have 3 years experience, but really has only one years experience three times over. Something worth remembering when your in interview situations.

Daniel Paull
+4  A: 

This reminds me of the old Socrates anecdote that he determined himself to be the wisest of the Athenians because he alone knew that he knew nothing. I'm not a very good programmer, but I know my limitations and I know how to overcome them by leveraging others knowledge and experience. So if someone in an interview asked me to rate my skill in various areas, I'd mostly focus on processes and software engineering. If they asked in a particular area, say SQL, I'd respond by saying I'm reasonably competent, but I'm not a DBA.

B class software guy
A: 

Not a direct answer to your question, but I can imagine SO serving a role in identifying competent programmers in future. If I was hiring, I'd be interested to see someone's SO profile and look at some samples of their answers.

Reputation in the current form wouldn't really count for that much, but would give an idea of the person's abilities. Perhaps if it were broken down by tags, it would be a bit more informative.

frankodwyer
+1  A: 

The problem with this question is that it rests on a device created by recruiters and head hunters to try and quantify something for which they had zero experience. (When in doubt, conjure up a number to rank!!!).

How good are you, whether the global question or broken up into the finer-grained "skills matrix" (which can itself range from coarse grained C++/Oracle/Web to the ultra-ultra fine grained) is really just something designed to allow recruiters and head hunters to "rank" their collection of "trophies".

The problem with these rankings is that they are all skewed to the point of being totally worthless. You won't get hired unless you are an 8-10 in all required "skills" (just ask the head hunter), so everyone answers 8-10 for anything you've even seen in a bookstore. Try getting coached in one of these things by a headhunter... "Do you know PHP?". "No." "Come on - you've heard of PHP, right?" "Yea" "Great -well then I'll put you down as a 7 on that".

The scale now ranges between 8 and 10, not 0 and 10, so the measurement is too fine-grained to be of real value. After all, if everyone is a 9 in Java, C/C++, Oracle, Web, ... then how do you end up hiring?...

... and the answer is - they hire either from recommendations made to them at parties, or from relatives of the high-ranking in the company. After all, EVERYONE has a "pure genius" relative taking "programming" at the local college. ;-)

In other words (the actual advice now) - either ignore it "That's pretty difficult to measure. I'm certainly better now than I was a year ago, but I know that I have much to learn..." or play the game "I'm between an 8 and a 10 on that".

Best wishes,

-Richard

Huntrods