Computing and Communications

The following modules are available to incoming Study Abroad students interested in Computing and Communications.

Alternatively you may return to the complete list of Study Abroad Subject Areas.

NATS6201: Teaching, Outreach and Public Engagement

  • Terms Taught: Lent/Summer
  • US Credits: 5 US Semester Credits 
  • ECTS Credits: 10 ECTS Credits
  • Pre-requisites: None

Course Description

This course will help address the national problem of lack of STEM teachers and lack of science understanding among the wider population. In addition, the outreach activities should help promoting STEM and Lancaster university to potential students. It will also raise the profile of Lancaster as one of the first university offering such a course as a cross departmental course. Students will learn how to produce an asynchronous activity (e.g. video, podcast, popular science article, teaching material pack, etc) as well as well as deliver a synchronous activity (a lesson in school, outreach activity for young people or a public lecture). They will learn to understand their audience and balance the goals of education, entertainment and inspiration. Skills will be directly relevant to students wishing to go onto teaching or outreach as will be transferable to many careers which value communicating advanced topics.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Discuss key themes in the theory and practice of education and engagement.
  2. Engage with a range of media (e.g. oral, written, digital, etc).
  3. Understand audience, EDI, and devise appropriate ways to communicate a principle or concept in science.
  4. Plan and organise a classroom or engagement activity.
  5. Critically evaluate and reflect on a classroom or engagement activity.

Outline Syllabus

This module will give students the knowledge to entertain and inspire children and the general public in STEM. For those choosing it, it is also an introduction to teaching. This is an optional module with 100% coursework. The module includes: the importance of understanding your audience, EDI, the balance of education, inspiration and entertainment, presenting science to a general audience, an introduction to pedagogy, inspiring school pupils in STEM, and using traditional and new media for science communication. The students are required to deliver one synchronous activity and asynchronous activity. Students may choose to deliver these activities from across multiple disciplines which could stem from beyond their traditional degree boundaries. The synchronous activity will be one of the following: delivering a lesson at school, engaging with children at a large outreach event or delivering a public lecture. Examples of asynchronous activity include a video, podcast, popular science article or teaching pack. Students will gather evidence to reflect on their activities and consider what they learnt and what changes they would have made.

Assessment Proportions

Assessment via ongoing essays, asynchronous activity, portfolio and reflective essay. The entire coursework should be submitted before the examination period.

  • 20% ongoing essays (2 essays, 10% each)
  • 30% asynchronous activity (video, podcast, popular science article, teaching pack)
  • 20% portfolio
  • 30% reflective essay

SCCM4110: Software Development A

  • Terms Taught: Michaelmas term.
  • US Credits: 5
  • ECTS Credits: 10 ECTS
  • Pre-requisites: None

Course Description

This module aims to instil the knowledge, understanding and skills expected of a principled computer programmer. More specifically it aims to develop a coherent understanding of the principles and practice of imperative programming, the software development lifecycle and its associated tools and techniques.

In the process it will introduce students to the universal skill of computational thinking (which encompasses abstraction, decomposition and indirection as key themes). This is a fundamental skill in computer science and is built on as students progress through later years of study. The module also exercises other widely applicable cognitive skills including applied problem solving, and an introduction to team working and project skills, placed in a discipline context.

This module is part of the Software theme focusing on programming languages and software development.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Apply computational thinking skills imperative programming principles to create software programs of moderate complexity.
  2. Recognize common security risks in programs and apply principles of secure programming.
  3. Interpret the behaviour of computer programs and their meta data to identify errors in programs.
  4. Test simple computer programs for correctness and use professional tools and techniques to automate such tests.
  5. Describe and apply best practices in software development including code style conventions, documentation and version control, and discuss why they are needed.
  6. Compare and contrast the benefits of drawbacks of a given programming language for a given task.
  7. Demonstrate numerical, communication and problem-solving skills.

Outline Syllabus

Software forms a central aspect of our lives. From the applications we run on our phones to satellites in space, all modern technology is enabled by software. This module focuses on the field of Software Development - the processes and skills associated with designing and constructing computer programs.

Designed with tasks that flex to accommodate students with varying levels of previous experience with the field of computing, the module provides the contemporary knowledge, skills and techniques needed to develop high-quality computer software. This includes a thorough treatment of the principles of computer programming and how these principles can be applied using a range of contemporary and established languages such as C and Python.

You will study the Software Engineering skills needed to ensure software is correct, robust and maintainable, including techniques for problem analysis, design formulation, programming conventions, documentation, testing and test case design, debugging and version control.

Assessment Proportions

Summative assessment format is standardised across school modules and typically takes the form of a low-weighted summative “mid-term” in-class test which the student can use to gauge their progress against expectations; a longer duration, less guided, practical coursework to demonstrate their ability apply the knowledge and practical skills they have acquired; and a high-weighted invigilated computer-based exam.

SCCM4120: Software Development B

  • Terms Taught: Lent/Summer term.
  • US Credits: 5
  • ECTS Credits: 10 ECTS
  • Pre-requisites: Must have covered content similar to Software Development.

Course Description

This module builds upon the foundations of software development provided by SCCM4110 and aims to instil the additional knowledge and skills needed to write large scale software in commercial environments. More specifically, the module aims to develop an appreciation for the importance of non-functional parameters such as strong cohesion, loose coupling, scalability, extensibility, and the state-of-the-art design patterns that achieving these in contemporary programming languages.

The module also aims to introduce the industry standard notations and tools used to capture these design decisions. These aims are achieved via the object-oriented paradigm and students will learn the Java programming language during the module. The module aims to further practice students design and implementation skills, approach to systems thinking, appreciation for professional conduct and general technical computing skills. As such, it will also discuss important issues around copyright, IP, and software licensing that are encountered as you start to build larger systems.

This module is part of the Software theme focusing on programming languages and software development.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Design object-oriented software that exhibits high degrees of modularity, extensibility and scalability.
  2. Use industry standard notations and terminology.
  3. Recognize common design patterns in software and choose appropriate design patterns for a given task.
  4. Construct non-trivial object-oriented programs that exhibit strong software design principles.
  5. Demonstrate verbal and written communications skills.
  6. Apply computational thinking principles.
  7. Practice software design and programming skills.

Outline Syllabus

Software development is a collaborative and creative process, requiring far more than a single individual undertaking programming activities. This module investigates the processes, tools, techniques, and notations required to successfully undertake the development of commercial grade software. Focusing on the key non-functional parameters of software reuse, scalability, maintainability, and extensibility, you will explore the benefits brought by the rigour associated with object-oriented, strongly typed languages (such as Java). You will practice the concepts of composition, inheritance, polymorphism, interfaces, and traits and the commonly employed design patterns that they enable.

You will also study the processes and notations associated with defining the relationships and behaviour of complex computer software systems. Practical activities will allow you to continue to refine the programming skills studied in Software Development to create ever-more complex systems. You will also cover important issues around copyright, IP, and software licencing that are encountered as you start to build larger systems such as free, open source, and proprietary licensing.

Assessment Proportions

Summative assessment format is standardised across school modules and typically takes the form of a low-weighted summative “mid-term” in-class test which the student can use to gauge their progress against expectations; a longer duration, less guided, practical coursework to demonstrate their ability apply the knowledge and practical skills they have acquired; and a high-weighted invigilated computer-based exam.

SCCM4210: Fundamentals of Computer Science

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: None

Course Description

This module is designed to instil the knowledge and understanding required to enable students to think deeply and rationally about problems that provide insight into the fundamental principles and limits of Computer Science and related mathematical concepts. These can be used to analyse and characterise the efficiency of algorithms, and to make the correct design choice to optimise efficiency when implementing computer programs.

Building on this, it instils fundamental knowledge and understanding of the role and characteristics of data structures and the continuing importance of search and sort algorithms and their detailed operation and characteristics. Data Science principles and techniques are introduced and applied for the analysis of data, including how databases can model relationships within data and practically building them using SQL.

This module fosters the development of a range of transferrable skills including applied problem solving, independent learning, and principled analysis of scenarios and arguments. It is part of the Data and Theory theme focusing on theoretical computer science, artificial intelligence, and data science.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Explain the notions of key discrete mathematic concepts such as sets, relations, functions and recursion
  2. Apply elements of discrete mathematics for problem solving
  3. Describe how data structures and abstract data types are implemented
  4. Describe how relationships between data should be modelled in a relational database, express that via appropriate notation, and practically implement SQL databases and queries.
  5. Identify suitable data structures for program implementation
  6. Analyse the efficiency of algorithms and computer programs
  7. Convey the importance of search and sorting techniques and their efficiency and complexity
  8. Apply general science and engineering relevant to computing, numerical, modelling, programming, and simulations skills.
  9. Apply theory and practice to solve problems and/or evaluate an artefact using methodologies such as formal analysis, numerical analysis, simulation or observation.
  10. Follow and understand a systematic process.

Outline Syllabus

Computing and data drive many critical elements of modern society. It’s vital that there is a strong theoretical foundation to computer science and this module prepares you for the in-depth critical thinking and logic required throughout university.

You will cover the fundamentals in logic, sets, and mathematics which have practical applications across the theory and practice of the field. Algorithms, abstract data types, and analysis of algorithms are introduced to allow you to make reasoned decisions about the design of your programs. You will get the chance to investigate the principles of Data Science to select, process, and analyse data, and examine the way programs and systems can be designed to efficiently support work with data and question the limits of conclusions that can be drawn from such systems.

Relational algebra is introduced which underlies most database systems theory behind modelling relationships between data. Entity-relation diagrams are used as notation to represent that in practical systems and fundamental SQL is introduced to create and query working databases.

Assessment Proportions

Sumamtive assessment format is standardised across school modules and typically takes the form of a low-weighted summative “mid-term” in-class test which the student can use to gauge their progress against expectations; a longer duration, less guided, practical coursework to demonstrate their ability apply the knowledge and practical skills they have acquired; and a high-weighted invigilated computer-based exam.

SCCM4310: Digital Systems

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Software Development

Course Description

This module aims to demystify the operation of contemporary computers, such that students can begin to make reasoned judgements about the behaviour, capabilities and real-world limitations of computer systems. Furthermore, it aims to instil a basic understanding of computer architecture, data representation, operating systems concepts and how these relate to the underlying theoretical concepts of digital logic.

This module assists students in creating a cognitive model of a system – the seed of “systems thinking”. The development of abstract thought is encouraged through the use of computational models of real-world systems, reinforced through practical example and investigation. Applied numerical skills are also developed in the context of Boolean logic.

This module is part of the Systems theme focusing on the hardware and software infrastructure upon which other applications rely.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Describe the role and operation of the primary hardware components of modern computer systems, and how they are built upon the principles of digital logic - including processors, memory and input/output.
  2. Demonstrate how the principles of high-level imperative programming languages are translated into low-level machine instructions, data structures and binary representations in a computer’s memory.
  3. Describe the requirements, structure and characteristics of an operating system and its associated system software.
  4. Discuss the benefits of multi-process environments and recognise the need for the resource management provided by operating systems schedulers and basic mutual exclusion mechanisms.
  5. Apply software development concepts to low-level programming languages, such as C and assembler.
  6. Demonstrate numerical, communication and problem-solving skills.
  7. Practice computational thinking.

Outline Syllabus

The creation of the microprocessor revolutionised global innovation and creativity. Without such hardware we would have no laptops, no smartphones, no tablets. Life changing technologies from MRI scanners to the Internet would simply not exist. This module provides an introduction to the field of Digital Systems – the engineering principles upon which all contemporary computer systems are based.

