These are the lessons which are included in the "standard" CodeRefinery workshop, and what we believe that every computational scientist (even those with very small amounts of computation) should know.
Version control with focus on collaboration and not only for the command line:
Introduction to version control (day 1-2): Why we want to track versions and how to go back in time to a working version. This lesson brings you from zero to using Git and GitHub for own projects.
Collaborative distributed version control (day 3): 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.
Reproducible research (day 4): Preparing code to be usable by you and others in the future. 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 (day 4): What can you do to get credit for your code and to allow reuse. We motivate and give an overview over software and data licensing and software citation best practices.
How to document your research software (day 5): 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.
Jupyter notebooks (day 5): A tool to write and share executable notebooks and data visualization. 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 (day 6): Preventing yourself and others from breaking your functioning code. 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 (day 6): Making reusing parts of your code easier. 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.
A number of video recordings of CodeRefinery lessons and workshops and Research Software Hour sessions can be found on our YouTube channel.
Train the trainer workshop: Do you teach the use of computers and computational tools? Are you curious about scaling your training and learn about tested and proven practices from CodeRefinery workshops and other trainers? Four self-contained sessions on tools and techniques for computational training offer a great chance to enhance your teaching skills and learn about new tools and practices. What you will learn is also used a lot outside CodeRefinery, whenever good beginner friendly training is needed.
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.
Tuesday Tools & Techniques for High Performance Computing: this is a series of four self-contained episodes on best practices in high performance computing and a great chance to enhance your computational skills:
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.
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 Vega-Altair but also other libraries are mentioned.
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.
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.
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.
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.
Here you can read how you can reuse our lessons and also see a list of derivative works based on our material.
Here we list lessons by our partners and other lessons we recommend or have contributed to.