Teaching Research Software Engineering Skills for Developing Simulation Software - Chourdakis, Gerasimos; Ashraf, Hasan; Narvaez Rivas, Santiago; Neckel, Tobias; Bungartz, Hans-Joachim (Electronic Communications of the EASST, 2025)
Graduates of programs such as the M.Sc. Computational Science and Engineering at the Technical University of Munich write research software at different stages of their career, yet software engineering skills are often assumed to be prior knowledge or a product of self-study. In order to better prepare graduates for developing larger projects, such as the next PETSc, deal.II, or TensorFlow, we introduced software engineering skills in different courses, naturally connecting the material with the courses, and forming a coherent curriculum track for learning how to write simulation software. This starts with the onboarding block-course "CSE Primer" (revising the basics of Linux, Git, Matlab/Octave, C++, and teamwork via lectures and a team project), continues with "Advanced Programming" (a semester-wide C++ course touching numerical computations, software design, performance, and several tools on the way), and expands to a variety of practical courses, which involve building larger projects in a team. All of these courses have been very well received by students, and the course "Advanced Programming" has been attracting an exponentially increasing number of students from multiple engineering curricula, making the originally intended CSE audience only a small minority. This paper gives an overview of these courses, discusses their connection, and highlights several didactical and implementation elements of each.