Students will study the elements that work together to form the architecture of digital computers, including computer processors, memory, data storage, and input/output. They will unearth the ways in which these are enabled by digital logic – where George Boole’s theory of a binary based algebra meets electronics. Building on software development fundamentals, students also discover how the software programs we write translate to, and interact with, such hardware.

Finally, students will explore the effects of multi-process operating systems, and how these interplay with the capabilities and architecture of modern computers to optimise performance and robustness.

Assessment Proportions

Summative assessment format is standardised across school modules and typically takes the form of a low-weighted summative “mid-term” in-class test which the student can use to gauge their progress against expectations; a longer duration, less guided, practical coursework to demonstrate their ability apply the knowledge and practical skills they have acquired; and a high-weighted invigilated computer-based exam.

SCCM4910: DevOps

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: None

Course Description

This module aims to introduce students to the core principles and practices of DevOps, providing a foundational understanding of how many modern software systems are developed, delivered, and maintained. Software engineering increasingly relies on automation, rapid iteration, and close collaboration between development and operations teams, so this module equips students with the essential skills required to engage confidently in contemporary technical environments.

Students will learn the motivations behind DevOps, exploring how continuous integration, continuous delivery, version control, and infrastructure automation contribute to reliable and scalable systems. The module emphasises practical, hands-on learning through guided activities that progressively build competence with industry-standard tools and workflows, including understanding of Unix-family operating system commands and conventions. This module provides a solid platform for students wishing to gain deeper understanding and skillset in this developer-adjacent topic.

This module is part of the Software theme focusing on programming languages and software development.

Our optional module selection in Level 4 gives students the ability to learn topics from a wide range of fields that are connected to the theory or application of computing technologies, giving them experience in the inter-disciplinary potential of computing, or to focus in more breadth on core computing topics within the school.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Describe the key concepts and goals underpinning DevOps.
  2. Understand and use Unix command line tools and scripting.
  3. Explain the roles of automation, version control, and continuous integration within modern software development workflows.
  4. Apply Git commands to track changes and collaborate on simple codebases.
  5. Demonstrate the use of CI pipelines to automate building and testing of software.
  6. Construct simple infrastructure configurations using automation or containerisation tools.
  7. Identify and discuss common challenges in software deployment and how DevOps practices address them.

Outline Syllabus

While most computing degrees cover software development, this module seeks to extend traditional development skills by covering core issues in computing operations. Expertise in this area is increasingly important as many software companies embrace the concept of DevOps – in which development and operations are brought together to ensure a unified approach to designing, developing, delivering and supporting complex software systems. Students will gain an understanding of key areas of computer operations including systems administration, deployment and software evolution while practical labs will be used to teach DevOps tools.

Students are introduced to the Unix command-line environment, exploring questions such as “Why is the command line still essential for modern software development?” and “How do simple commands combine to perform powerful tasks?” Students learn Unix tools including file manipulation, permissions, pipes, redirection, job control, and basic shell scripting, giving fundamental practical skills for interacting with development environments, automation processes, and remote systems.

Building on these skills, the module then examines DevOps workflows and the structure of modern delivery pipelines. Students explore how software moves from development to deployment and introduces continuous integration, automated testing, build pipelines, and the importance of feedback loops in ensuring reliable software delivery.

Core DevOps practices are introduced through hands-on activities with version control systems such as Git, enabling students to track changes, manage branches, and collaborate effectively. Students then deepen their understanding of CI/CD, learning how automated pipelines enforce quality standards and accelerate delivery. Automation topics – such as scripting, task runners, or simple configuration tools – help students appreciate how repetitive tasks can be made reliable and reproducible.

Students also explore the role of containers and virtual machines in modern development and deployment. They investigate questions such as “Why isolate environments?” and “How do containers support scalable infrastructure?” Through practical work, students gain insight into how software can be packaged, deployed, and managed consistently across different platforms.

Assessment Proportions

Summative assessment format is standardised across school modules and typically takes the form of a low-weighted summative “mid-term” in-class test which the student can use to gauge their progress against expectations; a longer duration, less guided, practical coursework to demonstrate their ability apply the knowledge and practical skills they have acquired; and a high-weighted invigilated computer-based exam.

SCCM4920: Contemporary Topics in Computing

  • Terms Taught: Lent/Summer term
  • US Credits: 5
  • ECTS Credits: 10 ECTS
  • Pre-requisites: None

Course Description

This module aims to introduce students to the dynamic and rapidly evolving nature of the computing discipline by exposing them to a selection of emerging technologies, innovative research directions, and contemporary practices shaping the future of the field. Through a mix of exploratory lectures, hands-on practical sessions, and engagement with guest experts, the module encourages students to develop curiosity, critical thinking, and an informed awareness of the breadth of modern computer science. By engaging with varied contemporary topics, students will broaden their understanding of potential career pathways, recognise how current innovations influence society, and begin to identify areas of computing that align with their developing interests and strengths. The overall aim is to build confidence, stimulate discovery, and support students in making informed choices as they progress through their degree, by which time these emerging technologies may have become established in industry.

This module may feature topics from across the School's five theme areas of Software; Data and Theory; Systems; Interactions and Implications; and Security.

Our optional module selection in Level 4 gives students the ability to learn topics from a wide range of fields that are connected to the theory or application of computing technologies, giving them experience in the inter-disciplinary potential of computing, or to focus in more breadth on core computing topics within the school.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Describe a range of emerging and contemporary topics within computer science and their relevance to modern technological development.
  2. Explain key concepts underlying selected innovative technologies and discuss their potential applications.
  3. Identify and compare different areas of current research and innovation, recognising how they influence or challenge existing computing practices.
  4. Apply introductory practical techniques or tools associated with one or more contemporary computing topics.
  5. Evaluate the societal, ethical, or economic implications of selected emerging technologies using appropriate introductory frameworks.
  6. Reflect on personal interests in computing and articulate how contemporary developments may influence future study or career paths.

Outline Syllabus

Computer Science is a discipline that continues to innovate at a remarkable pace – changing nearly every aspect of modern life as it does so. This module introduces a range of special topics that reflect the latest aspects of computing. Example topics include physical computing, soft robotics, applications of AI, computer science innovation and tech entrepreneurship. The exact set of topics changes year by year to ensure the module covers the cutting-edge of contemporary computer science. Guest speakers will help stimulate debate and discussion and topics will include lectures and lab sessions to provide a blend of theoretical and practical skills. At the end of the course, you will understand multiple emerging areas of computer science and appreciate how you can shape the rest of your degree course to best reflect the aspects that excite you most.

Due to the nature of the module, we cannot prescribe what topics will appear for a given year, but we would expect 2-3 individual areas to be examined in each module iteration. For example, assuming 11 teaching weeks, it may have 3 weeks on robotics, 4 weeks on generative AI, and 3 weeks on innovation and tech entrepreneurship.

Coursework assessment type will be related to the topics and may vary from programming exercise to essay. Coursework may be integrated across more than one topic or may be restricted to one topic. All topics will be covered by the exam assessment.

Assessment Proportions

In this module, due to the changing nature of the topics, it’s not possible to know in advance what the most useful form of summative coursework assessment may be as it will be related to the topics that year. This could be a programming exercise or a report-style exercise; it could be individual or groupwork. An in-class test may or may not be suitable for the topic.

Therefore, there is a single 30% coursework assessment piece specified, that will either be kept as a single 30% assignment or split into a 10% in-class test and 20% assignment as appropriate for the topics that year. This will allow students to demonstrate their practical skills as appropriate.

The remaining 70% assessment will be an invigilated computer-based exam.

SCCM4950: Computing Essentials: Programming

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: None

Course Description

This module aims to develop students’ ability to think systematically about problems and to express solutions through clear, well-structured computer programs. By introducing computational thinking as a fundamental problem-solving framework, the module helps students understand how concepts such as abstraction, decomposition, generalisation, and algorithms underpin all areas of computing and many wider disciplines. Students will gain hands-on experience with two contrasting programming languages - Python and JavaScript - enabling them to appreciate both the shared foundations of imperative programming and the practical considerations that influence language choice. Through guided practice, students will learn to design, implement, test, and debug simple programs, building confidence in writing code that solves real-world problems.

The module provides essential transferable skills that support success across degree programmes, including analytical thinking, structured problem solving, and the ability to evaluate and work with new technologies. Finally, this module prepares students for more specialised study in one of the following areas: artificial intelligence, data science, or physical and virtual computing - depending on their career interests and goals.

This module is part of the Computing Essentials year 1 options offered to students outside SCC who wish to explore contemporary, practical topics in computing and develop skills they can apply inter-disciplinarily.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Describe the term ‘computational thinking’ and its significance and relevance in our world, and define the key concepts of computational thinking, including algorithms, abstraction, decomposition and generalisation.
  2. Demonstrate how computational thinking concepts can be applied in an appropriate manner to problems ranging from common to more complex real-world and open-ended problems that arise in different disciplines.
  3. Understand the universal concepts and mechanism of imperative computer programming languages including variables, iteration using for/while loops, conditionals.
  4. Understand the anatomy of imperative programs, including entry points, functions, variable scope and control flow.
  5. Appreciate the strengths and weaknesses of alternative programming languages and be able to select the appropriate language for a given task.
  6. Design and implement simple batch processing computer programs using Python to solve a given problem.
  7. Design and implement simple interactive web-based computer programs using JavaScript to solve a given problem.
  8. Be able to analyse and interpret computer programs and diagnose and correct unexpected behaviour.
  9. Demonstrate problem solving skills to handle common and real-world problems.
  10. Identify discipline-specific problems (e.g. from the student’s degree programme) and be able to apply the core computational thinking skills to such problems.
  11. Acquire a set of core transferable life skills to better understand, design and evaluate new technologies in our digitally rich world.

Outline Syllabus

Practical computing is all about problem solving and coding those solutions as working computer programs. Techniques exist that provide structured approaches to solving problems and you will be introduced to these core transferable skills via Computational Thinking - “the thought processes involved in formulating a problem and expressing its solution(s) in such a way that a computer (either human or machine) can effectively carry out”: algorithms, abstraction, decomposition, generalisation, handling common problems, dealing with complexity.

Coding as a creative skill and technique for applied problem solving is taught in the context of two comparative languages: JavaScript and Python. You will cover key aspects of imperative programming such as types, constants and variables; control flow, sequencing of instructions and making decisions; repeating actions through iteration, functions; and collections of data using lists and arrays. Best practice such as programming conventions, debugging techniques, and version control are included.

Assessment Proportions

Summative assessment falls into three parts:

  • Students earn marks through active participation in 'bring-your-own-device' workshop sessions.
  • Weekly summative assessment in the form of quizzes to encourage and reward continual engagement while providing an external measure of students' progress with the material.
  • A high-weighted invigilated computer-based exam which allows practical skills questions to be assessed within an exam setting.

SCCM4961: Computing Essentials: Artificial Intelligence

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: None

Course Description

This module aims to introduce you to Artificial Intelligence (AI), a long-standing element of Computer Science that, with the development of Generative AI, is having a rapid impact on contemporary society and work. For example, Large Language Models (LLMs) and deep learning allows generation of text, image, and videos from short prompts; AI-integrated programming environments allow large sections of computer source code to be generated or modified rapidly; and traditional AI techniques like clustering and classification are the basis of many automated decision systems. In turn, this has raised many concerns in society about, copyright, fairness and bias, digital exclusion, and the fundamental significance of the human being in a process. You will explore what AI is, how it works, how to use it effectively, and debate its impact and place in society.

