I tend to understand things rather quickly, but after 2 years of programming in Python I still stumble across things (like Flask today) that amaze me. I look at the code, have no idea what's going on, and then feel very humbled. I feel like an absolute expert each time this happens, up until the moment it happens. Then, for about a 2 week period I feel like an absolute beginner.

Does this often happen, or does it indicated that I have so much more to learn before I can even be considered a "good" programmer?

  • 59
    Everyone has this feeling. Apart from Jon Skeet.
    – Dan Diplo
    Sep 19, 2010 at 14:18
  • 7
    Unless you repeatedly feel like this, you're not challenging yourself and surrounding yourself with the right level of problems and peers. Balancing your emotional load between completely overwhelmed and complacency is the work of a lifetime. It sounds like you're right where you need to be.
    – Winfield
    Sep 19, 2010 at 17:27
  • 1
    @Dan Diplo, is there any question where Jon Skeet can be left out? Jon Skeet isn't Chuck Norris...
    – Harmen
    Sep 19, 2010 at 17:28
  • 3
    @Harmen Sorry, no.
    – Dan Diplo
    Sep 19, 2010 at 18:46
  • 12
    @Harmen: Jon Skeet is better than Chuck Norris.
    – Hello71
    Sep 20, 2010 at 2:36

9 Answers 9


I call it the "Freshman Feeling". When it seems like everyone else has it together, is going faster, knows all of the buildings on campus, isn't struggling, etc. In programming, I'm disoriented, uncomfortable, unsure whether or not I'll meet the deadline - it's fear.

The feeling goes away when I acknowledge the fear for what it is, then ignore it, dive in and begin to learn - struggling through each problem one at a time.

The thing is, now, I use it as my gauge to tell me when I'm really learning. If I don't feel it once in a while, I know I'm not moving forward - I'm stagnant.

One of the programmers at work has this motto, "Comfort is the enemy."

That feeling you talk about can be your best friend if you want to get better.

  • 13
    This came up in my martial arts class the other day: it's precisely when you feel like you're never going to get it that you're probably learning the fastest. Sep 24, 2010 at 11:47
  • @Frank - excellent analogy. I've never thought of it that way.
    – orokusaki
    Sep 24, 2010 at 22:48
  • 3
    @Frank You just put my mind at ease. A lot. Thank you.
    – eckza
    Apr 22, 2011 at 2:15

You will never, ever, ever, ever, ever, in the entirety of your career, be in a position where you immediately understand every programming technology simply by looking at it. There's just too much there. Its the accumulation of research and knowlege of millions of individuals over many decades. If you ever find yourself thinking you are at that point, seek a therapist to discuss your delusions.

The trait you need most is the ability and willingness to learn. If you have that, nothing will be beyond you.

  • Everyone here had great answers so +1 all and thanks for removing my suicidal thoughts (kidding), but @GrandmasterB made my wife crack up so he gets the prize.
    – orokusaki
    Sep 19, 2010 at 5:35
  • 1
    Right. After 28 years of coding in Delphi/Pascal I still see code where I think "What is this guy/girl doing?" Not because it's bad code, but it's using techniques or algorithms that I have never come across. They fall in the category of things "I don't know that I don't know" and at that initial moment move into the category "I know that I don't know". At that moment you move from being innocent to the dangerous point where you could judge yourself ;-)
    – Jan Doggen
    Apr 18, 2013 at 14:01

No, this is not the sign of a bad programmer. You should always be learning, and you should generally assume that there is something else to learn about a given topic.

The bad programmer is the one who believes that he already knows the best way to do everything, and isn't open to the possibility that he has something to learn.

  • 1
    +1 just for "the bad programmer is the one who believes that he already knows the best way to do everything". And there are so many of them out there...
    – Andres F.
    Apr 18, 2013 at 12:44

The one constant in my path as a programmer has been that I always have more to learn. It sounds cliche, but it's true.

That isn't to say I don't feel at all times, even now, like I've learnt most of what I'll learn in my life. The thing is, I felt that last year- looking back at that point now, I clearly still had a lot to learn then. Same thing for the year before, and the year before that.

You're always learning- exposing yourself to really good code and developers is a great way to remind yourself of that.


There is a model of learning where you move through four stages:

  1. Unconsciously incompetent: you don't know you don't know.
  2. Consciously incompetent: you know you don't know.
  3. Consciously competent: you know you know.
  4. Unconsciously competent: you don't know you know.

Clearly level 1 is a problem, but it's where everyone starts, but quickly moved from. As you learn until you reach the point where you just do it at level 4. With something like another module or library on an existing platform you inevitably slip back to 1 or 2 (hopefully 2). This is normal.

(BTW. stage 4 can be a problem, too easy to fail to keep up with the latest techniques.)


Take a walk through a library. If it doesn't make you feel very, very small, you're not getting it. If you want it in nerd-speak, it's all about the derivative, not the actual quantity of your knowledge. It's OK to feel better about what you're learning than what you know, though you also shouldn't overdo it. Having learned something is an accomplishment, it's just that you can't ever consider it complete.

By the way, two years is not much experience. I had more than that much experience before I was out of college (not counting classes), though I was fortunate to get those opportunities.


I've been writing code on and off for over 20 years now, there have been times when I considered myself to be unassailable for skill and expertise but I discovered that there's always someone better. What you do need to bear in mind is that there is a multitude who are also worse, much worse, than you. Software engineering is not a static field, new approaches, techniques and even languages are being developed all the time and it would be impossible to keep up with all of it.

The thing that usually has me sitting, looking dumbfounded at some new code I've just opened is the style of coding. That's usually a function of how comfortable the programmer was with the problem space, more comfort tends toward more abstract code in my experience. If you do open a piece of code and it doesn't leap into understanding then don't beat yourself up, sit down, read it carefully, make notes (yes, on paper) and step through code manually (if you have time). Understanding will come and it's you need to understand it that makes you a good programmer! :)


This use to happen to me. Then it stopped. Not because i stopped progressing and didnt look at difficult code but because i eventually became very good. This to use happen in C++ for me. Boost (source code) doesnt scare me.


I don't know if you are bad programmer or not, but I consider myself as a good programmer :D, even I don't know everything. For me, the difference of good and bad programmer is the capability and methodology for getting the job done. If I had a BASICA pgrammer, who can build the application I need in time that running well, and be able to maintain his code base to make reasonable change according to the request, so I'd consider him/her as a good programmer even he/she knows only BASICA and nothing else.

However, feeling humble is also one of a good thing for programmers -- the career that needs constant learning all the time.

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