The best way to get better at programming is to pair with other developers.
Ideally, spend most of your time pairing with a more experienced programmer.
Other times, pair with someone less experienced. Attempting to justify your suggestions will reveal when your understanding of something is superficial. (When you discover this to be the case, admit it immediately.)
Pair program for much of your time, but do plenty of struggling on your own.
If you are the worst programmer at your company, that’s great. Be aggressive in seeking to learn from your coworkers. Ignore the fear that you might be bothering them.
If you are the best programmer at your company, quit. Just kidding; but make sure you don’t stagnate. Reach outside your company for people from which to learn. Everyone should have at least one friend who is a better programmer than they are.
If your coworkers are dispassionate about programming, quit. But for real this time. Uncaring colleagues will sap your passion, which might be your most valuable resource.
If you can’t pair with great programmers at work, do it at meetups or hackfests. If there are no meetups or hackfests near you, start one. If you can’t find at least one person willing to join you, move.
Open source provides an excellent path for improvement. At the very least, read lots of code. Try to figure out why it’s hard or easy to understand. Contributing back to the project is even better.
When you write code on your own, get it reviewed by others. Notice the things that stronger programmers call out in your code (duplication, probably).
The best way to judge the quality of your code is to evaluate how hard it is to change later. When you struggle to make a change, pay extra attention and discover why. (It’s usually because of duplication.)
Try really, really hard to come up with good names for things.
Conference talks are usually a lousy way to learn. Talking to other programmers at a conference is a great way.
Don’t get discouraged when you struggle. Programming is hard, and it humbles even the best regularly.
As you improve, share what you’ve learned so that others may find their way more easily. Pay it forward.