This module is part of the Computing Essentials year 1 options offered to students outside SCC who wish to explore contemporary, practical topics in computing and develop skills they can apply inter-disciplinarily.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Describe key concepts, terminology, and historical developments in Artificial Intelligence.
  2. Explain the principles behind major AI techniques, such as classification, clustering, and generative models.
  3. Identify and apply basic AI tools (e.g. generative text models, simple classifiers) to solve introductory-level problems which could apply to their discipline.
  4. Construct simple prompts or workflows demonstrating effective and responsible use of generative AI.
  5. Interpret the outputs and limitations of AI systems, recognising common issues such as bias, hallucination, and uncertainty.
  6. Discuss ethical, legal, and social implications of AI, including fairness, copyright, digital exclusion, and human-AI interaction.
  7. Reflect on how AI may shape future work and society, articulating informed perspectives on its risks and opportunities.

Outline Syllabus

This module introduces students to the foundations, capabilities, and implications of Artificial Intelligence, with an emphasis on understanding AI as both a technical field and a transformative force in society. Students will explore what AI is, including “classical” AI, how contemporary systems such as Large Language Models (LLMs) and deep learning operate, and why these technologies have become so influential across creative, scientific, and professional domains. Through practical engagement with generative tools for content such as text and source code, students will investigate how AI systems are trained, what their outputs mean, and how to use them effectively while recognising their limitations.

Alongside these technical foundations, the module foregrounds major societal questions raised by AI adoption. Students will examine issues of data protection, copyright, algorithmic fairness, bias, digital exclusion, and environmental sustainability. The module will prompt critical discussion about the role of AI in creative work, automation, decision-making, and the shifting relationship between humans and intelligent systems. Research and reports drawn from fields such as healthcare, media, education, and public policy will help students situate AI within their own disciplinary and career contexts.

By combining conceptual understanding, hands-on exploration, and critical debate, the module equips students with the knowledge and confidence to navigate and contribute thoughtfully to an AI-shaped world.

Assessment Proportions

Summative assessment falls into four parts:

  • Students earn marks through active participation in 'bring-your-own-device' workshop sessions.
  • Weekly summative assessment in the form of quizzes to encourage and reward continual engagement while providing an external measure of students' progress with the material.
  • A longer duration, less guided, practical project to demonstrate students' ability to apply the knowledge and practical skills they have acquired;
  • A high-weighted invigilated computer-based exam which allows practical skills questions to be assessed within an exam setting.

SCCM4962: Computing Essentials: Data Science

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: None

Course Description

This module aims to introduces students to the core principles and practices of data science, guiding them from the fundamentals of describing and preparing data through to the communication of insights and the development of small-scale analytical projects. Students learn how to characterise data sets, detect outliers, and identify patterns, relationships, and groups within data using visual and statistical techniques such as histograms, scatterplots, summary tables, and exploratory sketching. Alongside these analytical skills, they gain hands-on experience with a range of visualisation tools and software, enabling them to think critically about how best to represent and communicate complex information.

As the module progresses, students apply computational and problem-solving techniques to build simple predictive models, evaluate their effectiveness, and reflect on the assumptions behind them. The module culminates in a focused project, allowing students to deepen their understanding of an area of personal interest, integrate multiple analytical and visualisation methods, and present their findings as part of a collaborative group activity. Through this work, students develop transferable skills in critical reasoning, communication, and creative thinking with data, which are core to many fields of industry and research.

This module is part of the Computing Essentials year 1 options offered to students outside SCC who wish to explore contemporary, practical topics in computing and develop skills they can apply inter-disciplinarily.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Use analytical and statistical tools for understanding trends and describing data.
  2. Utilise scripting languages such as Python to undertake common data processing and analysis tasks.
  3. Develop students’ ability to work in a diversified group of students and finish their tasks under time constraint
  4. Demonstrate understanding of the fundamentals of information visualisation.
  5. Sketch by hand and work through ways of visualising data relating to their own practice and research.
  6. Select from a set of available software tools and use such a tool to create digital representations of their data.
  7. Conduct their own self-directed study to support their own subject areas in data/information visualization and dissemination.
  8. Apply computational thinking principles to a project brief, utilising decomposition, abstraction and generalisation techniques to then compose a workable design from a set of identified tools and packages.
  9. Implement and evaluate a small (but non-trivial) solution to an identified problem.
  10. Present and discuss the strengths and weakness of a given solution.

Outline Syllabus

We are completely immersed in data in modern society. Masses of it is generated, companies hoard it, and decisions are made with it. But what is data and how do we use it effectively to make decisions?

You will use the Python programming language to explore Data Science methods important to many data analysis or data mining projects across disciplines. You will better describe data, prepare data sets for analysis, identify and understand groupings and relationships within data, and build computational models that can interrogate such relationships.

Communicating the analysis of that data is then important so you will also cover methods of information visualisation, programs for visualisation, and interactivity in data visualisation. You will learn about representations, human-centric data visualisation, and how to manipulate these representations in meaningful ways to communicate understanding to others.

Assessment Proportions

Summative assessment falls into four parts:

  • Students earn marks through active participation in 'bring-your-own-device' workshop sessions.
  • Weekly summative assessment in the form of quizzes to encourage and reward continual engagement while providing an external measure of students' progress with the material.
  • A longer duration, less guided, practical project to demonstrate students' ability to apply the knowledge and practical skills they have acquired;
  • A high-weighted invigilated computer-based exam which allows practical skills questions to be assessed within an exam setting.

SCCM4963: Computing Essentials: Computing in the World

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: None

Course Description

This module aims to introduce students to the role of computing in shaping the physical and virtual worlds around us. Through hands-on exploration of physical computing, students will learn how embedded devices, sensors, and actuators interact with the real world, while also gaining experience in constructing simple virtual environments using core concepts such as rendering, modelling, and animation. By engaging with both tangible devices and digital worlds, the module equips students with foundational technical skills and creative confidence, preparing them to apply physical and virtual computing technologies within their own disciplinary contexts and future professional practice such as creating industrial equipment or virtual simulations.

This module is part of the Computing Essentials year 1 options offered to students outside SCC who wish to explore contemporary, practical topics in computing and develop skills they can apply inter-disciplinarily.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Describe what are embedded systems and virtual environments.
  2. Explain key technical principles underlying physical computing and virtual-world construction.
  3. Assemble and configure simple physical computing systems using microcontrollers and electronic components.
  4. Construct a basic virtual environment incorporating models, animation, and coordinate systems.
  5. Interpret and troubleshoot the behaviour of physical or virtual systems using observational and diagnostic techniques.
  6. Discuss emerging trends in the physical computing and virtual environments, considering their societal and disciplinary relevance.
  7. Apply foundational design principles to develop a small integrated project demonstrating skills from both strands of the module.
  8. Reflect on how physical and virtual computing may enhance or transform their own field of study.

Outline Syllabus

What is the context of computing in society and how does it impact the world we live in? You will explore this from two perspectives.

The first is the pervasiveness of embedded computing devices all around us. The ‘Internet of Things’ is made of devices that communicate with each other and interact with the world via sensors and actuators. You’ll explore physical computing and build devices to do just that using computing and electronic components.

The second perspective is the augmentation of our own world and the creation of entirely new virtual worlds. Core concepts in virtual environments, their capabilities, and emerging trends will be covered. You will build your own virtual world in software to explore this, covering technical aspects like coordinate systems, rendering, models, and animation. Together both these parts of the module will give you the skills and inspiration to affect how you interact with computing devices in the world and digital overlays on the world.

During the last weeks of the module, you will conduct a small project to bring together and practically demonstrate a selection of the skills you have learned during the module to prepare you for later using them in your own disciplinary context in your future career.

Assessment Proportions

Summative assessment falls into four parts:

  • Students earn marks through active participation in 'bring-your-own-device' workshop sessions.
  • Weekly summative assessment in the form of quizzes to encourage and reward continual engagement while providing an external measure of students' progress with the material.
  • A longer duration, less guided, practical project to demonstrate students' ability to apply the knowledge and practical skills they have acquired;
  • A high-weighted invigilated computer-based exam which allows practical skills questions to be assessed within an exam setting.

SCCM5001: Computer Science Group Project

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Designing Software Systems

Course Description

This module aims to provide students an opportunity to develop their collaborative skills via a substantial “start-to-finish" group project, in topic areas such as desktop application programming, games, computer graphics applications, human-computer interaction, or mobile applications. Alongside their technical skills, they will also practice related project management skills such as planning, risk and cost management, scheduling, and conflict resolution. The module will also provide additional software development support to build student’s confidence in contributing to large, team-based codebases. Furthermore, this module aims to equip students with the ability to work as a team: team interaction, coordinating work, and how to resolve problems and conflicts. Transferrable communications skills will include scheduling substantial independent work, problem solving, report writing, presentations, and demonstrations of their developed project.

Educational Aims

Upon successful completion of this module students will be able to…1. Collaborate in teams to tackle technical problems in a (group) project context, including analysing, planning, managing, designing, implementing, testing and fully documenting a working system.2. Analyse a problem, think about ideas, prototype them, and design and implement a working program to solve that problem.3. Manage parallel implementation tasks in a collaborative setting.4. Write documents to describe the design of a system.5. Evaluate the success of a project against its requirements and user needs.6. Practice working effectively in group contexts including communications and technical collaboration.7. Practice electronic, written, and verbal communication skills.8. Practice the application of professional and legal considerations.

Outline Syllabus

You will execute a project through all stages, working to the demands of a client and practically combining and applying concepts and skills gained in other modules studied so far. You will learn and apply your knowledge about prototyping, project planning, management, design, and user evaluation and testing strategies. Teams will deliver reports, code, and demonstrate a working system. Project topics will differ from year to year, example areas are desktop application development, game programming, or computer graphics. Groups will take part in weekly workshops to guide their progress and also will be expected to work independently as a group. Lectures will cover teamwork, project management, risks, and costings so that you have a sound base for managing collaborative projects, as well as continue to develop your practical programming skills to allow you to confidently contribute to larger, team-based programming projects.

Assessment Proportions

Assessment consists of the extended group project in which students have to collaborate to write a detailed design document, design and implement a software system, design and run a user evaluation together with the associated ethics process, and then present the final project and demonstrate it running.

SCCM5002: Cyber Security Group Project

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Designing Software Systems

Course Description

This module aims to provide students an opportunity to develop their collaborative skills via a substantial “start-to-finish" group project, on a cyber-security topic. Alongside their technical skills, they will also practice related project management skills such as planning, risk and cost management, scheduling, and conflict resolution. The module will also provide additional software development support to build student’s confidence in contributing to large, team-based codebases and practical implementation of cyber security principles. Furthermore, this module aims to equip students with the ability to work as a team: team interaction, coordinating work, and how to resolve problems and conflicts. Transferrable communications skills will include scheduling substantial independent work, problem solving, report writing, presentations, and demonstrations of their developed project.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Collaborate in teams to tackle technical problems in a (group) cyber-security project context, including analysing, planning, managing, designing, implementing, testing and fully documenting a working system.
  2. Understand and apply secure coding practices and other cyber-security principles relevant to the problem domain.
  3. Analyse a problem, think about ideas, prototype them, and design and implement a working program to solve that problem.
  4. Manage parallel implementation tasks in a collaborative setting.
  5. Write documents to describe the design of a system.
  6. Evaluate the success of a project against its requirements and user needs.
  7. Practice working effectively in group contexts including communications and technical collaboration.
  8. Practice electronic, written, and verbal communication skills.
  9. Practice the application of professional and legal considerations.

Outline Syllabus

You will execute a cyber security focused project through all stages, working to the demands of a client and practically combining and applying concepts and skills gained in other modules studied so far. You will learn and apply your knowledge about prototyping, project planning, management, design, and user evaluation and testing strategies. Teams will deliver reports, code, and demonstrate a working system. Projects will either build a system used as a cyber security tool (e.g., a vulnerability scanner) or follow secure software design methodologies to build an application (e.g., a communication tool). Groups will take part in weekly workshops to guide their progress and will also be expected to work independently as a group. Lectures will cover teamwork, project management, risks, and costings so that you have a sound base for managing collaborative projects, as well as continue to develop your cyber security awareness and techniques.

