What is problem solving?

Subscribe to Skilling news on the home page.

Kieran Mathieson

A common course outcome is "students should be able to solve problems." OK, how do we do that?

It would help to know what problem solving is. Let's start there.



What's your context, here? Any biases?

Wow, good question! I'm better at programming that most things, and right now, I want to redesign an intro programming course. So I'm thinking about programming problems, and programming problem solving. Nothing wrong with that, but I should recognize the biases. What I learn might not apply as well to, say, problems of electoral politics.

Let's do the google. Here's what a dictionary says about problem solving.

The process of finding solutions to difficult or complex issues. (source)



So "difficult or complex issues" is the problem part of problem solving, and "finding solutions" is the solving part.

Maybe we should decide what "problem" means.

OK, that makes sense. Let's see what the same source says about problems.

A matter or situation regarded as unwelcome or harmful and needing to be dealt with and overcome. ... A thing that is difficult to achieve. (source)

There are two things here: unwelcome, and difficult. Unwelcome means that we are somewhere, and want to be somewhere else. A problem is a difference, or a gap.

The other issue is difficulty. Difficultly depends on the problem solver, though. "Compute descriptive statistics for a data set" is difficult for some people, but easy for me. "Play Starry Starry Night on the guitar" is easy for some people, but impossible for me, since I don't know how to play a guitar.



So it looks look difficultly is about the problem solving context, not the problem itself.

Playing Starry Starry Night is the problem. What makes it difficult is you playing it.

OK, let's keep that in mind. Difficulty is not an attribute of the problem, but the context of solving the problem. Different problem solvers, different difficulty. Different tools, different difficulty.

Let's check back with our googly friend.

In cognitive psychology, the term problem-solving refers to the mental process that people go through to discover, analyze, and solve problems. (source)

Discover, analyze, and solve. Maybe there are different parts of problem solving. That fits with debugging, in programming. First you find the bug, then you fix it. Different steps.

A perceived gap between the existing state and a desired state, or a deviation from a norm, standard, or status quo. (source)

Gappy McGapface again.

a problematic situation (where there is a gap between actual and expected or the situation is vague, or there is something that is unsatisfactory) (source)

Gappy gap gap, but add "or the situation is vague... or unsatisfactory." So there might be fuzziness, about what the gap is, or how to close it.

This one is interesting:

All problems have two features in common: goals and barriers.... Goals can be anything that you wish to achieve, or where you want to be.... If there were no barriers in the way of achieving a goal, then there would be no problem.  Problem solving involves overcoming the barriers... (source)

There's difficulty again. If we know what to do, how to do it, and have the resources, we're in a good spot.

Here's another.

A problem is any unpleasant situation which prevents people from achieving what they want to achieve. Any activity to eliminate a problem is termed problem solving. (source)

"Achieving what they want to achieve" sounds gappy. "Any activity"... that suggests that problem solving could encompass different actions.

OK, I'm ready to say what a problem is:

A gap between where you are, and where you want to be.



Nothing about "difficult" or "fuzzy."

Both are aspects of the context of problem solving. At least, in our definition.

For intro programming, three gaps come to mind:

  • Writing a program: you don't have one, and you want one.
  • Debugging: a program is broken, and you want it working.
  • Improving: you want to change what a program does.

There are other gaps, like improving a program's performance, but that usually isn't part of intro programming.

Now to the "solving" bit of problem solving.

We read that there are parts to solutions, like discover, analyze, and solve. Here's something else along that line:

problem-solving skills consist of two main components: (1) identifying the problem, (2) deciding on the best solution (source)

There's also this:

Einstein is quoted as having said that if he had one hour to save the world he would spend fifty-five minutes defining the problem and only five minutes finding the solution. (source)

There are different types of actions. Understanding the problem is an important one.

Ooo! A brain wave! Schemas are basic to human thought, right?



Yes. Where are you going with this?

Using a schema is an action, one of the things that helps you close the gap. But when you have a difficult problem, you don't know what schemas to use. If you did, you'd be halfway home.



That makes sense. So maybe part of problem solving is choosing schemas to instantiate. Another part is using those schemas.

We could call the choosing-schemas part planning, and the using-schemas part execution.

Before that, though, we need to make sure we understand the problem, the gap. We need to understand where we are now, and where we want to be.

Hey, that's great! This is coming together.

A problem is a gap between where we are, and where we want to be.

Problem solving is what we do to reduce the gap. We (1) understand the problem, (2) plan actions, and (3) execute the actions.

All three steps can be difficult, and fuzzy. We might not know exactly what the goal state is. The goal state might change as we work on the problem. We could make an action plan, only to have it fall apart during execution.



I'm liking this! But could you say more about goal fuzziness?

Sure. Skilling has this issue. The software is a set of features that, we hope, will help people create and run skills courses. But what should those features be?

This is where learning science comes in. For example, the research says that, to learn skills, people should have individual formative feedback, on many low-stakes exercises. So, Skilling needs a feedback system that does that. Reading the research literature is a way of reducing goal uncertainty.

One other thing, that's particularly important in programming. Problems nest, like those Russian dolls. Part of problem solving is opening up the outer layer, and revealing another problem. Solving the inner problem is a means to solving the outer one. To make a good skills course, we need a feedback system. For that, we need rubrics. To get rubrics, we need a way to help authors make rubrics. And so it goes.

We started with a course outcome: "students should be able to solve problems."  Now we have a working definition of problem solving.

A problem is a gap between where we are, and where we want to be.

Problem solving is what we do to reduce the gap. We (1) understand the problem, (2) plan actions, and (3) execute the actions.

How to help students learn these things? That's that next challenge.