Problem solving is part of our daily life. Despite solving problems is important for everybody, for programmers, problem solving skill has a different value. It is consider as one of the key skills in profession. Sommerville (2010) argued that it is one of the key factors that should influence the selection of staff. Gomes & Mendes (2007) argued that major cause of the students’ failure in introductory programming course is the lack of problem solving ability.
Note: This is an article that is fractionalized in two parts. In this part relevant psychological research regarding problem-solving is outlined. In next article, topic how should programmers solve the problems will be outlined.
The process of problem solving is complicated and there are still no theory of how problem-solving works. However we are almost certain that problem solving requires knowledge, judgement, decision making, pattern recognition, information gathering skills, personality, emotion, perception, creative or lateral thinking. It has been argued that by studying problem-solving we might be able understand how problems are solved effectively as well as what goes wrong when a problem can’t be solved.
Definition of Problem
There are several definition of what problem is, in my opinion best definition made by Duncker(1945) :
“A problem exists when a living organism has a goal but does not know how this goal is to be reached”
Problems, then, consist of three components: an initial state, a desired state and a set of available actions to move from the initial state to the desired state. If you think about it, if there are no obstacles that prevents you from moving from initial state to desired state, then there cannot be said to be a problem. That does not mean solution requires no effort, it only means the individual it is in a state where he posses enough knowledge to accomplish a certain task.
How problems are solved?
Programming problems requires considerable amount of knowledge, therefore it is categorized as complex problem solving. To understand how problems are solved and whether representation or domain of the problem makes any difference, researchers have investigated how experts and novices solve problems. Here are some findings of expert vs novices.
This is a obvious one, experts are superior to novices in knowledge, meaning difference comes from vast body of specialist knowledge rather than different mental capacities of expert. However, equally experienced experts have different skill levels, meaning two experiences programmer does have different level of skills and how do they practised (Green & Gilhooly, 2010).
Experts work forwards
Expert knows more than novices, but do they also use different problem-solving strategies? To answer this question Larkin et al.(1980) conducted a study and found out that experts tended to use a working forwards strategy while novices working backwards strategy (also called means–ends analysis).
Working-forward means the individual begins with information given in the problem statement and using that to derive a solution(from initial-state to desired-state) while working-backward the individual starts with the goal, or quantity to be solved, and working backwards from that to the given information, until they were able to solve one part of the problem (from desired-state to initial-state).
Argument for this behaviour pattern is that experts use their domain knowledge to generate a good problem representation, which supports the use of a working-forward strategy. In the absence of detailed knowledge about the relationships between variables relevant to the problem, novices seem to have no option but to fall back on means–ends analysis, or even trial and error learning.
Experts have better problem representations
Chi et al.(1982) wanted to examine problem representation and categorization by experts and novices, to figure out whether experts have more effective ways of representing and categorizing problems? Chi et al. asked expert and novice physicists categorized physics problems on the basis of similarities in terms of how the problems might be solved. Result of experiment showed that, there were no difference in number of categories or time to categorize, however nature of categories into which problems were sorted was different. Expert could categorize the problem in much more meaningful way, meaning they were aware of commonalities between problems in terms of how they might be solved, which meant when problem is categorized better the answer comes quickly. A similar study carried out for mathematical problem categorization, which yielded similar result.
Experts become expert through extensive practice
Performance improves predictably with practice in all domains including problem solving (Green & Gilhooly, 2010). There are three explanation while practice works:
- Individual task components are executed more efficiently.
- Sequences of tasks components are executed more efficiently.
- Qualitative changes occur in representations of task structure.
What does that mean?
First and second explanations argue that recovery of declarative knowledge into memory is reduced and sequences of procedures are learnt in greater chunks. Third explanations argue that performance improves due to task changes meaning from algorithm based processing to memory based processing. Simply put : automaticity comes into play.
How to enhance common skill acquisition?
Are there any way to improve it? In general argument so far is behaving more like an expert.Here is possible list of actions that might be able to help to improve general problem solving :
- Understand the problem instead of memorizing superficially.
- See the problem as an analysis and reasoning task instead of trying to solve it quickly.
- Practice Makes Perfect – How much practice is needed to achieve excellence? Ericsson (1991) has suggested that it takes at least ten years to reach the international level of performance in sports, the arts and sciences. Simon and Chase (1973) estimated that it took some 3,000 hours’ practice to become an expert and around 30,000 hours to become a chess master. (So reading a book called learn java in 24 hours is underestimated)
- Use working-forward strategies, if possible.
- Non specific goals encourage more hypothesis testing (Green & Gilhooly, 2010)
- Slower learning leads to better problem solving (Green & Gilhooly, 2010)
To conclude: there is no theory of problem solving so far. However fundamental concept is representation. Which is influenced by many different variables. Therefore it might be wise to improve how you perceive and process problems.
Chi, M.T.H., Glaser, R. and Rees, E. (1982). Expertise in problem solving. In R.J. Sternberg (Ed.), Advances in the Psychology of Human Intelligence, Hillsdale, NJ, Erlbaum.
Duncker, K. (1945). On problem solving. Psychological Monographs, 58, 1–113.
Ericsson, K.A. (1991). Prospects and limits of the empirical study of expertise: an introduction. In K.A. Ericsson and J. Smith (Eds), Towards a General Theory of Expertise: Prospects and Limits, Cambridge, MA, Cambridge University Press.
Gomes, A., & Mendes, A. (2007). Problem solving in programming. The Proceedings of PPIG as a Work in Progress Report .
Green, A., & Gilhooly , K. (2010 ). Problem solving. In H. Kaye (Ed.), Cognitive Psychology (2nd ed., pp. 381-417). Milton Keynes: The Open University.
Larkin, J., McDermott, J., Simon, D., & Simon, H. (1980). Models of competence in solving physics problems. Cognitive Science, 4, 317–45.
Simon, H.A. and Chase, W.G. (1973). Skill in chess. American Scientist, 61, 394–403.
Sommerville, I. (2010). Software Engineering (9th Edition ed.). Harlow: Addison-Wesley.
Image credit : angelderoca