Computer Science

The option to do Computer Science was stopped for the 2020 intake, new NST students cannot take this option.

Complementary Options

Physics
Maths

In Short

Choosing Computer Science as a 1a NatSci means you take Paper 1 of the CS tripos at the end of the year. Full Computer Scientists will also do Paper 2, so you do about half the CS content that they do. It is a fairly tricky course, but it can be extremely rewarding in its own right, not to mention the benefits of understanding computers later in the tripos, whatever modules are taken. Previous experience in some programming will help, but not that much: the course is the most mathematically rigorous in the country, so although having lots of programming experience will help you breeze through the Java course, this is only 1/6 of the year’s content. Overall, pick this course if you feel getting to grips with some challenging concepts in computer science. A set of “Computing Fundamentals” lectures run in the first four weeks of Michealmas to bring people up to speed if they haven’t done any programming before – though these topics don’t really come up that much during the year.

Courses

  • Foundations of Computer Science – A few introductory lectures about programming in general, and then an introduction to the language ML. It’s really unlikely anyone will have used ML before, which puts you on a level playing field. This lecture series teaches functional programming, a different approach to programming than the usual C/Java imperative programming. It can be difficult to get your head round, but just go over the lecture notes a few times after the lectures and try and understand everything there. Coding up the examples in the notes on your own machine will really help. Unfortunately Paulson isn’t incredibly engaging, but his notes are decent.
  • Object-Orientated Programming – Despite the name, this is basically an introduction into Java. This course is a more standard Computer Science course you’d expect from another university, and mainly consists of learning the material –  If you learn the  notes (which are fairly brief) this course will be fine. This gives good experience for part 1b Physics, which has a fair amount of C++ – similar to Java in many ways. Again, coding the examples in the slides will really help you learn the material.
  • Algorithms – This course spans the whole of Lent term, and so there’s enough time to start with basics yet reach some really advanced content by Easter. This ranges from stacks, various sorts, and arrays, to vEB trees and convex hulls. It can be a bit intimidating, but the course gradually ramps up so it’s not that bad. Prof. Leslie supervises this part, which really helped: he’s a great supervisor.
  • Numerical Methods – This course looks at manipulations of floating point numbers, and the errors and approximations made when using them. This course is a bit easier than the others, and most of the maths is fairly simple algebra and some power series. Make sure you understand the basic format of a floating point number when this is brought up, as the rest of the lectures will be hard to understand if you don’t!

Practicals

CS practicals are different to other subjects’. You don’t need to be in the lab at the allotted time to do them: you do need to be there to get them ‘Ticked’ off, so the practicals are often referred to as ‘ticks’. It’s expected that everyone gets all of the ticks they need – NatSci’s won’t have to do all the ones that CompSci’s need. You can do the practicals at home, or at the lab. If you get the practical wrong, you can resubmit it with no penalty – they’re not graded, you just need to complete them all. It’s expected you’ll do one a week, but the department won’t chase you up if you fall behind – quite a few people do and have a horrific few days in Easter catching up. I’d recommend you keep on top of them, for your own peace of mind if nothing else.

The actual practicals can be pretty fun, although the early ML practicals can be annoying due to the ML compiler, which deliberately chuck out uninformative error messages for no reason. The later Java practicals are more enjoyable, especially as you have to email your work to a server which automatically checks it and points out where you went wrong, so you can fix it and resubmit it. The lack of time pressure is great, compared to other 1A practicals which are often very pressured.

If you need it, the lab also has set times where you can go and do the practical with demonstrators (usually PhD students) to help. Collaborating with friends is also encouraged, which all leads to a very relaxed attitude.