Sep 24, 2024 to Oct 22, 2024
(Europe/Berlin / UTC200)



Add event to calendar


This course teaches a core set of intermediate-level software development skills and best practices.

This training will take place online on 5 Tuesdays from 24 September till 22 October.

The instructors will provide you with the information you will need to connect to this meeting.

This course aims to teach a core set of established, intermediate-level software development skills and best practices for working as part of a team in a research environment using Python as an example programming language. The core set of skills we teach is a selective set of tried-and-tested collaborative development skills that provides a firm foundation for continuing on your learning journey.

A typical learner for this course may be someone who is working in a research environment, 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. They have been applying those skills in their domain of work by writing code for some time, e.g. half a year or more. However, their software development-related projects are now becoming larger and are involving more researchers and other stakeholders (e.g. users), for example:

  • Software is becoming more complex and more collaborative development effort is needed to keep the software running
  • Software is going further that just the small group developing and/or using the code – there are more users and an increasing need to add new features
  • ‘Technical debt’ is increasing with demands to add new functionality while ensuring previous development efforts remain functional and maintainable

They now need intermediate software engineering skills to help them design more robust software code that goes beyond a few thrown-together proof-of-concept scripts, taking into consideration the lifecycle of software, writing software for stakeholders, working in a team and applying a process to understanding, designing, building, releasing, and maintaining software.

The workshop is based on the teaching style of the Carpentries, and learners will follow along while the instructors write the code on screen. More information can be found on the workshop website (will be activated once registration is live, usually 3 weeks before the start of the workshop).

Please be advised that by signing up, you agree to our Cancellation and No-Show Policy, which states that cancellations made less than 2 workings days prior to the event will incur a no-show fee. Please read the full policy here for more details.

If you won’t be able to attend, please cancel your registration (by following the instructions here) so that we can offer your seat to someone on the waiting list.


The workshop is aimed at PhD candidates and other researchers or research software engineers. We offer tickets for researchers who are affiliated with Dutch research institutions. We also offer industry tickets for attendees who are not affiliated with Dutch research institutions. We do not accept registrations by Master students.

Ticket prices

Ticket prices are as follows:

  • For participants affiliated with Dutch research institutions: €200.00
  • For participants from industry: €600.00

Prerequisite knowledge

This course is for you if:

You have been writing software for a while, which may be used by people other than yourself, but it is currently undocumented or unstructured.

You want to learn:

  • more intermediate software engineering techniques and tools
  • how to collaborate with others to develop software
  • how to prepare software for others to use

You are currently comfortable with:

  • basic Python programming (though this may not be the main language you use) and applying it to your work on a regular basis
  • basic version control using Git
  • command line interface (shell)

This course is not for you if:

  • You have not yet started writing software (in which case have a look at the Software Carpentry course or some other Python course for novices first)
  • You have learned the basics of writing software but have not applied that knowledge yet (or are unsure how to apply it) to your work. In this case, we suggest you revisit the course after you have been programming for at least 6 months
  • You are already reasonably familiar with the learning objectives of the course and those of individual episodes
  • The software you write is fully documented and well architected.


To attend this course you should meet the following criteria. You can also test your prerequisite knowledge by taking this short quiz.


  • 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
  • Ideally, 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
  • Ideally, you have experience redirecting inputs and outputs from a command

Instead of this workshop you could also consider: If you find the topics that are covered in this workshop slightly too advanced, you could consider joining the ‘Good Practices in Research Software Development’ workshop. That workshop has a similar focus, but is targeted to a slightly less advanced audience. For example, there is an optional introduction to git. Checkout our upcoming workshops for more information.


Setting up Environment For Collaborative Code Development

  • Introduction to Our Software Project
  • Virtual Environments For Software Development
  • Integrated Software Development Environments
  • Collaborative Software Development Using Git and GitHub
  • Python Code Style Conventions
  • Verifying Code Style Using Linters

Ensuring Correctness of Software at Scale

  • Automatically Testing Software
  • Scaling Up Unit Testing
  • Continuous Integration for Automated Testing
  • Diagnosing Issues and Improving Robustness

Software Development as a Process

  • Software Requirements
  • Software Architecture and Design
  • Programming Paradigms
  • Functional Programming Intuition
  • Object Oriented Programming Intuition

Collaborative Software Development for Reuse

  • Developing Software in a Team: Code Review
  • Preparing Software for Reuse and Release
  • Packaging Code for Release and Distribution

Managing and Improving Software over Its Lifetime

  • Managing a Collaborative Software Project
  • Software Improvement Through Feedback