# Computational Thinking

According to Wing (2006) Computational Thinking (CT) is the thought process involved in formulating problems and expressing solutions in such a way that a human or a machine can effectively carry out. CT embodies the sub-skills algorithmic thinking, abstraction, decomposition, pattern recognition, pattern matching, evaluation and logic which are not only relevant to developing digital systems, but are also transferable to any other curriculum area:

Algorithmic thinking
An algorithm is a step-by-step process that solves a problem or completes a task. Algorithmic thinking is the cognitive process involved in the creation of algorithms. An algorithmic solution is an algorithm whose purpose is the solution of problems. The development of algorithmic thinking is relevant to everybody and should be fostered at an early age because it represents a skill that can help finding solutions to everyday problems.

Abstraction
Abstraction is an effort to reduce a problem’s complexity by identifying the most important aspects of the problem and ignoring irrelevant details. Abstraction contributes to the understanding of problems by reducing their complexity.

Decomposition
Decomposition is about dividing problems into simple and manageable constituents, and then focusing on finding the solution to each of these individual constituents. Cooking Pasta for example can be divided into two main processes: making the pasta dough and making the sauce.

Pattern recognition and Generalization
Generalization is the process of adapting previous solutions to new problems. Pattern recognition skills are necessary for being able to make effective generalizations.

Evaluation
Evaluation is about assessing the worth of solutions to problems and involves being able to decide which solution can be best applied to which kind of problem.

Logic
Logical reasoning is a process of understanding something by observing and collecting data, then make a conclusion with regard to testing hypotheses based on existing knowledge.

In short, the process implied by the Computational Thinking Process can be segmented into the following stages:

• Problem formulation
• Identification of important details of the problem
• Decomposition of the problem into small, logical steps
• Development of an algorithm that solves the problem
• Evaluation of the entire process