Week-long intensive Training in Research Software Engineering
Research Software Engineering Bootcamps
The Research Software Engineering Bootcamp will be a 4-5 day intensive workshop targeting graduate students, postdocoral researchers, and others who self-identify as intermediate to advanced research software developers. The focus here will be on practices that will improve the quality, reproducibility, and sustainability of software. By targeting those with some research software development experience, the attendees will be better prepared to understand and embrace the more advanced best practices employed and endorsed by RSEs
Curriculum
- Software Design: Use of appropriate software design principles is important for the long-term sustainability of research software. It is important for developers of research software to be aware of some key principles, such as modularity and functional independence, from the start. It is much easier to start with key design goals in mind rather than to retrofit poorly designed code. Whether developers are aware of it, anytime they sit down to write code, they are always designing. Therefore, it is important for them to design software in thoughtful ways rather than in an ad hoc manner.
- Testing: Having a rigorous test infrastructure is critical to the long term viability of all non-trivial software, including research software. Because this is something that requires experience and some sophistication to fully embrace, it is rarely introduced in introductory training sessions. Despite this, we strongly feel that establishing tests as part of the development process and the integration of automated testing into a project’s framework is a critical best practice that is severely underutilized in the research software. A significant portion of the RSEB will be focused on topics such as regression testing, unit testing, and continuous integration using common frameworks (e.g. TravisCI, Jenkins, etc.).
- Collaboration Techniques: A key aspect to building high quality software is the ability to collaborate effectively with other researchers. Graduates of this bootcamp will be expected to become the leaders of increasing complex research software systems. Modern software development platforms, such as GitHub, have numerous features available to developer teams that can facilitate efficient collaboration. Topics include utilizing pull requests, code review, issue tracking, etc.
- Software Packaging and Distribution: By effectively packaging and preparing research software for other scientists and researchers in the field to use significantly increases the potential impact of the software. Unlike the developers themselves, users of software lack the sophistication required to troubleshoot and fix issues that prevent easy installation. Proper packaging, distribution, and release management can make the difference between having a code embraced by the community and ignored.
- Documentation Techniques: The importance of proper code documentation increases as size and life expectancy of the software grows. Good documentation is critical to ensure others (including the original developer in the future) have the information necessary to maintain and extend the capabilities of the research software. In addition to techniques and strategies, source code documentation tools such as such as doxygen and sphinx will be covered.
- Performance and Optimization: The typical computer science axiom “make it work, then make it fast” is often stopped in the research world after the “make it work” stage, unless performance is preventing science advances. Decreasing the time to solution not only saves computational resources, but it can also enable users of the software to solve problems previously intractable. Concepts such as profiling, parallelization, and other optimization techniques are often too advanced or abstract for novices, but will be well suited for the target RSEB audience. Writing high-quality, fast code is one of the hallmark signs of a sophisticated programmer
Prerequisites
Participants are expected to have a basic knowledge of programming concepts and experience programming (preferably in python and C/C++) research software and a basic knowledge of git. For those with less experience we recommend the excellent material from The Carpentries.
Registration
The COVID-19 pandemic will likely delay the first Research Software Engineering Bootcamp. Registration for the first Research Software Engineering Bootcamp will be announced broadly months before the event.