Computational thinking involves much more than learning to code. It enables learners to engage in abstraction, by defining patterns and generalizing from specific instances. It introduces ways of processing information and representing it in different ways. It requires learners to work systematically to identify and remove errors. As we learn science, we understand how to perform experiments. As we study music, we develop a sense of timing and rhythm. Each area of the curriculum is associated with a set of skills that can be applied throughout life, offering new ways to understand the world. Computational thinking involves understanding a problem in enough detail to break it down into parts then finding steps to solve it. It differs from problem-based learning in that it arises from a need to solve practical problems rather than work through pre-prepared exercises. It breaks an initial problem down into smaller elements, then relates these to ones that have been solved.