The first year of the course is the same as BSc Computer Science.
Explore the key concepts and tools underpinning modern computer science and learn to work in a variety of programming paradigms including imperative, object-oriented and functional languages such as C, Java and Haskell.
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.
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.
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.
Software Engineering
This module 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'll spend two-three 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.
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
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.
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.
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.