The University’s prerequisites are enlisted here.

There are a few things you have to beĀ  to know before you join this course, and you will not have time to learn it on-the-fly: An essential requirement for this course is that students can program already. In Core I and Core IIB, we mainly rely on Python and C, so some knowledge in these two languages (not expert, but decent) is extremely important. Core IIA will use R, which will be easy to learn with prior knowledge of C and Python. Besides C and Python, you have to know your maths. You have to be really good in it.

We provide some self-assessment tests and material below. If you feel that you can master these challenges, then the MSc is the right programme for you.


Some good online resources for learning Python up to a level that you are fit for this course are


C still is the lingua franca in scientific computing and HPC despite success stories from other languages and the previous dominance of Fortran (which induces that still lots of code in Fortran is out there). We expect that students can program in C. Basic C knowledge is sufficient. No advanced object-oriented C++ is required, no particular knowledge in some libraries. But students have to know how to write basic C applications, what semantic language constructs do exist, how to compile and link applications, and so forth. We do not expect students to be able to write fast code (yet), but some expertise in debugging definitely is a pro, too.

There are plenty of reasonable C tutorials out there, and the top hits from Google are typically a good starting point. If you want to learn C or assess your own skills, we however recommend that you search particularly for online courses on C for Scientific Computing as they are offered for free by many universities. Richard Fitzpatrick offers an excellent course along these lines: We recommend that you learn/refresh C before the course starts – there will be hardly any time to learn the language throughout the academic year.

Self assessment: Throughout induction week, we reserve slots for students to self assess their knowledge and to ask questions about language details. For this, we ask students to run through and to complete the exercises of sessions “Learn the Basics” (the last part on the static keyword is optional yet highly recommended), and the first six sessions from “Advanced”.


Some great online resources for learning R:

We do not expect you to know R prior to the course. We however to expect students to learn R once they enter term 2.


Most of our research and teaching is based upon Linuxish systems. Durham offers introductory courses on Linux, but some basic prior knowledge is a pro. The remaining Unix skills are easily acquired on-the-fly. If you want to revise your Linux knowledge, you might want to have a look at the corresponding Core lessons from the Software Sustainability Institute’s material at

If you want to run all examples from home without a server (we give you access to servers, but we also encourage you to try to install and run stuff on your own kit – this is a useful skill for your work later), you have to maintain and install all software yourself. We cannot provide support for this.

We do however recommend that you simply install a simple Linux distribution. This is free, and almost all Linux distributions can be installed in dual boot mode, i.e. with Windows in parallel if you want to keep Windows. Both Linux and MAC come along with C/C++ compilers usually. You might have to install Python yourself.

Simple command line access to C is sufficient (see once more the Unix shell course from the Software Sustainability Institute at Same for Python. You will need no further software initially. A plain text editor and the command line interpreters/compilers are sufficient.


Typical content that we expect students to be familiar with is

  • elementary statistics – mean, standard deviation, variance
  • calculus, partial differentiation, integration, elementary functions
  • basic linear algebra, i.e. matrix manipulation, vector spaces
  • notion of a partial/ordinary differential equation
  • Taylor series expansion