Computational Thinking
A way of framing problems so a machine can solve them: decompose, find patterns, abstract away detail, and specify a procedure.
A Problem-Solving Stance
Computational thinking is a way of approaching problems, not a synonym for programming. It is the discipline of formulating a problem so that its solution can be carried out by an information-processing agent, whether a computer or a person following steps. Its ideas apply far beyond writing code.
The Core Moves
- Decomposition: break a hard problem into smaller, tractable parts.
- Pattern recognition: spot regularities that let one solution serve many cases.
- Abstraction: strip away detail irrelevant to the problem to expose its essential structure.
- Algorithm design: specify a precise, ordered procedure that solves the general case.
Abstraction as the Keystone
Of these, abstraction does the heaviest lifting. Choosing what to ignore is what makes a problem manageable and a solution reusable. A good abstraction captures exactly what matters for the task and hides the rest, so a solution to the abstract problem solves every concrete instance that fits it. Choosing the wrong abstraction dooms everything built on top.
Correctness and Efficiency
Computational thinking also asks two questions of any procedure: does it produce the right answer, and does it do so with acceptable use of time and memory? Reasoning about correctness and about cost as a problem grows are habits that separate a procedure that works on a toy example from one that works at scale.
In Scientific Computing
Modeling a physical system computationally is applied computational thinking: decomposing the physics into solvable pieces, abstracting the continuous world onto a discrete mesh, and specifying algorithms whose cost and accuracy are understood. Kronos design work rests on these moves, and on being explicit about what each abstraction leaves out.