Computational Thinking (from the perspective of pizza)

ProblemComponents.jpg

Did you know that engineers are essentially taught to THINK differently from the rest of us?

And as parents to a generation of children that will benefit greatly from tools that advance digital literacy and technical competence, it is valuable to understand the fundamentals of exactly how and why.

Computational thinking is an approach to problem solving that is inspired by how developers go about building programs and software. While these ideas have existed and been debated since the 1950s, the term was first published in Seymour Papert’s treatise on “An Exploration in the Space of Mathematics Education” in 1996.

There are four basic components of computational thinking:

  • Decomposition

  • Pattern Recognition

  • Pattern Generalization and Abstraction

  • Algorithmic Design

Decomposition refers to the act of breaking down a bigger problem into smaller parts. From here it is far easier to build a program that allows a computer to solve the smaller problems one by one, and as a result solve the overarching problem/puzzle.

For instance, if you are trying to order a pizza and you want to make sure that everyone can get the topping they prefer, you might first want to solve the problem of finding out which topping everyone likes. From there you can determine the overall composition of the pizza.

Once you have broken down your problem into smaller, more manageable components, you might start to look for common threads or patterns in your components. Pattern recognition refers to the task of identifying similarities or repetitions in your data, and using this information to inform your solution.

For instance, once you’ve asked all your guests to share their preferred topping, you might note that in addition to pepperoni or other delicious treats like gummy worms, all of your guests have requested cheese. Now you know that you can order a pizza with a cheese foundation (apologies to any vegans in tha houzzzzz).

This next step is called Pattern Generalization and Abstraction and involves framing these patterns in the simplest terms possible so that they can be implemented and reused. In other words, you are taking a seemingly complex problem, and breaking it down into smaller, simpler problems that are easier to solve for. Actions you can repeat in a sequence to complete a task.

Barnaby wants pepperoni pizza. Pizza has sauce. This is a tomato-based sauce (!= ketchup for god’s sake). Pizza has cheese. Pizza has toppings. If pizza is for Barnaby, then topping is pepperoni.

Finally we get to Algorithmic Design.

Algorithms are not necessarily a computer program, but rather a set of instructions or recipe for how to proceed to solve any problem. It can quite easily be turned into a computer program if need be. Today, algorithms are used to describe everything from the steps involved in opening a bank account, to the path to success as a recording artist, to how to make a particular pizza.

func makePizza() {

rollDough();

addIngredient(sauce);

addIngredient(cheese);

if (guest == Barnaby) {

addIngredient(Pepperoni);

}

bake();

}

Ok, so now that we know how to compute a pizza, you might be thinking - “how on earth is this relevant to me?”  

The idea that computational thinking is a skill that we should be teaching children on par with reading, writing and math is becoming more and more common. Research suggests there is much value in introducing this approach to problem solving early, in an effort to advance digital and data literacy amongst future generations.

It’s also important to note that you don’t need a device to help develop your child’s curiosity for this approach to problem solving. Bake a pizza with them, ask them to break down the steps and consider the sequence, and write the recipe together on a chalkboard or a piece of paper before you start cooking.

We can teach kids how to code, but if we don’t also teach them to think as coders, a fundamental component is lost.