Three year bachelor's degree
Computer science is a dynamic discipline with a diverse range of applications and career paths. This programme explores the theory and practice of innovative and experimental computer science, allowing you to develop well-rounded professional and technical skills.
This degree was 3rd in the UK for graduate prospects (The Guardian University Guide, 2020).
Three years (full-time)
English
Computer science is a vast but specialised subject; as a result, our degree equips you with the technical and professional skills necessary to apply yourself to a broad range of careers. Our UK graduates have gone on to work with major technology companies such as IBM, Google, BBC, and BAE, while others have chosen to take their software design, development and management skills to SMEs, or have set up their own technology-centric businesses. Many of our computer scientists also elect to study for MSc or PhD qualifications.
In the first year, you will receive a comprehensive understanding of the fundamental principles of the discipline, combined with their modern day application. Throughout your study, you will gain skills and experience from a range of modules, including Software Development, Fundamentals of Computer Science, Professionalism in Practice, and Digital Systems. Taking a practical approach to learning, you are encouraged to build and analyse systems and software, as well as work with end user feedback to refine and adapt solutions.
After gaining an overview of the subject in the first year, you will be motivated by topics that become progressively deeper and more specialised as your skills develop throughout second and third year. In addition to progressing your foundational understanding, programming, and software design skills, you will explore the fundamental concepts of artificial intelligence, preparing you for the more advanced AI modules in third year.
Your third year gives you the opportunity to explore a range of well-constructed and enriching modules, as well as undertaking an individual project with one of our academics, allowing you to use and further develop the skills acquired throughout your degree.
Programme structure: Information contained on the website with respect to modules is correct at the time of publication, and the University will make every reasonable effort to offer modules as advertised. In some cases changes may be necessary and may result in some combinations being unavailable, for example as a result of student feedback, timetabling, staff changes and new research. Not all optional modules are available every year.
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 SCC.111, 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.
Computing and data drive many critical elements of modern society, directly or indirectly. It’s vital that there is a strong theoretical foundation to computer science. This module begins by examining the hard questions central to computer science and reasoning itself to prepare students for the in-depth critical thinking and discussion required at university level. Students will cover the fundamentals in logic, sets, and mathematics of vectors, matrices, and linear algebra which have practical applications in software such as computer graphics. Algorithms, abstract data types, and analysis of algorithms is introduced to allow our students to make reasoned decisions about the design of their programs. Finally, they will get the chance to investigate and apply 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.
This module is designed to provide students with a strong foundation in principles of responsible computing, covering the legal, social, ethical and professional challenges that that a practicing computer scientist regularly faces. It is heavily research-led, delivered by staff actively researching these issues, and draws upon contemporary examples of where technology has resulted in both benefits and harm to people and society. Students will develop an understanding of the legal frameworks, professional codes, working practices and civil licenses designed to provide protection from these harms. Particular emphasis is placed on considerations relating to the need for computer systems to be trusted and trustworthy.
As a part of this module, students will study the use of participatory research methods in exposing real-world requirements for computing systems and ensuring equitable distribution of benefits and harms of digital innovation across the population, in alignment with a changing legal landscape. Inclusive design practices through the development phases from research to implementation are reviewed, examining the prevalence and impact of the gender data gap, accessibility constraints and exploring the benefits of diversity in the workplace through real-world examples. They will also discover ethical ways to practice personal and professional development for career progression.
Software now forms a central aspect of our lives. From the applications we run on our phones to the satellites in space, all modern technology is enabled by software. This module provides an introduction to the field of Software Development – the processes and skills associated with designing and constructing computer programs. Students are not expected to have any previous experience with the field of computing, and will study 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 Python, JavaScript and C. They will discover how programming languages can be classified and how to choose the best language for the task at hand.
Students will also investigate and apply the practical Software Engineering skills needed to ensure software is correct, robust and maintainable. These include techniques for problem analysis, design formulation, programming conventions, software commenting and documentation, testing and test case design, debugging techniques and version control.
Students are required to undertake 40 additional credits from a selection of 1st year business management and accounting and finance modules.
This module provides broader exposure to alternative programming language paradigms beyond imperative and object-oriented programming. Particular emphasis is given to functional programming languages, and their unique constraints and features. More specifically, students will investigate how introducing the concept of absolute immutability into programming languages enables a suite of expressive mechanisms within programming languages including pure functions, lambdas, higher order functions, pattern matching, currying, map/reduce, and pattern matching.
As a part of this module, students will also explore why functional languages bring about increased reliability and scalability, and how they are now experiencing a resurgence within the software industry. Finally, through hands-on laboratory sessions, students 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.
In this module, students will build upon the foundations of algorithms and their complexity to develop a deeper understanding of algorithmic approaches to computational problem solving. They will explore computational complexity theory, which allows us to consider the very nature of computability – including non-deterministic polynomial (NP) complexity classes such as NP-hard, NP-complete and the classes of problems which cannot be solved. Students will be introduced to classical approaches to problem solving such as divide and conquer, recursion, and parallel approaches, emphasizing their relative benefits and weakness to different classes of problem. They will study advanced data structures in depth, such as tries, heaps, suffix arrays, k-d trees, and distributed hash tables, and explore the approaches for their efficient construction and use.
These theoretical aspects are grounded through practical work in the lab and placed in the context of case studies of extreme scale and embarrassingly parallel computing, derived from real-world problem domains introduced by invited speakers where possible. Finally, students explore key implications of algorithm performance including their impact on energy efficiency and sustainability to provide a coherent interface with other modules.
Building upon the foundations set in SCC.131, this module investigates the deeper concepts that underpin computer networking and operating systems. Students explore the role, operation, and design rationale of the IP protocol suite –which enables the global internet. Taking a top-down approach, students discover how protocols such as HTTP, DNS, and TCP/IP operate on a fundamental level, the metrics and tools we use to evaluate the performance of computer networks.
Using laboratory-based simulators, students will also explore first-hand how routing protocols ensure user data is efficiently and safely routed across the global internet. They will study the interface between computer networks and operating systems, and how the concept of virtualization has transformed the way computer systems and networks efficiently make use of their hardware resources.
Most computing systems are interactive and have people in the loop. Human-computer interaction (HCI) is concerned with all aspects of designing, building, evaluating, and studying systems that involve human interaction. From a computing perspective, students focus on enabling interaction through user interfaces, and on creating interactive systems that are usable and provide a good user experience.
The module introduces students to the foundations of HCI in understanding human behaviour, technologies for interaction, and human-centred design. Students will review human perception, cognition and action and relate these to design principles and guidelines; discuss different user interface paradigms and key technologies such as pointing; and introduce practical methods for design and evaluation with users.
This module builds upon knowledge gained in Part I by providing a theoretical background to the design, implementation, and use of database management systems, both for data designers and application developers. It incorporates consideration of information quality and security in the design, development, and use of database systems.
As a part of this module, students will be introduced to a brief history of database management systems, Entity-Relationship Models, the relational model and the data normalisation process, and alternative schema definitions, NoSQL and object-oriented data models, big data, as well as transaction processing and concurrency control. The module embeds practical access and retrieval considerations and how to interact with databases written in a number of programming languages.
The module aims to provide students with information on Authentication, Authorisation, and Accountability (AAA) and its building blocks. An emphasis will be given on authorisation, where access control models, policies and mechanisms will be examined.
Students will review main categories of existing cryptosystems (e.g. symmetric, asymmetric) in order to understand their use and offered security properties (e.g. confidentiality, integrity, non-repudiation) in practice. They will explore operating systems security and network security concepts in connection to AAA and cryptosystems, as well as being introduced to formal verification and how it can be used to verify properties on cyber security systems.
Software Design offers the opportunity to gain an understanding of the importance of software architecture design, different styles of architecture and the meaning of quality attributes for software design such as maintainability, performance and scalability. Students will gain knowledge of systematic approaches to developing software design using a set of graphical models. The design process involved in developing several modes of the system at different levels of abstraction is explained and they will be introduced to object oriented design with UML.
Throughout the module, students will appreciate the broader context of the role of computer science in the workplace, and the key role it plays in implementing software. The course also looks at understanding the meaning of quality attributes for software design as well as architectural models for specific software systems. Students will gain an insight into the main quality attributes for deciding classes. Students will be able to interpret and construct UML models of software and implement a design expressed as a UML mode as well as understanding how to use various design patterns to address certain problems.
This module introduces the key ideas and fundamental principles of artificial intelligence (AI) and the types of problems that can be addressed by AI. Students will be introduced to the core concepts and philosophy of AI, including its history and definitions, classify the various approaches to AI, and discuss its presence in the modern world alongside its ethical considerations. They will unearth the underlying principles of search spaces, knowledge representation, and inference logic that form the core of rule-based systems.
Students will then go on to learn the principles of machine learning, emphasising clustering (e.g. k-means), classification (e.g. k-nearest neighbour) algorithms, linear regression, and neural networks. This deep dive provides the essential grounding necessary to progress to modules in topics such as Machine Learning, Computer Vision, and Natural Language Processing.
The group project will give students experience in executing a project through all stages, working to the demands of a client, and practically combine and apply concepts and skills gained in other modules studied so far in their programme. Students will learn to apply their knowledge about prototyping, project planning, management, design, and user evaluation or testing strategies. Teams will deliver reports, code, and demonstrate a working system. They will also communicate their work through reports, demonstrations, and presentations.
The project content may differ from year to year, and groups may be able to select projects aligned with the School’s main themes of Software, Systems, Data and Theory, Interactions and Implications, and Cyber Security, although each theme may not be available every year. Example topic areas could be desktop application development, game programming, computer graphics, user interfaces, mobile computing, or other areas. The exact requirements of a group project will vary according to the focus of its theme; however, the course structure of a group project will be the same between themes and different years. Students will receive about 30 hours of workshop contact time throughout the module, in addition to lectures, and then will be expected to work independently as a group.
To support this practical activity, two strands of lectures are delivered. One covers programming and continues the development of the students practical programming skills to allow them to confidently contribute to larger, team-based programming projects. The second covers teamwork, project management, risks, and costings so that the student has a sound base for managing collaborative projects.
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 work, social life, and entertainment – even enabling the global populous to continue working during a global pandemic.
This module investigates the evolution of network technologies to cope with the global Internet growth trends and is organized in three topic areas. Core topics explore the architecture of devices and protocols that facilitate end-to-end connectivity across the global Internet and allow control of connectivity properties, like bandwidth and latency. Research and Industry topics 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. Finally, practical topics will introduce students to network emulation and simulation technologies and offer the opportunity to recreate realistic network testbeds. Through small group practical sessions, students will gain experience using open-source software frameworks to implement, configure and test common network functionalities, such as routing and firewalling.
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, students 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, and students will get to undertake a deep dive into the commonly used frameworks for distributed systems, such as Google infrastructure, and highly distributed peer to peer approaches. Small group practical labs reinforce theory through hands-on experience of distributed systems development.
All programming languages are based on theoretical principles of formal language theory. In this module, students take a deep dive into formal languages representation and grammars, and how relate to programming language compilers and interpreters.
Students will study formal language syntax and semantics, phrase structure grammars and the Chomsky Hierarchy. They will learn how to classify languages and explore the concepts of ambiguity in Context Free grammars and its implications. In particular, they will learn about the compilation process including lexical analysis and syntactic analysis, recursive descent parsers, and semantic analysis. Finally, students get to investigate the synthesis phase, where intermediate representations, target languages, and structures lead to code generation. In the School, we blend lectures with small group lab sessions where students gain hands-on experience of applying such theory.
This module discusses the security threats to Cyber-Physical Systems (CPS) – such as Industrial Control Systems, IoT, Smart Cities, and Connected Vehicles, and techniques to mitigate these threats. Students will learn how to identify appropriate security techniques and protocols to use depending on the specifics of a CPS. This involves understanding how to write secure applications for CPSs and alternative technologies, such as Transport Layer Security (TLS).
Students will also explore how the limitations of these systems impact the security guarantees that can be provided. In addition to security, this module will examine the safety and privacy threats CPSs will be subject to and explore the interconnectivity between them and security. By the end of the module, students will be able to design experiments to test the effectiveness of a CPS’s security, as well as translate their experiences of securing one CPS to another within a different domain.
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. Students will tackle key problems in current research, including semantic segmentation, object detection, and three-dimensional image interpretation. They will cover a range of approaches, from low-level image processing to convolutional neural networks. At the end of the module, students 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.
This module will explore machine learning, which sits within the field of artificial intelligence and enables a computer to learn how to perform a task from data rather than traditional programming.
Students will study the key ideas and techniques of machine learning, which will help students to develop practical skills in problem solving and to understand the implications and potential of machine learning in business and society. They will begin by looking at real-world machine learning problems, challenges, and fundamental techniques in current machine learning methodology. Building on this, the module will cover 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.
Students on the third-year project are required to submit a dissertation as part of their work.
The project is a substantial individual project, normally involving the principled design, implementation, and evaluation of a substantial piece of software, experimental study, or theoretical work. Each student chooses their topic from a wide selection posted by potential supervisors. The project topic is normally selected prior to the start of the third year. The requirements of the degree scheme, the student’s interests and the supervisor’s area of expertise are taken into account during project allocation.
Students normally receives at least bi-weekly guidance (of around 30 minutes) one-to-one from their project supervisor. Regular supervision ensures a required level of academic achievement and rigour is maintained throughout the project.
Teaching is delivered via a combination of small group lectures and group-based tutorials. Assessment is via individual or group coursework, research projects and examinations. You will be expected to undertake independent study throughout to supplement what is being taught/learned and to broaden your personal knowledge.
All BSc (Hons) Computer Science students will receive their undergraduate degree from Lancaster University’s Bailrigg campus in the UK.
A degree in Computer Science can open up a range of exciting career avenues, including the following roles: