Some aspects of computational thinking (from a paper having the same title):
- Computational thinking is reformulating a seemingly difficultproblem into one we know how to solve, perhaps by reduction, embedding, transformation, or simulation.
- 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.
- Computational thinking is using abstraction and decomposition when attacking a large complex task or designing a large complex system.
- It is separation of concerns.
- It is choosing an appropriate representation for a problem or modeling the relevant aspects of a problem to make it tractable.
- It is using invariants to describe a system succinctly and declaratively.
- It is having the confidence we can safely use, modify, and influence a large complex system without understanding its every detail.
- It is modularizing something in anticipation of multiple users or prefetching and caching in anticipation of future use
- Computational thinking is thinking in terms of prevention, protection, and recovery from worst-case scenarios through redundancy, damage containment and error correction.
- It is calling gridlock deadlock and contracts interfaces.
- It is learning to avoid race conditions when synchronizing meetings with one
- Computational thinking is using heuristic reasoning to discover a solution.
- It is planning, learning and scheduling in the presence of uncertainty.
- It is search, search, and more search, resulting in a list of Web pages,
- a strategy for winning a game, or a counterexample.
- Computational thinking is using massive amounts of data to speed up computation.
- It is making trade-offs between time and space and between processing power and storage capacity.
This kind of thinking will be part of the skill set of not only other scientists but of everyone else.