Philosophy and Computer Science BA: Curriculum
The Philosophy and Computer Science BA is a 3 year undergraduate course. You will take 120 credits each year and every module is 15 credits (except the third year dissertation, which is 30 credits). Please note that this list of modules is indicative only (this information is published well in advance of enrolment and therefore module content and availability may be subject to change).
Structure for Year 1
You will start by studying compulsory core modules, which will ensure that you have a firm grasp of logic and 'theoretical' computer science, and are introduced to philosophical areas which interact with computer science. These seven modules are compulsory in your first year:
- Knowledge and Reality (Phil0003)
This course provides an introduction to epistemology and metaphysics. Topics to be discussed may include:
- the nature of knowledge, scepticism;
- the existence of God, whether theism is rational, why the universe exists;
- free will;
- personal identity;
- the metaphysics of race.
- Introduction to Political Philosophy (Phil0007)
In this module, we investigate three large sets of questions about justice and the importance of liberty and equality for a just society:
- Liberty: What is liberty and why is it important? Which liberties, if any, should a just society protect? Freedom of expression? Freedom from interference? Economic liberty? Sexual liberty? Political liberty? Can these different liberties come into conflict, and if so, should some have priority over others?
- Equality: What is equality, is it important and which kinds of equality, if any, should a just society ensure? Equality of opportunity? Equality of income and wealth? Political equality?
- Reconciliation: Can a society ensure the equality and liberty of its citizens at the same time, or are these political values inherently in conflict with one another? If they are conflicting values, which is to take priority?
- Introduction to Philosophy of Computer Science
This module introduces five set texts in the philosophy of computer science.
Each text is first introduced in a one-hour lecture, which is delivered by the module convenor. Students then meet for three one-hour discussion groups to explore the text. This takes place across two weeks.
For the discussion groups, students are divided into small groups allocated to a tutor, usually an advanced PhD student. The discussion aims to improve students’ understanding of the set texts, to encourage individual and group exploration of philosophical ideas, and to improve essay writing and general study skills.
Each student in the group will write some formative essays over the course of the term. In addition to comments from tutors, students will be encouraged to engage in peer-marking (in pairs) of each other’s work. Students may in addition be required to prepare brief presentations.
The set texts will be chosen by the module leader; they may vary group-by-group and year-by-year. The texts will always, however, emphasise themes at the intersection of philosophy and computer science, in areas such as logic, reasoning, information, and understanding.
- Algorithms (Comp0005)
The module aims to provide students with an introduction to data structures and algorithms that are fundamental to programming and to understand computation. We will apply these techniques to computational problems, with the aim to develop problem-solving skills, to develop the ability to analyse the efficiency of algorithms, and to encourage a thoughtful approach to the analysis and design of computational problems.
- Discrete Mathematics for Computer Scientists (Comp0147) – includes basics of formal proof
The module aims to equip first year students with:
- knowledge of foundational mathematics and logic that will be needed for future computer science modules;
- basic tools and skills for mathematical problem solving, proof and refutation.
The first part of the module will focus on foundational discrete mathematics, including but not necessarily limited to: functions and relations, permutations, group theory, set theory, cardinalities, diagonalisation, linear algebra and combinatorics. The module continues with mathematical reasoning, logical notation and proof by mathematical induction.
- Principles of Programming (Comp0002)
The module aims to provide an introduction to computer programming using two different programming styles, imperative and functional programming. Its primary aim is to develop core design, programming, and problem-solving skills, with a secondary aim of building confidence in the ability to take on and learn new programming languages within a short space of time. In order to achieve these aims, the module has a substantial practical element in the form of compulsory lab classes where students work through sets of programming exercises to apply the programming concepts introduced during the module lectures.
- Theory of Computation (Comp0003) – includes basics of mathematical logic
The module introduces students to formal logical reasoning and to fundamental concepts in the theory of computation and formal languages.
The first five weeks of the course will focus on mathematical logic, including: propositional logic, first-order logic, proof by induction and modal logic.
The second five weeks will focus on fundamentals of computation, automata, and language theory.
You will then choose one of these two modules:
- Mathematics and Statistics (Comp0011)
This modules provides a grounding in the areas of mathematics and statistics which are most relevant to a Computer Science undergraduate degree.
- Object-Oriented Programming (Comp0004)
This module provides a thorough introduction to object-oriented programming. The key object-oriented concepts such as class design, inheritance, dynamic binding and interfaces, are introduced along with design strategies for smaller sized object-oriented programs. Material is also included on data representation, the implementation of common data structures such as lists, trees and hash tables, basic cloud-based applications, and on development tools and practices. To learn how to apply object-oriented design concepts, and practice programming skills, the module has a substantial practical element, with weekly lab classes, sets of exercise questions, and an individual programming coursework.
Structure for Year 2
In the second year, you will complete your compulsory core, developing a deeper understanding of the interactions between philosophy and computer science. You will also choose five optional modules, allowing you to begin to your own specialisms based on your areas of interest.
These three modules are compulsory in your second year:
- Knowledge (Phil0014)
This module is designed to deal with a variety of topics in epistemology – the philosophical study of knowledge. The curriculum will vary from year to year. Topics include: theories of knowledge; theories of justification or warrant; scepticism; contextualism; sources of knowledge: perception, memory, introspection, testimony.
- Philosophy of Language (Phil0022)
This module will introduce you to topics in contemporary analytic philosophy of language. The central questions we will examine concern the fact that language is meaningful – that words can be used to say something about things in the world. How does this happen? In what ways can language be meaningful? How do different elements of language get their meaning? The aims of this module are to examine these questions by looking at the most prominent philosophical theories of the meaning of names, the meanings of sentences, and the different ways that our words can be meaningful.
- Logic (Comp0009)
The module aims to introduce and familiarise students with logical and mathematical inference. Students learn a number of logical inference methods for classical logics and for non-classical logics.
You will then choose either two or three modules from this list:
- Applied Ethics (Phil0011)
This course will examine some selected topics in applied ethics. The following topics will be covered: abortion, rape, euthanasia, non-human animals, future people, affirmative action, disability, privacy and the ethics of immigration. Students will be expected to read at least two papers for most topics, and to participate actively in the back-up seminar.
- Ethics (Phil0024)
- This module is a survey of central questions and concepts of recent ethical theory. Precise contents may vary slightly by year. Some topics include: the nature of the good, egoism, utilitarian accounts of right and wrong action, virtue (in particular, justice and benevolence), partiality and impartiality, moral luck.
- Metaphysics (Phil0012)
This module will examine core themes and debates in contemporary metaphysics, equipping you not only with an understanding of these core topics, but also with conceptual tools that will help you become a participant in the debate. Sample topics, which may vary slightly year to year, include: identity and change; possibility and necessity; causation; space and time.
- Philosophy of Mind (Phil0013)
This intermediate level module aims to introduce students to a range of problems, positions, and arguments in the philosophy of mind – the philosophical study of mental phenomena and their relation to the rest of reality. The first half of term (weeks 1-5) will focus on the mind-body problem – in particular, the Problem of Consciousness. The theme for the second half of term (weeks 6-10) will be Self and Other – where am I? Where is my mind? Can I know the minds of others? Weekly live online lectures will be accompanied by in-person seminars.
- Topics in Political Philosophy (Phil0028)
This module investigates questions that are both central to political philosophy and of current political importance. They include: What does it take for a society to be just? How can we come to own natural resources? Does global inequality matter as much as national inequality? Is it wrong to contribute to climate change? Should states recognise the institution of marriage? What do we owe to future generations?
and either two or three modules from this list (you will take eight modules in total):
- Computer Architecture and Concurrency (Comp0008)
This module aims to provide a working knowledge of the hardware and architecture of a modern computer system, particularly focusing on concurrency aspects and those that have an impact on writing multithreaded software. Students will gain a fundamental understanding of the concurrency abstraction and how it impacts both computer architecture and software design. We will look at computer architecture aspects that directly impact multithreaded software, such as the memory hierarchy, cache coherence/consistency and hardware multithreading. We will learn how to design correct multithreaded Java software based on a solid theoretical understanding of concurrency principles and the Java Memory Model. The module will cover an understanding of concurrency from low-level aspects (such as spin locks implemented in assembly language) to high-level design patterns used within the Java concurrency package.
- Intermediate Mathematics for Computer Science (Comp0199)
The module aims at giving students a foundation in computer security, cryptography and human aspects of security. After taking the module, students should be able to identify risks and security sensitive aspects of systems, where a system can range from a small and simple solution for a specific task to a full organisation including IT infrastructure and users. They will be taught this from the experience of how systems have failed in the past and by analysing systems from an adversarial viewpoint.
- Security (Comp0141)
Students should also know core defensive techniques to prevent or mitigate cyber attacks. They should be able to formulate a threat model for a system and reason about whether it is secure or insecure, Students should be able to deliver effective security for real-world environments: how to design and manage security in organisations to effectively protect them.
Structure for Year 3
In your third year, you will write a 30 credit (double-weight) dissertation:
- Philosophy and Computer Science Dissertation
The dissertation is a lengthy essay on a topic of your choosing, meeting the following criteria:
- It must be appropriate for a degree in Philosophy and Computer Science;
- There must be an available member of staff with appropriate expertise to supervise it.
The dissertation will be between 6,000-8,000 words (recognising that more logical-mathematical topics may reasonably have lower word counts than more discursive topics). Essays may include illustrative programming-based work.
Tuition involves four one-hour sessions of one-on-one supervision by a member of staff. The module is taken over the course of Terms 1 and 2. The research will be self-directed, but with the guidance of your supervisor.
You will then choose six further modules. The modules can be loosely divided into three groups – mathematical computer science; logic and logical metaphysics; normative philosophy – however these categories are just for guidance (you can mix-and-match freely across the groups).
Modules in Mathematical Computer Science
- Advanced Mathematics for Computer Science
This will be a new module; details to follow.
- Artificial Intelligence and Neural Computing (Comp0024)
This module introduces artificial intelligence and neural computing as both technical subjects and as fields of intellectual activity. The overall aims are to introduce basic concepts of artificial intelligence for reasoning and learning behaviour; and to introduce neural computing as an alternative knowledge acquisition/representation paradigm, to explain its basic principles and to describe a range of neural computing techniques and their application areas.
- Compilers (Comp0012)
This is a practical module whose primary goal is develop an understanding of the operation of compilers and the development and specification of computer-based languages. The course pulls together threads from underlying theory, most notably from logic and from data structures and algorithms, and builds on these a practical exercise in which students create a compiler of their own using commonly available compiler development tools.
- Computability and Complexity Theory (Comp0017)
The module addresses the theoretical and practical limitations of computation and provides a theoretical framework for modelling computation. The concepts of undecidability and intractability are introduced through a number of examples. The module will convey the proof techniques that are used to classify problems and it is intended that students learn how to apply them in order to classify unfamiliar problems for themselves.
- Computer Systems (Comp0019)
The aim for this module is to have our advanced undergraduates develop a 'whole-stack' understanding of the complex interactions among modern computer system hardware (specifically, a modern, multi-core CPU and its memory hierarchy), a modern operating system, and the applications that run atop them. These interactions dictate application correctness and performance. These fundamental principles will be taught in the concrete framework of the x86 CPU architecture and the Linux/UNIX operating system. Students should not only understand these fundamental principles, but be able to put them into practice in real computer programmes.
- Functional Programming (Comp0020)
This course explores the functional programming paradigm and the implementation technology for functional programming languages. It aims to develop a broad understanding of the functional programming style and recursive programming techniques using the language Miranda, together with an understanding of implementation issues that are relevant not only to functional languages but also to other systems that require automatic dynamic memory management. The course explores the underlying mechanics of strict and lazy functional languages; it does not use Haskell or F# or OOCAML and does not aim to provide training in such languages, though an introduction to Miranda is provided and students are expected to improve their functional programming skills through independent study. In the second half of the course, students are expected to use independent study to read extensively about implementation issues which are then discussed in the lectures.
- Machine Learning for Domain Specialists (Comp0142)
Introduces students to the basics of machine learning while giving class-based examples of applications to areas of domain specialisation.
- Quantum Computation (Comp0157)
The aim of the module is to introduce students to the principles of quantum mechanics from a computer science perspective, and to the field of quantum computation and algorithms.
- Formal Epistemology (Phil0078)
Our strength of beliefs influence our decision making. But how should we measure strength of belief, and what rational constraints are there on one's strength of belief? How should one's strengths of belief change in response to evidence? And how exactly should one's strength of beliefs feed through into rational decision making?
These are the central questions that will be tackled in this module, where students will be introduced to the probabilistic representation of strength of belief, arguments for the rationality of probabilistic degrees of belief, arguments for various rational constraints on those beliefs – including constraints concerning belief updates in response to evidence – and to decision theory.
Formal epistemology is an increasingly important area of philosophy, and its influence on other areas of philosophy (traditional epistemology, philosophy of mind, philosophy of action, metaphysics, ethics, and political philosophy) has been profound. The field is also strongly interdisciplinary, with cross-overs into economics, statistics, computer science, and political science.
Modules in Logic & Logical Metaphysics
- Early Wittgenstein (Phil0041)
The purpose of this module is to present some of the central doctrines of Wittgenstein’s Tractatus Logico-Philosophicus. The module focuses on the account offered in this book of the structure of reality and our ability to represent it in thought and language. We will also study ideas of Bertrand Russell and Gottlob Frege that are relevant for the development of Wittgenstein’s thought. The module will enable you to understand these important ideas, overcoming the obscurity of Wittgenstein’s writing. This will contribute to your general understanding of the central philosophical issues that Wittgenstein addresses. It will also develop your ability to interpret difficult philosophical texts.
- Logic and its Limits (Phil0025)
The purpose of this module is to present the basic methods and results of contemporary logic. The emphasis is on the practical skill of formulating and proving results about logical systems. Students are introduced to basic set theory, enumerability and non-enumerability, isomorphisms and cardinality of models, the Compactness and Löwenheim-Skolem Theorems, inexpressibility results, sequent calculi, soundness and completeness results, and, time permitting, incompleteness and non-standard models of arithmetic.
- Meaning and Interpretation (Phil0176)
On the standard conception of the place of linguistic meaning and mental content in the world, there are facts about what speakers mean by linguistic expressions and about what people believe and desire. Interpretation is the process by which we gain access to these facts – we use the evidence at our disposal to determine what people mean by what they say and the contents of their mental states. On this standard conception, facts about meaning and content are generated by connections between language and the mind on the one hand, and the world on the other. These facts do not depend in any way on the interpretative procedures by which we seek to discover them. Since the last few decades of the twentieth century, several philosophers have challenged this conception, arguing that facts about linguistic meaning and mental content are somehow produced by the procedures that we employ for ascribing meanings and contents. The goal of this module is to provide a general introduction to this approach. We will focus on the work of four of its main advocates: WVO Quine, Donald Davidson, Saul Kripke and Daniel Dennett.
- Paradoxes (Phil0196)
A paradox is a set of jointly inconsistent claims, each of which is individually plausible. Paradoxes are not merely entertaining puzzles; they also raise serious philosophical problems. In many cases, they lead us to rethink basic assumptions about some of our most fundamental concepts, including space, time, motion, truth, knowledge, and belief. In this module, we will examine several paradoxes and the philosophical issues they raise. Along the way, students will be introduced to some central conceptual and formal tools that are relevant not only to the paradoxes but also to a wide range of other philosophical debates.
Paradoxes to be discussed may include:
- Zeno’s paradoxes about space, time and motion;
- paradoxes of infinity (the Ross-Littlewood paradox, Benardete’s paradox);
- the Sorites paradox;
- logical and semantic paradoxes (Russell’s paradox and the Liar paradox);
- paradoxes of rationality (Newcomb’s problem, Prisoner’s Dilemma);
- paradoxes of belief and knowledge (the surprise examination paradox, the preface paradox).
- Personal Identity (Phil0166)
What are we? What does it take for one of us to survive from one time to another? Are we material things? Are we brains, animals, souls, computer programs, or something else? How do we relate to our bodies? This module addresses questions of personal identity. While some seminal early modern texts will be highlighted, such as Locke’s Essay, we will primarily scrutinise relevant theories and arguments from recent analytic metaphysics and the philosophy of mind.
- Philosophy of Space and Time (Phil0160)
In this module, you will study key philosophical issues relating to space and time. When it comes to the philosophy of space, the module will focus upon the longstanding debate between absolutists and relativists about space considering the key arguments on both sides of what has been an important philosophical debate from Early Modern times to the present day. The module will then examine how the modern theories of Special Relativity and General Relativity suggests that the distinction between space and time may be less sharp than it first appears. When it comes to time, the module will address questions concerning whether there are reasons to doubt the reality of time, debates about the nature of time (such as why time seems to ‘pass’ and have a ‘flow’), and what accounts for the direction of time will also be addressed.
- Philosophy of Arithmetic and Incompleteness (Phil0184)
Arithmetic is the branch of mathematics which studies the natural numbers – i.e. the numbers 0, 1, 2, 3, and so on – and operations on the numbers, like addition and multiplication. This course explores the features that make arithmetic distinctive, and pose unique philosophical challenges. The path through the course is as follows:
- Arithmetic is infinitary, abstract, a priori and apodictic, necessary, completely general, and scientifically indispensable. You will start by surveying these features, and encounter the general idea of a formal theory of arithmetic.
- A common sentiment is that, in mathematics, consistency suffices for existence. You will explore this idea, understanding what it means to describe a theory as 'consistent', and how one might establish consistency. This will lead into a discussion of Hilbert's programme, which aimed to provide proofs that (various) mathematical theories are consistent. Famously, this programme floundered when Gödel discovered his incompleteness theorems.
- You will learn about the technical details behind the incompleteness theorems, including such concepts as: (computable) enumerability, representability, the arithmetization of syntax, Tarski's Diagonal Lemma, Gödel sentences, and consistency sentences.
- Armed with this technical knowledge, you will assess the philosophical significance of these results, both for Hilbert's programme and for other philosophical positions.
The course will be based entirely weekly lectures, backed up with classes. Each lecture/class will have compulsory readings.
Modules in Normative Philosophy
- Advanced Topics in Moral Philosophy (Phil0079)
We will explore theories of responsibility, in particular their explanations of its grounds, its scope and its limits. We will also discuss some fundamental skeptical challenges to the practice of holding ourselves and others responsible. In light of these general considerations, we will then examine more specific topics, such as responsibility for attitudes, moral luck, blameworthiness, excuses and collective responsibility. The aim of the module is to develop an understanding of the nature of responsibility, and the resources and problems of contemporary approaches.
- Equality (Phil0077)
In everyday moral and political arguments appealing to equality are ubiquitous. But what do these appeals amount to? In this course we will attempt to gain a deeper understanding of equality in moral and political thought.
The first part of the course will focus on the idea of moral equality. What grounds all human beings’ equal moral status? What does it even mean to say that all human beings are morally equal? Is the moral equality of all people consistent with our favourable treatment of our children, family, and friends? Are non-human animals morally equal to humans?
In the second part of the course, we will focus on the idea of political equality. Specifically, we will consider what the equal status of all citizens implies about how we should distribute power and make political decisions. Does a commitment to the equality of all citizens commit us to democratic rule? If the political decisions made in Community A significantly affect the members of Community B, should the members of Community B have a (democratic?) say in Community A’s decision? Might this commit us to some form of global democracy?
- The Ethics of Artificial Intelligence (Msin0212)
This module explores the ethics of artificial intelligence in the context of autonomous technologies that involve the transfer of control and governance from human beings to robots and other intelligence systems. Normative and behavioural theories of ethics are used to explore the implications of artificial intelligence in the areas of liability associated with ownership of AI, agency and privacy, biases, malicious and harmful use of AI, and the rights of artificially intelligent beings.
- Feminism and Philosophy (Phil0073)
This course will introduce students to some central topics in feminist philosophy. Topics will include oppression, misogyny, sex and gender, intersectionality, pornography, sexual consent, beauty norms, and work and the family. Through consideration of both classic and contemporary feminist writing, students will be asked to think carefully and critically about feminist approaches to these areas of significant moral, political, and social concern.
- Free Speech and Theories of Autonomy (Phil0067)
This module investigates two complementary topics: (1) theories of autonomy, as they have been developed by philosophers writing about ethics and the self, and (2) defences of free speech, as they have been developed (and criticised) by legal and political theorists.
With respect to (1), we’re interested in what it means to be autonomous, how and why the process of desire-formation has a bearing on a person’s autonomy, and whether it is possible for someone to autonomously desire their own subordination.
With respect to (2), we’re interested in what kind of conception of autonomy – and of the individual, as such – different theorists have invoked in seeking to defend free speech, and what kinds of theoretical justifications for free speech can be developed in light of different conceptions of autonomy. The insights into the nature of autonomy that we gain from thinking about the topics in part (1), will inform the critical inquiry that we carry out in part (2).
- Metaethics (Phil0068)
This module will introduce you to contemporary metaethics, a discipline which asks philosophical questions about ethics. The four questions at the centre of the course are: (i) are there truths about ethics – about what is good, bad, right, wrong, and so on? (ii) are these truths objective? (iii) are these truths part of the natural world, and (iv) how does our ethical thought and language work? You will investigate these questions by learning about the major theories defended in contemporary metaethics, and as part of this you will learn about various specific problems and questions investigated by contemporary philosophers in this area.
- Normativity (Phil0188)
Many current philosophical discussions, both in practical and theoretical philosophy, centre around the explanation of normativity. In this module we will focus primarily on practical normativity, starting with the crucial concept of a normative reason and then looking into a number of different topics, for example (i) Values and reasons; (ii) Reasons for attitudes and the wrong kind of reasons; (iii) Normative powers and voluntary obligations.
- Philosophy and Public Policy (Phil0076)
This is a relatively new module in the Department, designed to be innovative in terms of the learning tasks and assessment. Students will be required to work in teams to produce a joint report on a pressing issue of public policy, which also has a moral, political or other philosophical dimension. In effect, each group will act as a mini think-tank, and will experience the pleasures and frustrations of group work, in contrast to the normal individual work of Philosophy.
Students will collectively decide on their research topic, and will have some level of autonomy over the team in, and topic on, which they work, although it is essential that everyone is assigned to a team.
The required report will be up to 10,000 words, to be delivered at the end of term, and could be on topics such as climate change, regulation of social media, single sex marriage, regulations of drugs, funding of reproductive medicine, freedoms of the press, and so on, looking at empirical and policy literature as well as at philosophical arguments.
In addition to the collective report, students will be asked to produce an individual discussion of one philosophical idea related to the report (1,500 words) and to write a short essay reflecting on the process of producing the report and their own place in it (1,500 words).
The first two weeks will look at general methodology, topics and procedure, assigning people to teams and topics. Subsequent sessions will discuss progress on the report and next steps for each group, but the precise form they take will be dependent on the level of progress achieved and what the groups would find most helpful.