Computer Science at Oxford
Options in Computer Science
From Computer Science at Oxford
In the second year of the Computer Science degree, students spend 65% of their time on five optional courses.
In the third year, Computer Science students may choose to broaden their knowledge by spending up to 25% of their time on up to two further options that they did not study in their second year.
Students following the Mathematics and Computer Science degree may spend up to 25% of their time in the third year on two of these options.
The options that are offered may vary from year to year as the course develops, and according to the interests of teaching staff. The following examples illustrate the kinds of topic that have been offered recently.
Contents |
Formal Program Design
This course will show you how imperative programs can be developed rigorously from precise, mathematical specifications. In the first course, the emphasis is primarily on refinement of algorithms, including the design of invariants from specifications, and their use in guiding the development of programs with loops. The second course emphasizes data refinement, showing how efficient data structures can be developed from a mathematical specification of an abstract data type. Towards the end of the course, we cover the topic of refining specifications of larger systems. This demonstration shows a problem that can be solved using techniques from the course.
Compilers
This course gives you an introduction to the methods used in compilers to translate high-level programming languages into machine code. The course covers methods for analysing the syntax of programs and creating an abstract syntax tree, followed by type-checking and generating code for an abstract machine. We will also discuss the implementation of procedures with various kinds of parameters.
Databases
Databases are at the heart of modern commercial application development. Their use extends beyond this to many applications and environments where large amounts of data must be stored for efficient update and retrieval. Their principles and fundamental techniques are being extended today to the Web and to novel kinds of data, like XML. The purpose of this course is to provide you with an introduction to the principles of database systems. You will begin by studying database design, covering the entity relationship model, and will then cover the relational data model, relational algebra and SQL. As a newer model, XML and some XML query languages will be covered. You will take a deeper look at database query languages and their connection with logic and with complexity classes. In the second half, we will discuss some database implementation issues such as storage, indexes, query processing, and query optimization.
Advanced Data Structures and Algorithms
This course follows on from Fundamental Algorithms and Data Structures, and covers more advanced and mathematically demanding material connected with the design of highly efficient algorithms and data structures for solving computing problems that are important in applications. This demonstration shows the sort of problem that can be solved with appropriate algorithms and data structures.
Computer Graphics
This is an introductory course in Computer Graphics, and covers a wide range of the field of interactive computer graphics at all levels of abstraction, and with emphasis on both theory and practise. It follows a standard textbook in the field, with additional material used to keep the course up-to-date. You will cover a range of basic graphics techniques, from the generation of graphics on raster output devices to the types of hardware used to display three-dimensional objects. It will be of benefit to anybody who uses computer graphics to display objects or data.
Computer Architecture
This course follows on from Digital Systems by showing you how hardware components can be used to design processors that achieve high performance. Central to the course is the design of pipelined architectures that execute multiple instructions simultaneously, detecting and resolving interactions between instructions dynamically. The course covers the design of instruction sets and different styles of processor implementation, followed by a brief survey of parallel machines that achieve still higher performance.
Computer Networks
In this course you will examine networked computer communications, including the underlying physical media, the representation of data, and the protocols that are used to achieve reliable, error-free transmission, and routing of data in large networks. You will also examine some actual network applications in detail.
