views:

1194

answers:

24

At a previous interview I have been asked the question: 'From 0 to 10, how do you rate yourself as a programmer?'

I found it a very hard question to answer as I am not aware of a metric to measure how good my skills are. Moreover, knowing how well you perform would be useful to understand what you need to improve to be a better programmer.

So is there a way to know how well you do your work?

+25  A: 

Call up your previous employer and talk to whoever inherited all your old code. They'll tell you how good of a programmer you are. ;)

so very true. :)
jop
That is assuming, of course, that THEY understand enough to give a proper appraisal.
AviD
I had a small subsystem once which was WAY too complex - everybody that saw the code was praising it nonstop, because none of them understood it.... :$ (Too be fair to myself, the complexity was a result of a very complex requirement, but still...)
AviD
Why should he/she tell you the truth? To some people i really don't like, i didn't tell them my opinion, instead i told them what they WANTED to hear. That's a bad habit, i know. But to someone who is immune to feedback, what should you tell him? The truth or keep him think to be good (and make him happy?). So this answer is only an option if your can trust the "successor". This might be even the usual case, but who knows....
dz
A: 

If people complain you don't have anything on your plate while several of your software systems are in production, that simply means your systems were well designed and well coded, and, unlike other corporate code monkeys, you don't have a 6-month queue of trouble tickets keeping you busy.

If this is the case, pat yourself on the back. You do good work.

Remember, software ain't done until it's making money.

Christopher Mahan
I disagree; if it's good, then customers _will_ sooner-or-later ask for more features, or changes. Just my 2p (+:
Everyone
+8  A: 

That's a hard question. From a purely introspective standpoint, I think that one of the best metrics of "good programmership" is this: How much do you enjoy your craft? I've met plenty of developers, some of them very good, but I've never known anyone who was a 9-5 developer and managed anything better than mediocre results.

Of course, looking inward isn't the best way of measuring competency. I should think that your fellow programmers would be able to give you a fairly solid answer. There's social etiquette involved in phrasing such a question, but the potential is still there. In my experience, those you work with are going to have the best understanding of how well you're doing, if only because they're the ones who have to clean up the mess if you make a mistake. :-)

Final tidbit: programming is problem solving, pure and simple. Think about how you approach hard problems that come your way. First, how do you emotionally react to a tough challenge? And second, what is your code going to look like? Do you just hack your way blindly through the jungle until you arrive at some sort of result, or is your approach methodical, well-measured and (most importantly) heavily researched? The really good programmers aren't the ones who know everything or who can implement Dijkstra's algorithm in eight languages cold, they're the ones who spend hours pouring over text books and obscure blogs to find that tiny nugget of an idea which just so happens to be crucial to the issue at hand. If you have the patience and passion to work your way through a deep challenge, as well as the humility to look to others for ideas, then you're well on your way to that "10".

Daniel Spiewak
+2  A: 

Moreover, knowing how well you perform would be useful to understand what you need to improve to be a better programmer.

Actually knowing what you need to improve is important to understand how well you perform. Just look at the people you work with or interact with and try to figure out what are the things about them that you would like to see yourself do better. That will slowly help you become a better programmer. As you grow look at other teams and source codes (other open source projects) to help you improve yourself further.

I think a better way to possibly respond to the question of rating yourself is to say I rate myself at x percentile wrt all the other people I have worked with.

Dhananjay Nene
I agree with you, but I think that it's dangerous to start rating "wrt" fellow developers. It's the right approach competitively, but it carries the threat of destroying the unity of a team by introducing elitism and arrogance.
Daniel Spiewak
More importantly, you may have been blessed with brilliant teammates, compared to which youre shallow even though you are just short of brilliant yourself - or maybe you're cursed with dumbbell teammates all of who've read 21 days to Java and consider themselves pros.
AviD
+2  A: 

The short answer is, you measure yourself against your peers. That is, take someone that does not know anything and assign a 0, take the best programmer you personally know and assign a 10 -- how do you consider yourself in comparison with these two people? Close to the best? That would be an 8. Middle? that would be a 5.

Just don't answer 0 or 10 and try to be objective. The point of the question is not rating you as a programmer, but rating your skills at self assessment. Your insight, that is.

Sklivvz
+4  A: 

There seem to be three levels of proficiency with any programming language:

  1. You fix syntax errors immediately and without any hard mental effort
  2. You can read other peoples code and work out their intent without 'translating' the code into natural language (or some other programming language)
  3. Once you understand a problem you can express it naturally in the constructs provided by the language (imperative, OO, functional ...)

I think this takes you along the scale from 1 -> 10

Its worth noting that deep knowledge of one language can get in the way of learning another. Because once you think in terms of language 'A' you have to rewire your brain to learn language 'B'. Obviously this only applies when moving to a completely different type of programming e.g. C->C++, C#->F#, Java->Scala etc... So I dont think its possible to be a 'perfect programmer' in the abstract.

