Study Notes

Overview
Welcome to one of the most critical topics in your GCSE Computer Science specification: Decomposition and Abstraction. These are two of the four pillars of computational thinking. Computational thinking is the foundation of everything computer scientists do—it is the structured, logical approach we use to solve complex problems before we write a single line of code.
Decomposition involves breaking a massive, overwhelming problem into smaller, manageable sub-problems. Abstraction involves stripping away the messy, unnecessary details of the real world to create a clean, focused computational model. Together, they allow you to design efficient algorithms and write modular programs. Examiners love testing these concepts because they demonstrate true understanding of how to engineer software, not just how to write syntax. You can expect questions asking you to identify sub-problems from a scenario, explain the benefits of these techniques, or identify what specific details have been abstracted away.
Listen to our revision podcast to reinforce your learning:
Key Concepts
Concept 1: Decomposition
Decomposition is the process of breaking down a large, complex problem into smaller, more manageable sub-problems. Think of it like eating an elephant—you can't do it all at once; you have to take it one bite at a time.
Why does this work? Because human brains struggle to hold massive amounts of complex information simultaneously. By breaking a problem down, each individual sub-problem becomes easier to understand, easier to design an algorithm for, and easier to write code for.
In the real world, if you are designing a new social media application, the main problem is too large. You decompose it into sub-systems: user login, posting messages, uploading photos, and managing friends.
Example: If a programmer is writing a game, they decompose the game loop into sub-problems: update_player_position(), check_collisions(), and render_graphics(). This leads directly to the use of subprograms (functions and procedures) in code.

Concept 2: Abstraction
Abstraction is the process of removing unnecessary detail from a problem to create a simplified model of reality. When we build computational solutions, we do not need to simulate the entire universe—we only need the parts that matter to our specific problem.
Why does this work? Because computing resources (processing power and memory) are limited, and unnecessary complexity makes code harder to write and maintain. By ignoring irrelevant details, we can focus our logic purely on what needs to be solved.
Example: Consider a driving simulation game. The developers need to model a car. In reality, a car has millions of details: the chemical composition of the paint, the smell of the leather seats, the exact shape of the exhaust pipe. Through abstraction, the developers remove these unnecessary details. They only keep the attributes relevant to the game: current_speed, fuel_level, position_x, and position_y.

Concept 3: The Synergy of Both Techniques
Decomposition and Abstraction are rarely used in isolation; they work in tandem. Decomposition provides the structure of the solution by defining what the parts are. Abstraction provides the content of the solution by defining what details each part actually needs to care about.
When examiners ask you to design a solution to a problem, you will instinctively decompose the problem into steps, and then abstract away the narrative fluff of the exam question to focus purely on the inputs, processes, and outputs required.
Practical Applications
These concepts are applied every time you write a modular program.
When you define a function in Python, you are applying decomposition. You are saying, "This specific block of code handles this one specific sub-problem."
When you define a variable or a record structure (like a dictionary or a class), you are applying abstraction. You are deciding exactly which pieces of data are necessary to store, and ignoring the rest.
Visual Resources
2 diagrams and illustrations
Interactive Diagrams
2 interactive diagrams to visualise key concepts
Conceptual Flow Outline
The process of Decomposition leading to Algorithms
Conceptual Flow Outline
The process of Abstraction
Worked Examples
3 detailed examples with solutions and examiner commentary
Practice Questions
Test your understanding — click to reveal model answers
State the definition of abstraction. (1 mark)
Hint: Think about what you do with unnecessary details.
A student is writing a program to simulate a pet dog. Give two examples of data that would be abstracted away, and one example of data that would be kept. (3 marks)
Hint: What does a computer program actually need to know about a virtual pet?
Explain two benefits of using decomposition when developing a large video game. (4 marks)
Hint: Think about teams of developers and finding bugs.
A developer is building a sat-nav application. Explain how both abstraction and decomposition would be used in the design of this application. (6 marks)
Hint: Address both concepts separately. For abstraction, what physical details of the roads are ignored? For decomposition, what are the separate features of the app?
A programmer decomposes a program into several subprograms. State one reason why a subprogram might be reused in the future. (1 mark)
Hint: Why write code twice?