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.
- Python. A whirlwind tour of the basic language features. "Pythonic" code: iterators, generators, comprehensions, context managers.
- 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.
- Lab: Collaborative code development with Python, Git, and Github.
- Handling failure. Sensible error messages. Exceptions and error handling. Print-debugging. Debuggers.
- Lab: Handling failure.
- Testing research software. Test pyramid: unit testing, regression testing. Expectations and assertions. Negative testing. Test driven design. Mock objects and test doubles.
- Lab: Testing research software.
- Best practice in construction. Comments. Coding conventions. Documentation.
- Lab: Adopting best practice.
- Refactoring. IDEs.
- Lab: Refactoring and libraries.
- Requirements engineering. Engineering methodologies: Agile and Waterfall.
- Design and development. Software as engineering. Functional and architectural design.
- Object oriented design. Pragmatic use of diagram languages. Design Patterns.
- Lab: Design and Development, OOD.
- Building and deployment. Python librarie. Packaging for pip and conda. Deploying.
- Lab: Building and deployment.
- 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.