80

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?

orokusaki
  • 1,013
  • 1
  • 8
  • 13

9 Answers9

79

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.

GrandmasterB
  • 37,990
  • 7
  • 78
  • 131
  • 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 '10 at 05: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 '13 at 14:01
69

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.

codeyoung
  • 2,036
  • 16
  • 19
34

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.

Kirk Broadhurst
  • 4,199
  • 18
  • 27
  • 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 '13 at 12:44
10

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.

Fishtoaster
  • 25,909
  • 15
  • 111
  • 154
10

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.)

Richard
  • 841
  • 1
  • 9
  • 14
7

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.

Randall Schulz
  • 1,902
  • 10
  • 8
4

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! :)

Lazarus
  • 381
  • 2
  • 6
1

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.

1

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.

tia
  • 965
  • 5
  • 9