Oddly enough, the best and worst programmers I know are the ones ‘bitten by the bug’. The best ones know how to channel what they have learnt, and have strived to learn through practice exploration. The worst ones get idealistic about the small amount they have learnt, and will push that along (a lot like attacking someone with a blunt sword).
I think the balance requires a solid education, and a large amount of trial and error - think of the Samuri who trains but never fights, versus the Samuri who charges into battle not knowing how to conduct himself.