Skip to main content Skip to navigation

Software Development with C++ (2023/24)

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 Last Updated
Web page Pre-course setup Instructions to setup the software needed for the course 24/08/23
Web page Pre-course shell intro This lesson guides you through the basics of file systems and the shell, including: navigating and working with files and directories, executing commands, combining commands to perform more powerful operations. 05/10/23
Web page Day 1 We begin an overview of the course topics, aims and resources. The first half of the day covers using git to keep track of changes you make to code as it develops. The second half introduces the core C++ syntax and procedural programming. 10/10/23
Web page Day 2 In the first part of the day, we look at using functions to improve our control of program flow and reuse code, and references to make passing arguments to functions more efficient. In the second part of the day we begin to automate the build of our program using CMake and how to factor its functionality into a program and library. The third part of the day covers reading from and writing to files and the implementation of our first cipher: the Caesar cipher. 19/10/23
Web page Day 3 This day introduces object orientation in C++ with structs and classes. In the first part of the day we look at data structures and create a custom type to hold command line data. In the second part of the day, we introduce classes and refactor our Caesar Cipher function into a class. We look at the core functionality of classes, including constructors, member functions and operators. 30/10/23
Web page Day 4 We look first at generating documentation using Doxygen. Then we make more advanced use of the C++ Standard Library, specifically templated containers, iterators and algorithms, in order to implement the Playfair cipher. 09/11/23
Web page Day 5 This day introduces object composition via implementation of the Vigenère cipher. We then discuss public inheritance in C++, the language mechanism for allowing types to behave in different ways as a program runs. Exercises introduce the concept of pure abstract base classes to declare interfaces, and the implementation of concrete classes using public inheritance. 23/11/23
Web page Day 6 This day introduces certain features of the language that are either a bit more advanced or that, with the advent of C++11, are now considered to be 'legacy'. 30/11/23

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

introtounix_tn.png introtounix2_tn.png introtounix3_tn.png