Assessment Proportions

Summative assessment consists of the extended group project in which students have to collaborate to write a detailed design document, design and implement a software system, design and run a user evaluation together with the associated ethics process, and then present the final project and demonstrate it running.

  • 100% Project Portfolio, including: a substantial software artifact and associated source code, design report, evaluation, presentation, and demonstration of the working system.

SCCM5010: Software Engineering Studio

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Designing Software Systems

Course Description

This module aims to instil a coherent understanding the principles of software engineering by applying them in the context of a substantial group project. It also familiarises students with project management and teamwork skills required to deliver a quality software product on schedule, and allows students to practice writing effective software engineering reports and deliver effective presentations. Finally, it aims to foster autonomous learning by letting students define and shape their own projects, evaluate and use the technologies they need, and read the associated literature.

This module is part of the Software theme focusing on programming languages and software development.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Practice software development in a principled manner.
  2. Produce clear and concise software engineering reports.
  3. Recognize the things that could go wrong in a realistic software project.
  4. Demonstrate working collaboratively in a software development team.
  5. Practice working effectively in group contexts including communications and technical collaboration.
  6. Express electronic, written, and verbal communication skills.
  7. Practice the application of professional and legal considerations.

Outline Syllabus

In the Software Engineering Studio module you will work in groups on contemporary challenges in software design. Applying the knowledge you have gained in your first year, you will produce a complex, innovative and concrete group project, allowing you to develop skills in project planning, management and execution, requirements analysis, systems design and testing strategies. Through this module, you will gain an understanding of the principles of software engineering. In groups, you will also give a demonstration of your working system and present elements of your work in written, graphical and verbal forms through the production of materials such as reports, a website, posters and presentations.

Assessment Proportions

Summative assessment consists of an extended group project in which students collaborate to design and implement a software system. Professional issues such as accessibility and legal requirements are considered as well as process issues such as resource availability and testing.

  • 100% Group Project

SCCM5150: Internet Applications

  • Terms Taught: Lent/Summer
  • US Credits: 3
  • ECTS Credits: 5
  • Pre-requisites: None

Course Description

This module aims to demystify the structure of internet applications, and to introduce the technologies and processes used in their construction and deployment. It also aims to convey the scalability, performance implications and privacy risks associated with the design choices in the field. It also aims to act as a prelude to SCCM6310 Distributed Systems, providing a practical application of the client-server model. The module aims to further practice students design and implementation skills, technical computing skills, computation thinking concepts, and applied numerical skills.

This module is part of the Software theme focusing on programming languages and software development.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Construct a client-side internet application.
  2. Integrate server-side APIs through contemporary protocols and mechanisms.
  3. Recognise the role cloud-based systems play in the development and provisioning of internet applications.
  4. Differentiate between alternative approaches to internet application design
  5. Use appropriate programming languages and representations for internet application platforms.
  6. Demonstrate design, analysis and practical programming skills.

Outline Syllabus

The internet and the world wide web have now pervaded every aspect of our lives, from e-commerce and entertainment to logistics and social media. Increasingly, application software is no longer written for specific devices, but for internet web browsers. The internet has replaced operating systems as the de facto platform for application development, making an already global phenomenon truly ubiquitous. This module studies the various approaches to internet applications development, investigating both the client side and server-side approaches, discussing the trade-off of performance, scalability, privacy, and trust associated with these approaches. You will review the role of “cloud infrastructures” (federated distributed computation) in the provision and management of internet applications. Through interactive lectures and practical sessions, students study common frameworks for client-side application development and create and deploy an internet application from first principles.

Assessment Proportions

Assessment takes the form of a low-weighted summative “mid-term” in-class test which the student can use to gauge their progress against expectations; a longer duration, practical coursework to demonstrate their ability apply the knowledge and practical skills they have acquired; and a higher-weighted end of module exam.

SCCM5160: Data Engineering

  • Terms Taught: Lent/Summer
  • US Credits: 3
  • ECTS Credits: 5
  • Pre-requisites: None

Course Description

This module aims to instruct students in the ways of analysing data requirements and producing a model which captures those requirements and transform that model into one suitable for use in a DBMS. Building upon the relational algebra theory, ERD notation, and SQL skills taught in SCCM4210, this module will further explore the relational model and SQL together with recently emerging paradigms like NoSQL and “Big Data”. Contemporarily relevant issues of security related to the design, development and use of database systems will be covered. These data storage systems will be examined from the inside, such as the physical layout of data and associated access methods to allow efficient response to data requests, and from the outside, such as the problems raised by transaction processing and concurrency control, and the solutions. Overall, it seeks to give students a broad range of knowledge and skills necessary for a career in data and database engineering at a professional level.

The module aims to expose and reinforce student awareness of processes, models and notations that can be powerfully applied to problems, and to help students to critically evaluate technical ideas.

This module is part of the Software theme focusing on programming languages and software development.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Describe and contrast the different types of information data mining, verification and validation, storage, designs, notations and schema options available.
  2. Apply fundamental concepts of databases and differentiate methods to comparatively assess database design choices in different scenarios.
  3. Demonstrate the ability to develop software to efficiently collect, clean, store and retrieve numerical and other data types.
  4. Appreciate and evaluate the application of data stores and databases to help address real world problems and solutions.
  5. Manage their available time efficiently and demonstrate independent learning abilities required for continued professional development.
  6. Successfully integrate diverse information to form a coherent understanding of the subject.
  7. Critically reflect on technical advancements.

Outline Syllabus

The module provides a practical and 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, Entity-Relationship Models, the relational model and the data normalisation process, and alternative schema definitions, SQL, NoSQL and Object-Oriented data models, big data, as well as transaction processing and concurrency control. Building upon concepts introduced in the first year, coverage of SQL will be expanded to increase the sophistication of the manipulation and querying of data to allow more complex and efficient operations. Following this, an alternative paradigm, “NoSQL” is introduced and the theory and practical application of this document-oriented approach is also explored and contrasted with SQL. The module embeds practical access and retrieval considerations and how to interact with databases from a number of programming languages, giving the student confidence to design and implement the appropriate data storage approach for a situation in the real-world.

Assessment Proportions

  • 70% Exam, 2 hours
  • 30% Programming coursework, ~ 20 hours' work

SCCM5250: Artificial Intelligence

  • Terms Taught: Lent/Summer
  • US Credits: 3
  • ECTS Credits: 5
  • Pre-requisites: None

Course Description

This module aims to provide the common grounding in Artificial Intelligence required to support a range of level 6 courses that form part of SCC programmes and the application of data science. It also serves to provide a solid academic base for students wishing only to develop a core awareness of the area. Classical and contemporary approaches to AI are discussed, classified and placed in context alongside ethical consideration through a blend of lecture and practical labs. Practical skills applying these techniques using contemporary software is taught to allow students to utilise the theory learnt. The module aims to further practice students’ technical computing skills, computation thinking concepts, and applied numerical skills.

This module is part of the Data and Theory theme focusing on theoretical computer science, artificial intelligence, and data science.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Compare and contrast the range of artificial intelligence concepts and applications, and discuss the motivation for designing intelligent machines.
  2. Apply a range of fundamental techniques in artificial intelligence.
  3. Explain the distinction between the key types of machine learning problems, including supervised, unsupervised and reinforcement learning.
  4. Critically evaluate how intelligent systems have been used in and applied to real-world problems.
  5. Practice scientific and numerical skills.
  6. Practice the application of computational thinking principles.

Outline Syllabus

This module introduces the key ideas and fundamental principles of artificial intelligence (AI) and the types of problems that can be addressed by AI. We introduce 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. We unearth the underlying principles of search spaces, knowledge representation and inference logic that form the core of rule-based systems. We discover 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.

Assessment Proportions

  • 70% Exam, 2 hours
  • 30% Programming coursework, ~20 hours' work

SCCM5260: Algorithms

  • Terms Taught: Lent/Summer
  • US Credits: 3
  • ECTS Credits: 5
  • Pre-requisites: None

Course Description

This module aims to building on foundations provided in SCCM4120 Fundamentals of Computer Science and develop the knowledge and skills necessary to solve more complex computational problems algorithmically. It aims to enable students to approach problems systematically and make good and well-reasoned choices as to effective algorithmic approaches for solving them efficiently, considering the real-world implications of their solution. It aims to further develop applied problem solving, independent learning, computational thinking and science and analysis skills.

This module is part of the Data and Theory theme focusing on theoretical computer science, artificial intelligence, and data science.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Analyse the efficiency of algorithms and computer programs.
  2. Apply knowledge of key algorithms and data structure to solve algorithmic problems.
  3. Explain the key complexity classes in the theory of computation and classify problems into those complexity classes.
  4. Compare, contrast and select appropriate algorithmic approaches to problem solving given varying data and problem requirements.
  5. Practice scientific and numerical skills.
  6. Practice the application of computational thinking principles.

Outline Syllabus

In this module we build upon the foundations of algorithms and their complexity to develop a deeper understanding of algorithmic approaches to computational problem solving. We 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. We discuss 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. We study advanced data structures in depth, such as tries, heaps, suffix arrays, k-d trees and distributed hash tables. We also 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, we explore key implications of algorithm performance including their impact on energy efficiency and sustainability to provide a coherent interface with other modules.

Assessment Proportions

  • 70% Exam, 2 hours
  • 30% Programming coursework, ~20 hours' work

SCCM5310: Networks and Systems

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Software Development & Designing Software Systems.

Course Description

This module aims to instil a deep understanding of how computer operating systems and networks interact to enable the Internet applications and services that are ubiquitous in the world today. More specifically, to convey the knowledge and practical experience of internet architecture, network protocols and operating system principles expected of all computer science graduates. The module also aims to highlight the efficiencies that can be gained from sharing physical resource amongst many competing processes, and the ways in which systems resolve that contention for shared resources such as network bandwidth, CPU and memory availability. Finally, it also aims to provide solid foundations upon which further study of operating systems, internet applications and distributed systems are built.

This module is part of the Systems theme focusing on the hardware and software infrastructure upon which other applications rely.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Describe the role and behaviour of the common protocols used in the Internet Protocol Suite, such as IP, TCP, UDP, HTTP and routing protocols, and choose the appropriate protocols for a given task.
  2. Experiment with simulated network topologies to analyse their behaviour and performance.
  3. Construct simple client/server applications.
  4. Describe the role and behaviour of key components of an operating system including the kernel, scheduling, access control, memory management, and file systems and how they interrelate.
  5. Demonstrate how contention for shared resources such as processing, memory, and network bandwidth can be managed.
  6. Demonstrate scientific and numerical skills through measurement within computational simulations.

Outline Syllabus

Building upon the foundations set in the first year on digital systems, 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 that 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. Core operating system concepts will be built upon and expanded to develop a comprehensive understanding of the components of an operating system such as the kernel, scheduling, access control, memory management, and file systems. Using simulators, students will explore first-hand how data is efficiently and safely routed across the global Internet. You will study the interface between networks and operating systems, and how the concept of virtualization has transformed the way systems and networks efficiently make use of hardware resources.

Assessment Proportions

Assessment is split into two elements – a practical coursework; and an end of module exam.

SCCM5350: Concurrent and Parallel Systems

  • Terms Taught: Lent/Summer
  • US Credits: 3
  • ECTS Credits: 5
  • Pre-requisites: Must have covered content similar to Networks and Systems

Course Description

