Actually my short answer is "solving more problems". But the point is: Really concentrate on the problems and don't give up. Don't ask for help on StackOverflow or whatever. (Reading StackOverflow is ok of course!) Try hard until you get a nearly working solution, then you nearly reached your goal. And continue until you have a satisfying solution.
For me problem solving is two things:
- problem solving strategy
- persistence and frustration tolerance
Point 2 is really crucial in my opinion because it forces you to change your thinking the longer you are stuck with a problem. It also allows you to spend more time with problem solving allowing you to even more improve your skills. ;-)
By the way, I recommend you to read Edward de Bono. Though I aquired my problem solving skills mainly by studying Physics, his writing is really interesting.
Well and my problem solving toolkit is this:
- randomly try something
- read random articles/blogs/posts about the topic I am concerned with (or a closely connected topic)
- making a nice drawing
- split the problem into multiple but simpler problems
- do something else
- Google something that is related in some way to the problem
- talk to others about the problem
- make a TODO list
- write down stuff you know about the problem's effect so you can more easily find patterns
Please note that most of these tools can be applied recursively.
And my algorithm is this:
- Which tool of my problem solving toolkit makes most sense at the moment?
- Problem not solved? Continue with 1. ;-)
Step 1. is a tough decision, but you make better decisions the more you practice.
Oh and I nearly forget the most important ingredient:
Think positive about the whole process. Don't think "I hope XYZ will now solve the problem." Rather think: "If XYZ doesn't work then I know that YZX can't be the problem source and I will check if ZYX works." Problem solving can be fun sometimes in particular if your process of finding a problem ends up to be elegant and informative.