The following courses are currently being given or are useful for reference:

This could be called "Computer Arithmetic Uncovered". It covers everything that a scientific programmer needs to know about basic arithmetic, for most of the commonly used scientific languages and several applications.

This is an introduction to programming in modern C++, based on the
book *Programming: Principles and Practice using C++*. It teaches
how to write modern C++ as the designer intended it to be used, and that
is the key to effective use of the C++ language.

**Software Design and
Development**

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 stripped-down versions of the computer arithmetic and parallel design courses.

**How to Help Programs
Debug Themselves**

This is the first two lectures of the course "Software Design and Development", though this course actually predated that one.

**Introduction to Modern
Fortran**

This course teaches the basics of modern Fortran in three days, assuming no prior knowledge of it. At the end, attendees will be able to write serious scientific programs, and work on most such programs used in scientific research.

This is two related courses. The first teaches how to improve old Fortran programs, by converting them to modern Fortran, and describes most of the facilities that people may encounter in old Fortran codes. The second was written for the conversion of really old codes, and as a historical record. Neither is currently being given.

Parallel Programming: Options and Design

This course describes all of the major ways that are currently used to execute programs faster than on a single CPU core. It describes the practical options, and their strengths, weaknesses and other important issues.

This course teaches almost all of the MPI that is used in most programs in three days, assuming no prior knowledge of it. At the end, attendees will be able to write serious scientific programs, and work on most such programs used in scientific research.

This course describes how to write simple OpenMP programs in two days, assuming no prior knowledge of it. It concentrates on describing how to avoid problems, because shared memory programming and using OpenMP are less about knowing what to do than knowing what not to do.

Building Applications out of Several Programs

This is an introduction to when and how to combine separate programs together to form an application, and when and how to split a single program apart. It is aimed at users with some programming experience who need to start or join a significant programming project.

This describes how single programs (executables) can be built out of multiple languages by an ordinary programmer rather than an expert. This is not currently being given.

Pattern Matching Using Regular Expressions

This course describes how to use regular expressions to match patterns in text strings in most of the languages and applications commonly used for the purpose, including Python, Perl, PCRE, Java, Apache, PHP, Exim, and some text editors.

NAS, SANs and Parallel File Systems

This is an old seminar that describes Network Attached Storage (NAS), Service Area Networks (SANs) and parallel file systems. While some of its details will have changed, most of what it says is as true now as it was then.

Multi-Core CPUs - Who Cares, Anyway?

This is an old seminar that describes the reasons that multi-core CPUs are becoming ubiquitous, the consequences of that, and how non-programmers can make use of them. While some of its details will have changed, most of what it says is as true now as it was then.

Linear algebra is about the solution of simultaneous linear equations, linear eigensystems etc., and is based on numerical matrices. This course is intended for people who can use Matlab, but need to know what it can do with matrices and linear algebra.

Mathematica - Linear Algebra etc.

Linear algebra is about the solution of simultaneous linear equations, linear eigensystems etc.. There are two courses here: one covers numerical linear algebra (as for Matlab), and the other covers symbolic linear algebra. Neither are currently being given.

Languages for Scientific Programming

This is an old seminar, originally written for the BCS Fortran SIG, which compares Fortran, C++, Python and Matlab for use in scientific programming. While some of its details will have changed, most of what it says is as true now as it was then.