Skip to main content Skip to navigation

Software Development with C++ (2024/25)

This course provides a basic introduction to the C++ programming language (in particular the C++17 standard) as well as to various tools and techniques for software development. It is designed for those with little to no programming experience, and is delivered as a series of six full-day hands-on workshops using a UNIX development environment.

Prior to the main course, there is a half-day workshop to ensure all attendees are familiar with the UNIX command line and basic tools. If you are already familiar with how to use the command line to navigate the filesystem and execute commands with arguments then you do not need to attend this session, although you are welcome to do so if you would like to reinforce or refresh your skills. There are also some booklets linked at the bottom of the page that you might find useful.

All the sessions will be online, using Zoom for communication and VSCode/Docker for the development environment. A page describing how to setup the necessary software can be found below (the first page listed under Course Content). Please follow these instructions prior to the first session of the course.

The workshop sessions are taught by Tom Latham from Warwick, Mark Slater from Birmingham, and Luke Kreczko from Bristol.

The sessions start at 9am and, with a short break for lunch, will likely finish around 3 - 4pm.

The sessions are scheduled to take place as per the MPAGS calendarLink opens in a new window.

Course Content

The links to the material for each workshop will appear here as the course progresses:

Name Description
Pre-course setup Instructions to setup the software needed for the course
Pre-course shell intro This lesson guides you through the basics of file systems and the shell.
Day 1 Introduction to version control with git, the core C++ syntax, and procedural programming.
Day 2 Further procedural C++. Build automation with CMake. Implementation of the Caesar cipher.
Day 3 Introduction to object orientation in C++. Unit testing with Catch2.
Day 4 Introduction to generic programming in C++. Generating documentation using Doxygen. Implementation of the Playfair cipher.
Day 5 Implementation of the Vigenère cipher. Dynamic polymorphism via inheritance in C++. Smart pointers.
Day 6 Advanced and legacy features of C++.
Feedback

Additional Resources

Each day provides a list of resources relevant to its content, with a full overview presented on Day 1. If you are unfamiliar with UNIX, the command line and tools or simply wish to refresh your skills, the following resources may be useful