CST
CST
Contents
Introduction to Part IA 4
Entry to the Computer Science Tripos . . . . . . . . . . . . . . . . . . . . . . . . 4
Computer Science Tripos Part IA . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Natural Sciences Part IA students . . . . . . . . . . . . . . . . . . . . . . . . . . 4
The curriculum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Introduction to Part IB 29
Further Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Group Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Programming in C and C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Semantics of Programming Languages . . . . . . . . . . . . . . . . . . . . . . . 45
Unix Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Introduction to Part II 66
Introduction to Part IA
The only essential GCE A level for admission to Cambridge to read for the Computer
Science Tripos is Mathematics. Further mathematics should be taken if available, and a
physical science (Physics, Chemistry or Geology) is desirable.
Part IA students taking the 75% Computer Science option will attend all lectures for
Papers 1, 2 and 3. In addition they attend the Mathematics course offered for Part IA of the
Natural Sciences Tripos (NST).
Students taking the 50% Computer Science option will take one of the following:
Part IA students accepted to read Computer Science with Mathematics will attend the
lectures for Papers 1 and 2 of the Computer Science Tripos in addition to Papers 1 and 2
of Part IA of the Mathematical Tripos.
Part IA students who take a Natural Science option selected from Chemistry, Evolution
and Behaviour, Physics, and Physiology of Organisms will attend Papers 1 and 2 of the
Computer Science Tripos as well as the Mathematics course offered for Part IA of the
Natural Sciences Tripos (NST).
An A level in a science subject is desirable for students taking an NST option. Computer
Science students taking an NST option are expected to undertake practical work on the
same basis as for the Natural Science Tripos.
There is a Computer Science option in the first year of the Natural Sciences Tripos,
counting as one quarter of the year’s work. Students taking this option should take the
pre-arrival course and attend all the lectures and practicals for Paper 1.
The curriculum
This document lists the courses offered by the Computer Laboratory for Papers 1, 2 and 3
of Part IA of the Computer Science Tripos. Separate booklets give details of the syllabus
for the second- and third-year courses in Computer Science.
The syllabus information given here is for guidance only and should not be considered
definitive. Current timetables can be found at
http://www.cl.cam.ac.uk/teaching/timetables/
For most of the courses listed below, a list of recommended books is given. These are
roughly in order of usefulness, and lecturers have indicated by means of an asterisk those
books which are most recommended for purchase by College libraries.
Computer Science Tripos Part IA 5
The Computer Laboratory Library aims to keep at least one copy of each of the course
texts in “The Booklocker” (see http://www.cl.cam.ac.uk/library/).
For further copies of this booklet and for answers to general enquiries about Computer
Science courses, please get in touch with:
Teaching Administrator
University of Cambridge
Computer Laboratory
William Gates Building
J J Thomson Avenue
Cambridge
CB3 0FD
Aims
The main aim of this course is to present the basic principles of programming. As the
introductory course of the Computer Science Tripos, it caters for students from all
backgrounds. To those who have had no programming experience, it will be
comprehensible; to those experienced in languages such as C, it will attempt to correct
any bad habits that they have learnt.
A further aim is to introduce the principles of data structures and algorithms. The course
will emphasise the algorithmic side of programming, focusing on problem-solving rather
than on hardware-level bits and bytes. Accordingly it will present basic algorithms for
sorting, searching, etc., and discuss their efficiency using O-notation. Worked examples
(such as polynomial arithmetic) will demonstrate how algorithmic ideas can be used to
build efficient applications.
The course will use a functional language (OCaml). OCaml is particularly appropriate for
inexperienced programmers, since a faulty program cannot crash and OCaml’s
unobtrusive type system captures many program faults before execution. The course will
present the elements of functional programming, such as curried and higher-order
functions. But it will also introduce traditional (procedural) programming, such as
assignments, arrays and references.
Lectures
• Lists. Basic list operations. Append. Naı̈ve versus efficient functions for length and
reverse. Strings.
• More on lists. The utilities take and drop. Pattern-matching: zip, unzip. A word on
polymorphism. The “making change” example.
Computer Science Tripos Part IA 7
• Queues and search strategies. Depth-first search and its limitations. Breadth-first
search (BFS). Implementing BFS using lists. An efficient representation of queues.
Importance of efficient data representation.
Objectives
• know the comparative advantages of insertion sort, quick sort and merge sort;
Recommended reading
Aims
Lecture syllabus
• Java Collections and Object Comparison Java Collection interface. Key classes.
Collections class. Iteration options and the use of Iterator. Comparing primitives and
objects. Operator overloading.
• Copying Objects. Shallow and deep copies. Copy constructors. Cloning in Java.
Cloneable as a marker interface in Java.
Objectives
• be familiar with the main features and limitations of the Java language;
• understand how to read Javadoc library documentation and reuse library code.
Recommended reading
No single text book covers all of the topics in this course. For those new to OOP, the best
introductions are usually found in the introductory programming texts for OOP languages
(such as Java, Python or C++). Look for those that are for people new to programming
rather than those that are designed for programmers transitioning between languages (the
Deitel book is highlighted for this reason). The web is also a very useful resource — look
for Java tutorials.
* Deitel, H.M. & Deitel, P.J. (2009). Java: How to Program. Prentice Hall (8th ed.).
Flanagan, D. (2005). Java in a nutshell : a desktop quick reference. O’Reilly (5th ed.).
Flanagan, D. (2004). Java examples in a nutshell : a tutorial companion to Java in a
nutshell. O’Reilly (3rd ed.).
Gamma, E., Helm, R., Johnson, R. & Vlissides, A. (1995). Design patterns: elements of
reusable object-oriented software. Addison-Wesley.
Bloch, J. & Gafter, N. (2005). Java puzzlers. Addison-Wesley.
10 University of Cambridge
Aims
The aims of this course are to present the principles of combinational and sequential
digital logic design and optimisation at a gate level. The use of n and p channel MOSFETs
for building logic gates is also introduced.
Lectures
• Binary adders. Half adder, full adder, ripple carry adder, fast carry generation.
• Synchronous State Machines. Moore and Mealy finite state machines (FSMs).
Reset and self starting. State transition diagrams. Elimination of redundant states.
• Further state machines. State assignment: sequential, sliding, shift register, one
hot. Implementation of FSMs.
• Electronics, Devices and Circuits. Current and voltage, resistance, basic circuit
theory, the potential divider. Solving non-linear circuits. N and p channel MOSFETs
and n-MOSFET logic, e.g., n-MOSFET inverter. Switching speed and power
consumption problems in n-MOSFET logic. CMOS logic. Logic families. Noise
margin. Analogue interfacing and operational amplifiers. [3 lectures]
Objectives
• understand the relationships between combination logic and boolean algebra, and
between sequential logic and finite state machines;
• know how to design a simple finite state machine from a specification and be able to
implement this in gates and edge triggered flip-flops;
• understand the effect of finite load capacitance on the performance of digital logic
circuits.
Recommended reading
* Harris, D.M. & Harris, S.L. (2013). Digital design and computer architecture. Morgan
Kaufmann (2nd ed.). The first edition is still relevant.
Katz, R.H. (2004). Contemporary logic design. Benjamin/Cummings. The 1994 edition is
more than sufficient.
Hayes, J.P. (1993). Introduction to digital logic design. Addison-Wesley.
Books for reference:
Horowitz, P. & Hill, W. (1989). The art of electronics. Cambridge University Press (2nd ed.)
(more analog).
Weste, N.H.E. & Harris, D. (2005). CMOS VLSI Design – a circuits and systems
perspective. Addison-Wesley (3rd ed.).
Mead, C. & Conway, L. (1980). Introduction to VLSI systems. Addison-Wesley.
Crowe, J. & Hayes-Gill, B. (1998). Introduction to digital electronics.
Butterworth-Heinemann.
Gibson, J.R. (1992). Electronic logic circuits. Butterworth-Heinemann.
12 University of Cambridge
Aims
Lectures
• Proof [5 lectures].
Proofs in practice and mathematical jargon. Mathematical statements: implication,
bi-implication, universal quantification, conjunction, existential quantification,
disjunction, negation. Logical deduction: proof strategies and patterns, scratch work,
logical equivalences. Proof by contradiction. Divisibility and congruences. Fermat’s
Little Theorem.
• Numbers [5 lectures].
Number systems: natural numbers, integers, rationals, modular integers. The
Division Theorem and Algorithm. Modular arithmetic. Sets: membership and
comprehension. The greatest common divisor, and Euclid’s Algorithm and Theorem.
The Extended Euclid’s Algorithm and multiplicative inverses in modular arithmetic.
The Diffie-Hellman cryptographic method. Mathematical induction: Binomial
Theorem, Pascal’s Triangle, Fundamental Theorem of Arithmetic, Euclid’s infinity of
primes.
• Sets [9 lectures].
Extensionality Axiom: subsets and supersets. Separation Principle: Russell’s
Paradox, the empty set. Powerset Axiom: the powerset Boolean algebra, Venn and
Hasse diagrams. Pairing Axiom: singletons, ordered pairs, products. Union axiom:
big unions, big intersections, disjoint unions. Relations: composition, matrices,
directed graphs, preorders and partial orders. Partial and (total) functions.
Bijections: sections and retractions. Equivalence relations and set partitions.
Calculus of bijections: characteristic (or indicator) functions. Finite cardinality and
counting. Infinity axiom. Surjections. Enumerable and countable sets. Axiom of
choice. Injections. Images: direct and inverse images. Replacement Axiom:
set-indexed constructions. Set cardinality: Cantor-Schoeder-Bernstein Theorem,
unbounded cardinality, diagonalisation, fixed-points. Foundation Axiom.
Computer Science Tripos Part IA 13
Objectives
Recommended reading
Biggs, N.L. (2002). Discrete mathematics. Oxford University Press (Second Edition).
Davenport, H. (2008). The higher arithmetic: an introduction to the theory of numbers.
Cambridge University Press.
Hammack, R. (2013). Book of proof. Privately published (Second edition). Available at:
http://www.people.vcu.edu/ rhammack/BookOfProof/index.html
Houston, K. (2009). How to think like a mathematician: a companion to undergraduate
mathematics. Cambridge University Press.
Kozen, D.C. (1997). Automata and computability. Springer.
Lehman, E.; Leighton, F.T.; Meyer, A.R. (2014). Mathematics for computer science.
Available on-line.
Velleman, D.J. (2006). How to prove it: a structured approach. Cambridge University
Press (Second Edition).
Paper 3: Databases
Aims
This course introduces basic concepts for database systems as seen from the perspective
of application designers. That is, the focus is on the abstractions supported by database
management systems and not on how those abstractions are implemented.
The database world is currently undergoing swift and dramatic transformations largely
driven by Internet-oriented applications and services. Today many more options are
available to database application developers than in the past and so it is becoming
increasingly difficult to sort fact from fiction. The course attempts to cut through the fog
with a practical approach that emphasises engineering tradeoffs that underpin these
recent developments and also guide our selection of “the right tool for the job.”
This course covers three approaches. First, the traditional mainstay of the database
industry — the relational approach — is described with emphasis on eliminating logical
redundancy in data. Then two representatives of recent trends are presented —
graph-oriented and document-oriented databases. The lectures are tightly integrated with
the associated practical sessions where students gain hands-on experience with all three
of these approaches.
Lectures
Objectives
• understand the fundamental tradeoff between the ease of updating data and the
response time of complex queries
• understand that no single data architecture can be used to meet all data
management requirements
Recommended reading
Lemahieu, W., Broucke, S. van den & Baesens, B. (2018) Principles of database
management. Cambridge University Press.
Aims
To introduce the necessary background, the basic algorithms, and the applications of
computer graphics and graphics hardware.
Lectures
• Graphics hardware and modern OpenGL. GPU rendering. GPU frameworks and
APIs. Vertex processing. Rasterisation. Fragment processing. Working with meshes
and textures. Z-buffer. Double-buffering and frame synchronization. [3 lectures]
Objectives
• describe and explain the following algorithms: Gouraud and Phong shading, z-buffer,
texture mapping, double buffering, mip-map, bump- and normal-mapping;
• implement OpenGL code for rendering of polygonal objects, control camera and
lighting, work with vertex and fragment shaders;
Recommended reading
This is a practical course taken by Part IA CST students only. It is taught through one
introductory lecture, followed by an online course which is equivalent in content to
approximately 5 lectures. Students will normally work though the online component at their
own pace. The course will be entirely examined through practical exercises.
Lecturer: Dr D. Wischik
No. of lectures: 1 (plus an online course with roughly 5 lectures worth of material in the
Lent term)
Suggested hours of supervisions: none
Computer Science Tripos Part IA 17
Aims
Syllabus
• Working with data. Data import. Common ways to summarize and plot data, for
univariate and multivariate analysis.
Objectives
Paper 1: Algorithms
Aims
The aim of this course is to provide an introduction to computer algorithms and data
structures, with an emphasis on foundational material.
Lectures
Objectives
• be able to design new algorithms or modify existing ones for new applications and
reason about the efficiency of the result.
Recommended reading
* Cormen, T.H., Leiserson, C.D., Rivest, R.L. & Stein, C. (2009). Introduction to
Algorithms. MIT Press (3rd ed.). ISBN 978-0-262-53305-8
Sedgewick, R., Wayne, K. (2011). Algorithms. Addison-Wesley. ISBN 978-0-321-57351-3.
Kleinberg, J. & Tardos, É. (2006). Algorithm design. Addison-Wesley. ISBN
978-0-321-29535-4.
Knuth, D.A. (2011). The Art of Computer Programming. Addison-Wesley. ISBN
978-0-321-75104-1.
Aims
The overall aim of this course is to provide a general understanding of the structure and
key functions of the operating system. Case studies will be used to illustrate and reinforce
fundamental concepts.
Lectures
• File management. File concept. Directory and storage services. File names and
meta-data. Directory name-space: hierarchies, DAGs, hard and soft links. File
operations. Access control. Existence and concurrency control. [1 lecture]
• Unix case study. History. General structure. Unix file system: file abstraction,
directories, mount points, implementation details. Processes: memory image, life
cycle, start of day. The shell: basic operation, commands, standard I/O, redirection,
pipes, signals. Character and block I/O. Process scheduling. [2 lectures]
Objectives
• compare and contrast polled, interrupt-driven and DMA-based access to I/O devices.
Computer Science Tripos Part IA 21
Recommended reading
Aims
• Sequence Analysis: Hidden Markov Modelling and its application to a task from
biology (predicting protein interactions with a cell membrane) (4 sessions);
Syllabus
Objectives
• use clustering (i.e., a type of unsupervised machine learning) for detection of cliques
in unstructured networks.
Recommended reading
Jurafsky, D. & Martin, J. (2008). Speech and language processing. Prentice Hall.
Easley, D. and Kleinberg, J. (2010). Networks, crowds, and markets: reasoning about a
highly connected world. Cambridge University Press.
Computer Science Tripos Part IA 23
Aims
Lectures
Part 4 - Applications/Statistics
Objectives
• be familiar with more advanced concepts such as moments, limit theorems and
applications such as parameter estimation
Recommended reading
Aims
This course aims to introduce students to software and security engineering, and in
particular to the problems of building large systems, safety-critical systems and systems
that must withstand attack by capable opponents. Case histories of failure are used to
illustrate what can go wrong, and current software and security engineering practice is
studied as a guide to how failures can be avoided.
Computer Science Tripos Part IA 25
Lectures
• Predicting user behaviour. Predicting and mitigating user errors. The hierarchy of
harms. Attitudes to risk: expected utility, prospect theory, framing, status quo bias,
gender. The characteristics of human memory; forgetting passwords versus
guessing them.
• Security protocols; how to enforce policy using cryptography and structured human
interaction. Man-in-the-middle attacks. The role of verification and its limitations.
• The software crisis. Examples of large-scale project failure, such as the London
Ambulance Service system and the NHS National Programme for IT. Intrinsic
difficulties with complex software.
• The software life cycle. The software life cycle. Getting the specification right;
requirements analysis methods; modular design; the role of prototyping; the waterfall
and spiral models.
• Designing for Testability. Identifying different types of tests and how to use them
effectively. Writing a good unit test; understanding techniques for measuring test
quality.
Objectives
At the end of the course students should know how writing programs with tough assurance
targets, in large teams, or both, differs from the programming exercises they have engaged
in so far. They should understand the different models of software development described
in the course as well as the value of various development and management tools. They
should understand the development life cycle and its basic economics. They should
understand the various types of bugs, vulnerabilities and hazards, how to find them, and
how to avoid introducing them. Finally, they should be prepared for the organizational
aspects of their Part IB group project.
Recommended reading
Aims
The aim of this course is to provide an introduction to interaction design, with an emphasis
on understanding and experiencing the user interface design process from requirements
and data gathering to implementation and evaluation, while gaining an understanding of
the background to human factors. This course focuses equally on design and
implementation.
Computer Science Tripos Part IA 27
Lectures
• Course overview and requirements analysis. Introduction to the course and the
practicals. Identifying potential users and understanding their tasks. Identifying and
establishing non-functional and functional requirements.
• Case studies from the industry. Guest lecture (the schedule of this lecture is
subject to change).
Objectives
• have a thorough understanding of the iterative design process and be able to apply it
to interaction design;
• be able to design new user interfaces that are informed by principles of human visual
perception and cognition;
• be able to construct user interfaces using Java with a strong emphasis on users,
usability and appearance;
• be able to compare and contrast different design techniques and to critique their
applicability to new domains.
Recommended reading
* Preece, J., Rogers, Y. & Sharp, H. (2015). Interaction design. Wiley (4th ed.).
28 University of Cambridge
For general advice about preparing for the Computer Science course at Cambridge and for
details of the pre-arrival course, please see: http://www.cl.cam.ac.uk/freshers/
Computer Science Tripos Part IB 29
Introduction to Part IB
This document lists the courses offered by the Computer Laboratory for Part IB of the
Computer Science Tripos. Separate booklets give details of the syllabus for other Parts of
the Computer Science Tripos.
Some courses are specific to either Paper 3 or Paper 7, and have been marked as such in
this booklet. Those students following the 75% Computer Science option, who have taken
Paper 3 in Part IA, will attend lectures for the Paper 7 courses. Those students taking the
50% Computer Science option, will attend the Paper 3 courses instead. The remaining
courses are taken by all Part IB students.
The syllabus information given here is for guidance only and should not be considered
definitive. Current timetables can be found at
http://www.cl.cam.ac.uk/teaching/timetables/
For most of the courses listed below, a list of recommended books is given. These are
roughly in order of usefulness, and lecturers have indicated by means of an asterisk those
books which are most recommended for purchase by College libraries.
The Computer Laboratory Library aims to keep at least one copy of each of the course
texts in “The Booklocker” (see http://www.cl.cam.ac.uk/library/).
For copies of the other syllabus booklets and for answers to general enquiries about
Computer Science courses, please get in touch with:
Teaching Administrator
University of Cambridge
Computer Laboratory
William Gates Building
J J Thomson Avenue
Cambridge
CB3 0FD
Computer Design
Aims
The aims of this course are to introduce a hardware description language (SystemVerilog)
and computer architecture concepts in order to design computer systems. The parallel
ECAD+Arch practical classes will allow students to apply the concepts taught in lectures.
Lectures
• Pipelining. [2 lectures]
Objectives
• be able to read assembler given a guide to the instruction set and be able to write
short pieces of assembler if given an instruction set or asked to invent an instruction
set;
• understand how GPUs work and have an appreciation of how to program them.
Recommended reading
* Patterson, D.A. & Hennessy, J.L. (2017). Computer organization and design: The
hardware/software interface RISC-V edition. Morgan Kaufmann.
ISBN 978-0-12-812275-4.
32 University of Cambridge
Aims
This course considers two closely related topics, Concurrent Systems and Distributed
Systems, over 16 lectures. The aim of the first half of the course is to introduce
concurrency control concepts and their implications for system design and implementation.
The aims of the latter half of the course are to study the fundamental characteristics of
distributed systems, including their models and architectures; the implications for software
design; some of the techniques that have been used to build them; and the resulting
details of good distributed algorithms and applications.
Lectures: Concurrency
• Deadlock and liveness guarantees Offline vs. online; model checking; resource
allocation graphs; lock order checking; deadlock prevention, avoidance, detection,
and recovery; livelock; priority inversion; priority inheritance.
• Further transactions History graphs; good and bad schedules; isolation vs. strict
isolation; 2-phase locking; rollback; timestamp ordering (TSO); and optimistic
concurrency control (OCC).
• Practical RPC systems; clocks Remote method invocation (RMI); remote classes
vs. serialisable classes; distributed garbage collection; XML-RPC; SOAP and web
services; REST. Physical clocks; UTC; computer clocks; clock synchronisation.
• Consistent cuts, process groups, and mutual exclusion Consistent global state;
consistent cuts. Process groups; FIFO ordering; receiving vs. delivering; causal
ordering; total ordering. Distributed mutual exclusion; central lock servers; token
passing; totally ordered multicast.
Objectives
• understand the need for concurrency control in operating systems and applications,
both mutual exclusion and condition synchronisation;
• understand the concept of transaction; the properties of transactions, how they can
be implemented, and how their performance can be optimised based on optimistic
assumptions;
At the end of the Distributed Systems portion of the course, students should:
• be familiar with various approaches to data and service replication, as well as the
concept of data consistency;
Computer Science Tripos Part IB 35
• understand the effects of large scale on the provision of fundamental services and
the tradeoffs arising from scale;
Recommended reading
* Bacon, J. & Harris, T. (2003). Operating systems: distributed and concurrent software
design. Addison-Wesley.
Bacon, J. (1997). Concurrent systems. Addison-Wesley.
Kleppmann, M. (2017). Designing data-intensive applications. O’Reilly.
Tanenbaum, A.S. & van Steen, M. (2002). Distributed systems. Prentice Hall.
Coulouris, G.F., Dollimore, J.B. & Kindberg, T. (2005, 2001). Distributed systems, concepts
and design. Addison-Wesley (4th, 3rd eds.).
36 University of Cambridge
Aims
The aims of this course are to enable students to apply the concepts learned in the
Computer Design course. In particular a web based tutor is used to introduce the
SystemVerilog hardware description language, while the remaining practical classes will
then allow students to implement the design of components in this language.
Practical Classes
• Web tutor The first class uses a web based tutor to rapidly teach the SystemVerilog
language.
• FPGA design flow Test driven hardware development for FPGA including an
embedded processor and peripherals [3 classes]
Objectives
Recommended reading
* Harris, D.M. & Harris, S.L. (2007). Digital design and computer architecture: from gates
to processors. Morgan Kaufmann.
Pointers to sources of more specialist information are included on the associated course
web page.
Computer Science Tripos Part IB 37
Aims
This course aims to give students an introduction to some basic concepts in economics,
law and ethics.
Lectures
• Game theory. The choice between cooperation and conflict. Prisoners’ Dilemma;
Nash equilibrium; hawk–dove; iterated games; evolution of strategies; application to
biology and computer science.
• Market failure. Asymmetric information: the market for lemons; adverse selection;
moral hazard; signalling; and brands. Transaction costs and the theory of the firm.
Real and virtual networks, supply-side versus demand-side scale economies,
Metcalfe’s law, the dominant firm model, price discrimination. Behavioural
economics: bounded rationality, heuristics and biases.
• Auctions. English auctions; Dutch auctions; all-pay auctions; Vickrey auctions. The
winner’s curse. The revenue equivalence theorem. Mechanism design and the
combinatorial auction. Problems with real auctions. Applicability of auction
mechanisms in computer science.
• Principles of law. Contract and tort; copyright and patent; binding actions; liabilities
and remedies; competition law; choice of law and jurisdiction.
Objectives
At the end of the course students should have a basic appreciation of economic and legal
terminology and arguments. They should understand some of the applications of
economic models to systems engineering and their interest to theoretical computer
science. They should also understand the main constraints that markets, legislation and
ethics place on firms dealing in information goods and services.
Recommended reading
* Shapiro, C. & Varian, H. (1998). Information rules. Harvard Business School Press.
Varian, H. (1999). Intermediate microeconomics – a modern approach. Norton.
Further reading:
Smith, A. (1776). An inquiry into the nature and causes of the wealth of nations, available
at http://www.econlib.org/library/Smith/smWN.html
Thaler, R.H. (2016). Misbehaving. Penguin.
Galbraith, J.K. (1991). A history of economics. Penguin.
Poundstone, W. (1992). Prisoner’s dilemma. Anchor Books.
Pinker, S (2011). The Better Angels of our Nature. Penguin.
Anderson, R. (2008). Security engineering (Chapter 7). Wiley.
Nuffield Council on Bioethics (2015) The collection, linking and use of data in biomedical
research and health care.
Aims
This course introduces fundamental tools for describing and reasoning about data. There
are two themes: describing the behaviour of random systems; and making inferences
based on data generated by such systems. The course will survey a wide range of models
and tools, and it will emphasize how to design a model and what sorts of questions one
might ask about it.
Computer Science Tripos Part IB 39
Lectures
• Feature spaces. Vector spaces, bases, inner products, projection. Model fitting as
projection. Linear modeling. Choice of features.
Objectives
• be familiar with common random variables and their uses, and with the use of
empirical distributions rather than formulae
• understand different types of inference about noisy data, including model fitting,
hypothesis testing, and making predictions
Recommended reading
* F.M. Dekking, C. Kraaikamp, H.P. Lopuhaä, L.E. Meester (2005). A modern introduction
to probability and statistics: understanding why and how. Springer.
S.M. Ross (2002). Probability models for computer science. Harcourt / Academic Press.
M. Mitzenmacher & E. Upfal (2005). Probability and computing: randomized algorithms
and probabilistic analysis. Cambridge University Press.
40 University of Cambridge
Aims
This course explores the modern state of computer graphics, applying long-standing
techniques to cutting-edge hardware.
Lectures
• Bezier curves and NURBS. These points of data make a beautiful line. [2 lectures]
• Virtual Reality. Technology and best practices for an emerging medium. [1 lecture]
Objectives
• use graphics hardware to render interactive images, both polygonal and implicit;
• understand the core technologies of ray tracing, rendering, and implicit surfaces;
• describe the underlying theory of splines and subdivision and define the
Catmull-Clark and Doo-Sabin subdivision methods;
Recommended reading
Students should expect to refer to one or more of these books, but should not find it
necessary to purchase any of them.
* Shirley, P. & Marschner, S. (2009). Fundamentals of Computer Graphics. CRC Press
(3rd ed.).
Watt, A. (2000). 3D Computer Graphics. Addison-Wesley (3rd ed).
Hughes, van Dam, McGuire, Skalar, Foley, Feiner & Akeley (2013). Computer Graphics:
Principles & Practice. Addison-Wesley (3rd edition)
Akenine-Möller, et. al. (2018). Real-time rendering. CRC Press (4th ed.).
Further Java
Aims
The goal of this course is to provide students with the ability to understand the advanced
programming features available in the Java programming language, completing the
coverage of the language started in the Programming in Java course. The course is
designed to accommodate students with diverse programming backgrounds; consequently
Java is taught from first principles in a practical class setting where students can work at
their own pace from a course handbook. Each practical class will culminate in an
assessed exercise.
Practical classes
• Serialisation, reflection and class loaders. This class will introduce object
serialisation. Students will use a class loader and reflection to inspect an object
which is only available at run-time.
• Vector clocks. This week students will use the concept of vector clocks to make
their client and server robust to message delays and reordering.
Objectives
Recommended reading
Group Project
Aims
The aim of this course is to give students a realistic introduction to software development
as practised in industry. This means working to rigid deadlines, with a team of colleagues
not of one’s own choosing, having to satisfy an external client that a design brief has been
properly interpreted and implemented, all within the constraints of limited effort and
technical resources.
Computer Science Tripos Part IB 43
Lectures
Objectives
• have gained confidence in their ability to develop significant software projects and
Part IB students should be prepared for the personal project they will undertake in
Part II.
Aims
The aims of this course are to provide a solid introduction to programming in C and to
provide an overview of the principles and constraints that affect the way in which the C
programming language has been designed and is used, including the differences
betweeen it and C++.
44 University of Cambridge
Lectures
Objectives
• understand the interaction between C programs and the host operating system;
Recommended reading
* Kernighan, B.W. & Ritchie, D.M. (1988). The C programming language. Prentice Hall
(2nd ed.).
Computer Science Tripos Part IB 45
Lecturer: Dr N. Krishnaswami
No. of lectures: 12
Suggested hours of supervisions: 3
This course is a prerequisite for the Part II courses Topics in Concurrency, Hoare Logic
and Model Checking and Types.
Aims
The aim of this course is to introduce the structural, operational approach to programming
language semantics. It will show how to specify the meaning of typical programming
language constructs, in the context of language design, and how to reason formally about
semantic properties of programs.
Lectures
• Types. Introduction to formal type systems. Typing for the simple imperative
language. Statements of desirable properties. [2 lectures]
• Data. Semantics and typing for products, sums, records, references. [1 lecture]
Objectives
Recommended reading
Unix Tools
Aims
This video-lecture course gives students who have already basic Unix/Linux experience
some additional practical software-engineering knowledge: how to use the shell and
related tools as an efficient working environment, how to automate routine tasks, and how
version-control and automated-build tools can help to avoid confusion and accidents,
especially when working in teams. These are essential skills, both in industrial software
development and student projects.
Lectures
• Unix concepts. Brief review of Unix history and design philosophy, documentation,
terminals, inter-process communication mechanisms and conventions, shell,
command-line arguments, environment variables, file descriptors.
• Scripting. Plain-text formats, executables, #!, shell control structures and functions.
Startup scripts.
Computer Science Tripos Part IB 47
• Text, file and networking tools. sed, grep, chmod, find, ssh, rsync, tar, zip, etc.
Objectives
• appreciate how simple tools can be combined to perform a large variety of tasks;
• be familiar with the most common tools, file formats and configuration practices;
• appreciate how using a version-control system and fully automated build processes
help to maintain reproducibility and audit trails during software development;
• know enough about basic development tools to be able to install, modify and debug
C source code;
• have understood the main concepts of, and gained initial experience in, writing Perl
scripts (excluding the facilities for object-oriented programming).
Recommended reading
Compiler Construction
Aims
This course aims to cover the main concepts associated with implementing compilers for
programming languages. We use a running example called SLANG (a Small LANGuage)
inspired by the languages described in 1B Semantics. A toy compiler (written in ML) is
provided, and students are encouraged to extend it in various ways.
Lectures
Objectives
At the end of the course students should understand the overall structure of a compiler,
and will know significant details of a number of important techniques commonly used.
They will be aware of the way in which language features raise challenges for compiler
builders.
Recommended reading
* Aho, A.V., Sethi, R. & Ullman, J.D. (2007). Compilers: principles, techniques and tools.
Addison-Wesley (2nd ed.).
Mogensen, T. Æ. (2011). Introduction to compiler design. Springer.
http://www.diku.dk/ torbenm/Basics.
Computation Theory
Aims
The aim of this course is to introduce several apparently different formalisations of the
informal notion of algorithm; to show that they are equivalent; and to use them to
demonstrate that there are uncomputable functions and algorithmically undecidable
problems.
Lectures
• Universal register machine. Natural number encoding of pairs and lists. Coding
register machine programs as numbers. Specification and implementation of a
universal register machine. [2 lectures]
50 University of Cambridge
Objectives
• be familiar with the register machine, Turing machine and lambda-calculus models of
computability;
• understand the mathematical notion of partial recursive function and its relationship
to computability.
Recommended reading
* Hopcroft, J.E., Motwani, R. & Ullman, J.D. (2001). Introduction to automata theory,
languages, and computation. Addison-Wesley (2nd ed.).
* Hindley, J.R. & Seldin, J.P. (2008). Lambda-calculus and combinators, an introduction.
Cambridge University Press (2nd ed.).
Cutland, N.J. (1980). Computability: an introduction to recursive function theory.
Cambridge University Press.
Davis, M.D., Sigal, R. & Weyuker, E.J. (1994). Computability, complexity and languages.
Academic Press (2nd ed.).
Sudkamp, T.A. (2005). Languages and machines. Addison-Wesley (3rd ed.).
Computer Science Tripos Part IB 51
Computer Networking
Aims
The aim of this course is to introduce key concepts and principles of computer networks.
The course will use a top-down approach to study the Internet and its protocol stack.
Instances of architecture, protocol, application-examples will include email, web and
media-streaming. We will cover communications services (e.g., TCP/IP) required to
support such network applications. The implementation and deployment of
communications services in practical networks: including wired and wireless LAN
environments, will be followed by a discussion of issues of network-management.
Throughout the course, the Internet’s architecture and protocols will be used as the
primary examples to illustrate the fundamental principles of computer networking.
Lectures
• Link layer and local area networks. Link layer services, error detection and
correction, Multiple Access Protocols, link layer addressing, Ethernet, hubs and
switches, Point-to-Point Protocol. [2 lectures]
• Wireless and mobile networks. Wireless links and network characteristics, Wi-Fi:
IEEE 802.11 wireless LANs. [1 lecture]
• Network layer addressing. Network layer services, IP, IP addressing, IPv4, DHCP,
NAT, ICMP, IPv6. [3 lectures]
• Network layer routing. Routing and forwarding, routing algorithms, routing in the
Internet, multicast. [3 lectures]
Objectives
• have an informed view of both the internal workings of the Internet and of a number
of common Internet applications and protocols.
Recommended reading
* Peterson, L.L. & Davie, B.S. (2011). Computer networks: a systems approach. Morgan
Kaufmann (5th ed.). ISBN 9780123850591
Kurose, J.F. & Ross, K.W. (2009). Computer networking: a top-down approach.
Addison-Wesley (5th ed.).
Comer, D. & Stevens, D. (2005). Internetworking with TCP-IP, vol. 1 and 2. Prentice Hall
(5th ed.).
Stevens, W.R., Fenner, B. & Rudoff, A.M. (2003). UNIX network programming, Vol.I: The
sockets networking API. Prentice Hall (3rd ed.).
Aims
Lectures
• Theory driven approaches to HCI. What is a theory in HCI? Why take a theory
driven approach to HCI?
• Design of visual displays. Segmentation and variables of the display plane.
Modes of correspondence.
• Goal-oriented interaction. Using cognitive theories of planning, learning and
understanding to understand user behaviour, and what they find hard.
• Designing smart systems. Using statistical methods to anticipate user needs and
actions with Bayesian strategies.
• Designing efficient systems. Measuring and optimising human performance
through quantitative experimental methods.
• Designing meaningful systems. Qualitative research methods to understand
social context and requirements of user experience.
• Evaluating interactive system designs. Approaches to evaluation in systems
research and engineering, including Part II Projects.
• Designing complex systems. Worked case studies of applying the theories to a
hard HCI problem. Research directions in HCI.
Objectives
At the end of the course students should be able to apply theories of human performance
and cognition to system design, including selection of appropriate techniques to analyse,
observe and improve the usability of a wide range of technologies.
Recommended reading
* Preece, J., Sharp, H. & Rogers, Y. (2015). Interaction design: beyond human–computer
interaction. Wiley (Currently in 4th edition, but earlier editions will suffice).
Further reading:
Carroll, J.M. (ed.) (2003). HCI models, theories and frameworks: toward a
multi-disciplinary science. Morgan Kaufmann.
Aims
This course will teach logic, especially the predicate calculus. It will present the basic
principles and definitions, then describe a variety of different formalisms and algorithms
that can be used to solve problems in logic. Putting logic into the context of Computer
Science, the course will show how the programming language Prolog arises from the
automatic proof method known as resolution. It will introduce topics that are important in
mechanical verification, such as binary decision diagrams (BDDs), SAT solvers and modal
logic.
Lectures
• Modal logics. Possible worlds semantics. Truth and validity. A Hilbert-style proof
system. Sequent calculus rules.
Objectives
• understand the relationships among the various calculi, e.g. SAT solving, resolution
and Prolog;
Recommended reading
* Huth, M. & Ryan, M. (2004). Logic in computer science: modelling and reasoning about
systems. Cambridge University Press (2nd ed.).
Ben-Ari, M. (2001). Mathematical logic for computer science. Springer (2nd ed.).
Paper 7: Prolog
Aims
The aim of this course is to introduce programming in the Prolog language. Prolog
encourages a different programming style to Java or ML and particular focus is placed on
programming to solve real problems that are suited to this style. Practical experimentation
with the language is strongly encouraged.
Lectures
• Introduction to Prolog. The structure of a Prolog program and how to use the
Prolog interpreter. Unification. Some simple programs.
56 University of Cambridge
• Arithmetic and lists. Prolog’s support for evaluating arithmetic expressions and
lists. The space complexity of program evaluation discussed with reference to
last-call optimisation.
• Backtracking, cut, and negation. The cut operator for controlling backtracking.
Negation as failure and its uses.
• Search and cut. Prolog’s search method for solving problems. Graph searching
exploiting Prolog’s built-in search mechanisms.
Objectives
• appreciate the unique perspective Prolog gives to problem solving and algorithm
design;
• understand how larger programs can be created using the basic programming
techniques used in this course.
Recommended reading
Artificial Intelligence
Aims
The aim of this course is to provide an introduction to some fundamental issues and
algorithms in artificial intelligence (AI). The course approaches AI from an algorithmic,
computer science-centric perspective; relatively little reference is made to the
complementary perspectives developed within psychology, neuroscience or elsewhere.
The course aims to provide some fundamental tools and algorithms required to produce AI
systems able to exhibit limited human-like abilities, particularly in the form of problem
solving by search, game-playing, representing and reasoning with knowledge, planning,
and learning.
Lectures
• Search II. More sophisticated heuristic search algorithms. The A* algorithm and its
properties. Improving memory efficiency: the IDA* and recursive best first search
algorithms. Local search and gradient descent. [1 lecture]
• Knowledge representation and reasoning I. How can we represent and deal with
commonsense knowledge and other forms of knowledge? Semantic networks,
frames and rules. How can we use inference in conjunction with a knowledge
representation scheme to perform reasoning about the world and thereby to solve
problems? Inheritance, forward and backward chaining. [1 lecture]
• Planning I. Methods for planning in advance how to solve a problem. The STRIPS
language. Achieving preconditions, backtracking and fixing threats by promotion or
demotion: the partial-order planning algorithm. [1 lecture]
Objectives
• appreciate the distinction between the popular view of the field and the actual
research results;
• appreciate the fact that the computational complexity of most AI problems requires
us regularly to deal with approximate techniques;
Recommended reading
For some of the material you might find it useful to consult more specialised texts, in
particular:
Dechter, R. (2003). Constraint processing. Morgan Kaufmann.
Cawsey, A. (1998). The essence of artificial intelligence. Prentice Hall.
Ghallab, M., Nau, D. & Traverso, P. (2004). Automated planning: theory and practice.
Morgan Kaufmann.
Bishop, C.M. (2006). Pattern recognition and machine learning. Springer.
Brachman, R.J & Levesque, H.J. (2004). Knowledge Representation and Reasoning.
Morgan Kaufmann.
Complexity Theory
Aims
The aim of the course is to introduce the theory of computational complexity. The course
will explain measures of the complexity of problems and of algorithms, based on time and
space used on abstract models. Important complexity classes will be defined, and the
notion of completeness established through a thorough study of NP-completeness.
Applications to cryptography will be considered.
Lectures
• Time and space. Models of computation and measures of complexity. Time and
space complexity on a Turing machine. Decidability and complexity.
• coNP. Validity of boolean formulae and its completeness. NP ∩ coNP. Primality and
factorisation.
• Hierarchy. The time and space hierarchy theorems and complete problems.
Objectives
Recommended reading
Aims
The general aim of this course is to provide an overview of the basic concepts that appear
in modern programming languages, the principles that underlie the design of programming
languages, and their interaction.
Lectures
• The ancestors: Fortran, Lisp, Algol and Pascal. Key ideas: procedural (Fortran),
declarative (Lisp), block structured (Algol and Pascal). Execution models (abstract
machines), data types, control structures, storage, arrays and pointers, procedures
and forms of parameter passing, scope, strict and lazy evaluation, garbage
collection. Programs as data (Lisp).
Objectives
• be familiar with several language paradigms and how they relate to different
application domains;
Recommended reading
Books:
* Mitchell, J.C. (2003). Concepts in programming languages. Cambridge University Press.
* Scott, M.L. (2009). Programming language pragmatics. Morgan Kaufmann.
Odersky, M. (2008). Scala by example. Programming Methods Laboratory, EPFL.
Pratt, T.W. & Zelkowitz, M.V. (2001). Programming languages: design and implementation.
Prentice Hall.
Papers:
Kay, A.C. (1993). The early history of Smalltalk. ACM SIGPLAN Notices, Vol. 28, No. 3.
Kernighan, B. (1981). Why Pascal is not my favorite programming language. AT&T Bell
Laboratories. Computing Science Technical Report No. 100.
Koenig, A. (1994). An anecdote about ML type inference. USENIX Symposium on Very
High Level Languages.
Landin, P.J. (1966). The next 700 programming languages. Communications of the ACM,
Vol. 9, Issue 3.
Odersky, M. et al. (2006). An overview of the Scala programming language. Technical
Report LAMP-REPORT-2006-001, Second Edition.
McCarthy, J. (1960). Recursive functions of symbolic expressions and their computation
by machine. Communications of the ACM, 3(4):184–195.
Stroustrup, B. (1991). What is Object-Oriented Programming? (1991 revised version).
Proceedings 1st European Software Festival.
Aims
This course studies formal models of language and considers how they might be relevant
to the processing and acquisition of natural languages. The course will extend knowledge
of formal language theory; introduce several new grammars; and use concepts from
information theory to describe natural language.
Lectures
• Natural language and the Chomsky hierarchy 2. Pumping lemma for context free
languages. Discussion of relevance (or not) to natural languages (example
Swiss-German cross serial dependancies). Properties of minimally context sensitive
languages. Introduction to tree adjoining grammars.
• Vector space models and word vectors. Introduction to word vectors (example
Word2Vec). Word vectors as predictors for semantic language processing.
Objectives
• understand how known natural languages relate to formal languages in the Chomsky
hierarchy;
64 University of Cambridge
Recommended reading
* Jurafsky, D. & Martin, J. (2008). Speech and language processing. Prentice Hall.
Manning, C.D. & Schutze, H. (1999) Foundations of statistical natural language
processing. MIT Press.
Ruslan, M. (2003) The Oxford handbook of computational linguistics. Oxford University
Press.
Clark, A., Fox, C. & Lappin, S. (2010) The handbook of computational linguistics and
natural language processing. Wiley-Blackwell.
Kozen, D. (1997) Automata and computibility. Springer.
Security
Aims
Lectures
• POSIX discretionary access control. User and group databases and identifiers,
file permission modes, ownership rights, sticky bit, group inheritance, set-uid,
elevation of privileges, root user, NFS root squash, chroot, POSIX.1e ACLs.
• Web security. HTTP basics, HTTP authentication, cookies, single sign-on (Ucam
WebAuth, SAML), delegation (OAuth2), JavaScript, cross-site scripting, cross-site
request forgery, same-origin policy, CORS.
Objectives
By the end of the course, students should appreciate the importance of adversarial
thinking in systems design and have a good overview of the security mechanisms and
attributes of some of the most commonly used operating systems, networking
infrastructure and Internet applications. They should also understand commonly exploited
vulnerabilities of authentication mechanisms and know how to avoid some common
security pitfalls in software development.
Recommended reading
Introduction to Part II
This document lists the courses offered by the Computer Laboratory for Part II of the
Computer Science Tripos. Separate booklets give details of the syllabus for other Parts of
the Computer Science Tripos.
Students taking the Part II 50% option of the CST will read papers 7, 8 and 9 and submit a
dissertation. Each of these four is marked out of 100 giving a total available credit in Part II
of 400 marks. Alternatively, those taking the Part II 75% option will take papers 8, 9,
submit a dissertation, and offer two units of assessment.
Some courses are specific to either Paper 7 or are Units of Assessment, and have been
marked as such in this booklet. Those students following the 75% Computer Science
option, who have taken Paper 7 in Part II, will additionally choose two of the units of
assessment. Those students taking the 50% Computer Science option, will attend the
Paper 7 courses instead, full details of which can be found in the Part IB booklet. The
remaining courses can be chosen by all Part II students.
The taught modules in Part II are examined in papers 7, 8 and 9 and you answer five
questions from each paper. There are no restrictions on which questions you answer. The
layout of the papers is announced just before the Michaelmas term starts, but it is
generally mostly the same as in previous years, varying only to accomodate new,
withdrawn or suspended courses. The units are assessed in a variety of ways, and details
can be found in the course descriptions.
It is up to you to make sure you read sufficient courses to be able to answer five questions
on each of the papers. Generally, you should aim to be able to answer at least six
questions on each paper. You are certainly not expected to go to all the Part II lectures
and be able to answer all of the questions on every paper — that would be more or less
impossible.
Here is a suggestion for how to plan your courses: In September, just before the start of
the year, look through the course list and strike out any course you know you won’t do (i.e.
remove the definite ‘no’s - there are always some). Then attend the first lecture of every
Part II course to get the feel for it and make a decision on whether to continue after
checking that dropping the course doesn’t leave you short on any paper. Work on the
basis of being able to answer 6 questions, with a 7th as a backup where you are confident
of scoring half marks (but probably no more).
It is the duty of your Director of Studies to advise you in course selection so do ask for
guidance.
The syllabus information given here is for guidance only and should not be considered
definitive. Current timetables can be found at
http://www.cl.cam.ac.uk/teaching/timetables/
For most of the courses listed below, a list of recommended books is given. These are
roughly in order of usefulness, and lecturers have indicated by means of an asterisk those
books which are most recommended for purchase by College libraries.
The Computer Laboratory Library aims to keep at least one copy of each of the course
texts in “The Booklocker” (see http://www.cl.cam.ac.uk/library/).
Computer Science Tripos Part II 67
For copies of the other syllabus booklets and for answers to general enquiries about
Computer Science courses, please get in touch with:
Teaching Administrator
University of Cambridge
Computer Laboratory
William Gates Building
J J Thomson Avenue
Cambridge
CB3 0FD
Aims
Advanced Graphics covers topics related to processing, perception and display of images.
The focus of the course is on the algorithms behind new emerging display technologies,
such as virtual reality, augmented reality, and high dynamic range displays. It
complements two computer graphics courses, Introduction to Graphics and Further
Graphics, by introducing problems that became the part of graphics pipeline:
tone-mapping, post-processing, displays and models of visual perception.
Lectures
• High Dynamic Range and tone mapping: dynamic range, display model, methods
of tone-mapping.
Objectives
• describe the limitations of the visual system and how those limitation can be
exploited in computer graphics and image processing.
Recommended reading
Hainich, R. & Bimber, O. (2016) Displays: Fundamentals and Applications. CRC Press
(2nd ed.).
Boreskov, A. & Shikin, E. (2013) Computer Graphics: From Pixels to Programmable
Graphics Hardware. CRC Press.
Reinhard, E., et. al. (2010) High Dynamic Range Imaging: Acquisition, Display, and
Image-Based Lighting. Morgan Kaufmann (2nd ed.).
Bioinformatics
Aims
This course focuses on algorithms used in Bioinformatics and System Biology. Most of the
algorithms are general and can be applied in other fields on multidimensional and noisy
data. All the necessary biological terms and concepts useful for the course and the
examination will be given in the lectures. The most important software implementing the
described algorithms will be demonstrated.
Lectures
• Hidden Markov Models. The Viterbi algorithm, profile HMMs for sequence
alignment, classifying proteins with profile HMMs, soft decoding problem,
Baum-Welch learning. (Vol. 2, chapter 10)
Objectives
Recommended reading
Business Studies
Aims
How to start and run a computer company; the aims of this course are to introduce
students to all the things that go to making a successful project or product other than just
the programming. The course will survey some of the issues that students are likely to
encounter in the world of commerce and that need to be considered when setting up a
new computer company.
See also Business Seminars in the Easter Term.
Lectures
• So you’ve got an idea? Introduction. Why are you doing it and what is it? Types of
company. Market analysis. The business plan.
• Money and tools for its management. Introduction to accounting: profit and loss,
cash flow, balance sheet, budgets. Sources of finance. Stocks and shares. Options
and futures.
• Setting up: legal aspects. Company formation. Brief introduction to business law;
duties of directors. Shares, stock options, profit share schemes and the like.
Intellectual Property Rights, patents, trademarks and copyright. Company culture
and management theory.
• People. Motivating factors. Groups and teams. Ego. Hiring and firing: employment
law. Interviews. Meeting techniques.
• Project planning and management. Role of a manager. PERT and GANTT charts,
and critical path analysis. Estimation techniques. Monitoring.
• Marketing and selling. Sales and marketing are different. Marketing; channels;
marketing communications. Stages in selling. Control and commissions.
• Growth and exit routes. New markets: horizontal and vertical expansion. Problems
of growth; second system effects. Management structures. Communication. Exit
routes: acquisition, floatation, MBO or liquidation. Futures: some emerging ideas for
new computer businesses. Summary. Conclusion: now you do it!
Objectives
• appreciate the differences between profitability and cash flow, and have some notion
of budget estimation;
72 University of Cambridge
• have an outline view of company formation, share structure, capital raising, growth
and exit routes;
Recommended reading
Lang, J. (2001). The high-tech entrepreneur’s handbook: how to start and run a high-tech
company. FT.COM/Prentice Hall.
Students will be expected to be able to use Microsoft Excel and Microsoft Project.
For additional reading on a lecture-by-lecture basis, please see the course website.
Students are strongly recommended to enter the CU Entrepreneurs Business Ideas
Competition http://www.cue.org.uk/
Aims
The course will develop core areas of Data Science (eg. models for regression and
classification) from several perspectives: conceptual formulation and properties, solution
algorithms and their implementation, data visualization for exploratory data analysis and
the effective presentation of modelling outputs. The lectures will be complemented by
practical classes using Python, scikit-learn and TensorFlow.
Lectures
• Practical: Classification I
• Practical: Classification II
• Practical: Visualization
• Challenges in Data Science. Summary of the course, ethics and privacy in data
science, P-hacking, look-everywhere effect, bias in the training data, interpretability,
information about the hand out test.
Objectives
Recommended reading
Denotational Semantics
Aims
The aims of this course are to introduce domain theory and denotational semantics, and to
show how they provide a mathematical basis for reasoning about the behaviour of
programming languages.
Lectures
• Least fixed points. Complete partial orders (cpos) and least elements. Continuous
functions and least fixed points.
• Scott induction. Chain-closed and admissible subsets of cpos and domains. Scott’s
fixed-point induction principle.
• Full abstraction. Failure of full abstraction for the domain model. PCF with
parallel or.
Objectives
• understand the issues concerning the relation between denotational and operational
semantics, adequacy and full abstraction, especially with respect to the
language PCF.
Recommended reading
The whole course is for Part II 75% students, while Part II 50% students can take one
question in Paper 7 about part 1 of this course.
Lecturer: Dr M.G. Kuhn
No. of lectures: 16
Prerequisite courses: Mathematical Methods I and III from the NST Mathematics course
(or equivalent), LaTeX and MATLAB (recommended).
Aims
This course teaches the basic signal-processing principles necessary to understand many
modern high-tech systems, with application examples focussing on audio processing,
audio and image coding, and communication systems. Students will gain practical
experience from numerical experiments in programming assignments (in MATLAB, NumPy
or Julia).
76 University of Cambridge
Lectures
Part 1 (about 9–10 lectures) focusses on basic theory and audio applications.
• Signals and systems. Discrete sequences and systems: types and properties.
Amplitude, phase, frequency, modulation, decibels, root-mean square. Linear
time-invariant systems, convolution. Some examples from electronics, optics and
acoustics.
• Dirac’s delta function. Fourier representation of sine waves, impulse combs in the
time and frequency domain. Amplitude-modulation in the frequency domain.
Part 2 (about 6–7 lectures) adds material on software-defined radio techniques, statistical
signals, audio-visual signal compression and linear feedback control systems.
Objectives
By the end of part 2, students should be able to discuss and explain many fundamental
concepts of techniques commonly used in digital communication systems in terms of the
concepts introduced in part 1.
Recommended reading
* Lyons, R.G. (2010). Understanding digital signal processing. Prentice Hall (3rd ed.).
Oppenheim, A.V. & Schafer, R.W. (2007). Discrete-time digital signal processing.
Prentice Hall (3rd ed.).
Stein, J. (2000). Digital signal processing – a computer science perspective. Wiley.
Information Theory
Aims
This course introduces the principles and applications of information theory: how
information is measured in terms of probability and various entropies, how these are used
to calculate the capacity of communication channels, with or without noise, and to
measure how much random variables reveal about each other. Coding schemes including
error correcting codes are studied along with data compression, spectral analysis,
transforms, and wavelet coding. Applications of information theory are reviewed, from
astrophysics to pattern recognition.
Lectures
• Entropies defined, and why they are measures of information. Marginal joint
and conditional entropy; chain rule for entropy. Cross-entropy and distances
between distributions. Mutual information between random variables. Why entropy
gives fundamental measures of information content.
Objectives
• calculate the information content of a random variable from its probability distribution;
• relate the joint, conditional, and marginal entropies of variables in terms of their
coupled probabilities;
• describe compression schemes, and efficient coding using wavelets and other
representations for data.
80 University of Cambridge
Recommended reading
* Cover, T.M. & Thomas, J.A. (2006). Elements of information theory. New York: Wiley.
Aims
Lectures
• MATLAB. Tools for technical computing and visualization. The matrix type and its
operators, 2D/3D plotting, common functions, function definitions, toolboxes,
vectorized audio demonstration.
Objectives
Students should be able to avoid the most common LATEX mistakes, to prototype simple
image and signal processing algorithms in MATLAB, and to visualize the results.
Recommended reading
Aims
In recent years multiprocessors have become ubiquitous, but building reliable concurrent
systems with good performance remains very challenging. The aim of this module is to
introduce some of the theory and the practice of concurrent programming, from hardware
memory models and the design of high-level programming languages to the correctness
and performance properties of concurrent algorithms.
Lectures
• Research topics, likely to include one hour on transactional memory and one guest
lecture. [1 block]
82 University of Cambridge
Objectives
Recommended reading
Aims
Lectures
Objectives
• be able to discuss the current and likely future performance of several NLP
applications;
• understand how these techniques draw on and relate to other areas of computer
science.
Recommended reading
* Jurafsky, D. & Martin, J. (2008) Speech and language processing. Prentice Hall.
84 University of Cambridge
Principles of Communications
Aims
This course aims to provide a detailed understanding of the underlying principles for how
communications systems operate. Practical examples (from wired and wireless
communications, the Internet, and other communications systems) are used to illustrate
the principles.
Lectures
• The big picture for managing traffic. Economics and policy are relevant to
networks in many ways. Optimisation and game theory are both relevant topics
discussed here. [2 lectures]
Objectives
At the end of the course students should be able to explain the underlying design and
behaviour of protocols and networks, including capacity, topology, control and use. Several
specific mathematical approaches are covered (control theory, optimisation).
Computer Science Tripos Part II 85
Recommended reading
Types
Lecturer: Dr N. Krishnaswami
No. of lectures: 12
suggested hours of supervisions: 3
Prerequisite courses: Computation Theory, Semantics of Programming Languages
Aims
The aim of this course is to show by example how type systems for programming
languages can be defined and their properties developed, using techniques that were
introduced in the Part IB course on Semantics of Programming Languages. The emphasis
is on type systems for functional languages and their connection to constructive logic.
Lectures
• Monads and effects. Explicit versus implicit effects. Using monadic types to control
effects. References and polymorphism. Recursion and looping. [2 lectures]
Objectives
• be able to use a rule-based specification of a type system to carry out type checking
and type inference;
Recommended reading
Aims
This module aims to teach students the fundamentals of Cloud Computing covering topics
such as virtualization, data centres, cloud resource management, cloud storage and
popular cloud applications including batch and data stream processing. Emphasis is given
on the different backend technologies to build and run efficient clouds and the way clouds
are used by applications to realise computing on demand. The course will include practical
tutorials on cloud infrastructure technologies. Students will be assessed via a Cloud-based
coursework project.
Lectures
• Data centres
• Virtualization I
• Virtualization II
• MapReduce
• MapReduce advanced
• Cloud storage
Objectives
• know how popular applications such as batch and data stream processing run
efficiently on clouds;
Recommended reading
Comparative Architectures
Aims
This course examines the techniques and underlying principles that are used to design
high-performance computers and processors. Particular emphasis is placed on
understanding the trade-offs involved when making design decisions at the architectural
level. A range of processor architectures are explored and contrasted. In each case we
examine their merits and limitations and how ultimately the ability to scale performance is
restricted.
Computer Science Tripos Part II 89
Lectures
Objectives
• appreciate what constrains the design process and how architectural trade-offs are
made within these constraints;
• for the architectures discussed, understand what ultimately limits their performance
and application domain.
90 University of Cambridge
Recommended reading
Computer Vision
Aims
The aims of this course are to introduce the principles, models and applications of
computer vision, as well as some mechanisms used in biological visual systems that may
inspire design of artificial ones. The course will cover: image formation, structure, and
coding; edge and feature detection; neural operators for image analysis; texture, colour,
stereo, and motion; wavelet methods for visual coding and analysis; interpretation of
surfaces, solids, and shapes; probabilistic classifiers; visual inference, recognition, and
learning.
Lectures
• Goals of computer vision; why they are so difficult. Image formation, and the
ill-posed problem of making 3D inferences about objects and their properties from
images.
• Image sensing, pixel arrays, CCD and CMOS cameras. Image coding and
information measures. Elementary operations on image arrays.
• Lessons from neurological trauma and visual deficits. Visual agnosias and
illusions, and what they may imply about how vision works.
Objectives
• understand visual processing from both “bottom-up” (data oriented) and “top-down”
(goals oriented) perspectives;
• be able to describe and contrast techniques for extracting and representing features,
edges, shapes, and textures;
• be able to describe key aspects of how biological visual systems work; and be able
to think of ways in which biological visual strategies might be implemented in
machine vision, despite the enormous differences in hardware;
• understand in depth at least one major practical application problem, such as face
recognition, detection, or interpretation.
Recommended reading
* Forsyth, D. A. & Ponce, J. (2003). Computer Vision: A Modern Approach. Prentice Hall.
Shapiro, L. & Stockman, G. (2001). Computer vision. Prentice Hall.
Cryptography
Aims
This course provides an overview of basic modern cryptographic techniques and covers
essential concepts that users of cryptographic standards need to understand to achieve
their intended security goals.
Lectures
• Number theory, finite groups and fields. Modular arithmetic, Euclid’s algorithm,
inversion, groups, rings, fields, GF(2n ), subgroup order, cyclic groups, Euler’s
theorem, Chinese remainder theorem, modular roots, quadratic residues, modular
exponentiation, easy and difficult problems. [2 lectures]
Objectives
• understand various adversarial capabilities and basic attack algorithms and how they
affect key sizes;
• understand and compare the finite groups most commonly used with
discrete-logarithm schemes;
• understand the basic number theory underlying the most common public-key
schemes, and some efficient implementation techniques.
94 University of Cambridge
Recommended reading
Katz, J., Lindell, Y. (2015). Introduction to modern cryptography. Chapman & Hall/CRC
(2nd ed.).
E-Commerce
Aims
This course aims to give students an outline of the issues involved in setting up an
e-commerce site.
Lectures
• Web site design. Stock and price control; domain names, common mistakes,
dynamic pages, transition diagrams, content management systems, multiple targets.
• Web site implementation. Merchant systems, system design and sizing, enterprise
integration, payment mechanisms, CRM and help desks. Personalisation and
internationalisation.
• The law and electronic commerce. Contract and tort; copyright; binding actions;
liabilities and remedies. Legislation: RIP; Data Protection; EU Directives on Distance
Selling and Electronic Signatures.
• Putting it into practice. Search engine interaction, driving and analysing traffic;
dynamic pricing models. Integration with traditional media. Logs and audit, data
mining modelling the user. collaborative filtering and affinity marketing brand value,
building communities, typical behaviour.
• Finance. How business plans are put together. Funding Internet ventures; the
recent hysteria; maximising shareholder value. Future trends.
Computer Science Tripos Part II 95
Objectives
At the end of the course students should know how to apply their computer science skills
to the conduct of e-commerce with some understanding of the legal, security, commercial,
economic, marketing and infrastructure issues involved.
Recommended reading
Shapiro, C. & Varian, H. (1998). Information rules. Harvard Business School Press.
Additional reading:
Standage, T. (1999). The Victorian Internet. Phoenix Press. Klemperer, P. (2004).
Auctions: theory and practice. Princeton Paperback ISBN 0-691-11925-2.
Aims
The Part 1B course Artificial Intelligence introduced simple neural networks for supervised
learning, and logic-based methods for knowledge representation and reasoning. This
course has two aims. First, to provide a rigorous introduction to machine learning, moving
beyond the supervised case and ultimately presenting state-of-the-art methods. Second,
to provide an introduction to the wider area of probabilistic methods for representing and
reasoning with knowledge.
Lectures
• Bayesian networks II. Markov random fields. Approximate inference. Markov chain
Monte Carlo methods. [1 lecture]
Objectives
• Understand several algorithms for machine learning and apply those methods in
practice with proper regard for good experimental practice.
Recommended reading
If you are going to buy a single book for this course I recommend:
* Bishop, C.M. (2006). Pattern recognition and machine learning. Springer.
Computer Science Tripos Part II 97
Aims
This course teaches the foundations of autonomous mobile robots, covering topics such
as perception, motion control, and planning. It also teaches algorithmic strategies that
enable the coordination of multi-robot systems and robot swarms. The course will feature
several practical sessions with hands-on robot programming. The students will undertake
mini-projects, which will be formally evaluated through a report and presentation.
Lectures
Objectives
Recommended reading
Siegwart, R., Nourbakhsh, I.R. & Scaramuzza, D. (2004). Autonomous mobile robots. MIT
Press.
Thrun, S., Wolfram B. & Dieter F. (2005). Probabilistic robotics. MIT Press.
Mondada, F. & Mordechai B. (2018) Elements of Robotics. Springer
Siciliano, B. & Khatib, O. (2016) Springer handbook of robotics. Springer.
Mesbahi, M. & Egerstedt, M. (2010) Graph theoretic methods in multiagent networks.
Princeton University Press.
Aims
This course will cover topics in the areas of mobile systems and communications, and
sensor systems and sensor networking. It aims to help students develop and understand
the additional complexity introduced by mobility and sensing, including energy constraints,
communication in dynamic networks and handling measurement errors. The course will be
using various applications to exemplify concepts.
Computer Science Tripos Part II 99
Lectures
• Machine Learning for Mobile Systems and Sensor Data Mobile and wearable
sensing. Machine Learning on Sensor Data. On-device Machine Learning.
• Privacy in Mobile and Sensor Systems. Concepts of mobile and sensor systems
privacy. Privacy and sensor based activity inference. Mobility prediction and privacy.
Objectives
• argue for and against different mobile and sensor systems architectures and
protocols.
• Understand typical error sources for sensing and be aware of techniques to minimise
them.
• put concepts into context of current applications of mobile and sensor systems as
described in the course.
Recommended reading
The course is based mainly on research papers cited in each lecture. The following books,
however, contain some of the more traditional concepts.
* Schiller, J. (2003). Mobile communications. Pearson (2nd ed.).
* Karl, H. & Willig, A. (2005). Protocols and architectures for wireless sensor networks.
Wiley.
Agrawal, D. & Zheng, Q. (2006). Introduction to wireless and mobile systems. Thomson.
Optimising Compilers
Aims
The aims of this course are to introduce the principles of program optimisation and related
issues in decompilation. The course will cover optimisations of programs at the abstract
syntax, flowgraph and target-code level. It will also examine how related techniques can
be used in the process of decompilation.
Lectures
• Classical dataflow analysis. Graph algorithms, live and avail sets. Register
allocation by register colouring. Common sub-expression elimination. Spilling to
memory; treatment of CSE-introduced temporaries. Data flow anomalies. Static
Single Assignment (SSA) form.
Computer Science Tripos Part II 101
• Decompilation. Legal/ethical issues. Some basic ideas, control flow and type
reconstruction.
Objectives
Recommended reading
* Nielson, F., Nielson, H.R. & Hankin, C.L. (1999). Principles of program analysis.
Springer. Good on part A and part B.
Appel, A. (1997). Modern compiler implementation in Java/C/ML (3 editions).
Muchnick, S. (1997). Advanced compiler design and implementation. Morgan Kaufmann.
Wilhelm, R. (1995). Compiler design. Addison-Wesley.
Aho, A.V., Sethi, R. & Ullman, J.D. (2007). Compilers: principles, techniques and tools.
Addison-Wesley (2nd ed.).
Aims
The aim of this course is to introduce the design and analysis of randomised algorithms. It
starts by introducing some essential tools and ideas from probability and graph theory, and
develops this knowledge through analysing a variety of examples of randomised
algorithms and processes. Ultimately the course demonstrates that randomness can be an
elegant programming technique, and particularly helpful when time or space are restricted.
Lectures
• Random walks and Markov chains: Transition matrices, Stationary distribution and
Convergence. Mixing time and total variation distance. Applications of Markov
chains such as Connectivity testing, Solving 2-SAT, Sampling from unknown
distributions and MCMC.
Objectives
Recommended reading
Michael Mitzenmacher and Eli Upfal. Probability and Computing: Randomized Algorithms
and Probabilistic Analysis., Cambridge University Press, 2nd edition.
Computer Science Tripos Part II 103
Quantum Computing
Aims
The principal aim of the course is to introduce students to the basics of the quantum model
of computation. The model will be used to study algorithms for searching, factorisation and
quantum chemistry as well as other important topics in quantum information such as
cryptography and super-dense coding. Issues in the complexity of computation will also be
explored. A second aim of the course is to introduce student to near-term quantum
computing. To this end, error-correction and adiabatic quantum computing are studied.
Lectures
• Bits and qubits. Introduction to quantum states and measurements with motivating
examples. Comparison with discrete classical states.
• Linear algebra. Review of linear algebra: vector spaces, linear operators, Dirac
notation, the tensor product.
• The quantum circuit model. The circuit model of quantum computation. Quantum
gates and circuits. Universality of the quantum circuit model, and efficient simulation
of arbitrary two-qubit gates with a standard universal set of gates.
Objectives
• understand the quantum model of computation and the basic principles of quantum
mechanics;
• see how the quantum model relates to classical models of deterministic and
probabilistic computation.
Recommended reading
Books:
Kaye P., Laflamme R., Mosca M. (2007). An Introduction to Quantum Computing. Oxford
University Press.
Nielsen M.A., Chuang I.L. (2010). Quantum Computation and Quantum Information.
Cambridge University Press.
Mermin N.D. (2007). Quantum Computer Science: An Introduction. Cambridge University
Press.
Computer Science Tripos Part II 105
Aims
The aim of this course is to introduce fundamental concepts and techniques in the theory
of concurrent processes. It will provide languages, models, logics and methods to
formalise and reason about concurrent systems. Students will be assessed by a one-hour
test at the end of the course.
Lectures
• Introduction to Petri nets. Petri nets, basic definitions and concepts. Petri-net
semantics of CCS. [1 lecture]
• Event structures. Their relation with Petri nets and representation via rigid families.
The CCS operations on event stuctures. Maps of event structures. [2 lectures]
Objectives
Recommended reading
Advanced Algorithms
Aims
The aim of this course is to introduce advanced techniques for the design and analysis of
algorithms that arise in a variety of applications. A particular focus will be on parallel
algorithms, linear programming and approximation algorithms.
Lectures
Objectives
Recommended reading
* Cormen, T.H., Leiserson, C.D., Rivest, R.L. & Stein, C. (2009). Introduction to
Algorithms. MIT Press (3rd ed.). ISBN 978-0-262-53305-8
Aims
This course is a series of seminars by former members and friends of the Laboratory
about their real-world experiences of starting and running high technology companies. It is
a follow on to the Business Studies course in the Michaelmas Term. It provides practical
examples and case studies, and the opportunity to network with and learn from actual
entrepreneurs.
Lectures
Objectives
At the end of the course students should have a better knowledge of the pleasures and
pitfalls of starting a high tech company.
Recommended reading
Lang, J. (2001). The high-tech entrepreneur’s handbook: how to start and run a high-tech
company. FT.COM/Prentice Hall.
Maurya, A. (2012). Running Lean: Iterate from Plan A to a Plan That Works. O’Reilly.
Osterwalder, A. & Pigneur, Y. (2010). Business Model Generation: A Handbook for
Visionaires, Game Changers, and Challengers. Wiley.
Kim, W. & Mauborgne, R. (2005). Blue Ocean Strategy. Harvard Business School Press.
See also the additional reading list on the Business Studies web page.
Lecturer: Dr J. Pichon
No. of lectures: 12
Suggested hours of supervisions: 3
Prerequisite courses: Logic and Proof and Semantics of Programming Languages
110 University of Cambridge
Aims
The course introduces two verification methods, Hoare Logic and Temporal Logic, and
uses them to formally specify and verify imperative programs and systems.
The first aim is to introduce Hoare logic for a simple imperative language and then to show
how it can be used to formally specify programs (along with discussion of soundness and
completeness), and also how to use it in a mechanised program verifier.
The second aim is to introduce model checking: to show how temporal models can be
used to represent systems, how temporal logic can describe the behaviour of systems,
and finally to introduce model-checking algorithms to determine whether properties hold,
and to find counter-examples.
Current research trends also will be outlined.
Lectures
• Axioms and rules of inference. Hoare logic for a simple language with
assignments, sequences, conditionals and while-loops. Syntax-directedness.
• Loops and invariants. Various examples illustrating loop invariants and how they
can be found.
• Partial and total correctness. Hoare logic for proving termination. Variants.
• Semantics and metatheory Mathematical interpretation of Hoare logic. Semantics
and soundness of Hoare logic.
• Temporal logic. Linear and branching time. Temporal operators. Path quantifiers.
CTL, LTL, and CTL*.
• Model checking. Simple algorithms for verifying that temporal properties hold.
• Applications and more recent developments Simple software and hardware
examples. CEGAR (counter-example guided abstraction refinement).
Objectives
• be able to prove simple programs correct by hand and implement a simple program
verifier;
Computer Science Tripos Part II 111
• be able to write simple models and specify them using temporal logic;
• be familiar with the core ideas of model checking, and be able to implement a simple
model checker.
Recommended reading
Huth, M. & Ryan M. (2004). Logic in Computer Science: Modelling and Reasoning about
Systems. Cambridge University Press (2nd ed.).