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