8 minute read

This post is intended to give you an idea of what to expect if you enroll in the Oxford MSc in Computer Science program. Beyond discussing the course structure, I’ll also review the courses I took during the 2017/2018 academic year.

Degree Structure

Courses

The program is divided into three terms. You enroll in courses during the first two terms and work on your dissertation in the third. You can officially enroll in up to four courses per term, though you may audit additional courses if your schedule permits (one of my friends took six courses in the first term). You need to complete at least six courses to graduate.

Courses vary widely in exam and homework difficulty, but everyone I spoke to agreed that the workload is manageable. Personally, I found my undergraduate studies in Israel to be more demanding than the MSc. An upside of this is that you have more time to explore the city and begin your research early if you would like.

Classes & Practicals

Attendance at lectures is not mandatory, but classes and practicals are. Classes (homework reviews) resemble tutorials, where you go over the homework questions received in advance. Homework does not count towards your final grade; you simply need to pass your assignments to be eligible for the final exam. This approach reduces pressure and allows you to focus on learning and problem-solving creatively, leading to more diverse and interesting class discussions.

Most courses have a practical class component. For instance, Machine Learning might have five practical classes, while Formal Verification might have as few as two. These practicals, which take place in a computer lab, engage the students in applying theoretical concepts in practice.

The assignments in the practical are not difficult and do not count towards your final grade, but you must pass them to meet degree requirements. I appreciated the opportunity to apply theory in practice, which was not always clear during my undergraduate studies.

Dissertation (Thesis)

Your thesis officially lasts one term, but I started mine in the second term (Hilary Term). Around December, you receive a list of potential projects from supervisors. You can also propose your own ideas and collaborate with professors from different departments, provided you have a co-supervisor from the Computer Science department. I did this by contacting a professor in the Department of Engineering Science to work in his computer vision lab. The quality of dissertations varies, with some students undertaking modest projects and others pursuing more intense research, sometimes resulting in published papers. The thesis component can be as serious and challenging as you want it to be. I recommend leveraging Oxford’s outstanding professors to do something ambitious and interesting.

Review of Courses

I will start out by saying that I don’t think the courses were well-split between the two terms: the first term actually had a few courses that required prerequisite courses which were only offered in the second term! However, there are still enough interesting courses to choose from. The following is a breakdown of the courses I enrolled in:

  1. Computer Aided Formal Verification

    This was a very interesting course that would be good for people who enjoyed learning about finite state machines and who are interested in learning about how the correctness of a system can be proven automatically. Given that code is getting longer and more complicated these days, it is becoming ever more difficult to catch subtle bugs by human made tests, and CAFV is a compelling approach to addressing this issue. The exam difficulty was on par with the homework, so if you take your assignments seriously, you will be fine on the test.

  2. Databases

    This was a really nice course which had the most approachable textbooks by far (note to readers: I rarely attend class and do most of my studying by reading the textbook). Databases is such a practical field and I would recommend it for anyone who thinks they will need to store or work with data at some point (i.e., I would recommend it to everyone). You will learn about the syntax of SQL and how database engines optimize your declarative search queries under the hood. You will also learn about the limitations of SQL and about the various normal forms of databases, which will help you design your data structures so as to reduce data redundancy and maintain informational integrity. The exam is completely fine if you study well.

  3. Machine Learning

    This course provided a good introduction to machine learning, although there is only so much you can learn given a short 8 week term. Many of the essentials are covered: Maximum Likelihood Estimators as a basis for the functions to be maximized; various gradient methods for solving large problems; takeoffs and recognition of overfitting and underfitting; SVMs; regularization methods such as Lasso and Ridge; Logistic Regression; and an introduction to neural networks.

    The practical classes were fun and involved coding in Python and using the popular Scikit-learn library. The one thing I would say is that the final exam was difficult and much more practical than the course, which had focused on theory. However, the professors corrected for this by grading kindly and so the final grades were fine.

  4. Probabilistic Model Checking

    This was an interesting course that relied a lot on the course Computer Aided Formal Verification, although it was given in the same term as the latter. While CAFV focused on analysing deterministic systems, PMC extended the analysis to systems with randomized behavior. This is interesting because many real-world systems have unknown developments due to interaction with external and independent stimuli. I found the course intellectually rewarding, but I will say that the course textbook is a difficult read and that the organization of the course was less to my liking.

  5. Probability and Computing

    This course was fantastic, and I would definitely recommend it - the lectures were clear and interesting as were the course textbooks. The material itself is fun: the homework questions felt like clever riddles, and learning about the use of randomized algorithms is a nice break in viewpoint from the deterministic ones that most of us focus on in our undergrad.

    I do need to note that this course’s take-home exam was by far the hardest: the questions were very mathematically rigorous and some of them did not seem directly related to the course. However, given that you have a month to do a take-home exam, this was more than enough time to figure out how to solve the problems.

  6. Computers in Society

    This was an ethics course which I took because I was interested in learning about the ethical issues we should consider as computer scientists. This is also the course that I have the most mixed feelings about. On the one hand, I ended up learning a lot from the final project, in which we needed to pick an ethical problem related to computer science and analyze it through an essay. The course’s teacher assistant was also fantastic, and I enjoyed the discus sions he led. On the other hand, I did not enjoy most of the lectures and felt that the grading of the final presentations was quite subjective and that one had to pick a topic that was of interest to the professor.

