At the University of Bristol, I lead the research software engineering training. We provide free courses to large part of the University as well as paid courses for some masters and doctoral training courses.


Beginning Python
An introduction to Python for people who have never programmed before. There are no prerequisites except a laptop with Python installed.
Intermediate Python
Following on from Beginning Python, this primarily introduces functions, modules and error handling. The main purpose is to understand how to structure code to make it more maintainable and shareable.
Prerequisites: It only requires Beginning Python.
Parallel Python
Starting with functional programming, it then goes on to show how Python's multiprocessing works. This course requires Intermediate Python.

Data and numerical analysis

Introduction to data analysis in Python
Introducing basic data analysis tools in Python it teaches Jupyter Notebooks, pandas and plotting.
Prerequisites: It only requires Beginning Python.
Applied data analysis in Python
The course will introduce some techniques for analysing data in Python. It will teach some features of scikit-learn for discovering trends and details of your data and how to display your results using Python's plotting tools.
Prerequisites: Comfortable with Pandas as taught in the Introduction to Data Analysis in Python course.
Introduction to NumPy
An introduction to Numerical Python.
Prerequisites: It only requires Beginning Python.
Numpy and Simulations
This workshop introduces the use of NumPy for performing simulations.
Introduction to Neural Networks
This workshop covers the basics of neural networks up to convolutional neural nets for handwriting recognition.
Introduction to Deep Learning
This 3 hour lecture the same content as the workshop above but in lecture format.

Software engineering

Best practices in software engineering
This course will introduce you to some of the more important concepts for professional software development, specifically documentation, unit testing and licensing. The Python language will be used throughout this course but the concepts apply to all languages.
Prerequisites: Comfortable with Python up to the level as taught in the Intermediate Python course, particularly confidence with writing functions.
IDEs and debugging
This course will introduce you to the tools that make developing Python code easier. With a choice of PyCharm or VS Code, you will learn about code completion, linting, debugging and running tests.
Prerequisites: Comfortable with Python up to the level as taught in the Intermediate Python course, particularly confidence with writing functions. An understanding of testing would be useful too but not a requirement.
Introducing Version Control with Git
The basics of using Git.
Git for Collaboration
Learn how to use Git to work on code with other people. Including branching, pull requests and continuous integration.


Introduction to the computational biology package.

There are many more courses which we also sometimes teach, written by Christopher Woods on his website

Advice for teachers

All of our training material is openly licensed (generally CC-BY) and you are more than welcome to use it in any teaching you are doing.

Each course is generally taught as a three hour workshop (with at least one 10-15 minute break in the middle). Generally we book a seminar room with a projector and ask the students to bring their own laptop with any necessary software installed.

The courses are self-paced so the students will work through the material as they see fit. The sessions always start with some introduction from the lead trainer. Then throughout the session, the trainer will go through various key points or address common questions from the room. We try to keep the time talking to the room less than a quarter of the total time of the workshop to allow the students time to go through the exercises.

There is in general more material in each course that the average student will get through in the three hours as there is always a wide spread of abilities. Make sure to point out the material will remain online and ancourage them to go through it in their own time after the session. This is another reason why we encourage bringing laptops as they can more easily carry on afterwards.

During the session while the students are working, the trainers will go around the class, answering questions and helping out. We tend to have at least one trainer for every 15 students.


If you're intested in a detailed view of how the courses depend on each other then take a look at the graph below. Dashed arrows represent a soft requirement, i.e. "IDEs and Debugging" covers running tests in your IDE (covered in "Best practices in software engineering") but you don't need to understand much of it to get the IDE bit. Dashed ovals represent courses that haven't been written yet.

We've never insisted that students must have been to the prerequisites, simply that it's a suggestion of what order you should do them in.