Essential Software Engineering for Researchers

Programming as a researcher can be a very intimidating experience. It can feel as though your code isn’t “good enough” (as judged by some mysterious and opaque criteria), or that you’re not coding in the “right way”. The aim of this course is to help to address some of these concerns through an introduction to software engineering for researchers. Beyond just programming, software engineering is the practice and principle of writing software that is correct, sustainable and ready to share with colleagues and the wider research community.

This course covers:

Prerequisites

Any introductory (graduate school) level programming course

Schedule

Setup Download files required for the lesson
00:00 1. Tools I: Packaging and virtual-environments How to use a package manager to install third party tools and libraries
00:10 2. Data Structures How can data structures simplify codes?
00:40 3. Tools II: Code Formatters How to format code with no effort on the part of the coder?
00:45 4. Structuring code How can we create simpler and more modular codes?
01:15 5. Tools III: Linters How to make the editor pro-actively find errors and code-smells
01:30 6. Design Patterns How can we avoid re-inventing the wheel when designing code?
How can we transfer known solutions to our code?
02:00 7. Testing Overview Why test my software?
How can I test my software?
How much testing is ‘enough’?
02:20 8. Writing unit tests What is a unit test?
How do I write and run unit tests?
How can I avoid test duplication and ensure isolation?
How can I run tests automatically and measure their coverage?
04:00 Finish

The actual schedule may vary slightly depending on the topics and exercises chosen by the instructor.