Computer Science MSc (with Review of Courses!)

29 November 2018

Shiri Avni

This post is aimed at letting you know what to expect from your studies if you enroll in the Oxford MSc in Computer Science program. Beyond discussing the course structure, I’ll also review the courses that I enrolled in 2017/2018.

Degree structure

Courses

The course is divided into 3 terms; you enroll in courses during the first two terms and compose your dissertation in the third. You are officially allowed to enroll in up to 4 courses per term (though you may audit as many as fit into your schedule – one of my friends took 6 the first term), and you need to complete at least 6 courses in order to graduate.

Courses vary widely in exam and homework difficulty, but everyone I spoke to agreed that the workload is quite manageable (though it is what you make of it). To be honest, I was significantly busier during my undergrad.

Classes & Practicals

Attendance of lectures is not mandatory, but classes and practicals are. Classes (i.e. homework checking) are like tutorials, but rather than solving new problems, you go over the homework questions that you received in advance. In fact, homework does not account for your final grade at all - you simply have to pass your assignments in order to take the final exam. I quite like this approach because it takes the burden off of fully completing your assignments, and gives you the freedom to simply try your best on the questions and focus on the learning aspect of it. This motivates you to try your best at solving questions creatively without stressing if you’ve made a mistake. I believe this resulted in more diverse student solutions, and this made the class discussions more interesting. It also encourages collaboration between students :)

Most courses have a practical class component, called practicals. In courses such as Machine Learning you may have five practical classes, while in others such as Formal Verification you may as little as two. These practicals take place in a computer lab and are a great way to see how the theory you have learned is used in a practical setting with computers. The assignments are not difficult, and do not count for your final grade either, but you must pass them in order to satisfy the degree requirements. I quite appreciated getting the opportunity to apply my theory in practice, because during my undergrad it had not always been clear to me how to apply the theory I’d learned in the real world.

Dissertation (aka ‘Thesis’ in American English)

Your thesis officially lasts one term, but I decided to start mine over the second term (which Oxford calls the Hilary Term, if we are to use the proper terminology). (I began the thesis early in order to do something more comprehensive, and because I was itching to start!) Around December, you will be emailed a list of projects that supervisors are offering MSc students. However, you are also welcome to propose your own thesis ideas, and to collaborate with professors from different departments, even if they do not appear on the list. This is in fact what I did: I emailed a professor in the Department of Engineering Science because I was interested in working in his computer vision lab. As long as you find a co-supervisor from the Computer Science department, then this is fine; furthermore, having a co-supervisor is just a formality, so you shouldn’t have any issues with this.

The quality of dissertations varied widely, as there is no obligation for your thesis to get externally published. Some of the students had modest projects and worked a few hours a day, while others had more intense projects and even managed to publish a paper. I would definitely say that the thesis component can be and will be as serious as you want it to be. In my opinion, you should take advantage of the amazing professors at Oxford and try to do something interesting and challenging in the short time that you have!

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…

In the future, I hope this review will include more courses. If you have enrolled in any and would like me to include your feedback, please send me an email or leave a comment.

Relevant Posts:

A Year at Oxford - Coming with a Family
Oxford Scholarships & WHT
Oxford FAQ