Computer Science

When you study Computer Science at Oxford, the first thing that strikes you is how rigorous it is: right from the start you are focusing on producing programs that don't just work, but can be proven to work. This theme continues throughout the year: you are taught more and more techniques for programming and algorithms, and the first thing you do after being introduced to any concept is to show that it works. The course is taught in three main ways: the bulk of your learning is through lectures (10 hours/week), with lab sessions for about half of the modules. You have 1 or 2 tutorials each week, each of which you spend, on average, three or four hours preparing for. The tutorial is frequently the highlight of the week: most colleges only have a small number of students, so you know them really well and tutorials are therefore an enjoyable affair.

I've always been interested in how computers work, and in the first year, all those reading straight Computer Science (not the joint honours) study Digital Systems, taking you from the logic gates and their construction all the way up to how the internet works. A lot of the courses have clear, logical links and in some ways follow on from each other. This also means that you may see several different approaches to the same problem, from a variety of lecturers, meaning that if you didn't get the problem the first time, you may see it in another light and really "get it". There also is an emphasis on solving practical problems, meaning you not only get the satisfaction of getting the correct answer, but being able to see it elegantly applied to a real-world problem.

The advantage the Oxford course has over the other courses is that it is taught in a very mathematical style, and is focused on the how and why, as opposed to the latest tools. This isn't to say that you don't become familiar with the essentials of the programming trade, and certainly isn't true that you don't get to play with cool hardware (which forms a key part of a second year group project); giving you the ability to learn to produce correct code in pretty much any language simply by reading the documentation.

My favourite course in the first year was functional programming, a style that few have studied before, giving a level playing field. The language is inherently mathematical, with a beauty and elegance that you wouldn't expect to see in a programming language.

The one thing that I wish I knew before starting would be the amount of work to do, as well as the best way to begin tackling it: A-Levels don't prepare you for the level of rigour that's required, so your first few problem sheets are always harder than expected, as you need to go back to the proofs and lemmas and build up from there.

More articles from this author