This module aims to develop an understanding of alternative multiprocessor architectures, how they are classified, the scalability of their performance characteristics, the factors which can bound that performance and how to mitigate them. The module also aims to provide the necessary grounding in theory and practice that enable the creation of high performance yet safe applications that make use of fine-grained concurrency, instruction parallelism and data parallelism. This module aims to further develop students’ applied programming skills and the cognitive skills of computational thinking. It also aims to develop the student's confidence in interpreting detailed technical documentation and, measuring and analysing systems.

This module is part of the Systems theme focusing on the hardware and software infrastructure upon which other applications rely.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Classify, compare and contrast the different types of multiprocessor computer (such as symmetric multiprocessor/hyperthreading and general-purpose GPU).
  2. Discuss and apply the theories (such as Amdahl’s law) given constraints that bound the performance of concurrent and parallel systems, and evaluate the expected performance of a system based on its characteristics.
  3. Construct high performance software applications that exploit instruction and data parallelism, and are free of risks caused by issues such as race conditions, deadlock and live-lock.
  4. Use contemporary standards in concurrent and parallel programming, such as pthreads, OpenMP and CUDA.
  5. Apply scientific and numerical skills through performance measurement.
  6. Apply computational thinking principles.
  7. Demonstrate widely used computer science practical skills.

Outline Syllabus

Computer architecture has now reached a critical juncture where we are witnessing a step change in computer performance - not due to the increased performance of individual processors, but through the inclusion of many, sometimes even thousands, of processor cores in a single computer. In this module we classify the different designs of multi-processor computers such as symmetric CPUs and general-purpose GPUs. We investigate their benefits and drawbacks, and study the theories and factors that can all too easily bound their seemingly limitless computational potential. Through a combination of lab exercises and lectures we discover how to use contemporary software tools and techniques to create high performance applications that exploit multi-threaded instruction parallelism whilst avoiding race conditions, deadlock and live-lock, and utilise GPUs to exploit data parallelism.

Assessment Proportions

Assessment is split into two elements – a practical coursework; and a higher-weighted exam.

SCCM5360: Operating Systems

  • Terms Taught: Lent/Summer
  • US Credits: 3
  • ECTS Credits: 5
  • Pre-requisites: Must have covered content similar to Network and Systems

Course Description

This module aims to introduce performance and fairness as key (and often competing) requirements in systems software design. Building upon foundations laid in SCCM5310, this module aims to deepen students’ understanding of the theories and designs that impact the performance of complex computer systems. The modules seek to instil a thorough understanding of how design decisions made by operating systems greatly impact upon performance and the ways in which this can be measured and mitigated. This module aims to further develop students’ applied programming skills and the cognitive skills of computational thinking. It also aims to develop the students’ confidence in interpreting detailed technical documentation and measuring and analysing systems.

This module is part of the Systems theme focusing on the hardware and software infrastructure upon which other applications rely.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Identify how systems software and hardware collaboratively enable protection and access control in multi-process environments to prevent misuse.
  2. Illustrate the operation of common operating systems components (such as file systems and memory allocation subsystems) and compare and contrast their alternative design approaches.
  3. Identify the benefits and implications of symmetric multiprocessor-based hardware from a system software perspective, particularly related to spatial locality, temporal locality, caching and affinity.
  4. Interpret technical specifications and construct system software meeting that specification.
  5. Apply scientific and numerical skills through performance measurement.
  6. Apply computational thinking principles.
  7. Demonstrate widely used computer science practical skills.

Outline Syllabus

This module provides a deep dive into the theory and practical application of advanced operating systems (OS) and associated hardware concepts. Through a combination of lab exercises and lectures, we investigate the ways that modern operating systems are optimized to extract the maximum performance and efficiency from 21st century computer hardware. We study how the fundamental concept of virtualisation enables safe, efficient and fair sharing of memory and processor resources across multiple applications and services. We investigate the structure, operation and scalability of OS subsystems, such as memory allocators and file systems. We discuss the performance implications of operating systems and discover how performance can be maintained even in the presence of relatively low performance input/output. We explore how symmetric multi-processors can be used transparently to optimize the performance of a computer, the implications this has for system software, and how and why the effective application of caching policies and temporal/spatial locality greatly affect the performance of a system.

Assessment Proportions

The assessment takes the form of a low-weighted in-class test which the student can use to gauge their progress against expectations; a coursework element and a high-weighted end of module exam.

SCCM5410: HCI: Designing for People

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Software Development & Designing Software Systems.

Course Description

This module aims to provide a coherent understanding of the importance of including human and social factors in the design process, the methods through which this can be accomplished. Evaluation of software and systems from a human perspective is also discussed in both lectures and hands-on small group reinforcement sessions. The module aims to further practice the commonly used software skills, design skills, communications skills, and ethical and professional issues (particularly related to humans, observations, and interviews).

This module is part of the Interactions and Implications theme focusing on the position of computing in society and how we interact with it.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Recognise the significance of HCI for the development of systems that people can use successfully, efficiently and safely.
  2. Employ knowledge of human abilities and behaviour to analyse user interface problems and motivate user interface designs.
  3. Apply HCI principles and guidelines in the design and implementation of interactive systems.
  4. Evaluate the usability and user experience of interactive systems using appropriate methods and metrics.
  5. Practice communication skills (writing and verbal and observation)
  6. Practice professional, legal and ethical considerations in light of sensitive user data and human participants.

Outline Syllabus

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, you focus on enabling interaction through user interfaces, and on creating interactive systems that are usable and provide an outstanding user experience. The module introduces you to the foundations of HCI in understanding human behaviour, technologies for interaction, and human-centred design. You 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 including legal, social, ethical and professional considerations in relation to people and society such as inclusive design practices, bias, and privacy.

Assessment Proportions

There are three pieces of assessment for this module a low-weighted in-class test; a longer duration coursework and a high-weighted exam.

SCCM5450: Extended Reality

  • Terms Taught: Lent/Summer
  • US Credits: 3
  • ECTS Credits: 5
  • Pre-requisites: None

Course Description

This module aims to introduce the concept of Extended Reality - the academic term for all technologies that augment human’s senses with digital technology. Addressing the rigorous science and engineering underpinnings of what is colloquially known as the “metaverse”, this module aims to provide a lucid understanding of the workings of those technologies, the tools used to generate interactive content, the modes of user interaction associated with these technologies. A treatment of the ethical implications of this technology is also instilled. This module seeks to deepen and formalize students understanding of computational principles. Applied numerical and modelling skills are also developed. Communication and creativity skills are also practiced, through the generation of graphical artifacts.

This module is part of the Interactions and Implications theme focusing on the position of computing in society and how we interact with it.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Describe the challenges and potential solutions related to creating XR systems.
  2. Formulate the design of an XR experience through an informed choice of interaction technology to extend and augment the desired sensory channels.
  3. Demonstrate rapid prototyping and construct an XR implementation from a given design.
  4. Assess the usability and socio-ethical impact of XR applications through relevant measures and lenses.
  5. Practice scientific and numerical skills
  6. Practice the application of computational thinking principles
  7. Practice creativity skills

Outline Syllabus

Extended reality (XR) refers to the interactive technologies that blend the virtual and physical worlds together into a hybrid environment or an immersive experience. The technology is based on multi-modal platforms that integrate use of ubiquitous, pervasive, wearable and omnipresent computing. We situate XR's different offerings within Milgram's continuum and identify the needs and means of augmenting the human sensory channels. The computing perspective takes an applied approach to design, implementation, deployment, and evaluation of systems that are used to create an XR environment and deliver an immersive experience. Latest trends in research, emerging technologies and novel tools will be discussed with an analytical focus on the technology and the socio-ethical implications of widespread prevalence of the technology.

Assessment Proportions

This module has thre pieces of assessment. A low-weighted class test, a piece of coursework to demonstrate ability to apply knowledge and practical skills and a high-weighted exam.

SCCM5460: Sustainable Computing

  • Terms Taught: Lent/Summer
  • US Credits: 3
  • ECTS Credits: 5
  • Pre-requisites: None

Course Description

This module aims to instil the sense of responsibility, such that the environmental impact of future software and systems can be minimized. Although considered clean in its nature, the environmental cost of Information Technology cannot be ignored. It is estimated that the energy usage and carbon emissions of IT globally is roughly equal to a mid-sized fully developed country. A treatment of both social, environmental, and practical technical aspects for impact mitigation is discussed. The module also aims to broaden and practice ethical and professional issues associated with the Computer Science discipline and apply scientific measurement and analysis skills.

This module is part of the Interactions and Implications theme focusing on the position of computing in society and how we interact with it.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Recognise the environmental impact of computing and digital technology at each stage of its lifecycle.
  2. Analyse the use of computers for a greener society and economy.
  3. Practice techniques in creating green coding and software design practices to create more energy-efficient and sustainable computer systems and services.
  4. Evaluate the environmental sustainability of different computers and digital technology through a systems-thinking approach.
  5. Practice scientific measurement and analysis of real-world data.
  6. Practice legal, ethical and professional expectations.

Outline Syllabus

Computing plays a pivotal role in addressing growing energy costs, greenhouse emissions, and the climate crisis. Whilst we can use computing and its associated digital technologies to shape a greener society (as well as create more energy-efficient software and hardware), there exist important trade-offs with respect to economic cost, engineering effort, and environmental impact. You will explore key concepts associated with creating sustainable computing, spanning from how a processor uses electricity to how computers shape a greener economy and society. You will study the methods to create more energy-efficient code, energy-aware device mechanisms, as well as the benefits and drawbacks of computing and digital technology with respect to its impacts upon the environment and economy.

SCCM5510: Secure Data and Systems

  • Terms Taught: Michaelmas
  • US Credits:
  • ECTS Credits: 10 ECTS
  • Pre-requisites: Must have covered content similar to Software Development & Designing Software Systems.

Course Description

This module provides students with a foundational understanding of a central domain within contemporary computer science: cyber security. It equips students with the core concepts, practical skills and critical awareness needed to engage with and navigate this rapidly evolving field.

Students are introduced to essential cyber security principles, including the CIA triad of confidentiality, integrity and availability, alongside common vulnerabilities and fundamental security processes. This module covers the principles of Authentication, Authorisation, and Accountability (AAA), exploring key access control models and security policies. Students will learn the fundamentals of cryptographic systems and their application in building secure systems. The module also demonstrates how core security principles are realised in practice by examining their implementation within a range of systems, including examples from operating systems and networked environments. Through hands-on, small-group lab sessions in a controlled environment, students will develop practical experience in identifying and mitigating real-world system vulnerabilities, with a strong emphasis on defensive strategies and the implementation of protective measures to safeguard digital assets.

This module is part of the Security theme focusing on cyber security, how systems may be vulnerable, how to secure them, and the theory that supports this.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Describe and evaluate key cyber security concepts, including the CIA triad, Authentication, Authorisation, and Accountability (AAA), and their roles in securing computer systems.
  2. Explain the fundamentals of cryptographic systems and apply them within practical scenarios to provide appropriate security properties
  3. Apply foundational cyber security concepts to practical scenarios by designing and implementing secure solutions within, for example, operating systems and networked environments.
  4. Analyse system vulnerabilities, and evaluate the tools, techniques, and phases of cyber attacks, demonstrating an understanding of both offensive and defensive strategies.

Outline Syllabus

This module offers an integrated exploration of cyber security, a foundational pillar of modern computing. The syllabus is structured to progressively build your understanding, beginning with core principles and advancing toward applied knowledge and critical analysis.

You will be introduced to the foundational principles of system security, focusing on the CIA triad of Confidentiality, Integrity and Availability; and Authentication, Authorisation, and Accountability (AAA). Students explore access control models, security policies, and the mechanisms that underpin secure system design. The module covers core cryptographic techniques, including symmetric and asymmetric encryption, hashing, and digital signatures, highlighting their practical applications and limitations in real-world contexts. Students also investigate common system vulnerabilities and the tools and techniques used by attackers. Through structured, hands-on lab sessions, students develop practical skills in identifying, analysing and mitigating threats.

