Research Software Design by Example
When I first began working with scientists I was puzzled by how little they knew about programming. I soon realized that they knew far more about it than I did about galaxy formation, quantum chemistry, or protein folding, and that the principal reason they didn't know more was that people like me had never taught them.
It took me a longer to understand that many of the practices I was pushing them to adopt were a poor fit for their actual problems: branches in version control aren't designed to manage dozens of experimental variations on a machine learning algorithm, and it's hard to write unit tests when no-one in the world knows what the correct answer is
This tutorial is my latest attempt to teach a few of the things that I am sure are useful. If you have suggestions or would like to contribute, please get in touch.