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.