Garth Gilmour
I disagree with you. Knowledge of many languages makes learning others easier.
bobobobo
A: 

As an interviewer, I would ask that question to see how elequent a candidate is at expressing themselves.

Plus it show how self critical they are and what sort of standards they set for themselves and their fellow collegues.

not only does it tell you how much they know about god/bad programming it tells you how well they would be interacting with a client to extract requirements and how good a match they are for the rest of the team.

The actual rank 0-10 is much less important.

pappes
+3  A: 

I knew someone who used that interview question for years. He said that the best programmers tended to rate themselves around a 7. In particular people who rated themselves a 10 was usually that confident of their abilities because they had never met a really good programmer. But having never met one, who would they have ever learned any real skills from? There are, of course, exceptions. But if you're tuned into the community, you'll probably know who the exceptions are.

This phenomena, incidentally, is not limited to programming. I've found it true in a number of kinds of things. People who self-rate themselves 10 out of 10 usually are not very good. People who are very good at X are good because they have found other people who are good at X, and therefore are going to compare themselves to a more difficult peer group and will not generally self-rate at a 10. I have found this true for values of X as far afield as playing ping-pong or chess.

Even if the 10 **is** that good, do you really want someone so full of himself on your team?
Adam Jaskiewicz
Very true. I Agree.
Navneet
+4  A: 

Your project euler rating might give an idea (not your skills but your passion about not giving up till the end):

http://projecteuler.net/index.php?section=problems

Serhat Özgel
also you need to consider that most of those stuff just about mathematical understanding and applying them to programming rather than solving real world problems.
dr. evil
I think I considered that in parens.
Serhat Özgel
A: 

I believe that it is important not to over estimate the importance of language knowledge.

The greatest skills that a programmer can have are in the areas of problem solving and design. By the time you get down to actually using the language that you've chosen, it's almost just typing. (accepting that one area that you have hopefully used your problem solving and design skills is in the layout of your code, to address the problem of readability and maintenance)

So the measure of a programmer is how well they can bring a disparate range of ideas or issues together to solve a particular problem. More skill is potentially just adding areas of knowledge that can be drawn upon.

Of course none of this helps as a metric for determining your own skill - but others have already said that it's pretty well an un-metricable question anyway. :-)

Andrew Edgecombe
A: 

If you want a sound byte for an answer:

When I started work professionally I was probably a 2, Now I'd say I was around a 7, but every day I'm working to reach 10.

Garry Shutler
+5  A: 

This interview question isn't actually about how good you are as a developer. It's about how much self-awareness you have, and how well you justify (to the interviewer) whatever figure you put forward.

The right way to answer this question during an interview (as opposed to a philosophical answer) is to choose your strongest areas and produce some good evidence to say that you're in the top X% of developers in those specific areas.

For example, I might say that in creating reliable software, I'm in the top Y% because that's one of my specialities. Then I would give some examples. Alternatively I say that a reasonable way of judging development skills is how much money one earns. Again, this is an area where I have an advantage.

What you shouldn't do is to take the question literally. That's not normally what the interviewer wants.

RoadWarrior
A: 

Words per minute.

PLEASE tell me this is a jokhe!!
AviD
A: 

In my opinion this is a hard (and in the context of an interview an even UNFAIR) question! I have been working for three different companies up to now. Every where I met very few excellent programmers (far better than me), lots of good programmers and a few programmers that should change for the better. But it's impossible to put them into categories from 0 to 10!

koschi
A: 

