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

This course was developed by the Research Computing Service (RCS) of Imperial College, in particular by the Research Software Engineering (RSE) team. The RSE team are a part of Imperial ICT combining specialist knowledge in software engineering with extensive experience in research. The team works with academic groups on a wide range of projects whilst also organising community events and training (such as this) for the benefit of the research community. You can find out more at the RSE team website and the Imperial RSE Community website. You can also consult the expertise of the RSE team at the fortnightly Code Surgeries.

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:15 2. Tools II: Code Formatters How to format code with no effort on the part of the coder?
00:25 3. Tools III: Linters How to make the editor pro-actively find errors and code-smells
00:40 4. Data Structures How can data structures simplify codes?
01:35 5. Structuring code How can we create simpler and more modular codes?
02:00 6. Testing Overview Why test my software?
How can I test my software?
How much testing is ‘enough’?
02:20 7. 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?
03:00 8. Unit Testing Challenge How do I apply unit tests to research code?
How can I use unit tests to improve my code?
04:00 9. Advanced Topic: Design Patterns How can we avoid re-inventing the wheel when designing code?
How can we transfer known solutions to our code?
05:00 Finish

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