Workshop: A Modular Course on Developing Research Software
Abstract: This talk describes the motivation and design of learning modules for teaching best practices for developing research software and practical computational science. These modules have been offered twice as a 10-week graduate course in an engineering program, although the content applies broadly to any field of scientific and/or engineering research where software may be developed. Topics taught include local and remote version control, licensing and copyright, structuring Python modules, testing and test coverage, continuous integration, packaging and distribution, open science, introduction to parallelism, software citation, and reproducibility basics, among others. Lectures are supplemented by in-class activities and discussions, and all course material is shared openly via GitHub. In the 10-week course, student work is heavily based on a single, term-long project where students individually develop a software package targeted at their own research topic; all contributions must be submitted as pull requests and reviewed/merged by other students. The course was offered in 2018 and 2019 to 24 students total, and shorter-length workshops will also be offered.