Exploring Computational Thinking

What is CT?

Computational thinking (CT) involves a set of problem-solving skills and techniques that software engineers use to write programs that underlie the computer applications you use such as search, email, and maps. However, computational thinking is applicable to nearly any subject. Students who learn computational thinking across the curriculum begin to see a relationship between different subjects as well as between school and life outside of the classroom.

Specific computational thinking techniques include: problem decomposition, pattern recognition, pattern generalization to define abstractions or models, algorithm design, and data analysis and visualization.

Decomposition: The ability to break down a task into minute details so that we can clearly explain a process to another person or to a computer, or even to just write notes for ourselves. Decomposing a problem frequently leads to pattern recognition and generalization, and thus the ability to design an algorithm.


  1. When we taste an unfamiliar dish and identify several ingredients based on the flavor, we are decomposing that dish into its individual ingredients.
  2. When we give someone directions to our house, we are decomposing the process of getting from one place to another.
  3. In mathematics, we can decompose a number such as 256.37 as follows: 2*102+5*101+6*100+3*10-1+7*10-2
  4. In mathematics, we can decompose any numbers such as 20, 24, and 28 into their prime factors to help us find their least common multiple:
    • 20: 2*2*5
    • 24: 2*2*2*3
    • 28: 2*2*7
    • LCM: 2*2*2*5*3*7 = 840

Pattern Recognition: The ability to notice similarities or common differences that will help us make predictions or lead us to shortcuts. Pattern recognition is frequently the basis for solving problems and designing algorithms.


  1. Children identify patterns in the reaction of their parents and teachers to their behavior in order to determine what is right and what is wrong. They base their future behavior on these patterns.
  2. People look for patterns in stock prices to decide when to buy and sell.
  3. In mathematics, we can follow a pattern to explain the logic behind why the product of two negative numbers is a positive number:
    • (-3)(3) = -9
    • (-3)(2) = -6
    • (-3)(1) = -3
    • (-3)(0) = 0
    • (-3)(-1) = 3
  4. In mathematics, when calculating the largest area possible for a rectangle of a given perimeter, we can guess and see patterns in the length, width, and area such as:
    • As the length and width approach each other in value, the area increases
    • As the difference between the length and width increases, the area decreases

These patterns lead us to the conclusion that the rectangle with the greatest area is a square.

Pattern Generalization and Abstraction: The ability to filter out information that is not necessary to solve a certain type of problem and generalize the information that is necessary. Pattern generalization and abstraction allows us to represent an idea or a process in general terms (e.g., variables) so that we can use it to solve other problems that are similar in nature.


  1. A daily planner uses abstraction to represent a week in terms of days and hours, helping us to organize our time.
  2. A world map is an abstraction of the earth in terms of longitude and latitude, helping us describe the location and geography of a place.
  3. In mathematics, we write generalized formulas in terms of variables (such as the two shown below) instead of numbers so that we can use them to solve problems involving different values
    • −b ± b2 - 4ac
    • (a+b)(a-b) = a2 - b2

Algorithm Design: The ability to develop a step-by-step strategy for solving a problem. Algorithm design is often based on the decomposition of a problem and the identification of patterns that help to solve the problem. In computer science as well as in mathematics, algorithms are often written abstractly, utilizing variables in place of specific numbers.


  1. When a chef writes a recipe for a dish, she is creating an algorithm that others can follow to replicate the dish.
  2. When a coach creates a play in football, he is designing a set of algorithms for his players to follow during the game.
  3. In mathematics, when we add and subtract fractions with different denominators, we follow an algorithm along the lines of:
    • Find the least common multiple of all the denominators.
    • Multiply the numerator and denominator of each fraction by whatever number yields the least common multiple identified in the previous step.
    • Add (or subtract) the numerators and use the least common multiple found in the first step as the denominator.
  4. In mathematics, when we calculate the percent change between two numbers, we follow an algorithm along the lines of:
    • If the original number is greater than the new number, use the following equation to calculate the percent change: percent decrease = 100*(original - new)/original.
    • If the new number is greater than the original number, use the following equation to calculate the percent change: percent increase = 100*(new - original)/original.
    • If neither is true, then the original and new numbers must equal each other and there is no percent change.

We can take this a step further and implement this algorithm in Python to have the computer calculate this for us:

original = float(input('Enter the original number: '))
new = float(input('Enter the new number: '))
if original > new:
  percent_decrease = 100 * (original - new) / original
  print 'Percent decrease:', percent_decrease, '%'
elif new > original:
  percent_increase = 100 * (new - original) / original
  print 'Percent increase:', percent_increase, '%'
  print 'There is no percent change.'