Skip to content
Course materials for Research Software Engineering course.
Branch: master
Clone or download
Pull request Compare This branch is 77 commits ahead of UCL:master.
Type Name Latest commit message Commit time
Failed to load latest commit information.
00prestudy Move existing sections that fit the schedule into their locations Apr 15, 2019
01python Move existing sections that fit the schedule into their locations Apr 15, 2019
03git_lab An exercise on using GitHub May 3, 2019
04errorhandling slides for talking about errors Jul 4, 2019
05error_lab Lab session on error handling May 30, 2019
06tests Create a testing lab session from the exercises in the talk session May 30, 2019
07testing_lab Create a testing lab session from the exercises in the talk session May 30, 2019
09construction_lab Lab on construction and low-level design May 30, 2019
10refactoring A little on IDEs. Apr 17, 2019
11refactoring_lab Lab on refactoring May 31, 2019
12requirements The work on design motivated adding to the requirements chapter. May 3, 2019
14ood slidify patterns notebook Jul 9, 2019
15ood_lab lab on object-oriented design Jun 24, 2019
16building presentations on building Jul 9, 2019
17building_lab Add a lab on building and packaging Jun 25, 2019
18opensource final thoughts May 15, 2019
ch01data small typo importing Oct 25, 2018
ch07dry Rename old overloading page Dec 17, 2018
session99 ipython -> jupyter Oct 22, 2018
site-styles Add styling to distinguish stderr Sep 28, 2016
.gitignore Fix annoying issue with Sphinx? Jul 24, 2015
.travis.yml Testing travis... why doesn't find `06Issues.ipynb` Nov 14, 2018 Create Feb 17, 2014
Makefile Fix root URL Jun 9, 2016
jekyll.tpl Cleaned up for new stylings Jul 24, 2015
latex.tplx Newer jupyter doesn't need extra tokens defining Jun 6, 2016 Cleaned up for new stylings Jul 24, 2015
requirements.txt Add line_profiler to the dependencies!! Dec 12, 2018
secrets.tar.enc Reset key Jun 14, 2016


Course materials for Research Software Engineering course.

Current plan for structure:

Research Software Engineering

Content: In this course, you will move beyond programming, to learn how to construct reliable, readable, efficient research software in a collaborative environment. The emphasis is on practical techniques, tips, and technologies to effectively build and maintain complex code. This is a short (4.5 days), intensive, practical course. The content of each of the units is as follows:

  • Pre-work: installing Python, conda, Jupyter Notebooks, and git. It is greatly beneficial if you do this before attending the course, so that you are set up to get started with the labs.
  1. Python. A whirlwind tour of the basic language features. "Pythonic" code: iterators, generators, comprehensions, context managers.
  2. Code management. Collaborating around code. Distributed version control. Git. Github. Issue tracking. Code review and pull requests. Branches and merging. Continuous Integration. Citing software. Software sustainability.
  3. Lab: Collaborative code development with Python, Git, and Github.
  4. Handling failure. Sensible error messages. Exceptions and error handling. Print-debugging. Debuggers.
  5. Lab: Handling failure.
  6. Testing research software. Test pyramid: unit testing, regression testing. Expectations and assertions. Negative testing. Test driven design. Mock objects and test doubles.
  7. Lab: Testing research software.
  8. Best practice in construction. Comments. Coding conventions. Documentation.
  9. Lab: Adopting best practice.
  10. Refactoring. IDEs.
  11. Lab: Refactoring and libraries.
  12. Requirements engineering. Engineering methodologies: Agile and Waterfall.
  13. Design and development. Software as engineering. Functional and architectural design.
  14. Object oriented design. Pragmatic use of diagram languages. Design Patterns.
  15. Lab: Design and Development, OOD.
  16. Building and deployment. Python librarie. Packaging for pip and conda. Deploying.
  17. Lab: Building and deployment.
  18. Open Source community and interaction. Next steps.


Lesson Zero covers installation of the tools that you will need, and we recommend you go through this material before starting the course.

Examples and exercises for this course will be provided in Python. You will therefore find it easiest to follow along if you have experience in that language. Appropriate Python experience could be obtained from the Software Carpentry Bootcamp. Previous experience with version control (such as from Software Carpentry) would be helpful.

You are required to bring your own laptop to the course as the classrooms we are using do not have desktop computers.

You can’t perform that action at this time.