Throughout the module, you are encouraged to reflect on the ethical dimensions of cyber security, such as responsible vulnerability disclosure, data protection obligations, and the potential impact of security failures on users and organisations. Practical examples from different industry and organisational domains are introduced to highlight how security decisions and challenges play out in varied real-world contexts.

Assessment Proportions

This module has two pieces of assessment a lower weighted coursework and a higher weighted exam.

SCCM5550: Applied Security Methods

  • Terms Taught: Lent/Summer
  • US Credits: 3
  • ECTS Credits: 5
  • Pre-requisites: Must have covered content similar to Secure Systems and Data

Course Description

This module aims to introduce students to the world of attackers and defenders within the digital environment. As such it primes the student with the main concepts, definitions and tools of the attacker in order to provide the necessary background to conduct both attacks (as would be found in agreed penetration tests) and identify suitable mitigations to those attacks. We consider the legal, regulatory and ethical frameworks which cover penetration testing, while developing practical skills associated with conducting penetration testing. This module aims to develop students’ professional practice, technical and analytical skills, and general numerical and skills

This module is part of the Security theme focusing on cyber security, how systems may be vulnerable, how to secure them, and the theory that supports this.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Recall the phases of a cyber attack, and describe common tools used to achieve the goals of the attack.
  2. Apply different tools (i.e., for reconnaissance and exploitation) to achieve impacts against digital systems as part of a cyber attack.
  3. Identify and reflect upon the essential legal, regulatory and ethical behaviours to perform a lawful penetration test.
  4. Evaluate suitable mitigations to address vulnerabilities discovered in a penetration test.
  5. Practice effective written communication in conveying the outcomes of a penetration test

Outline Syllabus

This module explores some of the practical and applied aspects of cyber security by having you develop and put into practice the skills to undertake a penetration test. We discuss common approaches and tools that attackers use to undermine the security of digital systems and gain first-hand experience of the weaknesses that can be present in real-world systems through guided work in highly controlled, small-group practical labs. The module will wrap the technical and theoretical aspects within the legal, regulatory and ethical frameworks for the appropriate application of ethical penetration testing.

Assessment Proportions

This module has two pieces of assessment a lower-weighted coursework and a higher-weighted exam.

SCCM6110: Advanced Programming

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Designing Software Systems

Course Description

This module aims to provide a coherent introduction to functional programming, and its contemporary application. The underlying implications of total immutability and the separation of side-effectful code are discussed, along with the benefits this brings to programming language expressivity, determinism, scalability, concurrency and data parallelism. Furthermore, it aims to demonstrate through practical experience how the use of functional programming can help increase the likelihood of program correctness by construction, increasing reliability and security of software, and how more advanced type systems can facilitate those guarantees. The module aims to further practice students design and implementation skills, technical computing skills, computation thinking concepts, and applied numerical skills.

This module is part of the Software theme focusing on programming languages and software development.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Discuss the principles of the functional programming paradigm.
  2. Compare and contrast the benefits and drawbacks of functional programming compared to imperative programming.
  3. Use advanced programming constructs such as pattern matching, map/reduce, lambdas, list comprehensions and currying.
  4. Construct functional programs using contemporary multi-paradigm programming languages.
  5. Apply computational thinking principles.
  6. Practice software design and programming skills.

Outline Syllabus

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 such as more expressive type systems, immutability, pure functions and side-effects, lambdas, higher order functions, currying, map/reduce, and pattern matching. You will also explore why functional languages bring about increased reliability and scalability and how they are now experiencing a resurgence within the software industry. Through hands-on laboratory sessions, you will learn a functional programming language such as Haskell and see how functional programming concepts are being integrated in mainstream programming languages such as Java, Python and JavaScript, to create versatile multi-paradigm programming environments.

Assessment Proportions

This module has three pieces of assessment a low-weighted in class test; a piece of coursework and a higher-weighted exam.

SCCM6120: Quantum Computing

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: None

Course Description

This module aims to equip students with a practical understanding of quantum computing from a Computer Science perspective, enabling them to analyse and implement algorithms that leverage quantum mechanical principles. While providing the essential mathematical and physical foundations, the focus is on practical work with qubits, quantum gates, and contemporary quantum programming frameworks. By exploring key algorithms such as Grover’s and Shor’s, and introducing concepts in quantum communication and cryptography, the module prepares students to engage with an emerging computational paradigm that is increasingly relevant to industry and research.

Educational Aims

Upon successful completion of this module students will be able to…

1. Understand and use the mathematical foundations needed to describe quantum information and computations.

2. Describe key quantum computing algorithms and apply them to solve various computational problems.

3. Implement these key quantum algorithms in one or more quantum programming languages.

4. Simulate quantum algorithms on classical hardware.

5. Differentiate between classical and quantum computing.

6. Have some knowledge of the (positive and negative) impacts that quantum algorithms may have on digital technologies.

Outline Syllabus

This module introduces quantum computing's core principles and applications, contrasting its capabilities with classical systems. To start with, the module will ensure basic proficiency in the Dirac notation and essential linear algebra, then move on to quantum mechanics' four postulates, qubits, gates and circuit models. In addition, the curriculum covers fundamental quantum algorithms, such as Grover’s search and Shor’s factorisation algorithms, as well as basic quantum communication protocols. The module also aims to provides a glimpse into the impact of such quantum algorithms (and more generally, technologies): both positive, from computational speed-ups to secure communications, and negative, from undermining RSA cryptography to the massive power usage currently required to run quantum computers.

Beyond theoretical foundations, the module will also ensure that you are able to design quantum circuits for various computational problems. In addition, the curriculum will cover how to simulate quantum algorithms (e.g., those based on quantum circuits) via contemporary quantum programming frameworks, but also the existing options for running these algorithms on actual quantum hardware.

Combining theoretical foundations with practical programming exercises, you will develop a critical understanding of both quantum computing's potential and current technological limitations, preparing you for advanced study or research in this rapidly evolving field.

Assessment Proportions

This module has three pieces of assessment a low-weighted class test, a piece of coursework and a higher-weighted exam.

SCCM6210: Languages and Compilation

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: None  

Course Description

This module aims to introduce students to the theory of formal languages, and how it relates to programming languages. The relationship between formal languages and compiler theory is explored in detail, with the aim to instil a coherent understanding of the compilation process for a high-level programming language. Both language analysis (lexical, syntactic and semantic) and synthesis (compilation) aspects are explored. Small group sessions permit the application of theory to deepen understanding. This module aims to broaden and strengthen the student’s fundamental computer science knowledge, and the mathematical principles upon which that knowledge is based. It also aims to develop general programming and analysis skills.

This module is part of the Data and Theory theme focusing on theoretical computer science, artificial intelligence, and data science.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Recognise and classify the four different types of phrase structure grammar (regular, context-free, context-sensitive and unrestricted) according to the Chomsky Hierarchy
  2. Describe the general features of the compilation process (lexical analysis, syntactic analysis, semantic analysis, code generation and optimisation) in the context of a typical procedural language.
  3. Describe the features of the semantic analysis phase and the synthesis section of a compiler, particularly as applied to modern programming languages.
  4. Compare and contrast key principles of languages, grammars and parsers in terms of syntax, semantics, ambiguity, equivalence, determinism and non-determinism and how this impacts real life constraints.
  5. Construct and use a recursive descent parser for a simple programming language based on a simple context-free grammar.
  6. Apply scientific and numerical skills
  7. Apply computational thinking principles

Outline Syllabus

All programming languages are based on theoretical principles of formal language theory. In this module, you take a deep dive into formal languages representation and grammars, and how they relate to programming language compilers and interpreters. You will study formal language syntax and semantics, phrase structure grammars and the Chomsky Hierarchy. You will learn how to classify languages and explore the concepts of ambiguity in Context Free grammars and its implications. In particular, you will learn about the compilation process including lexical analysis and syntactic analysis, recursive descent parsers, and semantic analysis. Finally, you get to investigate the synthesis phase, where intermediate representations, target languages, and structures lead to code generation.

Assessment Proportions

This module has two pieces of assessment a higher-weighted exam and a lower-weighted piece of coursework.

SCCM6220: Machine Learning

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Artificial Intelligence

Course Description

This module aims to builds on the first principles of AI delivered in SCCM5250 Artificial Intelligence Concepts and provide a thorough foundation in the theory and application of machine learning - a sub discipline within AI, and one of the most rapidly expanding fields of computer science. Using a blend of lecture and laboratory work, the module aims to instil an understanding of how the process of machine learning operates, its costs and its limitations. This module seeks to deepen and formalize students understanding of computational principles and applied numerical and modelling skills are also developed.

This module is part of the Data and Theory theme focusing on theoretical computer science, artificial intelligence, and data science.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Demonstrate awareness of and critically analyse fundamental machine learning concepts, current trends and applications.
  2. Demonstrate understanding of and implement a range of machine learning techniques and explain the motivation and principles behind different methodologies.
  3. Analyse and interpret computational problems and recognise suitable machine learning solutions and pre-processing techniques.
  4. Compare machine learning methodologies in terms of complexity and suitability for a given task.
  5. Demonstrate scientific and numerical skills
  6. Demonstrate the application of computational thinking principles

Outline Syllabus

This module will explore machine learning – a fundamental concept in artificial intelligence that enables a computer to learn how to perform a task from data rather than traditional programming. You will study the key ideas and techniques of machine learning that will help you to develop practical skills in problem solving and to understand the implications and potential of machine learning in business and society. The module begins by looking at real-world machine learning problems, challenges, and fundamental techniques in current machine learning methodology. Building on this, it covers a variety of approaches to machine learning, from decision trees to a wide range of deep neural networks, including multilayer perceptrons, convolutional neural networks, long short-term memory, autoencoder and generative adversarial networks.

Assessment Proportions

This module has two pieces of assessment a higher-weighted exam and a piece of coursework.

SCCM6230: Computer Vision

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Artificial Intelligence

Course Description

This module aims to provide a systematic treatment of the theory and application of computer vision - the ability of computers to automatically infer meaning from digital imagery and video. The module introduces the key knowledge and algorithms related to image processing, then builds on machine learning principles introduced in SCCM6220 to demystify the operation of computer vision-based systems. This module seeks to deepen and formalize students understanding of computational principles and applied numerical and modelling skills are also developed.

This module is part of the Data and Theory theme focusing on theoretical computer science, artificial intelligence, and data science.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Illustrate the current approaches and key research issues relevant to fundamental image/ video processing and computer vision.
  2. Analyse and design a range of algorithms relevant to image processing and computer vision.
  3. Construct software components that implement contemporary image processing and computer vision algorithms, such as handcrafted and automatic feature extraction, segmentation, object detection, 3D imaging, and convolutional neural networks.
  4. Recognise computer vision problems, in order to develop and evaluate solutions.
  5. Demonstrate scientific and numerical skills
  6. Demonstrate the application of computational thinking principles

Outline Syllabus

Computer vision is a branch of artificial intelligence in which we aim to develop computer-based systems that can interpret and draw meaningful deductions from digital images. This module covers the fundamentals to understanding image formation and information relating to the human visual system and some fundamental image interpretation methodologies including convolution, edge detection and feature extraction and comparison. You will tackle key problems in current research, including semantic segmentation, object detection, and three-dimensional image interpretation. You will cover a range of approaches, from low-level image processing to convolutional neural networks. At the end of the module, you will be equipped to construct software components that implement contemporary image processing and computer vision algorithms and recognise issues within computer vision in order to develop and evaluate solutions.

