I recently had a conversation with a classmate about how thinking can be broadly separated into hard thinking and soft thinking. We agreed that programing is an excellent method of improve one's hard thinking skills. Programing forces you to tell your code exactly what to do. Any deviation in code results in different result; or a different means and arriving at the same result - this can be more or less efficient.
Programing forces one to be logical. One must consider what one want and how to achieve it; however, soft thinking does have its place in programming as well. Pseudo code is an example of soft thinking's utility. When you face a roadblock, it may be helpful to step back and think about what you are trying to accomplish in general terms. Ambiguity can be the catalyst for a hard course of action; it can also help locate problems worth solving.
While we agreed hard thinking is more prevalent in programing, I would not discount soft thinking's importance in problem solving.