Becoming a good programmer requires internalizing the concepts of programming... One must learn to think like a good programmer and that requires being able to truly grok "why" the concepts were developed, not just blindly adopt or obey them like religious dogma.
I personally think this is a blindingly obvious thing. However I am also aware that most of the developer crowd is oblivious to this simple fact.
See the rest on "How not to teach programming: Getter and Setter Methods" at Thoughtful Programmer