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 learnhow to design and analyse simple algorithms and data structures that allow efficient storage and manipulation of data. You’ll also 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 Scientists
You’ll cover the basic concepts in mathematics which are of relevance to the computer scientists. Topics 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.
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 and system examples.
Introduction to Software Engineering
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 after it is delivered.
You will spend around two to three hours per week 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 for this module.
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.
Algorithm and Data Structures
This module introduces you to the basics of how to specify abstract data types and use them to design programs. You’ll cover the use of mathematical descriptions of the computational resources needed to support algorithm design decisions.
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.
Operating Systems and Concurrency
This course covers the fundamental principles that underpin operating systems and concurrency. Topics in operating systems that are covered include the architecture of operating systems, process and memory management, storage, I/O, and virtualisation. The principles of concurrency will be introduced from both the perspective of an operating system and user applications. Specific topics on concurrency include: hardware support for concurrency; mutual exclusion and condition synchronisation; monitors; safety and liveness properties of concurrent algorithms, and the use of threads and synchronisation.
Software Application Development
This module builds on and further develops basic software design practices. You’ll cover 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 also become familiar with GUI design guidelines and usability heuristics. You will spend around six hours per week in lectures, computer classes and tutorials.
Planning, Search and Artificial Intelligence Programming
This module builds on the first Introduction to Artificial Intelligence module. You will study some of the more important AI topics (e.g. search) and some of the more modern AI techniques (e.g. artificial neural networks). This is a practical module and you will expect to have two hours in lectures and two hours in computer labs per week, implementing the ideas in appropriate modern software.
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.
Machines and their Languages
You’ll investigate classes of formal language and the practical uses of this theory, applying this to a series of abstract machines. You’ll focus in particular on language recognition, but will study a range of topics including: finite state machines; regular expressions; context-free grammars; and Turing machines. You’ll spend around two hours per week in lectures studying.
Human Computer Interaction
Through two hours of lectures each week, you’ll be given an overview of the field of human computer interaction, which aims to understand people's interaction with technology and to apply this knowledge in the design of usable interactive computer systems. You’ll also learn the concept of usability and examine different design approaches and evaluation methods.
Introduction to Formal Reasoning
Developing the themes of the year one module Mathematics for Computer Scientists, you’ll be introduced to a mathematically rigorous approach to program construction. 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. You’ll spend around five hours per week in lectures, tutorials and computer classes.
Computer Communications and Networks
This module will give you an overview of technologies including data transmission techniques, Local Area Networks, Wide Area Networks, network security, and network applications. You’ll pay particular attention to the internet environment and TCP/IP protocols. You’ll spend around two hours each week in lectures.
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, and will be expected to take additional time to practice and to produce your coursework.
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.
Individual Dissertation – Artificial Intelligence
You’ll perform an individual project on a topic in computer science with emphasis in artificial intelligence. You’ll produce a 15-25,000 word project report under the guidance of your supervisor, who you will meet with for an hour each week. The topic can be any area of the subject which is of mutual interest to both the student and supervisor, but should involve a substantial software development component.
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.
Computers in the World
The module examines the scope of applications of computers and computing in the world at large from scientific supercomputers, through PCs, tablets, embedded computers, etc. The module covers various topics such as: dependability of computer-based systems and associated risks; legal liability, data protection and intellectual property issues; social and cultural impacts of computing; the portrayal of computers and computing in the popular media and in fiction; ethical issues in computing; and professional issues including the role of professional bodies. You will spend around two hours per week in lectures and workshops.
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. Spending around four 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.
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 a week in lectures for this module.
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.
You’ll examine aspects of language and compiler design by looking at the techniques and tools that are used to construct compilers for high level programming languages. Topics covered include: parsing; types and type systems; run-time organisation; memory management; code generation; and optimisation. You’ll spend around four hours each week in lectures and computer classes.
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.
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.
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.
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 Development Project
In this module you are given the opportunity to combine your developing CCT knowledge with your programming abilities. You have the whole semester to build a working collaborative project, optionally in a team, and produce a report on how it supports collaboration according to CCT theory. The primary focus is on building a working application, and so existing strong programming ability is required to take this co-requisite with G53CCT.
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.