Framing
Course Introduction
Why software engineering matters in research, how the course is structured, and where modern tooling and AI fit in.
Paradigms
Object-Oriented Programming
How to use classes to encapsulate data and behavior, and how inheritance and composition can make code more maintainable.
Paradigms
Functional Programming
Core functional programming concepts, including pure functions, immutability, and higher-order functions.
Collaboration
Version Control with Git
A practical Git foundation for safer collaboration, reproducibility, and confident control over changes in your code.
Collaboration
Collaborative Code Development
Working effectively with branches, pull requests, issue trackers, and code review in shared repositories.
Tooling
Software Testing
Strategies for how to test effectively to improve reliability, including unit and integration testing, and test-driven development.
Tooling
Continuous Integration
Setting up automated testing and quality checks with continuous integration tools to catch issues early and maintain code health.
Tooling
Packaging and Dependency Management
How to package and manage dependencies so software stays reusable and distributable.
Tooling
Containerisation with Docker
Using Docker to package applications and environments consistently across development, CI, and deployment.
Scalability
Introduction to HPC
An introduction to high-performance computing concepts, architectures, and use-cases.
Scalability
Workflows with Snakemake
Building reproducible computational workflows with rules, dependencies, and easy scalability.