Programming and Algorithms
The module introduces basic principles of programming and algorithms. It covers fundamental programming constructs, such as types and variables, expressions, control structures, and functions. You'll learn how to design and analyse simple algorithms and data structures that allow efficient storage and manipulation of data. You'll become familiar with basic software development methodology. You will spend around six hours per week in lectures, computer classes and tutorials.
This module introduces, in a practical way, how the computer, its operating system and the network it connects to talk. You will see how a single fundamental component, the NAND gate, can be arranged to build all aspects of the computer's hardware and how that hardware can be programmed directly. You will also see how to communicate over a network to other computers. You'll spend around five hours per week in tutorials, lectures and computer classes.
Systems and Architecture
This module runs alongside 'Computer Fundamentals' and provides an expanded view by considering how real computer systems (such as ARM, x86, Linux and *BSD) and networks work. You’ll also cover the principles of the lower level implementation of I/O using polling and interrupts, and the use of exceptions; how memory and storage is organized as well addressing the issues arising from multicore systems. You’ll spend around five hours per week in tutorials, lectures and computer classes.
Mathematics for Computer Science
You’ll cover the basic concepts in mathematics which are of relevance to the computer scientists. Topics which will be covered include: logic; sets, functions and relations; graphs; induction, basic probability and statistics; matrices. You’ll spend around four hours per week in lectures and tutorials for this module.
Database and Interfaces
This module considers both the structure of databases, including how to make them fast, efficient and reliable, and the appropriate user interfaces which will make them easy to interact with for users. You will start by looking at how to design a database, gaining an understanding of the standard features that management systems provide and how you can best utilise them, then develop an interactive application to access your database. Throughout the lectures and computing sessions you will learn how to design and implement systems using a standard database management system, web technologies and GUI interfaces through practical programming/system examples.
This modules focuses on the fact that programming is only one step of the larger software engineering process. To develop good software, you must gather requirements, design it well, plan the development, do the programming, have a testing strategy, test the parts and the product as a whole, and have a maintenance strategy for fixing the things that no one (even the client) imagined were important until it after it was delivered.
Software Engineering is a process that is much more than just programming. You will spend around 2-3 hours per week discussing the stages of the Software Engineering process in lectures, whilst carrying out activities in labs that help you understand the underlying issues.
In this module you will learn the basic principles of the object-oriented and functional approaches to programming, using the languages Java and Haskell. You will also see how they can be used in practice to write a range of different kinds of programs. You will spend around five hours per week in lectures and labs.
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’ll explore how computers can produce intelligent behaviour, and will consider topics such as the history of AI, AI search techniques, neural networks, data mining, philosophical and ethical issues, and knowledge representation and reasoning.
Algorithms, Correctness and Efficiency
This module covers important aspects of algorithms, namely their correctness and efficiency. You’ll study topics such as: proofs in propositional logic and predicate logic; classical vs. intuitionistic reasoning; basic operations on types; verification of list based programs; and introduction to program specification and program correctness. To address the issue of efficiency we cover the use of mathematical descriptions of the computational resources needed to support algorithm design decisions. The emphasis is upon understanding data structures and algorithms so as to be able to design and select them appropriately for solving a given problem.
Software Application and Design
This module builds on and further develops basic software design practices. It covers design patterns, data processing, regression testing, networking, and GUI programming. You'll learn how to read, understand, modify and extend a large piece of software. You'll become familiar with GUI design guidelines and usability heuristics. You will spend around six hours per week in lectures, computer classes and tutorials.
This module covers a range of issues relating to operating systems, and distributed and parallel computing. Topics in operating systems include the architecture of operating systems, process and memory management, storage, I/O, and virtualisation. Topics in parallel and distributed computing include parallelism vs concurrency, task and data-parallel based decomposition, parallel architectures, parallel algorithms and programming.
Software Engineering Group Project
Working in groups of around five to six people, you’ll be assigned a supervisor who will provide you with a short written description of a computer application to be designed, programmed, and documented during the course of the module. Each group will meet twice a week, once with your supervisor and once without; you’ll also have four introductory one hour lectures.
Languages and Computability
In this module you will investigate classes of formal language and the practical uses of this theory, applying this to a series of abstract machines ultimately leading to a discussion on what computation is and what can and cannot be computed. You will focus in particular on language recognition, but will study a range of topics including: finite state machines, regular expressions, context-free grammars, Turing machines and Lambda calculus. This module builds on parts of the ACE module addressing data structures and formal reasoning and introduces concepts which are important to understand the analysis of algorithms in terms of their complexity.
Artificial Intelligence Methods
This module builds on the Introduction to Artificial Intelligence module. You will study some of the more important AI topics (eg search) and some of the more modern AI techniques (eg artificial neural networks). This is a practical module and you will expect to have two hours in lectures and two hours computer labs per week implementing the ideas in appropriate modern software.
Graphic User Interfaces
This module will introduce you to programming concepts and structures by considering the Java Swing packages in depth. You’ll explore a wide range of components, and will consider the other APIs, which allows easy incorporation of high-quality 2D graphics, text, and images in applications, and the use of Integrated Development Environments (IDEs), which simplify the construction of graphical user interfaces. You’ll spend around four hours each week in lectures and computer classes.
Advanced Functional Programming
Building upon the introductory Functional Programming module in year one, you’ll focus on a number of more advanced topics such as: programming with effects; reasoning about programs; control flow; advanced libraries; improving efficiency; type systems; and functional pearls. You’ll spend around four hours per week in lectures and computer classes.
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’ll cover topics including: image processing and its applications; fundamentals of digital images; digital image processing theory and practice; and applications of image processing. You’ll spend around three hours in lectures and computer classes each week.
Planning, Search and Artificial Intelligence Programming
You’ll be introduced to Artificial Intelligence (AI) algorithms and programming techniques for search and planning. Topics covered include: classical search; search with non-determinism and partial observability; local search; classical planning; reasoning about actions; planning under uncertainty; conditional planning; planning with time and resources; other typical AI problems and how to implement them in an AI programming language.
You will cover the programming material and concepts necessary to obtain an understanding of the C++ programming language. You will spend around four hours per week in lectures and computer classes for this module and will be expected to take additional time to practice and to produce your coursework.
Individual Dissertation (Single Honours)
Through a one hour lecture and a tutorial with your supervisor each week, you’ll develop your own independent research project and written report. Topics can range from purely theoretical studies to practical work building a system for a third party.
You’ll begin by considering the attempts to characterise the problems that can theoretically be solved by physically-possible computational processes. You’ll 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. A key topic is an examination of the classes P and NP and the definition of the term NP-complete. You’ll spend around two hours per week in lectures.
Automated Decision Support Methodologies
The main aim of this module is to provide a sound understanding of wide range of fundamental concepts, techniques and methods of operational research and artificial intelligence that can help in design of automated intelligent decision support systems. The module will present a variety of applications from industrial and service sectors.
Software Quality Management
Through a two hour lecture each week, you’ll be introduced to concepts and techniques for software testing and will be given an insight into the use of artificial and computational intelligence for automated software testing. You’ll also review recent industry trends on software quality assurance and testing.
Spending four hours a week in lectures and computer classes, you’ll cover the following topics: security of the computer; security of networks; security and the internet; software and hardware security; mobile security; and basic cryptography.
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’ll cover include: first order logic; resolution; description logic; default reasoning; rule-based systems; belief networks and fuzzy logic. You’ll have two hours of lectures each week.
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. You’ll 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’ll spend around six hours each week in lectures and computer classes.
Collaboration and Communication Technologies
In this module you’ll consider the design of collaboration and communication technologies used in a variety of different contexts including workplace, domestic and leisure environments. You’ll consider the basic principles of such technologies, explore the technologies from a social perspective, consider their impact on human behaviour and critically reflect on their design from a human-centred perspective. You’ll spend around two hours per week in lectures.
You’ll examine the principles of 3D computer graphics, focusing on modelling the 3D world on the computer, projecting onto 2D display and rendering 2D display to give it realism. Through two hours per week of lectures and laboratory sessions, you’ll explore various methods and requirements in 3D computer graphics, balancing efficiency and realism.
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 around three to four hours each week in lectures and practicals, you’ll cover a range of topics including basic behavioural control architectures, programming of multiple behaviours, capabilities and limitations of sensors and actuators and filtering techniques for robot localisation.
Fuzzy Sets and Fuzzy Logic Systems
You’ll review classical Boolean logic and set theory, including the common operations of union, intersection and complement. Fuzzy Logic Systems (FLSs) will be introduced and illustrated in conjunction to examples of real world applications in industrial control and other areas. You’ll spend around four hours each week in lectures and workshops, and will be given the opportunity to design, programme and deploy a fuzzy logic system, providing a tangible real world example of some underlying concepts of FLSs.
MSci Individual Research Project
Students undertake a research project in computer science supervised by an academic member of staff. The topic should fall within the supervisor's research interests and must further be relevant to the student's programme of study; in particular, projects undertaken by artificial intelligence (AI) students must have a strong AI focus. The project may be proposed by either the supervisor or the student, and may be theoretical, empirical, or even of survey type depending on what is appropriate and feasible for the area and topic. Projects, however, must ultimately be agreed with the supervisor concerned.
The results from the project are to be distilled into a conference-format research paper, authored by the student and constituting the main assessed output. There may, however, be further deliverables as dictated by the nature of the project. Any such deliverables are to be submitted (electronically) as supplementary material. A revised version of the paper, possibly co-authored with the supervisor, may subsequently be submitted for publication to an external venue, such as a conference or journal, if the work is judged to be of sufficiently high standard.
MSci Group Programming Project
Students undertake a programming project for an external client in self-formed groups of two to four students under the supervision of an academic member of staff. The client, which can be a company, charity, research group etc., but not the supervisor, provides a problem that requires a sufficiently challenging piece of software to be developed. The client and project idea could be provided by the students or the supervisor. However, projects must have aspects that are relevant to each student's programme of study; eg, there needs to be an artificial intelligence (AI) aspect if any AI students are involved.
The main assessed outputs are the developed software, including any end-user documentation, along with a 5,000-word document that outlines the development, design and implementation of the software, highlighting the most interesting aspects. The software must be developed in a professional and systematic manner appropriate for the problem domain. The assessment is informed by a statement from the external client on how well the developed software addresses the problem. Additionally, each student submits an individual 5,000-word report explaining his or her own contributions and giving a critical appraisal of how the project went, including group dynamics and the contributions of others.
Msci Individual Programming Project
Students undertake a programming project for an external client in self-formed groups of two to four students under the supervision of an academic member of staff. The client, which can be a company, charity, research group etc., but not the supervisor, provides a problem that requires a sufficiently challenging piece of software to be developed. Projects must have aspects that are relevant to each student's programme of study; eg, there needs to be an artificial intelligence (AI) aspect if any AI students are involved.
The main assessed outputs are the developed software, including any end-user documentation, along with a 5,000-word document that outlines the development, design and implementation of the software, highlighting the most interesting aspects. The software must be developed in a professional and systematic manner appropriate for the problem domain. The assessment is informed by a statement from the external client on how well the developed software addresses the problem.
Advanced Algorithms and Data Structures
You'll study the theory used in the design and analysis of advanced algorithms and data structures. Topics covered include string algorithms (such as for string matching, longest common subsequence), graph algorithms (such as for minimum cuts and maximum flows, and Google's pagerank algorithm), advanced data structures (such as Fibonacci heaps and Bloom filters), and randomised search heuristics (evolutionary algorithms). You'll learn all the necessary probability theory will be introduced, including random variables and concentration inequalities.
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.
You’ll explore the emerging field of ubiquitous computing, in which computation spreads away from the desktop to become embedded into the world around us, including into artefacts, furniture, buildings and ultimately into our own bodies. You’ll cover the distinctive design challenges in this field including designing for public settings, adapting to context and coping with uncertainty in positioning and wireless communications. You’ll spend around three hours in lectures and computer classes each week.
Simulation for Decision Support
This module introduces you to three broad simulation paradigms commonly used in operations research and management science: system dynamics, discrete event, and agent-based. Covering topics such as the introduction to the principles of modelling and simulation, conceptual modelling, model implementation, and output analysis, you will become competent in choosing and implementing the correct method for your particular problem. You will spend around four hours per week in lectures and computer classes.
Designing Intelligent Agents
You’ll 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. You'll spend around two hours each week in lectures and tutorials, you’ll cover topics including task environments, reactive, deliberative and hybrid architectures for individual agents, and architectures and coordination mechanisms for multi-agent systems.
Advanced Computer Communications
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 protocol, routing, presentation coding, services and security. You’ll spend around three hours per week in lectures and computer classes.
Mobile Device Programming
You’ll look at the development of software applications for mobile devices, with a practical focus on the Android operating system. You’ll consider and use the software development environments for currently available platforms and the typical hardware architecture of mobile devices. You’ll spend around three hours per week in lectures and computer classes.
Operations Research and Modelling
The module provides an entry point to operations research with emphasis in techniques for computational optimisation. Operations Rresearch (OR) is a discipline that uses modelling techniques, analytics and computational methods to solve complex optimisation problems in industry and business. You will learn to interpret and create formal models of optimisation problems and to develop computer-based solutions to solve those problems. The module covers topics such as linear programming, integer programming, combinatorial optimisation, modelling and optimisation software, and multi-objective optimisation among others. You will spend around three hours per week in lectures and workshops.
This module introduces you to the theory and practice of design ethnography. You’ll cover a range of topics including: origins and evolution of ethnography; foundations and nature of the ethnomethodological approach; ethnographic analysis; and the perceived problems with the approach. You’ll spend around two hours each week in lectures and tutorials for this module.
You’ll 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 identification of objects, recovery of three-dimensional shape and motion, and the recognition of events. You’ll learn how to implement some of these methods in the industry-standard programming environment MATLAB. You’ll spend around three hours a week in lectures and laboratory sessions.
Selected Topics in Artificial Intelligence
Artificial intelligence is the science and engineering of making intelligent machines, especially intelligent computer programs, and covers a variety of topics including, agents, bio-inspired computational systems, computer vision, data mining, fuzzy logic, machine learning, modelling and optimization, operational research, pattern recognition, scheduling, and simulation. The module will introduce students to the latest developments and technological trends in selected topics in artificial intelligence, offered by staff in the school who are world leading researchers.
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. The above list is a sample of typical modules we offer, not a definitive list.