Block course: Research Software Development
Scientific Software Center, Heidelberg University, Dr. Inga Ulusoy
06/2025
In this course, you will learn how to develop research software in a way that enables reproducible research and sustainable software. Sustainable research software leaves room for further, subsequent implementations and method development, and saves time and effort in the long run; additionally, a sustainable approach follows good scientific practice through making results reproducible. This course is aimed at researchers, doctoral and master students who develop scientific software to carry out their research.
Learning outcome: At the end of the course, participants will be aware of the concepts and tools to develop their own research software sustainably and generate reproducible results, in accordance with best scientific practices.
Total effort: Approximately 30 hours.
Date/Duration: Sessions will take place on five days during one week in June 2025: Specifically, on 23/6/25-27/6/25, from 9:00 AM to 1:00 PM. Please note that there is also an asynchronous part to the course, which you can work on at a time of your choice, but which should be completed before the first/before the subsequent session for a better learning experience.
Course certificate: You will be able to obtain a certificate of participation.
Course requirements: Basic prior programming knowledge, where the emphasis lies on basic; ideally in Python as the examples will be based on Python. A laptop/PC with is required.
Content of each unit
- An introduction to new topics and concepts (1h)
- Individual work on the new concepts (1h)
- A coding demonstration (1h)
- Tasks to be solved as teams of 2-3 developers (3h)
Units
1. Introduction to git: Using git and GitHub
- Git basics
- GitHub basics
- Creating a new repository: git
- Creating a new repository: GitHub
- Creating and merging branches
- Jupyter Notebooks
- Pre-commit hooks
In this unit, we will work with Jupyter notebooks in our own repositories on GitHub.
2. Clean coding as a team: Adhere to guidelines and common coding principles
- Technical debt and clean coding
- Style guides
- Working with an IDE
- Linting of code
- More on git: “Clean” repositories
- Pull requests
- Code review and merging
You will work with your team in your team’s repository and agree on a set of common standards and coding principles.
3. Think before you code: Planning your programming project
- The programming paradigm
- Planning a piece of software: Do’s and don’ts
- Planning a piece of software: Demonstrations
You and your team will plan your software and start implementing the design.
4. Documentation
- A good documentation
- Documentation style guides
- Set up your documentation with sphinx (doxygen)
- Publish your documentation on readthedocs
- Publish your documentation on GitHub pages
The documentation tools for your software will be set up and structured.
5. Testing and continuous integration
Go to unit 5: testing
Go to unit 5: continuous integration
- Types of tests
- Unittest and pytest
- Writing unit tests using pytest
- GitHub actions basics
- Run your tests and linter automatically through GitHub actions
- Build and publish your documentation through GitHub actions
- Considerations when publishing your research and your software
- Optional: Publish your python module as a package
We will set up tests, GitHub actions and you will learn how to publish your software.
Software requirements
You will need Python3, git, and numpy/seaborn/pandas/jupyter for the course.