This was created for the MPhil in Scientific Computing. The first two lectures cover the basic principles of practical software engineering that are important for writing reliable and efficient scientific software, and to avoid wasting time in avoidable debugging. The third and fourth are a stripped-down version of the computer arithmetic course and an overview of how to recognise and handle some common numerical issues. The fifth and sixth are a stripped-down version of the parallel design course and an overview of how to avoid problems with shared-memory parallelism.
Introduction and Principles (also in the form of a Handout for the MPhil )
Checking and Diagnostics (also in the form of a Handout for the MPhil )
These cover the basic principles of practical software engineering that are important for writing reliable and efficient scientific software. They are also intended to save development time by teaching effective debugging techniques and reducing the need to learn by making mistakes. More details are given in How to Help Programs Debug Themselves.
Computer Arithmetic and Numerics (also in the form of a Handout for the MPhil )
Some Common Numerical Issues (also in the form of a Handout for the MPhil )
The first is is a stripped-down versions of the course ( How Computers Handle Numbers ), and the second is a description of how to recognise and handle some common numerical problems. It is not a numerical analysis lecture, and does not assume knowledge of that.
Languages and Parallelism (also in the form of a Handout for the MPhil )
This contains a summary of the most commonly used languages and a stripped-down version of the course ( Parallel Programming: Options and Design).
This contains a set of generic guidelines on how to use shared-memory libraries and languages (including C++ threading and OpenMP) reliably and efficiently. It does not require knowledge of those libraries and languages.
Some Notes on C++ for Scientific Programming
These are some very brief points extracted from the course ( Programming in Modern C++) that are very important for scientific programming, most of which cannot be found in any other Web reference, course or book.