Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

This goes back to a conversation I've had with my girlfriend. I tried to tell her that I simply don't feel adequate enough in my programming language (C++) to call myself good. She then asked me, "Well, when do you consider yourself good enough?"

That's an interesting question. I didn't know what to tell her. So I'm asking you.

For any programming language, framework or the like, when do you reach a point were you sit back, look at what you've done and say, "Hey, I'm actually pretty good at this."? How do you define "good" so that you can tell others, honestly, "Yeah, I'm good at X".

Additionally, do you reach these conclusions by comparing what others can do?

Additional Info

I have read the canonical paper on how it takes ten-thousand hours before you are an expert on the field. (Props to anybody that knows what this paper is called again)

I have also read various articles from Coding Horror about interviewing people. Some people, it was said, "Cannot function outside of a framework." So they may be "good" for that framework, but not otherwise in the language. Is this true?


locked by maple_shaft Jul 20 '13 at 17:26

This question exists because it has historical significance, but it is not considered a good, on-topic question for this site, so please do not use it as evidence that you can ask similar questions here. This question and its answers are frozen and cannot be changed. More info: help center.

As far as I know the whole 10 000-hour rule thing comes from the book 'Outliers'? – Jaco Pretorius Sep 8 '10 at 21:28
The 10,000 hour rule was researched/supported mostly in the work of K. Anders Ericsson, a pioneer in the relatively new psychology discipline "human performance studies." In particular, his 1993 paper "The role of deliberate practice in the acquisition of expert performance" is the landmark reference in the field. See the Google Scholar entry here:… – limist Sep 20 '10 at 17:55

18 Answers 18

You can't call yourself good at X. Only other people can.

Though just because others say you're good at X doesn't guarantee you're good - just that you're better than them. (Unless of course those other people have proven credibility regarding X.) – Peter Boughton Sep 6 '10 at 17:53
I disagree so i -1. Just because i disagree and think the upvote is to high. – acidzombie24 Sep 21 '10 at 2:12
+1 Oh, this is so zen! – Spoike Nov 22 '10 at 22:04
I'm afraid that this actually does not address the problem at hand: accurate self-evaluation is imperative for our field and this does not offer help in that regard. – cwallenpoole Feb 12 '11 at 18:14
@cwallenpoole : Don't forget the Dunning–Kruger effect. Moreover, aren't you more impressed when a lot of people are telling "X is really good at Y" rather than when X is claiming he is competent ? – Jonathan Merlet Nov 13 '12 at 10:28

There's a few good answers to this already, so I'll just contribute this:

alt text

I'm not sure if it's actually safe to replace your former self is it? ... maybe I should ask on – John MacIntyre Sep 8 '10 at 3:11
@John MacIntyre - That link makes the standard "Not found" error message seem prophetic: "The Q&A site doesn't exist…yet." – NickC Sep 16 '10 at 22:24
Wouldn't killing your past self make you vanish since you're from the future? – Terence Ponce Sep 21 '10 at 2:51
Replacing your older self with a new self would cause undefined behavior. ;-) – Pavel Shved Nov 22 '10 at 23:00
I would just stop by day 14611, drink the age reversing potion and not go through the hassle of traveling back in time and risk disappearing. – chiurox Nov 23 '10 at 1:25

One is good at something only when they can confidently and correctly say they can do it.

If you want to say you're good at C++, for example, you ought to be able to say, with confidence and justification, that given a general problem using C++, you can solve it.

This provides a distinction from being cocky, which would be to confidently say you can do something without sufficient justification; and experienced, which would be to say you can do something because you have done it in the past.


On a related note, while I think the Software Craftsmanship movement is an excellent idea to help standards improve in our discipline, I've seen a lot of people describe themselves as software craftsmen, which seems a little arrogant to me in most cases.

It's up to your peers to decide whether or not you are good at something (or a craftsman); I'm sure Einstein and Feynman didn't wander round early in their careers saying "look at me, I'm a genius!" Similarly, it's up to your peers to decide whether you are good or not.

