The University’s official prerequisites are listed separately for each specialisation:
Those prerequisites are used by the admissions team to assess your application. The criteria depend on the specialisation.
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 later on use R. Unlike C and Python, we do not expect students to know R already. In addition to C and Python, students are expected to have a firm grounding in Mathematics. Finally, we will use Linux systems throughout the course. If you know only Windows or your Mac, it is time to learn some basics around command line usage.
We provide some self-assessment tests and material below. These are meant to be used for self-assessment, course preparation and a refresher. It is up to the University’s admissions team to assess your application against the official, formal criteria.
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 (lots of code in Fortran is still out there). We expect that students can program in C. However, basic C knowledge is sufficient. No advanced object-oriented C++ is required, and no knowledge of any specific libraries. Students are expected to know how to write basic C applications, what semantic language constructs 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 useful.
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: http://farside.ph.utexas.edu/teaching/329/lectures/lectures.html. 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 https://www.learn-c.org/ 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 Linux-based 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 https://software-carpentry.org/lessons/.
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 https://software-carpentry.org/lessons/). 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 equations
- Taylor series expansion