This module provides broader exposure to alternative programming language paradigms beyond imperative and object-oriented programming. Particular emphasis is given to functional programming languages, and their unique constraints and features. More specifically, students will investigate how introducing the concept of absolute immutability into programming languages enables a suite of expressive mechanisms within programming languages including pure functions, lambdas, higher order functions, pattern matching, currying, map/reduce, and pattern matching.
In this module, students will build upon the foundations of algorithms and their complexity to develop a deeper understanding of algorithmic approaches to computational problem solving. They will explore computational complexity theory, which allows us to consider the very nature of computability – including non-deterministic polynomial (NP) complexity classes such as NP-hard, NP-complete and the classes of problems which cannot be solved. Students will be introduced to classical approaches to problem solving such as divide and conquer, recursion, and parallel approaches, emphasizing their relative benefits and weakness to different classes of problem. They will study advanced data structures in depth, such as tries, heaps, suffix arrays, k-d trees, and distributed hash tables, and explore the approaches for their efficient construction and use.
These theoretical aspects are grounded through practical work in the lab and placed in the context of case studies of extreme scale and embarrassingly parallel computing, derived from real-world problem domains introduced by invited speakers where possible. Finally, students explore key implications of algorithm performance including their impact on energy efficiency and sustainability to provide a coherent interface with other modules.
Computer Networks and Systems
Building upon the foundations set in SCC.131, this module investigates the deeper concepts that underpin computer networking and operating systems. Students explore the role, operation, and design rationale of the IP protocol suite –which enables the global internet. Taking a top-down approach, students discover how protocols such as HTTP, DNS, and TCP/IP operate on a fundamental level, the metrics and tools we use to evaluate the performance of computer networks.
Using laboratory-based simulators, students will also explore first-hand how routing protocols ensure user data is efficiently and safely routed across the global internet. They will study the interface between computer networks and operating systems, and how the concept of virtualization has transformed the way computer systems and networks efficiently make use of their hardware resources.
Most computing systems are interactive and have people in the loop. Human-computer interaction (HCI) is concerned with all aspects of designing, building, evaluating, and studying systems that involve human interaction. From a computing perspective, students focus on enabling interaction through user interfaces, and on creating interactive systems that are usable and provide a good user experience.
The module introduces students to the foundations of HCI in understanding human behaviour, technologies for interaction, and human-centred design. Students will review human perception, cognition and action and relate these to design principles and guidelines; discuss different user interface paradigms and key technologies such as pointing; and introduce practical methods for design and evaluation with users.
This module builds upon knowledge gained in Part I by providing a theoretical background to the design, implementation, and use of database management systems, both for data designers and application developers. It incorporates consideration of information quality and security in the design, development, and use of database systems.
As a part of this module, students will be introduced to a brief history of database management systems, Entity-Relationship Models, the relational model and the data normalisation process, and alternative schema definitions, NoSQL and object-oriented data models, big data, as well as transaction processing and concurrency control. The module embeds practical access and retrieval considerations and how to interact with databases written in a number of programming languages.
Secure Cyber Systems
The module aims to provide students with information on Authentication, Authorisation, and Accountability (AAA) and its building blocks. An emphasis will be given on authorisation, where access control models, policies and mechanisms will be examined.
Students will review main categories of existing cryptosystems (e.g. symmetric, asymmetric) in order to understand their use and offered security properties (e.g. confidentiality, integrity, non-repudiation) in practice. They will explore operating systems security and network security concepts in connection to AAA and cryptosystems, as well as being introduced to formal verification and how it can be used to verify properties on cyber security systems.
Software Design offers the opportunity to gain an understanding of the importance of software architecture design, different styles of architecture and the meaning of quality attributes for software design such as maintainability, performance and scalability. Students will gain knowledge of systematic approaches to developing software design using a set of graphical models. The design process involved in developing several modes of the system at different levels of abstraction is explained and they will be introduced to object oriented design with UML.
Throughout the module, students will appreciate the broader context of the role of computer science in the workplace, and the key role it plays in implementing software. The course also looks at understanding the meaning of quality attributes for software design as well as architectural models for specific software systems. Students will gain an insight into the main quality attributes for deciding classes. Students will be able to interpret and construct UML models of software and implement a design expressed as a UML mode as well as understanding how to use various design patterns to address certain problems.
Artificial Intelligence Concepts
This module introduces the key ideas and fundamental principles of artificial intelligence (AI) and the types of problems that can be addressed by AI. Students will be introduced to the core concepts and philosophy of AI, including its history and definitions, classify the various approaches to AI, and discuss its presence in the modern world alongside its ethical considerations. They will unearth the underlying principles of search spaces, knowledge representation, and inference logic that form the core of rule-based systems.
Students will then go on to learn the principles of machine learning, emphasising clustering (e.g. k-means), classification (e.g. k-nearest neighbour) algorithms, linear regression, and neural networks. This deep dive provides the essential grounding necessary to progress to modules in topics such as Machine Learning, Computer Vision, and Natural Language Processing.
Computer Science Group Project
The group project will give students experience in executing a project through all stages, working to the demands of a client, and practically combine and apply concepts and skills gained in other modules studied so far in their programme. Students will learn to apply their knowledge about prototyping, project planning, management, design, and user evaluation or testing strategies. Teams will deliver reports, code, and demonstrate a working system. They will also communicate their work through reports, demonstrations, and presentations.
The project content may differ from year to year, and groups may be able to select projects aligned with the School’s main themes of Software, Systems, Data and Theory, Interactions and Implications, and Cyber Security, although each theme may not be available every year. Example topic areas could be desktop application development, game programming, computer graphics, user interfaces, mobile computing, or other areas. The exact requirements of a group project will vary according to the focus of its theme; however, the course structure of a group project will be the same between themes and different years. Students will receive about 30 hours of workshop contact time throughout the module, in addition to lectures, and then will be expected to work independently as a group.
To support this practical activity, two strands of lectures are delivered. One covers programming and continues the development of the students practical programming skills to allow them to confidently contribute to larger, team-based programming projects. The second covers teamwork, project management, risks, and costings so that the student has a sound base for managing collaborative projects.