Here are some additional courses reviewed by a friend who took the MSc at the same year as me:

  1. Intelligent Systems

    This was a pretty basic course on search, trees, games, and the very basics of AI and decision-related algorithms. If you’ve done any basic AI you won’t need it, but if you didn’t then it’s a lot of fun. I’ve heard that the course has been revamped now to include more AI. The homework assignments and practicals (in Java) were solid, and the exam was long but fair.

    As a last note, while I didn’t enroll in the course since I’d been familiar with the material from personal readings in the past, the textbook I had studied from is the same one that the lecturer used - it’s called “Artificial Intelligence: A Modern Approach”, and it’s fantastic. The fact that the course uses this book thus promises you a clear and thorough introduction to this interesting field.

  2. Computational Game Theory

    Fantastic course taught by the Head of the department and one of the leading figures of game theory. My friend felt like he learned a ton about game theory (his exact words) – although little of the material had anything to do with computer science. Nonetheless, my friend says it was very interesting and that just the experience of being taught by a true Oxford genius is worth it. However, a disappointing note is that every year the exam given is too easy and is therefore harshly marked – many ended up with lower grades than expected.

  3. Functional Programming

    Verbatim from my friend: Please don’t take this course. It’s a nightmare, people dropped out so fast that we ended up with only 4 MSc students taking the exam. None of us understood why it was taught the way it was - you’re better off taking a course in Scala on Coursera or Haskell on Udemy.

  4. Computational Learning Theory

    By far one of the most intellectually difficult courses given in the MSc. Incredible theoretical, it’s all about how to prove that an algorithm will obtain an accurate result within a certain probability margin. Requires comfort with probability and very proof-heavy. My friend didn’t end up taking the exam but we both heard that it was tough, at the level of Probability & Computing. Worth sitting through and experiencing the challenge, though.

  5. Knowledge Representation and Reasoning

    My friend loved this class – the lectures were interesting and focused heavily on logic systems, and how to create and expand knowledge bases (which some databases rely on). The professor was very engaging. The homework lectures were great too, but there were no practicals (a shame as they probably would have been fun).

    However, the exam is a different story. It had very little to do with the course material and even less so with past exams, which the class had been specifically told to use for preparation. In addition, while students had been told the exam would only have a few proofs, it ended up being 100% proof-based. My friend studied with two other friends, and although they felt like they were honestly on the same level, the exam difference between their top and bottom mark was 45 points, which provides evidence for variance in marking. Furthermore, the class average was basically a fail…