Good programmer or no, it's difficult to implement something when you don't know what it is...
I've been at my current job for about 6 months now. It's my first programming job, and in a pair of industries that I was completely ignorant of. Going in, I was worried a bit about how my self-taught, no business-dev experience, no team-dev experience, no SQL knowledge abilities would stack up compared to some veterans. I was also pretty confident I could learn the industry terminology and the general flow of things. Good enough to digest specs anyways. I'm a pretty smart guy and variables are variables, right?
(You can see where this is going...)
Of course it turns out to be completely opposite. A week or two and I pickup SQL, CVS, and makefile construction; good enough to make do anyways. My experience learning the languages and practicing application design it seems is far more effective than my peers who were forced to pick them up because something needed to be done yesterday.
On the other hand, it's been a long time and there are still numerous tidbits here and there which are confusing, confounding, or just non-existent regarding what words mean what, how things work, what goes where, who does what... Mostly it's because there's a metric buttload of stuff to learn, partly because of documentation, partly due to communication probably, partly because specifications are half a page in notepad written by people with limited technical background for (me) with limited accounting/insurance/health-care background.
It's oh so frustrating and humbling after so many years and learning so much since being a naive little know-it-all to be so often reminded that I am yet a naive little know-it-all.
The one page spec in notepad is my favourite. You know you're in for a fun ride when that comes along :)