I've been programming since college, was a hobbyist programmer as a kid, but never got serious until I was a freshman. That was almost a decade and a half ago. One thing I've noticed is that when people reach a certain point in their skills they never really move beyond that. That is if they suck as a developer when you hire them, they will always suck. 10 years of C# experience doesn't necessarily make you a better developer than someone with 6 months of experience. (yeah, yeah, some people will get angry at reading this, but it's true, live with it).
So my question is, just how the hell do you get to be one of those super programming freaks that everyone worships? I've been doing coding puzzles as often as I can -- example: reverse a string in place using no swap buffers. (that is a fun one) and I've noticed myself get a little sharper. I'm not improving as fast as I wish I could so I would love to hear some tips from people here.