Stackoverflow is a useful tool to decide whether you are competent. Pick some questions in your area of supposed expertise. Answer them (or if they've already been answered, answer them in your head without peeking at the posted answers). Did you think of the best answer? Did you miss anything? Were you just plain wrong?

Software craftsmen would be the ones writing assemblers, compilers, linkers and loaders in my opinion anyway. – Chris Sep 6 '10 at 17:35

Since there is no standardized programming test that you can take that will allow everyone to agree that you are a good programmer, it's up to you to determine whether you call your self that or not.

I find that it has to do with your confidence level. If you FEEL you are good at something then you should be able to say it. At somepoint you'll complete a project that pushed you and that feeling will change from 'not yet' to 'I am'.


I know this is a pretty hard question. I did two subjects with where I mainly programmed in C++ and got high distinctions in both. I wouldn't consider myself good at C++. In fact, if I was applying for a job, I would leave it off my resume and just write C instead. The whole language just isn't my thing.


I think you can call yourself good at something when you develop the required knowledge to be able to look at yourself as if from another person's perspective, and then determine if you are good. In other words, you should have strong "meta" skills.

For example, I'm a hobbyist writer, and when looking at my own writing I can tell:

  • what aspects of it are good and why
  • what aspects of it are bad and why
  • what do I need to do to improve the bad ones, and why
  • which bad aspects are specific to the written piece, and which are a symptom of my abilities
  • what are the elements that other people may criticize, and why
  • which criticisms are not relevant to my specific piece, even if others may voice them, and why

etc. etc. Because of this I feel that I'm qualified to decide if I'm good at writing or not. The same applies to X.


Since good is very subjective, I would say you are good exactly when you are confident that you are great.


You can claim you are "good" at something once you have been doing it long enough that you've long since forgotten how to do anything else.


The only time you can be sure if you're good at something is when you're sure you're bad at it.

John Cleese spoke about this: At 9:00


Everytime I thought I was good at programming in a particular language, six months later I was convinced that at that time I sucked at it, and now i was good at it. So I guess it is a relative term. Maybe it would be better to call yourself "good enough to do Y" where Y is a particular project in that language.


When you can look at the source code of something like boost (in c++. or boost equivalent in another language) and NOT BE afraid of it.


When you start imagining how a software you are looking was written in that language.


You know you're good at it when you like what you're doing (and it's not just a trivial task).

You know you're bad (yet) when you keep swearing randomly while you code.

I'm tempted to -1 this one. I have worked with systems which were so poorly put together that they almost could have been considered non-deterministic. Have you ever tried to build a UI in a non-deterministic language? It inspires cursing. – cwallenpoole Feb 12 '11 at 18:17
@Christopher well I spend most of my time cursing new stuff, but gradually I get used to it or code something to help me out. If you hate what you're doing, maybe you can code your way out and feel the most clever guy in the building, eh? :) – Camilo Martin Feb 14 '11 at 10:51

I often don't say that I'm good at X, but rather that I'm a quick learner and haven potential to be good at X.


Not sure about "good", but I say I "know" a language when it's not my knowledge of the language, but rather my understanding of the problem (or problem domain), that prevents me from implementing a piece of software to solve that problem.


I think the article you were looking for was Teach Yourself Programming in 10 years by Peter Norvig refers to requiring about 10,000 hours to become good at something. In addition I've seen it pop up in other places like "The Element" by Ken Robinson and on a lifehacker blog talking about reducing the number of hobbies you have.


I'm going to take part of this question to be asking 'what are some criteria to evaluate my competence at a programming language'

I've found this matrix to be pretty useful in that regard. Most of the items are actually more about being a competent programmer in general, but once you get down the the Programming, Experience, or Knowledge headings you'll see some that depend on language used.

Of course, as with any somewhat-arbitrary divisions into categories it isn't perfect. But I think it is pretty useful nonetheless. It can give you at least some idea of where you are and where you should go.


Not the answer you're looking for? Browse other questions tagged or ask your own question.