The first year is the same as for the computer science course. You will be introduced to the key concepts and tools underpinning modern computer science.
You will learn to work in a variety of programming paradigms including imperative, object-oriented and functional languages such as C, Java and Haskell. You will also study the architecture of computers at the chip and system level, and learn the mathematics needed later in the course. Areas of artificial intelligence that you will focus on in later years are introduced.
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 also become familiar with basic software development methodology.
You will spend around six hours per week in lectures, computer classes and tutorials.
Computer Fundamentals
You will gain a basic understanding of the fundamental architecture of computers and computer networks.
You’ll learn how the simple building blocks of digital logic can be put together in different ways to build an entire computer.
You’ll also learn how modern computer systems and networks are constructed of hierarchical layers of functionality which build on and abstract the layers below.
You will spend 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 are 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.
These include:
- logic
- sets
- functions and relations
- graphs
- induction
- basic probability
- statistics and matrices
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.
Through 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.
Software Engineering
You will focus 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 after it was delivered.
You will spend around two-three hours per week discussing the stages in lectures, whilst carrying out activities in labs that help you understand the underlying issues.
Programming Paradigms
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.
Fundamentals of Artificial Intelligence
You will gain 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.
You will spend two hours per week in lectures for this module.