Compulsory modules will provide a foundation in computer science, and a range of optional modules will provide you with the opportunity for more advanced study.
During semester one, you will study the following compulsory modules if your first degree and experience does not cover the relevant subjects.
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.
Systems and Networks
You will gain an introduction to the role of the operating system and how it manages computer resources such as memory, processes and disks.
Databases, Interfaces and Software Design Principles
You will gain an introduction to the theory and practice of database systems and experience with a modern database system through the use of the SQL language.You will cover the structure and workings of database systems, design and implementation of a database driven website, and the principles of software engineering design.
All students will take the Individual Project:
|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 involve a substantial software implementation.
In one or both semesters, you will then study the following optional 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.
Autonomous Robotic Systems
This module introduces you to the computer science of robotics, giving you an understanding of the hardware and software principles appropriate for control and localisation of autonomous mobile robots. A significant part of the module is laboratory-based, utilising physical robotic hardware to reinforce the theoretical principles covered.
Spending two hours each week in lectures and supervised labs, with an additional two-hour unsupervised practical session, you’ll cover a range of topics including basic behavioural control architectures, multi-source data aggregation, programming of multiple behaviours, capabilities and limitations of sensors and actuators, and filtering techniques.
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.
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.
Fundamentals of Information Visualisation
Information Visualisation is the process of extracting knowledge from complex data, and presenting it to a user in a manner that this appropriate to their needs. This module provides a foundational understanding of some important issues in information visualisation design. You will learn about the differences between scientific and creative approaches to constructing visualisations, and consider some important challenges such as the representation of ambiguous or time-based data. You will also learn about psychological theories that help explain how humans process information, and consider their relevance to the design of effective visualisations.
Fuzzy Logic and Fuzzy 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 systems. 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.
Information Visualisation Project
This module provides an opportunity to put into practice knowledge and understanding that you have developed through the linked module G53FIV. You will gain practical experience of how to design and evaluate a distinctive interactive visualisation which presents information gathered from a complex and interesting data source.
Your project will be supported by tutorials that introduce practical topics that are essential to effective visualisation design, and which have not been considered in G53FIV, including specific algorithms for extracting information from data, structured processes for designing visualisations and selected elements of design aesthetics (such as colour choice and typography). You will gain experience in web-based technologies that enable the implementation of multi-layered and interactive information visualisations, supported through lab work that introduces specific features of these technologies.
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.
Linear and Discrete Optimization
The module provides an entry point to computational optimization techniques, in particular for modelling and solving linear and discrete optimization problems like diet optimization, network flows, task assignment, scheduling, bin-packing, travelling salesmen, facility location, vehicle routing and related problems. Computational optimization is one of the most important areas within operations research (OR), which is a discipline that uses modelling techniques, analytics and computational methods to solve complex problems in industry and business. In this module you will learn to interpret and develop algebraic models for a variety of real-world linear and discrete optimization problems to then use powerful optimization software (linear, integer and mixed-integer solvers) to produce a solution.
The module covers topics such as linear programming, integer programming, combinatorial optimization, modelling and optimization software, and multi-objective optimization among others. Optimization technology is ubiquitous in today's world, for applications in logistics, finance, manufacturing, workforce planning, product selection, healthcare, and any other area where the limited resources must be used efficiently. Optimization enables prescriptive analytics in order to support and automate decision-making. You will spend around four hours per week in lectures and workshops 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.
Mixed Reality Technologies
Focuses on the possibilities and challenges of interaction beyond the desktop. Exploring 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.
Programs, Proofs and Types
This module focuses on some of the fundamental mathematical concepts that underlie modern programming and programming languages emphasizing the role of types. We will use a dependently typed programming language/ interactive proof system (e.g. Agda) to implement some concepts on a computer.
Example topics include: basic lambda calculus; operational semantics; domain theory; types, propositions as types and formal verification. You’ll spend around three hours per week in lectures studying for this module and one hour in the lab working with an interactive proof system.
Real-world Functional Programming
This module introduces tools, techniques, and theory needed for programming real world applications functionally, with a particular emphasis on the inherent benefits of functional programming and strong typing for reuse, maintenance, concurrency, distribution, and high availability. These are all aspects that have contributed to the popularity of functional programming for demanding applications e.g. in the finance industry, and have also had a significant impact on the design of many modern programming languages such as Java, C#, and Rust, and frameworks such as MapReduce and React.
The exact content may vary, but typically includes topics such as functional design patterns, pure data structures, reactive programming, concurrency, frameworks for web/cloud programming, property-based testing, and embedded domain-specific languages. The medium of instruction is mainly Haskell, but other functional languages, for example Erlang, may be used where appropriate and for a broader perspective.
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.
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.
Individual Research Project
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 above is a sample of the typical modules that we offer but is not intended to be construed and/or relied upon as a definitive list of the modules that will be available in any given year. Due to the passage of time between commencement of the course and subsequent years of the course, modules may change due to developments in the curriculum and information is provided for indicative purposes only.