This is not a strict division, but lessons can be classified as to what is initially useful to yourself, to your group, and to the whole community. Lessons marked with (*) are core lessons and part of a regular 6 half-day workshop.
Introduction to version control (*): This lesson brings you from zero to using Git and GitHub for own projects.
Collaborating and sharing using GitHub without command line: In this lesson we try to introduce concepts around GitHub collaboration without using the command line at all, only using the web interface or GitHub desktop. This lesson has been picked up and developed further by others and is now part of the Carpentries Incubator.
Jupyter notebooks (*): This lesson gives an overview of what Jupyter notebooks are, when they can be particularly useful, and shows best practices for reusable and reproducible notebooks.
Automated testing (*): In this lesson we talk about motivation for testing, about test design, but also about some tools that are typically used for automated testing of software.
Modular code development type-along (*): The focus of this lesson is how to partition and organize projects as they grow from one screen-full to larger and how to make code portions reusable across projects and across notebooks.
Modular code development: This is an older version of the modular code development lesson based on slides and group work. This can work if the learners prefer discussions and presentation instead of demo and discussion.
Collaborative distributed version control (*): This lesson builds on "Introduction to version control" and we apply branching and learn about pull requests (merge requests), forks, and collaboration using Git and GitHub.
Git branch design: Unfortunately we don't teach this lesson very often but it contains probably useful content about how to organize branches in a project. It also contains a discussion and exercises about rebasing which is compared to merging.
Documentation (*): Here we give an overview of the different ways how a code project can be documented: from small projects to larger projects. Markdown and Sphinx are central tools in this lesson.
Reproducible research (*): We focus here on 3 aspects of reproducible programs and computations: documenting dependencies, environments, and computational steps in a reproducible way. We touch on containers.
Social coding and open software (*): We motivate and give an overview over software and data licensing and software citation best practices.
Community teaching: This material evolved from the "Instructor training" material below. Focus changed from CodeRefinery workshops to online teaching, independently of whether this is CodeRefinery or any other technical topic.
Instructor training: Our first CodeRefinery instructor training events used this material. The material has evolved to the "Community teaching" material (above) where we tried to open it up and beyond only CodeRefinery workshops.
CodeRefinery manuals, our guides and hints on running CodeRefinery: As the project and community grows, documentation becomes more important and this is our place where we document our guides and methods and solutions.
CMake workshop (based on ENCCS version): This material can give a useful starting point into CMake. It contains exercises and was taught as part of a hackathon focused on porting codes to CMake.
Data visualization using Python: This material can be a useful and pragmatic starting point for somebody who starts with Python and wants to get up to speed with data visualization. Exercises are mostly using Matplotlib but also other libraries are mentioned.
Mixed Martial Arts: Interfacing Fortran, C, C++, and Python: We haven't taught this lesson in a while so it will need some updates but it can be a useful starting point when developing material for mixed-language development and interfacing programs written in different languages.
A number of video recordings of CodeRefinery lessons and workshops and Research Software Hour sessions can be found on our YouTube channel.