For what it's worth, the only way I've ever learnt anything significant relating to programming was getting a job that demanded it. Want to learn Linux? Install it on your primary laptop and get a job that uses it. Same for Python or Ruby and Rails or whatever.
So, I think your feeling of incompetence may be just a feeling of being totally bored by doing the same thing for five years. If you got a job that, say, demanded you immediately learn how to make feature changes on a PHP site, I expect you could do it fine.
This doesn't cover everything in your post, though -- you're right, it does take years to become a kernel or compiler hacker. There's plenty of work to be done with fewer prerequisites than those two.
So, I think your feeling of incompetence may be just a feeling of being totally bored by doing the same thing for five years. If you got a job that, say, demanded you immediately learn how to make feature changes on a PHP site, I expect you could do it fine.
This doesn't cover everything in your post, though -- you're right, it does take years to become a kernel or compiler hacker. There's plenty of work to be done with fewer prerequisites than those two.