On his blog, Nick Halstead shares a few tips he's worked up to help developers that might be having a hard time with coding issues - a few steps towards solving programming problems.
Early on in most people's programming careers problem solving is a large part of your day to day job. As you become more experienced you find that many programming patterns that you have used before can be reapplied. You then start working on larger and larger projects and the problems tend to be more about solving architectural problems rather than logic related ones.
Included in his list are things like "Talking it through", "Brainstorming", "Breaking it down" and "Research". This last one can be one of the most important and can save tons of time in the long run. With tools like Google and other sites, there's no reason to check before you start a project to see if there's someone out there that might have already done it (and it might be more well developed).