Assessment Proportions

This module has three pieces of assessment a low-weighted in-calss test, a piece of coursework and a higher-weighted exam.

SCCM6240: Natural Language Processing

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Artificial Intelligence

Course Description

This module aims to convey a lucid understanding of the algorithms, processes and applications of natural language processing, founded on well-established theories of language classification. Alternative approaches are discussed, mechanisms to choose the correct approach for a given problem, and the ethical issues associated with the bias of data sets. This module seeks to deepen and formalize students understanding of computational principles and applied linguistic, numerical and modelling skills are also developed.

This module is part of the Data and Theory theme focusing on theoretical computer science, artificial intelligence, and data science.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Describe the fundamental concepts of the Natural Language Processing pipeline and explain the role of each step item in the pipeline.
  2. Compare and contrast the classical, state of the art, and emerging research approaches used in the creation and evaluation of the Natural Language Processing pipeline.
  3. Describe and apply key principles and methodologies for resolving natural language ambiguity and extracting useful information from a variety of unstructured natural language data sources
  4. Construct, apply and evaluate language models and resources to solve real world problems in natural language processing.
  5. Demonstrate scientific and numerical skills
  6. Demonstrate the application of computational thinking principles

Outline Syllabus

This module provides a broad introduction to Natural Language Processing (NLP), a branch of Artificial Intelligence in which we develop computational methods to analyse and understand human languages. You will be exposed to the core concepts of the NLP pipeline covering methods and techniques for data collection, cleaning, tokenisation, and annotation using a hierarchy of linguistic levels (e.g. morphology, syntax, and semantics). You will experiment with and comparatively evaluate different methods and techniques, including rule based, probabilistic, machine learning and deep learning approaches. You will also learn to apply and adapt NLP pipelines and tools to real world text mining scenarios and problems, including examples such as health and finance. Key issues such as ethical data collection, bias in language models, and employing sustainable computing methods are also emphasised throughout the learning and teaching in this module.

Assessment Proportions

This module has two pieces of assessment a higher-weighted exam and a piece of coursework.

SCCM6310: Distributed Systems

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Networks and Systems

Course Description

This module aims to provide a coherent understanding of the fundamental principles underpinning modern distributed systems, and applied experience of creating applications that use them. Practical lab sessions supplement this with experience of contemporary practical tools and techniques of distributed programming, focusing in particular on cloud-based infrastructures. The module also aims to emphasize the importance of key non-functional properties such as scalability, dependability and security, and provide an insight into current research issues in the distributed systems community. This module seeks to deepen and formalize students understanding of computational principles, and applied numerical and modelling skills are also developed. Professional issues are reinforced through study of security and resilience aspects.

This module is part of the Systems theme focusing on the hardware and software infrastructure upon which other applications rely.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Explain the role and structure of common distributed systems architectures and, compare and contrast the differing concepts upon which they may be based.
  2. Recognize the security vulnerabilities in a modern distributed system, and general security principles to address such threats including cryptography and access control.
  3. Explain the importance of non-functional requirements in distributed systems such as scalability, reliability and security, and design systems that meet those requirements.
  4. Construct a distributed system us a contemporary platform.
  5. Apply scientific and numerical skills.
  6. Apply computational thinking principles.
  7. Apply general programming skills.

Outline Syllabus

Large scale distributed computing systems are now commonplace, implemented through the use of “cloud infrastructures” where computing and storage resources are pooled into data centres around the globe. In scientific terms, these are examples of the wider field of Distributed Systems. In this module, you will learn about the fundamental principles that underpin modern distributed systems, the abstractions on which they are based, and their characteristics. Particular emphasis is placed on the scalability and fault-tolerance of these systems. You will get to undertake a deep dive into the commonly used frameworks for distributed systems and highly distributed peer to peer approaches. Small group practical labs reinforce theory through hands-on experience of distributed systems development.

Assessment Proportions

This module has two peices of assessment a higher weighted exam and a piece of coursework.

SCCM6320: Advanced Networking

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Networks and Systems

Course Description

This module aims to build upon the general principles of computer networking in SCCM5310, and instil a lucid understanding of the principles and technologies upon which the core Internet is built. We place particular emphasis on balancing performance, scalability, and efficiency characteristics. The module also aims to provide students with greater experience of using detailed scientific simulations and emulations as a valid means of experimentation.

This module is part of the Systems theme focusing on the hardware and software infrastructure upon which other applications rely.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Explain in depth the design of production network protocols, devices, and services.
  2. Analyse the challenges of production network technologies to cope with the growth, security and scale of the global Internet.
  3. Differentiate the concepts of emerging research informed computer networking technologies and review real-world network service architectures (e.g. CDN).
  4. Classify, compare and contrast the differing mechanisms to deliver high performance network connectivity.
  5. Construct large scale realistic simulated/emulated network topologies to evaluate the behaviour and performance of current and future network technologies (e.g. SDN, NFV).
  6. Demonstrate scientific and numerical skills through measurement within computational simulations.
  7. Demonstrate the application of computational thinking principles.

Outline Syllabus

Computer networks have experienced an exponential growth in traffic volume and size since the early days of the Internet. Packet network technologies underpin every aspect of our daily life. This module investigates the evolution of network technologies to cope with these growth trends. You will explore the architecture of devices and protocols that facilitate end-to-end connectivity across the Internet and allow control of connectivity properties like bandwidth and latency. You will explore cutting-edge research and industry perspectives on the challenges that face production network technologies, such as performance and security, and elaborate on future directions in networking to address them. Practical sessions will introduce you to network emulation and simulation technologies to recreate realistic network testbeds. You will gain experience using open-source software frameworks to implement, configure and test common network functionalities, such as routing and firewalling.

Assessment Proportions

This module has two pieces of assessment a higher-weighted exam and a piece of coursework.

SCCM6330: Embedded Systems

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Networks and Systems

Course Description

This module aims to provide a detailed understanding of the architecture, limitations and capabilities of the most common computer on the planet - the small-scale microcontroller. Building on that knowledge, the module aims to instil the tools and techniques required to practice firmware development (the application of software development principles for highly resource constrained devices). The module also aims to give first-hand experience of creating such software, through specialist embedded systems hardware in the associated practical sessions. Furthermore, it provides further practice of problem-solving skills, interpreting technical documentation, deepening and formalising an understanding of computational principles. Applied numerical and modelling skills are also developed.

This module is part of the Systems theme focusing on the hardware and software infrastructure upon which other applications rely.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Interpret technical documentation for microcontroller devices, and analyse the information gathered to determine the capability and constraints of an embedded system.
  2. Design and construct software solutions to address real-world problems under such constraints.
  3. Evaluate the quality of the solution in terms of performance, storage footprints, and energy efficiency.
  4. Compose embedded systems using industry standard modular interconnects such as I2C and SPI.
  5. Demonstrate scientific and numerical skills
  6. Demonstrate the application of computational thinking principles

Outline Syllabus

This module exposes you to the challenges associated with developing firmware for embedded systems, which are increasingly common in everyday appliances due to the rise of Cyber Physical Systems, smart cities and the Internet of Things. You will take a deep dive into embedded systems hardware and low-level programming. You will study the architecture of microcontrollers – the highly specialized, resource constrained computer processors that power embedded systems. Building on this, you will then learn about the state-of-the-art software development processes that allow us to write highly efficient code for these devices. You’ll discover the industry standard protocols and techniques for integrating peripherals with microcontrollers, and low power wireless network communication technologies that enable their interconnection. The module is anchored by giving you real experience with a variety of embedded systems in practical sessions.

Assessment Proportions

This module has two pieces of assessment a higher-weighted exam and a porfolio.

SCCM6410: Digital Health

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: None

Course Description

This module aims to equip students with the key competences necessary for the development of digital health solutions. Emphasis is given to application scenarios where digital technology is enabling transformation of health care, through which the module investigates those underlying technologies and the associated legal, ethical and professional issues and solutions they entail. It introduces an emerging application domain for computer science. Ethical, legal and professional issues associated with the Computer Science discipline are further reinforced and practiced.

This module is part of the Interactions and Implications theme focusing on the position of computing in society and how we interact with it.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Demonstrate an awareness of the techniques and technologies used to design, develop, implement digital health solutions.
  2. Critically evaluate digital health solutions.
  3. Describe the core components and configuration for storing health data in electronic health records
  4. Demonstrate an in-depth awareness of the ethics, benefits and risks associated with the use of digital technology in health and care.
  5. Practice and demonstrate verbal and written communication skills.
  6. Practice legal, ethical and professional expectations.

Outline Syllabus

Digital Health concerns the utilisation of digital technologies for health and care. It has a key and ever-growing role to play in improving health systems and public health, as well as increasing and improving the equity of access to health services. It has the potential to transform health and care delivery and support individuals to improve their health. You will discover the practical applications, implications, and enabling technologies of digital health. You will survey the sensor technologies that permit remote and automated patient monitoring, study the technologies and processes that enable patient-driven healthcare. You will also investigate the structure of health data in electronic health records, and methods for the evaluation of digital health solutions. Alongside these applied topics, you’ll also learn about data governance and the ethical issues surrounding digital health technologies, policy, and regulation.

Assessment Proportions

This module has thre pieces of assessment a low-weighted in-class test, a piece of coursework and a high-weighted piece of coursework.

SCCM6430: Computer Science Education

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: None.

Course Description

This module aims to provide a pedagogically grounded introduction to the principles of Computer Science education. Emphasis is placed on developing an awareness of the methods to teaching, learning and assessment that have been shown to be effective in both UK and global contexts, whilst addressing issues of equality, diversity and inclusion. The module also aims to provide practical experience of developing learning resources and the opportunity to engage with regional organizations to deliver these activities. The UK education sector has a large-scale shortage of teachers trained in Computer Science - as a long-term aim, this module aims to raise the awareness of education as a professional graduate career path. The module also aims to develop new skills in verbal and written communication, broaden and practice ethical and professional issues associated with the Computer Science discipline.

This module is part of the Interactions and Implications theme focusing on the position of computing in society and how we interact with it.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Identify the key approaches to computing pedagogy (e.g. computational thinking) and apply these to the different levels of education (e.g. primary, secondary, higher education).
  2. Recognise how pupils/students learn computer science, implement problem-solving and critical thinking practices in different contexts, and arrange teaching to respond to their needs.
  3. Apply Equality, Diversity, and Inclusion (EDI) values and learning practices in the design of educational material.
  4. Plan and organise well-structured teaching and engagement activities.
  5. Practice and demonstrate verbal and written communication skills.
  6. Practice computation thinking principles.
  7. Practice legal, ethical and professional expectations.

Outline Syllabus

You will explore how to teach Computer Science (CS) as a discipline and organise the engagement activities that are contributing to addressing the digital skills gap, and inspiring new computer scientists. Through practical sessions, you will build a foundational understanding of computing pedagogy, learning to recognise how learners study computer science and arrange teaching to respond to their needs. You’ll explore the instruments and methods for effective teaching practices, exploring UK and global contexts, and the differences within primary, secondary, and higher education. It highlights the importance of equality, diversity, and inclusion (EDI), ethics, safeguarding and integrity considerations in CS education. Among the teaching practices, you will also learn how to plan or conduct teaching or outreach activities in schools – providing the opportunity to practice educational skills by contributing to activities in regional schools and supporting the development of digital capabilities of young people in Lancashire.

Assessment Proportions

This module has two pieces of assessment a higher-weigthed exam and a portfolio.

SCCM6510: Engineering and Verifying Secure Distributed Systems

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Secure Systems and Data.

Course Description

