Bradfield offers courses covering core topics in computer science

Short courses

learn more Computer Architecture and the Hardware/Software Interface
Computer Architecture and the Hardware/Software Interface

Understand how a microprocessor works from logic gates up, and the interaction between hardware, user code and the operating system kernel.

learn more Computer Networking
Computer Networking

Understand the protocols and technology enabling the Internet. Covers all layers of the OSI model, with a particular focus on understanding IP, TCP, UDP and common application layer protocols.

learn more Data Structures in Practice
Data Structures in Practice

Go beyond a "textbook" understanding of the topic to see how data structures and algorithms work in real-world systems.

learn more Problem Solving with Algorithms and Data Structures
Problem Solving with Algorithms and Data Structures

Learn about common algorithms, data structures, and techniques for algorithmic problem solving. This course is an accelerated view of what is commonly covered in an undergraduate algorithms course.

learn more Mathematics for Computing
Mathematics for Computing

Learn the math that’s useful in software engineering, including combinatorics and probability theory, set theory, graphs, number theory for cryptography and basic linear algebra.

learn more Databases

Learn about modern and historical innovations in data representation, and understand the architectures of both traditional relational DBMSs and modern distributed data stores.

learn more Languages, Compilers and Interpreters
Languages, Compilers and Interpreters

Learn about languages generally, rather than one at a time. Covers compiler and interpreter architectures, and the key similarities between various languages and their implementations.

learn more Operating Systems
Operating Systems

Learn about the fundamental problems solved by modern operating systems, and the decisions faced by operating system designers.

learn more Distributed Systems
Distributed Systems

Understand common patterns in distributed systems design, and the tradeoffs we are forced to make between consistency and availability in the context of distributed data and computation.