Over lunch today, Peter Norvig told me that his two daughters (who are, respectively, 15 and 17 years old) solve problems in different ways. The 15 year old thinks like a programmer, whereas the 17 year old thinks like a mathematician. Not that one way is better than the other — they are simply different.
In particular, the 15 year old frames solutions in terms of “here is what you should do”, whereas the 17 year old frames solutions in terms of “this is what the solution is”.
It occurs to me that this distinction extends to other areas. There are people who, seeing a goal, think about the route that they will take to get there (what might be called “programmer mind”). Then there are people who, picturing their goal, define things so that they will arrive at that goal (what might be called “mathematician mind”).
For example, one person who wishes to have more friends might set out, step by step, to do things that make them popular. But another person might work to become the kind of person who is popular. The former is procedural, whereas the latter is definitional.
It’s a dialectic, of course. Every one of us travels between programmer mind and mathematician mind many times a day, usually without being aware of it. In a sense these two ways of thinking define fundamentally complementary ways of thinking about our relationship to the world around us.