This module aims to provide students with a comprehensive understanding of the principles, challenges, and design strategies underpinning secure distributed systems, which form the backbone of modern computing infrastructures such as cloud platforms and service-oriented architectures. It introduces students to the foundational concepts of distributed computing, including system architecture, communication protocols, and the inherent complexities of distributed environments.

A key focus of the module is on the security of distributed systems. Students will explore cryptographic techniques essential for securing communication and data, and examine common vulnerabilities and attack vectors. The module aims to develop students’ ability to critically assess and apply secure design patterns and mitigation strategies in real-world contexts.

To ensure the reliability and correctness of distributed systems, the module introduces formal specification and verification techniques. Students will engage with formal languages and automated tools to model system behaviour and verify critical properties, equipping them with the skills to reason rigorously about system correctness—an essential capability in safety- and mission-critical applications.

In addition to subject-specific knowledge, the module fosters a range of transferable skills. These include analytical thinking, problem-solving, and the ability to communicate complex technical ideas effectively. Through collaborative activities and project-based learning, students will also develop teamwork and research skills, preparing them for both academic progression and professional practice in the field of distributed systems and cybersecurity.

This module is part of the Security theme focusing on cyber security, how systems may be vulnerable, how to secure them, and the theory that supports this.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Describe the security requirements, threats and vulnerabilities of classes of distributed systems.
  2. Apply suitable cryptographic techniques and secure communication protocols to address common security problems in distributed systems.
  3. Analyse how different types of distributed systems can be attacked, and propose effective mitigation strategies.
  4. Use formal specification languages to model distributed system behaviour, and apply automated tools to verify key system properties.
  5. Apply secure design principles to build distributed system components that address identified threats and vulnerabilities.

Outline Syllabus

This module explores the foundational and advanced concepts underpinning the design, implementation, and verification of secure distributed systems. It begins by examining the core characteristics of distributed systems, including decentralisation, concurrency, fault tolerance, and scalability. You will investigate the architectural models and communication protocols that enable distributed computing, such as client-server, peer-to-peer, and publish-subscribe paradigms.

A significant focus is placed on the security challenges unique to distributed environments. The module covers cryptographic primitives and protocols essential for secure communication, authentication, and data integrity. You will analyse common vulnerabilities and attack surfaces in distributed systems, including attacker-in-the-middle attacks, replay attacks, and denial-of-service scenarios, and explore mitigation strategies through secure design patterns and best practices.

The module also introduces formal methods for specifying and verifying distributed systems. Students will learn to use formal specification languages (e.g., TLA+, Promela) to model system behaviour and apply automated verification tools (e.g., model checkers) to prove properties such as safety, liveness, and correctness. These techniques are contextualised within real-world applications, such as consensus algorithms, distributed ledgers, and cloud-based services.

Throughout the module, you will engage with contemporary research and case studies to critically evaluate trade-offs in system design, including performance, scalability, and security. Practical sessions and group-based activities will reinforce theoretical knowledge through hands-on experience in designing, modelling, and analysing distributed systems.

Assessment Proportions

This moduls has two pieces of assessment a higher weighted exam and a piece of coursework.

SCCM6520: Secure Cyber Physical Systems

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Secure Systems and Data.

Course Description

This module aims to equip students with a comprehensive understanding of the unique security challenges and considerations associated with Cyber-Physical Systems (CPS), such as Industrial Control Systems, Internet of Things (IoT) devices, and Connected Vehicles. Unlike traditional computing environments, CPSs operate within physical contexts and often have constrained computational capabilities and limited resources, which significantly influence the design and implementation of security measures.

Students will explore the interplay between digital and physical security threats, gaining insight into how to mitigate these threats while taking the deployment environment and resource constraints into account. The module develops the capability to select and apply appropriate mitigation strategies tailored to specific system constraints and operational contexts.

To support the development of graduate attributes, students will engage in reflective practice. The module culminates in a capstone project where students synthesise their learning to secure a cyber-physical system and demonstrate its effectiveness.

Through a blend of theoretical exploration and practical engagement, students will develop subject-specific knowledge in CPS security, alongside transferable skills such as analytical thinking and problem-solving. The module encourages collaborative learning and reflective practice, supporting students in becoming adaptable, ethically aware professionals capable of contributing to secure and sustainable technological innovation.

Educational Aims

Upon successful completion of this module students will be able to:

  1. Identify the unique security challenges posed by Cyber-Physical Systems (CPS) in comparison to traditional computing environments.
  2. Evaluate the suitability of various security techniques and mitigation strategies for CPSs, taking into account system constraints and deployment contexts.
  3. Apply principles of secure software development to design and implement applications for CPSs that address both digital and physical threats.
  4. Design experiments or tests to evaluate the security of a CPS.
  5. Synthesise knowledge from case studies and current research to propose innovative solutions to emerging CPS security threats.

Outline Syllabus

This module offers an in-depth exploration of the security challenges facing Cyber-Physical Systems (CPS), with a focus on real-world applications such as Industrial Control Systems, Internet of Things (IoT) devices, and Connected Vehicles. The module begins by establishing foundational knowledge of CPS architectures and their operational environments, highlighting how physical constraints and embedded deployment shape security considerations.

You will then examine the threat landscape specific to CPSs, including both digital and physical attack vectors. Students will analyse how adversaries exploit vulnerabilities and how these threats differ from those in traditional IT systems, using real-world scenarios.

Building on this, the module introduces a range of mitigation strategies, ranging from technical to architectural, secure coding practices for embedded systems, and hardware-based protections. Students will apply these techniques in practical scenarios, developing secure applications and evaluating their effectiveness.

The syllabus also explores the intersection of security with safety and privacy, encouraging students to critically assess how these domains interact and sometimes conflict. Ethical considerations, regulatory frameworks, and the societal impact of CPS security decisions are woven throughout the module.

Assessment Proportions

This module has two pieces of assessment a higher-weighted exam and a piece of coursework.

SCCM6530: Secure Artificial Intelligence

  • Terms Taught: Lent/Summer
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: Must have covered content similar to Secure Systems and Data.

Course Description

This module aims to equip students with a foundational and applied understanding of the dynamic intersection between Artificial Intelligence (AI) and cyber security. As AI technologies such as Generative AI and Large Language Models (LLMs) become increasingly embedded in both research and industry, they offer powerful tools for enhancing cyber security—enabling more effective threat detection, anomaly identification, and risk mitigation. At the same time, these technologies introduce new vulnerabilities and attack surfaces, including prompt injection, data leakage, adversarial manipulation, and model exploitation.

The module is designed to help students critically explore both sides of this evolving landscape: how AI can be harnessed to strengthen cyber defences, and how AI systems themselves must be protected from emerging threats. Students will gain insight into the principles and techniques of using AI to augment traditional cyber security measures, such as firewalls, intrusion detection systems, and behavioural analytics. Simultaneously, they will investigate the growing field of AI security, including adversarial attacks, data poisoning, model inversion, and mitigation strategies.

Through a combination of theoretical grounding and practical exploration, the module fosters analytical thinking, ethical awareness, and technical fluency. Students will develop transferable skills in problem-solving, critical evaluation, and collaborative inquiry, preparing them for roles at the forefront of AI and cyber security innovation. This module supports the broader programme aim of producing graduates who are not only technically proficient but also capable of navigating the complex ethical and societal implications of AI in security contexts.

Throughout the module, students will be encouraged to reflect on their development of Lancaster’s Graduate Attributes, particularly in areas such as critical thinking, ethical reasoning, and digital fluency. The module culminates in a project-based assessment where students synthesise their learning to propose innovative, responsible solutions to contemporary AI security challenges.

This module is part of the Security theme focusing on cyber security, how systems may be vulnerable, how to secure them, and the theory that supports this.

Educational Aims

Upon successful completion of this module students will be able to:

  1. Analyse the role of Artificial Intelligence in enhancing traditional cyber security practices, including threat detection, anomaly identification, and risk assessment.
  2. Evaluate the effectiveness and limitations of AI-driven security tools and techniques in real-world cyber security scenarios.
  3. Apply machine learning and AI models to simulate and investigate cyber security use cases, demonstrating practical understanding of their implementation and impact.
  4. Critically assess the vulnerabilities of AI systems to adversarial attacks such as data poisoning, model inversion, and prompt injection.
  5. Design mitigation strategies to defend AI systems against emerging security threats, incorporating ethical, technical, and operational considerations.
  6. Synthesize knowledge from AI and cyber security domains to propose innovative solutions to complex security challenges, demonstrating independent research and problem-solving skills.

Outline Syllabus

This module explores the rapidly evolving relationship between Artificial Intelligence (AI) and cyber security, offering you a critical and applied understanding of how AI is transforming both the tools and threats within the digital security landscape. The module begins by introducing foundational concepts in AI and machine learning, with a focus on their application to cyber security tasks such as anomaly detection, behavioural analysis, and automated threat response.

As the module progresses, students will examine how AI is integrated into traditional security infrastructures, including firewalls, intrusion detection systems, and risk assessment frameworks. This is followed by a deep dive into the vulnerabilities of AI systems themselves, where students will explore adversarial machine learning, data poisoning, model inversion, and prompt injection attacks. These topics are contextualised through real-world case studies and hands-on labs, encouraging students to critically evaluate both the power and fragility of AI in security contexts.

The syllabus also addresses the ethical, legal, and societal implications of AI in cyber security, including issues of bias, accountability, and the global digital divide. You will engage with diverse perspectives, including non-Western approaches to digital ethics and security, and reflect on how AI technologies can both reinforce and challenge existing power structures.

Assessment Proportions

This module has two pieces of assessment a higher weighted exam and a piece of coursework.

SCCM7010: Research Methods & Innovation

  • Terms Taught: Michaelmas
  • US Credits: 5
  • ECTS Credits: 10
  • Pre-requisites: None.

Course Description

This module aims to provide students with a formal grounding in research methods and develop their ability to critically reflect on research approaches and practices in the field. It also seeks to enable students to appreciate the different ways in which research is done in different disciplines, academic communities, and industrial R&D. Through collaborative group working, it also aims to give students real-world experience of a research informed study design to address a challenge or problem. It aims to develop critical reading, analysis and argumentation skills, enhance the students professional, communication to a level commensurate with a practicing computer science or communication systems professional. It also aims to further develop group working skills within a creative, innovative context.

This module will require the student to go significantly beyond the taught content and undertake individual research and learning appropriate to MSci study in order to demonstrate deeper understanding and mastery of the subject area via a coursework project.

This module is part of the Interactions and Implications theme focusing on the position of computing in society and how we interact with it.

Educational Aims

Upon successful completion of this module students will be able to…

  1. Recognise different ways of undertaking research in different disciplines and in industrial R&D projects.
  2. Conduct effective literature reviews, and to critically analyse research literature.
  3. Design a range of research informed solutions to a given problem as part of an innovation team.
  4. Evaluate a set of proposed designs and apply a structured rationale to choose a viable prototype candidate.
  5. Construct a prototype solution as part of a team and evaluate its suitability for a given task.
  6. Communicate effectively about research and development.
  7. Practice collaborating in a research and development team to solve challenges.
  8. Practice critical research skills.

Outline Syllabus

Computer scientists frequently face problems for which there are no ready answers and therefore require research. This module deepens your understanding of research methodology, the ‘classic’ empirical methods of survey, case study, ethnography and experiment, and design and innovation as the context in which computer scientists apply research methods. On a fundamental level, you will explore how empirical research involves questions of sampling, data collection, study design and data analysis, and how each of these involves trade-offs that can limit the validity of results gained and conclusions drawn. On a practical level, you will engage in a collaborative innovation project through which you can practice the application of methods in design and evaluation of novel interactive solutions.

Assessment Proportions

Assessment for this module takes the form of a groupwork project.