Authors
Affiliations

Gesellschaft für Informatik

deRSE

Gesellschaft für Informatik

deRSE

Florian Goth

Jan Phillip Thiele

Anna-Lena Lambrecht

Introduction

This module, inspired by the MIT Missing Semester, addresses the “nuts and bolts” often missing from traditional academic training in computing. It aims to provide students with practical skills and conceptual understanding for building robust, maintainable, and reproducible research software—key competencies in Research Software Engineering (RSE).

General Competencies

The module begins with general-purpose computing tools and techniques that are foundational for any research software engineer:

  • Shell tools and scripting
  • Command-line environments
  • Editors and IDEs (e.g., Vim)
  • Version control (Git)
  • Data wrangling
  • Debugging and profiling
  • Metaprogramming
  • Security and cryptography

RSE-Specific Topics

Building on these foundations, the module introduces RSE-specific concepts and good practices:

  • Version control and collaboration
    • Git for code history, collaboration, and issue tracking
  • Virtualization concepts
    • Containerization and environment management
  • The Data Life Cycle
    • Managing research data and understanding data provenance
  • Good coding practices
    • Reproducible and testable code
    • Meaningful documentation and error messages
    • Modular software design
    • Performance-conscious coding
    • Easily installable and distributable software
    • Coding standards, formatting, and linting
  • Software management planning
    • Writing Data and Software Management Plans
    • Sustainable development and community involvement
  • Low-level programming
    • Introduction to a compiled language (e.g., C) to expose hardware-level concerns and efficient memory management
  • Long-term software maintenance
    • Version tracking, bug management, and sustainability strategies
    • Building and maintaining research software communities

Beyond the Basics

Finally, the module touches on practices that support the scholarly nature of research software:

By the end of this module, students will be well-equipped to design, develop, document, and maintain research software that meets high standards of quality, sustainability, and reproducibility.

Seminar: RSE Nuts and Bolts I This is an introductory class to essential techniques an RSE needs in everyday life. SWS: 2 ECTS: 3

Seminar: RSE Nuts and Bolts II This is an advanced class of RSE techniques that includes a teaching component as part of the preparation for working as an RSE in interdisciplinary teams. SWS: 2 ECTS: 3

Module Competences

ID Description Disciplines Prerequisites Evidence Author Source
rse_tooling_1 Use literate programming tools (e.g., Quarto, Marimo, Pluto.jl, Jupyter) to combine code, results, and narrative Research Software Engineering Submit a literate notebook or document integrating code, visualizations, and explanatory text Workshop Participants Link
rse_tooling_2 Use Python for visualization, scripting, templating, and integration tasks Research Software Engineering Submit a Python project demonstrating use of libraries for visualisation, web tasks, and templating Workshop Participants Link
rse_tooling_3 Write and use Bash scripts for automation Research Software Engineering Submit shell scripts automating file manipulation or computational workflows Workshop Participants Link
rse_tooling_4 Apply testing, debugging, and logging techniques to ensure software reliability Research Software Engineering rse_tooling_2 Submit logs, test cases, and debugging documentation for a non-trivial Python or Bash project Workshop Participants Link
rse_tooling_5 Use workflow management tools (e.g., CWL, Nextflow) to design scalable, reproducible pipelines Research Software Engineering rse_tooling_3, rse_tooling_11 Submit a reproducible workflow including metadata and input/output definitions Workshop Participants Link
rse_tooling_6 Estimate resource requirements for computational tasks using profiling and benchmarking Research Software Engineering rse_tooling_2, rse_tooling_5 Provide resource usage profiles and discuss optimization implications Workshop Participants Link
rse_tooling_7 Use package managers and virtual environments (e.g., conda, nix) to manage software dependencies Research Software Engineering Submit environment definitions and reproducible setup instructions for a project Workshop Participants Link
rse_tooling_8 Document and package software for usability and reusability, using generators and modular design Research Software Engineering rse_tooling_2 Submit user and developer documentation generated with Sphinx or similar, plus a reusable code module Workshop Participants Link
rse_tooling_9 Communicate technical RSE topics effectively with non-technical audiences Research Software Engineering Prepare and deliver a presentation or write an article explaining RSE concepts to a general audience Workshop Participants Link
rse_tooling_10 Apply authentication and authorization mechanisms (e.g., LDAP, ACLs, Active Directory) Research Software Engineering Configure and demonstrate access control for a multi-user service or application Workshop Participants Link
rse_tooling_11 Make informed decisions about tooling and infrastructure (e.g., Jupyter vs scripts, local vs HPC/cloud) Research Software Engineering rse_tooling_1, rse_tooling_2, rse_tooling_3 Submit a comparative analysis justifying tooling and infrastructure choices for a research project Workshop Participants Link
rse_tooling_12 Teach and practice collaborative development, including version control and code review Research Software Engineering rse_tooling_2 Submit a project with version history and documented code reviews Workshop Participants Link
rse_tooling_13 Mentor others in research software engineering practices Research Software Engineering rse_tooling_12 Document a mentoring session, workshop, or support activity Workshop Participants Link
rse_tooling_14 Deploy and maintain web servers for research applications Research Software Engineering rse_tooling_2 Deploy a working web application with setup and maintenance documentation Workshop Participants Link
rse_tooling_15 Understand and manage file systems, including local and network-attached storage Research Software Engineering Document storage strategies and access mechanisms in a real-world setup Workshop Participants Link

Sources & Implementations:

Courses

Goth, F, R Alves, M Braun, LJ Castro, G Chourdakis, S Christ, J Cohen, et al. 2024. “Foundational Competencies and Responsibilities of a Research Software Engineer [Version 1; Peer Review: Awaiting Peer Review].” F1000Research 13 (1429). https://doi.org/10.12688/f1000research.157778.1.