Version Control with git
Concepts of version control. Command-line use of
git. Detecting and resolving conflicts. Collaborative development using GitHub, branches, and pull requests.
A one-day class.
Introduction to Python: syntax; built-in data types; using data structures; functions. Creating and using modules. Container types. The Python Standard Library. Error handling with exceptions. Classes and object-oriented programming. Numerical programming with
This is a two-day class.
Learn to easily organise and share your python projects with python packages. An interactive half-a-day class in which attendees have the opportunity to turn a couple of python scripts into a full-blown python package hosted on PyPI.
Going from a set of scripts to python modules, what is a python package and how to make one, reusing a package across research projects, introduction to virtual environments, sharing a package on the Python Package Index (PyPI).
Introduction to C++
Introduction to C++: basic types, flow control, input/output pointers, references, dynamic memory allocation and arrays, functions, classes and object-oriented programming, templates and the Standard Template Library, Exceptions
This is a 4-5 day class
Overview of language and library evolution since 2011. Standard algorithms. Smart pointers. Lambda functions. The filesystem library. Refactoring legacy C++.
A one-day class.
Research Software Engineering
Requirements engineering. Software architecture. Automated testing and continuous integration. Building and deploying software. Object-oriented analysis and design. Using IDEs. Refactoring. Open source software and software citation.
A five-day class, that also recaps material from the Python and Version Control classes.