There are already some good answers, here, so I'm basically just adding some free additions to the suggestions already posted.
Don't forget the obvious things, like bouncing problems or ideas off other, experienced developers that you trust and listening to their responses. Try to get at the reasoning behind their ideas, and see things from their perspective.
Also, remember that a lot of programming problems have already been solved, so learning best practices and the reasons behind them go a long way to helping your decision-making skills. The more you learn about why certain principles are recommended as best practices, the more likely you are to train yourself to think correctly.
One last suggestion - hang around with people who are completely opposed to your normal views. If you're a conservative, be sure you have liberal friends. If you're a liberal, listen to the conservatives around you, and most importantly try to see the world from their perspective. You don't have to agree with them - You're just training your mind to think outside the box.
Good problem solving skills take time to cultivate, and you have to discipline yourself to look at things from different angles at all times.