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:
- Software publication and citation (see SP in (Goth et al. 2024))
- Use of domain-specific repositories and registries (see DOMREP in (Goth et al. 2024))
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 |