Computational thinking is thinking recursively. It
is parallel processing. It is interpreting code as data
and data as code. It is type checking as the generalization
of dimensional analysis. It is recognizing
both the virtues and the dangers of aliasing, or giving
someone or something more than one name. It
is recognizing both the cost and power of indirect
addressing and procedure call. It is judging a program
not just for correctness and efficiency but for
aesthetics, and a system’s design for simplicity and
elegance.