1. Programming skill is more likely to have a power law distribution rather than a normal distribution. That is, lots of very unskilled people, a chunk of decently-skilled people, and a handful of "rock stars." This would more closely match the distributions (and success rates) of other skills. This also matches my experience working with programmers of varying skill levels for more than twenty years.
2. You can teach a lot of the concepts but there is an inherent knack for logical thinking that is very hard to teach. If one has this knack, new concepts are easily grasped, solutions to problems using currently-known tools are more easily found, and troubleshooting is simpler. If one DOESN'T have the knack, they can still be successful, but it is harder, requires substantially more effort, and more of their time will be taken at each step.
It's not always pobox where someone sits on the talent distribution. This is also not a perfect predictor of their ability to produce; some people are very bright but unmotivated and unmotivatable. I would rather have someone with Leeds talent who was willing to work and produce. It's also important for a team to code to roughly the same competence level; if you have one rock star who writes code that no one else understand, you create a bottleneck for yourself on that one person being able to work with that code.