What you will study
You’ll learn to take a problem and state it precisely in order that it can be solved with a computer. In other words, you’ll learn to express the problem in a way which allows you to write an algorithm for solving it. However, not all algorithms are equally good solutions. For that reason, you’ll also learn how to analyse the speed and efficiency of algorithms and establish whether an algorithm really does what it is supposed to do. Finally, you’ll delve into the very foundations of computing. You’ll learn which problems cannot be solved with an algorithm. You’ll also learn what the limits are on the speed with which algorithms can solve many important practical problems.
The module comprises three parts:
In the first part, you’ll learn about the basic data structures for organising data, like lists, stacks, queues, dictionaries, and sets. You’ll also learn how to analyse the complexity of an algorithm and how to measure its runtime.
The second part covers two non-linear data structures: trees and graphs. The former can represent hierarchical data and the latter can model social, transport and other kinds of networks. The main focus of the second part are algorithmic techniques like search (brute-force, breadth-first and depth-first), divide and conquer, recursion, greedy algorithms and dynamic programming. These are general-purpose techniques for solving a wide range of problems.
In the third part, you’ll further develop your understanding of sets, functions, logic and proofs, using formal mathematical notation. This will be in the context of concrete applications, such as databases. At this point, you’ll also learn about the limitations of computational problem solving (non-computability and the P ≠ NP conjecture).
This module emphasises how valuable computational thinking skills are for solving a wide variety of real-world problems. Additionally, the study of computing concepts is tightly integrated with professional skills, such as testing and documenting Python programs and using Jupyter notebooks, and information literacy (in particular, searching for information and writing a brief report).
If you’re aiming to become a programmer or system builder, this module is ideal as it covers topics and skills that many leading employers in IT and computing value highly, and check in technical interviews.