Your programmer skills are built upon concepts and reasoning you could apply to real life problems. This could be the key to solve problems in all areas and this approach is called **Computational Thinking**.

Practically speaking, computational thinking is a way to express a problem to a computer, that will be able to solve. You may think it is what, nowadays, is called AI or Machine Learning but its origin is before AI was really an option.

Computational thinking is like data science: everybody does it but no-one could explain exactly what is it.

### The foundation of Computational Thinking

#### Decomposition

Also known as **factoring**, decomposition means breaking a complex problem in to a set of smaller problems, which are easier to understand and solve.
Multiple kind of decompositions are possible: you could reason about functions, algorithms or roles.
In the form I prefer, decomposition is the process that makes you create, talking about an Object Oriented Paradigm, a class for a specific role or responsibility.

#### Data representation

Which data kind are we going to process? How can we store all the information we need to process the whole data? How can we visualize the resulting outcome? These are some of the questions data representation, and visualization, are going to solve. Without a good data representation it is almost impossible to solve a problem in an interesting way. Data visualization could also help people to understand problems or to extract value from data itself (which poses the question: what is data and what is information?).

#### Abstraction

The next step in computational thinking is the generalization (or abstraction) phase. Take what available and remove all the superfluous data and concepts. Build a model that is related but not tightly related to the real world, so you could find it has wider applications than the initial set of problems.

#### Algorithm

An algorithm is a sequence of steps, needed to solve a specific problem in a rigorous way. The algorithmically solved problem could also be considered a data computation: given an input you get a different output. You may think an algorithm as a bureaucratic procedure or a cooking recipe: a set of rules that precisely define a sequence of operations. This could be considered a bit limiting definition as we now know that computer softwares could deduct missing information or apply heuristics but it gives the common sense of what an algorithm is.