Jeff Atwood has a good post on his Coding Horror blog about becoming a better programmer. He starts with the fact little know to the world at large, but quite obvious to programmers that some programmers are much better than others. (My favorite source for this kind of information is Facts and Fallacies of Software Engineering). He then advances the premise that there is a certain aspect of programming that is intrinsic and cannot be learned; in other words, you are either a good programmer or you are not, and no amount of work will change you from a mediocre programmer to a good one.
He then goes on to talk about the part of being a programmer that can be improved, which is basically everything else besides the intrinsic technical capability. I definitely agree with this. I'm sure there are quite a few twenty year old programmers out there who know things about the .NET framework that I don't. And that may make him a better technician than I am in some circumstances, but it does not make him a better programmer. Even in the technical realm, there is architecture, design, and process to consider beyond the bits and bytes aspects of programming. And beyond the technical realm, there are many aspects to being a successful programmer, such as understanding the business requirements, interacting with your co-workers and customers. Many judgements I make day to day are based on my twenty years experience in software development, not necessarily on the particular bits and bytes that need to be moved around to accomplish the work at hand.