The University’s prerequisites are enlisted here.

An essential requirement for this course is that students can program already or are willing to bring themselves up to speed with essential programming skills. 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.

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

Some local resources that we use for the actual teaching as well can be found at

If you manage the exercises there, you are more than well-prepared for the present course.


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