I have now retired, though am lecturing for the HPC Academy and MPhil in Scientific Computing. I am happy to answer questions, within reason, but shall not feel obliged to do so.
These are being given, though not all are being given in this form.
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.
How Computers Handle Numbers
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. Most of what it was true and relevant in 1970, and will probably be so in 2070.
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.
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.
Introduction to MPI
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.
Introduction to OpenMP
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.
These are still relevant, for anyone who is faced with the task they describe, but are not being given in any form.
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 is two related courses. The first teaches how to improve old Fortran programs (i.e. Fortran 77), by converting them to modern Fortran (i.e. Fortran 90), 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, because I realised that I was one of the few remaining people who could write it.
Programming in Modern C++
This is an introduction to programming in modern C++, based on first edition of 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. It is still relevant because it contains information on some important topics (mainly portability, reliability, numerics, parallelism and random numbers) that is not generally available.
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.
Mixed Language Linking
This describes how single programs (executables) can be built out of multiple languages by an ordinary programmer rather than an expert. The techniques it describes should not be used for writing new programs, and the standard-defined mechanisms should be used. However, it describes what a lot of older codes do, and will continue to do for some years, so may be useful for reference.
These are left around in case anyone is interested.
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.
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. It is an extension of Philip Hazel's course.
Matlab: Linear Algebra
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.