What is CT?
Computational thinking (CT) involves a set of problemsolving 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.
Examples:
 When we taste an unfamiliar dish and identify several ingredients based on the
flavor, we are decomposing that dish into its individual ingredients.
 When we give someone directions to our house, we are decomposing the
process of getting from one place to another.
 In mathematics, we can decompose a number such as 256.37 as follows: 2*10^{2}+5*10^{1}+6*10^{0}+3*10^{1}+7*10^{2}
 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.
Examples:
 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.
 People look for patterns in stock prices to decide when to buy and sell.
 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
 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.
Examples:
 A daily planner uses abstraction to represent a week in terms of days
and hours, helping us to organize our time.
 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.
 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 ± √b^{2}  4ac
2a
 (a+b)(ab) = a^{2}  b^{2}
Algorithm Design: The ability to develop a stepbystep 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.
Examples:
 When a chef writes a recipe for a dish, she is creating an algorithm
that others can follow to replicate the dish.
 When a coach creates a play in football, he is designing a set of
algorithms for his players to follow during the game.
 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.
 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, '%'
else:
print 'There is no percent change.'