Engineering curriculum

 
 

A quick guide to some of the major software engineering and computer science topics we’ll learn about in my Mastery sessions, organised by subject area.

Computer science fundamentals

  • What is a computer? From Turing machines to stored-program computers, and a brief history of computing from punched cards to the present.
  • Data structures: Introducing records, arrays, lists, queues, stacks, trees, graphs, and hash tables; why data structures matter, and how they affect program design and performance.
  • Computation: Understanding different strategies for processing and computing data, and how to measure their efficiency: big-O notation, complexity, parallelism, and concurrency.
  • Algorithms: Common problems and solutions including sorting, searching, traversal, caching, simulation, and randomness.

Programming

  • Modelling: Designing software models based on problem domains, entities, and relationships.
  • Programming fundamentals: Variables, functions, loops, objects, modules, compilers, build systems, version control, IDEs and language servers.
  • Testing: Building reliable, flexible, and reusable software that solves user problems, guided by tests. Testing techniques such as fuzzing, mocking, doubles and fakes, property-based testing, and user testing.
  • Abstractions and APIs: Decoupling and refactoring monolithic code into well-designed components that encapsulate behaviour behind simple, usable interfaces.
  • Software quality: Maintainability, managing complexity, test coverage, quality measurement, readability, performance, resilience, and error handling.

Architecture

  • Computer systems: Foundational topics including von Neumann architecture, memory, CPUs, GPUs, input/output devices, sequential and parallel processing.
  • Instruction set architecture: The abstract interface between software and hardware: machine instructions, assembly language, encoding, addressing modes, CISC vs RISC, and parallelism.
  • Microarchitecture: How a CPU works, including registers, arithmetic & logic units, data paths, buses, microcode, cache lines, memory models and ordering, pipelining, branch prediction, and speculative execution.
  • Clustering: Distributed systems, microservices, cluster topologies, leader election, eventual consistency, map / reduce algorithms, ordering and timekeeping.

System design

  • Client / server architecture: Fundamentals of networking, including TCP/IP, DNS, HTTP, and the network layer model.
  • Scaling and performance: Load testing, benchmarking, vertical and horizontal scaling, throughput, latency, caching, proxies, DDoS protection and resilience, partitioning and sharding, and CDNs.
  • Events and messages: Asynchronous processing, real-time systems, publish / subscribe and event-driven architectures, event queues and dispatching, polling.
  • High availability: Fault tolerance, graceful degradation, circuit breakers, redundancy, active / passive and failover, hot spares, measuring availability and uptime, disaster recovery and incident management.
  • Deployment and operations: Continuous integration and delivery, build servers and pipelines, blue / green and canary deployments, ramp-ups and rollouts.

Operating systems and applications

  • Operating systems: Kernels, resource management, multiuser and multitasking systems, processes, containers, threads, concurrency, streams, security, timing, files and filesystems, networking.
  • Servers: Requests and responses, clients and concurrency, locking and data races, application and web servers, JSON, HTTP, gRPC; TLS, security, and certificates.
  • Databases: Storage and retrieval, relational databases, types, tables, and schemas; SQL queries and indexes; inserts and updates, keys and joins, integrity constraints, transactions and rollback.
  • Virtual machines: Emulation, virtualisation, bytecode, hypervisors, privilege levels, isolation, cloud computing, and the differences between VMs and container managers such as Docker.
  • Compilers: How programming languages work, including parsing source code, lexing and tokenising, abstract syntax trees, type checking, code generation, optimisation, assembly, linking, libraries and ABIs.

Career and business

  • Career progression: How to decide where you want your career to go, and plan the steps to get there.
  • Getting the job you want: Where to look, how to apply, profile building and networking, interview techniques, mastering the take-home task, and negotiating your contract.
  • Teamworking and collaboration: Fitting into a team, dealing with difficult people, building relationships with managers and co-workers, pair programming, code review, individual contribution, performance review and promotions.
  • AI and agentic development: Planning and supervising work for AI agents, spec-driven development, tool use, MCP servers, multi-agent collaboration, the software factory. Understanding AI and LLM fundamentals, machine learning, strengths and weaknesses of AI tools, and how to use them effectively without sacrificing quality, control, or your own learning.
  • Seniority and independence: Senior and staff engineering, team leadership, project management, business skills, independent working, consulting, running and marketing your own business, writing, teaching and mentoring.