The fact that programmers tend to not get better has little to do with programmers' inherent worth or talent. It has everything to do with how programmers are trained. Employers are doing less and less to train their technical staffs, which has fostered a generation of programmers who believe that the right way to learn something is by Googling it or experimenting randomly on their own. Of course you're not going to get better this way.
Maybe true, but "knowing how to learn" doesn't completely cover it.
It's absolutely possible to make middle-of-the-road developers into good developers through training and mentorship. It's just that many (possibly most) developers don't get opportunities for good training. They're expected to use their "talent" to figure things out on their own, which in most cases means Googling or trial-and-error experimentation. These are among the poorest, least efficient ways to learn.
I think it comes down to drive. If you want it bad enough you'll figure it out. Don't understand the difference between the stack and the heap? Read about it for 4 hours after work, etc. etc. etc.