When can you consider yourself a good programmer?
Well, that largely depends on what you consider to be a good programmer.
From where I’m sitting, one of the qualities of what I consider to be good programmers is to have stopped thinking about whether they’re good or bad programmers. They’re just programmers. They program.
Good programmers don’t always write good code. No matter what piece of code you look at, there will always be a way to improve it just a little bit more, to tweak and tune it just a little further, to make it just a little bit cleaner. As a good programmer, you need to be able to stop and accept these two facts:
The code you’ve written is probably good enough, warts and all.
It will embarrass you when you look at it again a year from now, and that’s okay.
I would also suggest the skill of empathy to be a quality of a good programmer. Being a good programmer is not just about being able to program efficiently (or whatever other technical measurement you may want to apply); it’s also about listening to your peers, especially the less technical members of your team, understanding their motivations and requirements, and being able to see things from their perspective. Being good at programming is worth nothing if you program the wrong things, and what people tell you to program is not always what they really want you to program.