Computational thinking plays an important role in supporting the creation of solutions to problems, both large and small. Algorithms, programs, simulations, and data are essential to all computing systems, empowering people to communicate and collaborate with others around the world.

Modeling is the process of representing a system to allow one to observe, understand, or simulate it. Models can be used to simulate real world phenomena that are not easy to observe or reproduce, and often generate simulated data that can further understanding of the system or make predictions.

Data analysis is the process of cleaning, transforming, organizing, clustering, and categorizing data to discover useful information, draw conclusions, and aid in making decisions. Data can be visualized in a variety of ways (including graphs and charts) to aid in and communicate the results of the analysis.

Abstraction is the process of reducing complexity by focusing on key elements. The study of a complicated system often starts by simplifying it and addressing just the most important parts. Complex computer programs also rely on abstraction to isolate particular routines or tasks, especially if those tasks are common. A programmer can then call on that routine, often written by others, without needing to understand its details. Decomposition is the process of strategically breaking complicated problems or tasks into smaller parts that are simpler to understand, program, and debug.

An algorithm is a sequence of steps designed to accomplish a specific task. Algorithms can be translated into programs, or code, to provide instructions for computing devices. Algorithms are central to programming. Programming is the process of designing and developing code to perform a specific task. It includes the transformation of an algorithm into a specific language that a computer can read and execute, testing code under controlled conditions to ensure its accuracy, debugging the code to resolve errors, and producing documentation both for end users to understand how to use the program and for other developers to assist in following the logic within the program.