In academia, software has become a crucial component of modern research and education. The role of software as a research output is gaining recognition. Research software is increasingly being published alongside traditional research papers, enabling other scientists to replicate experiments, build on existing work, and contribute to the development of shared tools.
However, sustainability, maintainablilty, testability and ease of use of the written software oftentimes fall short in scientific practice. Applying principles of software engineering and design can greatly improve software quality, thereby enabling others to readily use it, to understand and reproduce results. Ultimately, this enhances the overall scientific quality of the published results.
In this course, we dive into the practical aspects of software engineering and design specifically tailored for scientific software in order to make it more extensible, maintainable and testable. The principles we discuss can be applied to various types of codes such as software for numerical simulation as well as scripts for data processing.
We take the viewpoint of an academic software developer that is exposed to an existing code base with the task to add further functionality. Approaches to dealing with common obstacles like missing tests, interposed functional aspects and inherited technical dept will be discussed. Based on the lessons learned, we also explore how to structure and deploy software used for e.g. data processing.
During practical hands-on sessions, participants will interactively learn how to utilize software development techniques to tackle the aforementioned issues in practice in order to enhance the quality and reproducibility of their software.
Prerequisites
- Participants need a working knowledge of writing and reading Python code.
- Bring your own device with a working Python installation (preferably Python >= 3.11).