Course by Henry Schreiner & Romain Teyssier. Some material written by Gabriel Perez-Giz for previous iterations of this course. Thanks to Troy Comi for extensive review, additions, and corrections.
The goal of this course is to teach basic tools and principles of writing good code, in the context of scientific computing. Specific topics include an overview of relevant compiled and interpreted languages, build tools and source managers, design patterns, design of interfaces, debugging and testing, profiling and improving performance, portability, and an introduction to parallel computing in both shared memory and distributed memory environments. The focus is on writing code that is easy to maintain and share with others. You will develop these skills through a series of programming assignments and a group project.
Source repository • WebAssembly version • Binder version
Note the WebAssembly version does not have a shell, and time.sleep doesn’t
work (the web is async).
- Software Engineering For Scientific Computing
- Week 1: Intro
- Week 2: Testing
- Week 3: Version Control
- Week 4: Packaging and Quality Control
- Week 5: Continuous Integration
- Week 6: Object Oriented design
- Week 7: Design Patterns
- Week 8: Static Typing
- Week 9: Intro to Compilation
- Week 10: Mixing Languages
- Week 11: Parallel Computing
- Week 12: Parallel Computing with MPI
- Bonus: Exotic topics

This
work is licensed under a
Creative Commons Attribution 4.0 International License.