There are many "dimensions of goodness" to being a programmer; the assessment process would vary depending on which one you're interested in. Here are a few ideas:

  1. Technical proficiency: Go buy a good "cookbook"-style reference on the/a language you primarily use; for each task discussed in the book, first write your own solution and then compare it with the one(s) offered in the book.
  2. Development speed: Sign up at TopCoder and work through their stored problems or participate in a real-time competition.
  3. Participating in a development team: Buy lunch for one of your trusted co-workers and ask him/her for an honest evaluation of yourself as a team member (e.g. "What do you see as my main strengths and weaknesses as a member of our team? What would you suggest I do to improve?") [If there's nobody on your team that you could go to for such a discussion them maybe that tells you something about this issue.]
  4. Communication skills: Sit down with a co-worker who is not a developer and ask for her/his views on your current project. Pay attention; consider how well her/his perceptions match your own.
  5. Estimating: Each morning make a note (for your eyes only) about what you expect to accomplish that day and how long you expect it to take. At the end of the day, compare that note with what actually happened to see how far off you were. To improve in this area, think about reasons for the differences and what you could consider that would have made your guesses more accurate.
joel.neely
+2  A: 

10 - You don't know that you don't really know anything.

9 - You're just bragging, and you probably aren't as good as you think you are. Even if you are really this good, you lack the political skills to see what picking a "9" says about you. That, or you're pretty well-known/worshiped in the industry (i.e. you wrote a book once, and it has a nickname like "The __ Book" or an acronym that most developers would recognize instantly), and not afraid to throw your name around.

8 - You're damn good and you know it, but you're smart enough to realize the stigma of picking 9 or 10. You'd better be able to back it up.

7 - You're very good, but you know you have a lot to learn.

6 - You're competent, and have a lot to learn, but aren't very confident in your abilities. Are you sure you aren't a 7?

5 - Decent junior dev. You're just out of school, and smart enough to realize you don't really know anything about real-world programming, but you know how to hack together code.

4 - Mediocre junior dev. You're just out of school, but your basic coding skills leave something to be desired. You had a hard time just passing most of your programming classes, but for some reason decided you still want to pursue a career in software development. You also don't really believe in yourself, so why should an interviewer?

3 or below - If you have so little confidence in your programming ability, why are you applying to programming jobs?

So the "correct" answer is probably 5-7, depending on what kind of job you are interviewing for. An 8 has enough experience that she wouldn't be asking this question.

Adam Jaskiewicz
A: 

You can always compete with fellow programmers and see how well your thinking abilities are. You can try the sites like www.topcoder.com or www.spoj.pl or wwww.codechef.com they provide you with ranks and you can see how well you do. However these purely test your algorithmic brains and not the way you code. If i was asked this question i'd say that i'm a constant learner and believe in making and correcting mistakes, i'm not afraid of self criticising my code nor i'm hesistant in asking others to point out my mistake, you can decide what scale does that sit on.

Anirudh Goel
A: 

Define a scale of 100%.

Identify yourself as staying on the 100.0 mark.

Identify positions of other developers and famous personalities of IT.

Calculate by how much you are better.

User
+3  A: 

As someone who interviews prospective developers, I'd say anywhere between 6-8 would be the safest answer to that question. I imagine the average response is around 7. I think it's really more to weed out the incompetent (0-5) or the ignorant (9-10). If you decide to answer 9+, be prepared to prove it.

If you're really looking to seriously answer the question for yourself, I'd say the Programmer Competency Matrix is a great starting point for the areas such a rating should encompass.

Michael
A: 

I have been asked that question a couple of times. When I just got out of varsity I said 7/8. Now that I have been working a few years I say 4 even though I think I am now infinitely better.

I don't see the 0-10 as a straight line graph. I see it more as exponential graph. So sure I still say 4 out of ten BUT I believe that I am better than 90% of the coders out there. I have seen some of their work and it scares me. I have worked on banking software SSL software and it is scary that it actually works. So there are those 10% of coders out there that are better than me WAY better than me. I am not sure if I will ever catch up to them. To get to 4 in my opinion is easy. Way harder to get to 5. From 5 to 6 is incredibly scary.

Great coders that are worthy of a 8, 9 or 10.

uriDium
A: 

There's only one metric by which to measure a good programmer: LOC/hr. Every other metric is superfluous :p

Dan
A: 

One entirely valid approach to the "how would you rate yourself from 1 - 10?" is to point out the inherent problem with self-assessment. To summarize the findings of the experiments in that fascinating paper:

  1. Almost everyone rated themselves as above average. At least 50% of those people were either dishonest or deluded.
  2. People who are actually in the top 25% frequently push themselves down to the 50-75% range (i.e., they rate themselves artificially low).
  3. The people who are in the 50-75% bracket tended to assess themselves most accurately.

You could reasonably summarize this as 50% of self-assessments are lies and another 25% are wrong. So, you could choose to ask the interview drone if they are either wasting your time or assessing you psychologically....

Bob Cross
A: 

Experience. The wider range of experience you've got "the better" you are. You only know what you've experienced.

Size and complexity of system you've developed (or successfully worked within without corrupting).

bobobobo
A: 

Pretty valuable discussion here. Loved it. I as an interviewee, would like to give answer of this as follows.

I would like to analyze the question first.

Analysis is dependent on few things like the language, framework, nature of the problem, (I am PHP and Wordpress guy so answer is in this context) 1. plugin patch work, 2. building from scratch, 3. api's usage

My common approach would be (in most cases) 1. understand the given (or already built) scope of the functionality (relative to current problem statement) 2. reckoning one of the best way to solve (there are definitely more than one way every time…) 3. coding 4. testing in real time scenarios (for performance tuning) 5. in initial stages of any programmer, all four steps are recursive till getting final solution but as experience grows, 1 2 steps becomes recursive.

Aptitude of understanding fundamental philosophy of any language is imp. Rest is problem solving attitude.

And in PHP, I think I am 6.5.

tech.kapil

related questions