Would you enjoy doing an Oxbridge Computer Science course? Does it compare to anything you may have done before? Computer science is constantly advancing the frontier of society, with new programmes and systems being developed every year, so it is difficult to know what the wide span of this subject really encompasses.
To get a feel for the subject, and to see if there are any links to the subjects offered at A-Level standard, here’s a breakdown of the modules you can expect to cover in your first year.
First year Computer Science builds on the maths you may have met at school, including more complex probability, and learning more of the tricks and theories of calculus.
In first year, you will generally study some maths as part of your Computer Science degree, as a stand alone module. It is through this that you will gain the skills required for more advanced computer science modules in the later years. At Oxford, you cover linear Algebra and probability, and they are taught alongside the Pure Mathematicians. You also study discrete and continuous mathematics, where you are exposed to other topics from the Mathematics course, but which have been condensed down and made more relevant to the Computer Science course. These courses generally include multivariable calculus, Taylor’s theorem, and Lagrange multipliers.
At Cambridge, the maths paper makes up 25% of your first year exams, and the maths you are taught is identical to that taught to the Natural Scientists. This course builds upon the topics from A-Level Maths, and although Further Maths A-Level is not a compulsory prerequisite, it does help with this module. The content of this course includes: vector calculus, vector algebra, differential equations, elementary probability theory, and complex numbers.
In your first year studying maths for Computer Science, you are likely to be introduced to formal proof methods; though the focus for Computer Science is on understanding the theorems and proofs, rather than being able to recreate and create proofs yourself, as it is for Maths. Lots of the maths you do in your first year will build upon the maths you did at A-Level, so a good understanding and grasp of this content is crucial.
Multivariable calculus is about extending out rules of calculus you have learnt in the (x,y) plane, to functions that involve more variables. For example, you will learn to take “partial derivatives” of functions such as x=s3+st2and y=s2t where you will find the derivative of x with respect to s, (xs), the derivative of x with respect to t, (xt), and the same for y.
In your first year you will study the design and analysis of algorithms. Algorithms are explored to a certain extent in A-Level Computer Science, but here you will focus more on formulating and understanding algorithms. These skills are more likely to have cropped up if you studied any decision mathematics at A-Level, which appears in the Further Maths course.
Here, you will study the theory behind different algorithms, and how to write and construct different algorithms. This is generally done by hand, not on a computer, so you may use a pseudo code instead of a programming language. The point is to get across an understanding of how the algorithm works, not develop your programming skills. Analysis involves developing and understanding formulae that show how fast and effective the algorithms you have constructed and studied are.
This course is one of the more applied ones, but does incorporate some of the statistical maths you may have been exposed to at school. If you studied Physics A-Level, and enjoyed the electrical circuits element, this course gives you an opportunity to expand that, and to understand in far greater depth how electrical circuits function.
In your first year at Cambridge you will study a digital electronics course, and at Oxford you will study a very similar course, called Digital Systems. This course allows you to explore the simple design of combinational and sequential circuits, and to get to know the standard design elements, such as logic gates. You will get to explore Boolean algebra, the technique used to analyse and simplify digital circuits. With this course, you should reach a point where you are able to design a simple finite state machine yourself, following a specification, and be able to implement this.
For the Cambridge course, you have something called ‘ticks’, which are weekly assignments that you can either do in a lab, or independently in your room. Every week you have a project to complete, and then you must take it to a marker to tick it off. You have to design and construct functioning circuits, including gaining an understanding of MOSFETs (which is a type of transistor, a device used in circuits to amplify or redirect electric signals), to build digital logic circuits.
Combinational Circuits: A combinational circuit is a circuit where the output only depends upon the input. Combinational Circuits are importantly memoryless; that is, the previous state of input does not have any effect on the present state of the circuit.
Sequential Circuits: A sequential circuit has memory, unlike a combinational circuit, so the output can vary based upon previous inputs. This type of circuit uses previous input, output, clock, and a memory element.
Logic Gates: A logic gate is an electric circuit that has one or more input, but essentially only one output. The relationship between the input and the output is based upon a certain logic: and the gates are named as AND gate, OR gate, NOT gate etc, using the language of logic to determine the output.
Boolean Algebra: Boolean Algebra is the branch of algebra in which the variables take the values true or false. These are usually denoted 1 and 0 respectively. Boolean Algebra requires a whole new range of operations to manipulate these truth values.
Functional Programming is touched on in A-Level Computer Science, but not expansively covered.
Functional Programming is about programming in a language, based upon sets of Mathematical equations. This course is done online: at Oxford they use a language called Haskell, and in Cambridge they use a language called OCaml. Lots of this module is proof based, as it is about understanding how the sets of equations make the programme work. An example of a question you would get in an exam on Functional Programming in your First Year is writing a function for differentiating polynomials. You may also have monitored labs, as well as an exam. An example of a first year practical is defining a function to make a 2D maze, and then programming in equations allowing the user to navigate their way out of the maze. In the labs you will be expected to make, and annotate the code that would enable the user to exit the maze.
“If there’s one thing you do over the summer before coming, I would recommend downloading and learning some Haskell.”Second Year Computer Science student
An example of coding from a Functional Programming First Year task, explained:
This extract is a function which performs quick exponentiation. As functional programming is very abstract, you can give this function some integers and it will give you an integer result, or you can give it some matrices along with a definition of matrix multiplication, and it will give you a matrix result. Functional programming is, in fact, so broad that it should work with any sort of mathematical argument (as long as you provide what the multiplication function is: in the first argument ‘f’).
The basics of imperative programming are covered in A Level Computer Science. If you’ve not done A-level Computer Science, but have learnt any programming language, you’ll likely know some of the basics anyway!
Imperative programming focuses upon more standard programming, which you may have been exposed to if you have studied A-Level Computer Science, though the knowledge is not a necessary prerequisite. In this course you learn standard computer science essentials, such as writing algorithms, and writing programmes to perform basic operations, such as raising a matrix to a very high power. This module is likely to involve exploring more of the real world applications of computer science, including an object-orientated programming project. In this you are expected to, in a group, break down programmes into lots of little bits, so that different people work on different parts, and then together you create a complete programme. An example practical might be exploring a simple word processor, where different people implemented different simple operations such as ctrl+z, for undoing the last action.
Here is an example of coding from an imperative programming first year task, explained:
Here we have a section of code from a 2D maze. This part focuses on updating your place in the maze after moving in a certain direction. The datatypes “Direction” and “Place” are defined by the programmer as part of the programme. Direction is any of the four cardinal directions (represented by N, S, E or W) and a place is a square on the grid (represented by its two coordinates).
“I’d say the difference between imperative and functional programming is that imperative programming is about describing a list of steps to take in order to make a calculation, whereas functional is about describing a calculation in terms of combinations of simpler calculations.”Second year Computer Science student, Oxford
The course may also involve exploring applications of computer science to the real world, such as in the software and security engineering course taught at Cambridge. These courses are often more content based, and a matter of revising and learning the content to repeat back in an exam, rather than understanding and developing skills to apply to questions.
As you can see, the Oxbridge Computer Science courses are immensely varied. If you want to understand at the deepest level the cutting edge of technology, or if you want to understand practical applications of the mathematical theorems and algorithms that may have fascinated you at A-Level, then Oxbridge Computer Science could be for you.
If Computer Science sounds interesting to you, then why not check out our carefully curated list of Computer Science further reading?