You will take the following compulsory modules:
This module gives you a comprehensive overview of the principles of programming, including such concepts as procedural logic, variables, flow control, input and output and the analysis and design of programs. Instruction will be provided in an object-oriented programming language. You will spend around five hours per week in lectures and computer classes studying for this module.
In both semesters, you will then have the option to take some of the following optional modules, making up 120 credits in total from taught modules:
Advanced Algorithms and Data Structures
We study the theory used in the design and analysis of advanced algorithms and data structures. The topics covered include string algorithms (such as for string matching, longest common subsequence), graph algorithms (such as for minimum cuts and maximum flows), and advanced data structures (such as Binomial heaps and Bloom filters).
The theory is practiced in weekly labs where we learn how to implement the algorithms and data structures as functional and imperative programs (using the languages Haskell and C), and apply these to solve large instances of real world problems.
Advanced Computer Networks
This module will provide you with an advanced knowledge of computer communications networks, using examples from all-IP core telecommunications networks to illustrate aspects of transmission coding, error control, media access, internet protocols, routing, presentation coding, services and security. The module will describe Software Defined Networks (SDNs) and provide examples of using them to enable very large scale complex network control.
The module will provide an advanced knowledge of various routing and query protocols in: Ad Hoc Networks; Mobile Ad Hoc Networks (MANETs); Vehicular Ad Hoc Networks (VANETs); Disconnection/Disruption/Delay Tolerant Networks (DTNs); impact of new networking developments, such as security risks, ethics, interception and data protection will be reflected and discussed systematically. You will spend around three hours per week in lectures and one hour per week in computing classes.
You will begin by considering the attempts to characterise the problems that can theoretically be solved by physically possible computational processes, along with the practical implications. You will then consider the area of complexity theory, looking at whether or not problems can be solved under limitations on resources such as time or space.
You will examine the classes P and NP, and how to show problems are NP-complete. You will also consider other practically important classes such as: PSPACE, and its relevance to adversarial games, ontologies, and the semantic web; and also complexity classes relevant to limitations of the effectiveness of parallel computation.
You will learn the principles of three-dimensional (3D) computer graphics, focusing on modelling, animating, and viewing objects/scenes in a virtual world on the computer, projecting objects/scenes onto the 2D screen in analogy to your taking a photograph of the 3D world using a camera, and rendering the objects/scenes to give them realism.
Through weekly lectures, tutorials and laboratory sessions you will explore various computer graphics techniques and you will develop your OpenGL programming skills required for 3D computer graphics applications. The module demonstrates the benefits of linking theory and practice.
You will examine current techniques for the extraction of useful information about a physical situation from individual and sets of images. You’ll cover a range of methods and applications, with particular emphasis being placed on the detection and identification of objects, recovery of three-dimensional shape and analysis of motion. You will learn how to implement some of these methods in the industry-standard programming environment MATLAB. You’ll spend around four hours a week in lectures, tutorial and laboratory sessions.
Data Modelling and Analysis
This module will enable you to appreciate the range of data analysis problems that can be modelled computationally and a range of techniques that are suitable to analyse and solve those problems. Topics covered include: basic statistics; types of data; data visualisation techniques; data modelling; data pre-processing methods including data imputation; forecasting methods; clustering and classification methods (decision trees, naīve bayes classifiers, k-nearest neighbours); data simulation and model interpretation techniques to aid decision support.
Spending around 4 hours each week in lectures and computer classes, appropriate software (eg. Excel, R, Weka) will be used to illustrate the topics you will cover.
This module introduces you to the theory and practice of design ethnography. You will cover a range of topics including: origins and evolution of ethnography; foundations and nature of the ethnomethodological approach; ethnographic analysis; its relationship to systems design; and the perceived problems with the approach. You will spend around three hours each week in lectures and tutorials for this module.
Designing Intelligent Agents
You will be given a basic introduction to the analysis and design of intelligent agents, software systems which perceive their environment and act in that environment in pursuit of their goals. Spending around four hours each week in lectures and tutorials, you will cover topics including task environments, reactive, deliberative and hybrid architectures for individual agents, and architectures and coordination mechanisms for multi-agent systems.
Foundations of Programming Mini-Project
The purpose of this module is to provide you with the opportunity to deepen your understanding of the mathematical foundations of programming languages by studying in depth a specific topic related to your course. You will discuss your topic with your supervisor, choosing from a list of proposed topics. You will be required to write a report on your chosen topic and give a presentation on its central aspects.
Fuzzy Sets and Fuzzy Logic Systems
This module aims to provide a thorough understanding of fuzzy sets and systems from a theoretical and practical perspective. Topics commonly include: type-1 fuzzy sets, type-1 fuzzy logic systems, type-1 fuzzy set based applications, type-2 fuzzy sets, type-2 fuzzy logic systems, type-2 fuzzy set based applications. You will also be exposed to some of the cutting-edge research topics in uncertain data and decision making, e.g., based on type-2 fuzzy logic as well as other fuzzy logic representations. You will develop practical systems and software in a suitable programming language.
This module covers the history, development and state-of-the art in computer games and technological entertainment. You will gain an appreciation of the range of gaming applications available and be able to chart their emergence as a prevalent form of entertainment.
You will study the fundamental principles of theoretical game design, and how these can be applied to a variety of modern computer games. You will study the development of games as complex software sytems. Specific software design issues to be considered will include the software architecture of games, and the technical issues associated with networked and multiplayer games.
You will use appropriate software environments to individually develop a number of games to explore relevant theoretical design and practical implementation concepts.
Introduction to Human Computer Interaction
This module aims to teach an understanding of people's interactions with technology and how to apply this knowledge in the design of usable interactive computer systems. The module will introduce the concept of usability and will examine different design approaches and evaluation methods. Specifically, this module will cover an understanding of different styles of interaction with technology, an analysis of user needs, design standards, low fidelity prototyping techniques and a comparison of evaluation techniques.
Introduction to Image Processing
This module introduces the field of digital image processing, a fundamental component of digital photography, television, computer graphics and computer vision. You will cover topics including: image processing and its applications; fundamentals of digital images; digital image processing theory and practice; and applications of image processing. You will spend around three hours in lectures and computer classes each week for this module.
Knowledge Representation and Reasoning
This module examines how knowledge can be represented symbolically and how it can be manipulated in an automated way by reasoning programs. Some of the topics you will cover include: first order logic; resolution; description logic; default reasoning; rule-based systems; belief networks. You will have two hours of lectures each week for this module.
Providing you with an introduction to machine learning, pattern recognition, and data mining techniques, this module will enable you to consider both systems which are able to develop their own rules from trial and error experience to solve problems, as well as systems that find patterns in data without any supervision. In the latter case, data mining techniques will make generation of new knowledge possible, including very big data sets. This is now known as 'big data' science.
You will cover a range of topics including: machine learning foundations; pattern recognition foundations; artificial neural networks; deep learning; applications of machine learning; data mining techniques and evaluating hypotheses. You will spend around six hours each week in lectures and computer classes for this module.
Mathematical Foundations of Programming
This module focuses on some of the fundamental mathematical concepts that underlie modern programming and programming languages, including aspects of recent and current research. Example topics include: basic lambda calculus; operational semantics; types and type systems; and domain theory. You will spend around two hours per week in lectures studying for this module.
Mixed Reality Technologies
This module focuses on the possibilities and challenges of interaction beyond the desktop. You will explore the 'mixed reality continuum' - a spectrum of emerging computing applications that runs from virtual reality (in which a user is immersed into a computer-generated virtual world) at one extreme, to ubiquitous computing (in which digital materials appear embedded into the everyday physical world - often referred to as the 'Internet of Things') at the other. In the middle of this continuum lie augmented reality and locative media, in which the digital appears to be overlaid upon the physical world in different ways.
You will gain knowledge and hands-on experience of design and development with key technologies along this continuum, including working with both ubiquitous computing based sensor systems and locative media. You will learn about the Human-Computer Interaction challenges that need to be considered when creating mixed reality applications along with strategies for addressing them, so as to create compelling and reliable user experiences.
Mobile Device Programming
You will look at the development of software applications for mobile devices, with a practical focus on the Android operating system. You will consider and use the software development environments for currently available platforms and the typical hardware architecture of mobile devices. You will spend around three hours per week in lectures and computer classes for this module.
Parallel and Distributed Computing
A simple sequential computer program effectively executes one instruction at a time on individual data items. Various strategies are used in CPU design to increase the speed of this basic model, but at the cost of CPU complexity and power-consumption. To further increase performance the task must be re-organised to explicitly execute on multiple processors and/or on multiple data items simultaneously.
This module charts the broad spectrum of approaches that are used to increase the performance of computing tasks by exploiting parallelism and/or distributed computation. It then considers in more detail a number of contrasting examples. The course deals mainly with the principles involved, but there is the chance to experiment with some of these approaches in the supporting labs.
Topics covered include: common applications of parallel computing; parallel machine architectures including Single Instruction Multiple Data (SIMD) or short-vector processing; multi-core and multi-processor shared memory; custom co-processors including DSPs and GPUs, and cluster and grid computing; programming approaches including parallelising compilers; explicit message-passing (such as MPI); and specialised co-processor programming (such as for GPUs).
You will conduct a piece of empirical and/or theoretical research in an appropriate strand of the degree, under the supervision of a member of academic staff. Where appropriate, your project may also be conducted in conjunction with an external organisation and may or not involve a substantial software implementation.
Fundamentals of Artificial Intelligence
Through a two hour lecture once a week, this module gives you a broad overview of the fundamental theories and techniques of Artificial Intelligence (AI). You will explore how computers can produce intelligent behaviour, and will consider topics such as the history of AI, search techniques, data mining, machine learning, game playing techniques, neural networks, philosophical issues, and knowledge representation and reasoning.
Simulation and Optimisation for Decision Support
This module offers insight into the applications of selected methods of decision support. The foundations for applying these methods are derived from Operations Research Simulation, Social Simulation, Data Science, Automated Scheduling, and Decision Analysis. Throughout the module, you will become more competent in choosing and implementing the appropriate method for the particular problem at hand. You will spend five hours per week in lectures and computer classes for this module.
You will be introduced to the concept of Software Engineering and will be taken through the software development process: deciding exactly what should be built (Requirements & Specification), designing how it should be built (Software Architecture), development strategies (Implementation & Testing), and maintaining change (Software Evolution and Maintenance).
Software Engineering Management
This module covers the following topics: management of the introduction of new software or IT systems; software project management practices; practical experience of use of an Agile software development project management process; practical experience of use of Test Driven Development, pair programming and various approaches to software management tools, including the use of software versioning, project management planning tools and continuous integration and deployment.
Over the summer period towards the end of the course, you will undertake a research project in computer science. This project involves conducting a piece of research with depth, carried out under the supervision of a member of academic staff.
The modules we offer are inspired by the research interests of our staff and as a result may change for reasons of, for example, research developments or legislation changes. This list is an example of typical modules we offer, not a definitive list.