in reply to What if you are not a genius?
Seriously, most of the "good programming habits" are about learning more scalable ways of approaching learning. Talent is nice to have, but every truly talented person that I know has to fight the tendancy to rely on their talent(s) even when a more methodical and organized approach would be more effective. While you may be flabbergasted at what that talent can let them do, with organization, perseverance and effort you can accomplish important tasks that they would crash and burn on.
Besides which, it isn't a competition. The truth is that the better people become at programming, the cheaper it is to have programmers do work. The cheaper it becomes, the more need people find for programmers. So the small number of people out there with amazing talent and unbelievable dedication? Just learn to leverage off of them. It doesn't matter how much more productive they can be than you. What matters is how much more productive having them around makes you, and as you become productive, you become valuable and get paid more.
So those genius programmers? You should try to convince them to teach you, contribute to CPAN, give them good bug reports if you use their code, and so on. Do that and their talent will work to your benefit. It sounds crazy, but it works.
As an old saying goes, first rate people want to be around first rate people. Second rate people want to be around third rate people. Now do first rate people want to hang around first rate people because they are first rate themselves? Or do they become first rate by hanging around first rate people...?