CPU design, instruction sets, memory hierarchy, caching, pipelining, and the interface between hardware and low-level software.
3 terms · 3 sections · 80 students
This website is still in an early development stage. Some links and features may not work properly, and much of the content is placeholder or dummy data.
teaching
A collection of courses, notes, and materials I teach across different academic terms.
CPU design, instruction sets, memory hierarchy, caching, pipelining, and the interface between hardware and low-level software.
3 terms · 3 sections · 80 students
Threat modelling, common attack classes, cryptography, authentication, and defensive practices for building more secure systems.
5 terms · 7 sections · 224 students
Arrays, linked lists, stacks, queues, trees, and hash tables — choosing and implementing the right structure for the problem.
1 term · 2 sections · 38 students
Sorting, searching, recursion, graph algorithms, dynamic programming, greedy strategies, string matching, and the limits of efficient computation — reasoning rigorously about correctness and efficiency, in C.
1 term · 1 section · 21 students
Search, knowledge representation, planning, reasoning under uncertainty, and an overview of learning-based approaches to intelligent behaviour.
3 terms · 6 sections · 158 students
Decomposition, pattern recognition, abstraction, and algorithmic thinking as a foundation for programming and formal reasoning.
1 term · 1 section · 19 students
CPU design, instruction sets, memory hierarchy, caching, pipelining, and the interface between hardware and low-level software.
3 terms · 3 sections · 80 students
The TCP/IP stack, routing, DNS, HTTP, TLS, and network programming — how data moves reliably across interconnected systems.
2 terms · 2 sections · 45 students
Threat modelling, common attack classes, cryptography, authentication, and defensive practices for building more secure systems.
5 terms · 7 sections · 224 students
Arrays, linked lists, stacks, queues, trees, and hash tables — choosing and implementing the right structure for the problem.
1 term · 2 sections · 38 students
Relational models, SQL, normalisation, transactions, indexing, and an introduction to NoSQL — storing and querying structured data reliably.
2 terms · 2 sections · 45 students
Requirements analysis, system modelling, architecture patterns, and evaluation — designing information systems that meet organisational needs.
1 term · 1 section · 44 students
Supervised and unsupervised learning, model selection, regularisation, neural networks, and evaluation — building systems that learn from data.
2 terms · 3 sections · 67 students
Classes, objects, inheritance, polymorphism, and encapsulation — modelling real-world domains as cooperating objects.
1 term · 2 sections · 63 students
Processes, threads, scheduling, memory management, file systems, and synchronisation — how an OS manages hardware and isolates programs.
1 term · 2 sections · 46 students
Variables, control flow, functions, and I/O using a procedural language — building readable, maintainable programs from the ground up.
3 terms · 4 sections · 119 students
HTML, CSS, JavaScript, HTTP, and server-side fundamentals — building interactive, data-driven web applications from scratch.
1 term · 2 sections · 85 students
CPU design, instruction sets, memory hierarchy, caching, pipelining, and the interface between hardware and low-level software.
1 section · 39 students
Threat modelling, common attack classes, cryptography, authentication, and defensive practices for building more secure systems.
1 section · 35 students
Arrays, linked lists, stacks, queues, trees, and hash tables — choosing and implementing the right structure for the problem.
2 sections · 38 students
Search, knowledge representation, planning, reasoning under uncertainty, and an overview of learning-based approaches to intelligent behaviour.
1 section · 22 students
Decomposition, pattern recognition, abstraction, and algorithmic thinking as a foundation for programming and formal reasoning.
1 section · 19 students
CPU design, instruction sets, memory hierarchy, caching, pipelining, and the interface between hardware and low-level software.
1 section · 3 students
Threat modelling, common attack classes, cryptography, authentication, and defensive practices for building more secure systems.
1 section · 2 students
Relational models, SQL, normalisation, transactions, indexing, and an introduction to NoSQL — storing and querying structured data reliably.
1 section · 22 students
Search, knowledge representation, planning, reasoning under uncertainty, and an overview of learning-based approaches to intelligent behaviour.
2 sections · 74 students
Supervised and unsupervised learning, model selection, regularisation, neural networks, and evaluation — building systems that learn from data.
1 section · 20 students
Classes, objects, inheritance, polymorphism, and encapsulation — modelling real-world domains as cooperating objects.
2 sections · 63 students
Variables, control flow, functions, and I/O using a procedural language — building readable, maintainable programs from the ground up.
1 section · 39 students
Threat modelling, common attack classes, cryptography, authentication, and defensive practices for building more secure systems.
1 section · 46 students
Supervised and unsupervised learning, model selection, regularisation, neural networks, and evaluation — building systems that learn from data.
2 sections · 47 students
Search, knowledge representation, planning, reasoning under uncertainty, and an overview of learning-based approaches to intelligent behaviour.
3 sections · 62 students
The TCP/IP stack, routing, DNS, HTTP, TLS, and network programming — how data moves reliably across interconnected systems.
1 section · 21 students
Threat modelling, common attack classes, cryptography, authentication, and defensive practices for building more secure systems.
2 sections · 52 students
Variables, control flow, functions, and I/O using a procedural language — building readable, maintainable programs from the ground up.
1 section · 33 students
Sorting, searching, recursion, graph algorithms, dynamic programming, greedy strategies, string matching, and the limits of efficient computation — reasoning rigorously about correctness and efficiency, in C.
1 section · 21 students
The TCP/IP stack, routing, DNS, HTTP, TLS, and network programming — how data moves reliably across interconnected systems.
1 section · 24 students
Threat modelling, common attack classes, cryptography, authentication, and defensive practices for building more secure systems.
2 sections · 89 students
Requirements analysis, system modelling, architecture patterns, and evaluation — designing information systems that meet organisational needs.
1 section · 44 students
Variables, control flow, functions, and I/O using a procedural language — building readable, maintainable programs from the ground up.
2 sections · 47 students
CPU design, instruction sets, memory hierarchy, caching, pipelining, and the interface between hardware and low-level software.
1 section · 38 students
Relational models, SQL, normalisation, transactions, indexing, and an introduction to NoSQL — storing and querying structured data reliably.
1 section · 23 students
Processes, threads, scheduling, memory management, file systems, and synchronisation — how an OS manages hardware and isolates programs.
2 sections · 46 students
HTML, CSS, JavaScript, HTTP, and server-side fundamentals — building interactive, data-driven web applications from scratch.
2 sections · 85 students