Intermediate Research Software Development Skills In Python

This is a multi-day, intermediate-level lesson/course in software development skills for researchers using Python as a programming language. A typical learner for this course may be someone who is working in academic research and, needing to write some code, has gained basic software development skills either by self-learning or attending, e.g., a novice Software Carpentry Python course. However, their software development-related projects are now becoming larger and more complex and they need more intermediate software engineering skills to help them design more robust software code, automate the process of testing and verifying its correctness and support collaborations with others.

The course is suitable for self-learning or instructor-led delivery.


Licence: Creative Commons Attribution 4.0 International

Keywords: intermediate, Coding, software engineering, Carpentries Incubator

Additional information

Target audience: research software engineers and researchers developing research software

Status: Active


To go through this course you should meet the following criteria.

- You are familiar with the concept of version control
- You have experience configuring Git for the first time and creating a local repository
- You have experience using Git to create and clone a repository and add/commit changes to it and to push to/pull from a remote repository
- Optionally, you have experience comparing various versions of tracked files or ignoring specific files

- You have a basic knowledge of programming in Python (using variables, lists, conditional statements, functions and importing external libraries)
- You have previously written Python scripts or iPython/Jupyter notebooks to accomplish tasks in your domain of work

- You have experience using a command line interface, such as Bash, to navigate a UNIX-style file system and run commands with arguments
- Optionally, you have experience redirecting inputs and outputs from a command

Learning objectives:

  • Set up and use a suitable development environment together with popular source code management infrastructure to develop software collaboratively
  • Use a test framework to automate the verification of correct behaviour of code, and employ parameterisation and continuous integration to scale and further automate your testing
  • Design robust, extensible software through the application of suitable programming paradigms and design techniques
  • Use a critical, reflective mindset to prepare and release your software for reuse by others
  • Manage software improvement from feedback through agile techniques

Authors: Aleksandra Nenadic, Stephen Crouch, James Graham, Sam Mangham, Martin Robinson, Jacalyn Laird