Systèmes d’information
Concevoir, maintenir et optimiser des systèmes d’information sur infrastructures cloud et hybrides.
Les candidats peuvent lire le programme complet sans perdre la progression : fondations d’abord, puis systèmes, software, data, cloud, cybersécurité, IA et expérience professionnelle.
Computer architecture, processor instruction sets, hardware components, virtualisation, kernel principles and shell-based system automation.
BSc · Year 1 · 9 sessions
Course code: FCS-001
A computer can be examined as a sequence of operations, not only as a collection of components. These sessions moved from number representation and simple models of computation to assembly instructions, memory and operating-system services. Simulator exercises made register changes and branching visible; later activities used Python and command-line tools to inspect the machine on which the programs were running.
Binary arithmetic, character encoding and processor simulators connected stored values with the instructions that read, transform and write them.
Registers, caches, buses and peripherals were considered through their roles, constraints and effects on a computer’s behaviour.
Python experiments and command-line work linked operating-system concepts to processor counts, memory access, files, paths and running processes.
The session introduced computer architecture through the history of computing, from mechanical calculators and punched cards to programmable electronic computers and microprocessors. It explained the layered model of a computer: hardware, operating system and application software. The class covered Turing machines, including states, tape symbols, transitions and graphical or tabular representations, then used examples to complement binary digits and show how shifting a binary number can double its value. It also introduced bits, bytes and words, most- and least-significant bits, binary and hexadecimal notation, and conversion methods between binary, decimal and hexadecimal numbers. Students practised these ideas through guided exercises.
The session revised conversion between binary, decimal and hexadecimal, including grouping binary digits into sets of four and using prefixes such as 0x and 0b. It introduced computer architecture through the von Neumann model, processor components, buses, memory organisation and the distinction between random-access memory (RAM), flash storage, registers and cache. The class covered byte-addressed memory, big-endian and little-endian storage conventions, processor instruction sets, arithmetic and logic units, and interrupts. It also examined data encoding, including signed integers using two’s complement, approximate binary representations of fractional and real numbers, and the ASCII character code character encoding through practical exercises.
The class reviewed the distinction between machine code, executable binaries and assembly language, including mnemonics, registers and the role of an assembler. Students used a reduced instruction set computing (RISC) processor simulator to follow the fetch, decode and execute stages, identify addresses and data in memory, and store register values in memory. They wrote and tested assembly instructions for addition and subtraction, using registers to hold operands and the arithmetic and logic unit to perform calculations. The session also covered input and output instructions, conditional branching through comparison flags, labels, and loops, with comparisons to equivalent Python conditional statements and loops.
The session completed work on RISC assembly programming by introducing immediate, register, indirect and indexed indirect addressing modes, using load and store instructions in a simulator. It explored unconditional branching, program counters and the consequences of treating memory data as executable instructions, linking the von Neumann shared-memory model to security vulnerabilities and contrasting it with the Harvard architecture. The class then introduced the x86 complex instruction set computing (CISC) family, including its historical development, segmented memory addressing, registers, flags, assembly directives, procedures and conditional jumps. Students used an x86 simulator to identify labels and instructions, perform hexadecimal arithmetic, apply AND and OR masks, and compare register and direct variable addressing.
The session completed work on x86 assembly language using a simulator to trace programs, identify addressing modes, and verify that a program added two memory values and stored the result. Immediate, indirect, indirect-with-offset and direct addressing were compared, with direct addressing presented as a feature of CISC processors that can shorten code. Conditional comparison and jump instructions were used to represent an if/else structure, linking assembly language to high-level programming languages. The class then introduced peripherals, coprocessors, buses, chipsets and systems-on-chip, including processors, graphics and arithmetic units, trusted-platform security modules and neural-processing units, as well as the trade-offs between integration, performance and heat. Thermal throttling in a Raspberry Pi system-on-chip was examined through graphs, before an introduction to high-level languages, compilation, interpretation, operating systems and a planned Visual Studio Code activity in C.
Students configured Visual Studio Code extensions to compile, run and debug C programs, although compilation issues led to a simplified approach and a move to Python exercises. They installed Python and the psutil library, then used a program to retrieve the number of logical processors and checked the result against Windows Task Manager. The session explained Python functions, division, division-by-zero errors, indentation, and the use of try and except to handle exceptions without terminating later instructions. It then covered the role of the motherboard, including buses, power distribution, component connectors, standards, modularity and compatibility. The class also examined computer start-up, firmware, BIOS and UEFI firmware interfaces, bootloaders, multibooting, virtual machines, and using Task Manager and benchmarks to inspect and compare hardware.
The session examined processor cache memory, including the roles of L1, L2 and L3 caches, their relative sizes, speeds and sharing between processor cores. A Python benchmarking activity was used to measure memory-access times for arrays of different sizes, then the program was corrected so that it accessed a constant number of elements and better revealed cache-level performance changes. The class then introduced operating systems as providers of services for hardware, processes, memory, files, devices and communication. It covered processes, scheduling and pre-emption, virtual memory, logical and physical addresses, paging, swapping, drivers and kernels. The session ended by comparing the Windows command prompt and PowerShell and using the dir command to inspect files and directories.
The session practised using the Windows Command Prompt and PowerShell to list files, create directories, navigate directory trees, create text files and display their contents. It explained command aliases, command history, tab completion, scripts, and shortcuts for stopping running programs. Students distinguished relative and absolute file paths and used both types of path in Python programs to open files. The class also covered executable files, file extensions, environment variables including PATH, and using Task Manager to end processes.
The session revised Turing machines as models of computation, including tapes, reading heads, state machines, graphical and tabular representations, and checks for complete deterministic transition coverage. Students designed machines to position the head on the least significant bit of a binary number and to decrement a binary number, using two’s complement and binary arithmetic. The class also practised converting numbers between binary, decimal and hexadecimal, including repeated division and four-bit hexadecimal transcodings. Finally, students used a RISC assembly simulator to trace a loop, interpret ASCII output, identify addressing modes, and compare RISC and CISC processor architectures.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Networking principles, packet routing, addressing, TCP/IP configuration and security mechanisms including VLANs, firewalls and VPNs.
BSc · Year 1 · 11 sessions
Course code: FCS-002
The teaching followed how machines communicate, from a local Ethernet connection to routing between networks and using named services. Address calculations were paired with network simulation and packet inspection. Rather than treating protocols as an isolated vocabulary list, the sessions repeatedly asked what happens to a request, how its reply finds a way back, and which configuration or security rule affects that journey.
Binary calculations and subnet masks established which addresses belong together, which identify hosts, and where communication needs a router.
Simulations, captures and a small Python client/server example connected protocol behaviour with observable requests, responses and listening ports.
Address translation, segmentation and filtering introduced ways to connect services while limiting unnecessary access and making network behaviour inspectable.
The session introduced computer networks, including their development from early private networks to the interconnection of networks through Transmission Control Protocol/Internet Protocol (TCP/IP) and the Internet. It covered network hardware such as network interface cards, Ethernet cables, RJ45 connectors, hubs, switches and routers, as well as the distinction between local and wide area networks (LANs and WANs). Students learnt the Open Systems Interconnection (OSI) model and the simplified four-layer TCP/IP model, including encapsulation and the removal of headers as messages travel between source and destination. The class also examined Media Access Control (MAC) addresses, Ethernet frames, broadcast addresses, integrity checks and the differences between hubs and switches. Practical exercises compared point-to-point and star topologies, calculated cabling requirements, identified valid MAC addresses and interpreted Ethernet frame fields.
The session compared wired Ethernet and Wi-Fi at the physical layer, considering performance, throughput, range, mobility, number of connected devices and energy use. Students used Cisco Packet Tracer to explore connected local networks, network cabinets, routers, switches, cables and basic device connections. The class then introduced Internet Protocol version 4 (IPv4) addressing, explaining its decimal dotted notation, its role alongside MAC addresses, and the Address Resolution Protocol (ARP) mechanism used to associate IP and MAC addresses. Finally, students began working with subnet masks and Classless Inter-Domain Routing (CIDR) notation to identify network addresses, usable host address ranges and broadcast addresses.
The session reviewed the role of MAC addresses at network-access level and IP addresses at the IP layer, including the use of subnet masks to identify networks. It covered special IPv4 addresses, including broadcast, private address ranges, loopback, and addresses used in routing. Internet Control Message Protocol (ICMP) was introduced as a network diagnostic protocol, with practical discussion of ping and traceroute. Students used command-line tools to view IP and MAC details, ARP tables, and to convert addresses between decimal and hexadecimal notation. They also built a small switched network in Cisco Packet Tracer, observed MAC and ARP table updates, and calculated network addresses using a bitwise AND operation between an IP address and a subnet mask.
The session reviewed how to calculate a network address by applying a logical AND operation between an IP address and its subnet mask. It explained how to identify usable host-address ranges, network addresses and broadcast addresses, including cases where ranges cross octet boundaries. Students practised classifying given addresses as network, host or broadcast addresses using dotted-decimal masks and CIDR notation. The class then introduced routers, routing tables, default routes, static and dynamic routing, time to live (TTL), and IP fragmentation, before beginning exercises on network topologies and the differences between switches and routers.
The session covered IP fragmentation, including maximum transmission unit (MTU) limits, IP header overhead, fragment sizes and reassembly at the destination. It examined routing tables on computers, the default route and the role of the default gateway. Students practised subnetting an IPv4 network into multiple subnets by adapting the subnet mask and identifying network, host and broadcast addresses. They installed and used Wireshark to capture and inspect ICMP ping traffic, including MAC and IP addressing, then configured interconnected LANs in Cisco Packet Tracer and tested routing with ping commands.
The session began with a practical static-routing exercise in Cisco Packet Tracer, configuring reciprocal routes between two local networks through two routers and verifying connectivity with ping. It explained that routing rules require a destination network, subnet mask and next-hop router, and that routes are needed in both directions for replies to return successfully. The class then introduced the transport layer of the TCP/IP model, including client-server communication, ports, and the differences between TCP’s reliable byte-stream service and User Datagram Protocol (UDP)’s connectionless datagrams. TCP session establishment, acknowledgements, sequencing, flow control, checksums and connection closure were examined, alongside UDP’s simpler header and typical use for audio and video streaming. Practical Wireshark and Netstat activities inspected ARP, TCP and UDP traffic, identified ports and processes, and considered the security implications of unnecessary open ports.
The session reviewed the TCP/IP model, including MAC addresses at the link layer, IP addressing and routing at the network layer, and the differences between TCP and UDP at the transport layer. It introduced the application layer and common protocols for email, web access and file transfer, including email, web and file-transfer protocols. The class examined client-server communication through requests and responses, the role of IP addresses and port numbers, and the use of sockets for TCP/IP communication. Practical activities used Python to create a local TCP echo server and client on the loopback address, inspect listening ports with Netstat, and use Scapy and Wireshark to build, send and capture packet headers.
The session covered dynamic IP address allocation using Dynamic Host Configuration Protocol (DHCP), contrasting it with manual static configuration. It explained the DHCP exchange of Discover, Offer, Request and Acknowledgement messages, address leases, broadcast behaviour, and the role of routers when a DHCP server is on another local network. It also covered Domain Name System (DNS) resolution between domain names and IP addresses, fully qualified domain names, authoritative servers, caching, and primary/secondary DNS server redundancy. Students used command-line tools and packet capture software to inspect DNS queries, then configured DHCP and DNS services in a network simulator and observed the resulting traffic.
The class examined how network address translation (NAT) allows devices using private IPv4 addresses on a local network to communicate with external servers through a router’s public address. It distinguished NAT from port address translation (PAT), where source ports can also be translated, and from port forwarding, which directs incoming traffic on specified ports to internal services. Internet Protocol version 6 (IPv6) was introduced as a response to IPv4 address exhaustion, including its 128-bit format, hexadecimal notation, shortened forms and the division between network and host information. Students then worked through exercises to construct NAT tables, trace request and response packets, calculate IPv4 subnet capacity, and create port-forwarding rules.
The session practised IPv6 address notation, including shortening addresses correctly, expanding abbreviated forms, and identifying address types and components such as network and interface parts. It introduced core network-security principles, especially least privilege and default denial. The class examined proxies and reverse proxies, virtual local area networks (VLANs), firewalls, demilitarised zones (DMZs) and virtual private networks (VPNs), explaining their roles in filtering traffic, segmenting networks, protecting remote access and encrypting communications. Activities included interpreting firewall rules using ports for proxy, DHCP, DNS and ICMP traffic, and designing a secure network layout using a firewall, demilitarised zone, segmented local networks and a remote-access VPN server.
The session revised IPv4 addressing, including checking whether dotted-decimal addresses are valid and identifying legacy address classes from leading binary bits. It then practised CIDR subnetting: deriving network addresses with a logical AND operation, calculating available host addresses, and finding network, broadcast, first and last usable addresses. Static routing tables were constructed by identifying directly connected networks, next-hop gateways, outgoing interfaces and default routes, with discussion of route optimisation. The session also reviewed NAT, port address translation and port forwarding for communication between private local networks and external networks.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Core AWS and Microsoft Azure concepts, with preparation for AWS Certified Cloud Practitioner or Microsoft Certified: Azure Fundamentals.
BSc · Year 1 · 30 sessions
Course code: FCS-003
Cloud computing was approached through service choices, configuration work and the consequences of architectural decisions. The class explored Microsoft Azure and Amazon Web Services (AWS), moving between identity, networking, storage, compute and cost. Practical labs led towards a student-registration application: first a basic working version, then separate database services and a more resilient architecture. Certification revision accompanied the technical work without replacing it.
Cloud service models, shared responsibility and consumption-based costs, examined alongside decisions about availability, security and the work retained by the customer.
Identity policies, network boundaries, storage and databases, explored through configuration exercises that connected applications while restricting access to their underlying resources.
Architecture diagrams, pricing assumptions, database separation, load balancing and scaling, brought together through successive stages of a cloud application lab.
Public, private and hybrid clouds were compared with infrastructure operated on premises. The session examined consumption-based pricing, availability, reliability and the ability to change capacity. Vertical and horizontal scaling introduced different ways to respond to demand, alongside load balancing and service-level agreements. Infrastructure, platform and software as a service provided a way to discuss which tasks remain with the customer. Students began setting up Azure learning accounts and exploring its management portal and Cloud Shell command-line environment.
Azure's physical infrastructure was connected to its resource-management hierarchy. Regions, availability zones and region pairs were distinguished from resource groups, subscriptions and management groups. The class considered how virtual-machine scale sets and availability sets address different operational needs, including fault and update domains. Practical labs used both the portal and command line to create virtual machines and deploy a basic web server. Shared responsibility and service models were revisited as context for deciding what these deployments required students to manage.
Virtual machines, virtual desktops, containers and serverless functions introduced different balances of control, portability and operational responsibility. The class compared container services and orchestration with virtual machines, then moved into virtual networks, subnets, routing and access rules. Students configured an inbound rule to reach a web server, making network permissions part of the practical work. Private connectivity, network address translation, virtual private networks and dedicated connections extended the discussion beyond simply making a service reachable from the internet.
The Domain Name System (DNS) introduced name resolution and regional failover before the class turned to Azure storage. Storage accounts, redundancy, durability and access tiers framed the differences between object, disk, queue, file and table services. Students practised creating an account and object-storage container, including its public-access settings. Encryption, deletion protection and migration tools were also covered. Microsoft Entra ID then introduced identity management, distinguishing authentication from authorisation and examining groups, multi-factor authentication, single sign-on and conditional access.
Identity management developed into role-based access control, with scopes and reader, contributor and owner roles. Least privilege, defence in depth and time-limited access provided a framework for discussing network protection, encryption and vulnerability management. Students completed a knowledge quiz, then used Azure's pricing calculator to estimate a web application, database and application gateway. Cost monitoring, budgets, tags, resource locks and policy controls connected those estimates to ongoing administration. Data discovery, classification and lineage were introduced through Microsoft Purview.
An Azure Function App lab linked an object upload to code that placed the object's name in a storage queue. Students completed this event-driven example, illustrating how services can communicate without doing all their work in one process. The class then examined infrastructure as code through Azure Resource Manager templates and Bicep. JavaScript Object Notation (JSON) template structure, authorisation and monitoring tools connected deployment definitions to their operation. A knowledge quiz and certification-preparation guidance concluded the session.
The AWS section began with a guided documentation activity covering virtual machines, object storage, serverless functions and command-line interactions. Students encountered application programming interfaces as part of connecting cloud services. Economies of scale and architectural diagrams were considered alongside the Cloud Adoption Framework's business, people, governance, platform, security and operations perspectives. Pricing discussions included consumption charges, reservations, total cost of ownership and budget reporting. Support plans were compared, and students were directed to a knowledge check on the billing material.
Support-plan scenarios asked students to recommend an appropriate level of assistance. The session then examined regions, availability zones and edge locations, considering compliance, proximity, service availability and cost when choosing where to deploy. Console exploration distinguished regional services from global ones. Identity and Access Management (IAM) introduced users, groups, roles, policies and access keys. Multi-factor authentication and least privilege placed those mechanisms within the shared-responsibility model, rather than treating access as a single account-setting exercise.
IAM policies were examined as statements containing actions, resources and conditions. The class considered wildcards, explicit denial and the distinction between identity-based and resource-based policies. Students completed a lab assigning users to groups with different storage and compute permissions, then reviewed its results. Roles and temporary credentials were contrasted with routine use of the root account. Encryption, activity logging, account controls and protection against distributed denial-of-service attacks broadened the discussion from individual permissions to account security and monitoring.
Networking centred on a Virtual Private Cloud (VPC), its address ranges, subnets and route tables. Internet gateways and private-network connectivity were considered alongside peering, transit connections and service endpoints. The class compared security groups with network access control lists, including their scope and stateful or stateless filtering. Students completed classification and diagram activities, designing a highly available website with a private database. Earlier identity and key-management concepts were revisited through questions before these network designs were developed.
A network architecture spanning two availability zones introduced redundant web servers, public and private subnets, and controlled traffic paths. Students completed a lab creating a VPC, subnets and route tables, then launched a web server with a security group allowing web traffic. Startup scripts installed and started the service. The class also examined network interfaces, DNS routing and health-check failover. Infrastructure templates and CloudFront's edge caching connected the local deployment exercise to repeatable provisioning and content delivery.
Amazon's Elastic Compute Cloud (EC2) service was explored through machine images, instance families, storage, networking and access configuration. In a lab, students deployed a web server, enabled web access, changed its instance type, resized storage and examined status checks. The session distinguished durable attached storage from temporary instance storage and considered snapshots and monitoring. Pricing models, including on-demand, reserved and spare-capacity instances, introduced cost choices that depend on workload characteristics rather than a single universally preferable configuration.
Students created a scheduled Lambda function that stopped an EC2 instance. The activity connected event-driven execution with permissions, schedules and logging, while the class examined runtime limits and retry behaviour. Containers and their orchestration were then compared with virtual machines through Docker and AWS container services. Elastic Beanstalk introduced a managed application platform, including the scaling, load balancing and other resources behind it. The session therefore considered both small automated tasks and broader application-deployment options.
An activity compared running a database on a virtual machine with using a managed relational database service. Provisioning, configuration, backups, patching and recovery made the division of responsibilities concrete. Compute pricing was reviewed in relation to predictable demand and cost constraints. The class then introduced block storage, snapshots, encryption and performance measures before examining object storage. Buckets, access control, durability, retrieval times and storage classes showed why selecting storage requires attention to how data will be used.
Students attached, formatted and mounted a block-storage volume, created a snapshot and restored it to another volume. Comparing the data made recovery part of the lab rather than merely a listed service feature. Object storage was revisited through policies, versioning, lifecycle rules and replication. Shared file storage introduced access from multiple instances and the importance of mount points, network rules and encryption. Archival storage completed the comparison, with retrieval options considered against long-term retention needs.
Case studies asked which storage services suited event data, email and compliance retention. Retrieval speed, cost and lifecycle policies shaped the comparison between frequently accessed and archived data. The session then introduced relational tables, keys and relationships, including linking tables and joins in Structured Query Language (SQL). Amazon Relational Database Service (RDS) provided the cloud setting for these concepts. Private deployment, multi-zone failover and read replicas introduced different concerns within a managed database architecture.
A lab involved creating a MySQL database in RDS and configuring security groups so a web application could access its data. The class distinguished multi-zone failover from read replicas, explaining their different replication and availability roles. Database services beyond the relational model were then introduced. DynamoDB illustrated key-based access, flexible records and the distinction between queries and scans. Redshift introduced distributed analytical processing, extending the comparison from operational application storage to large-scale aggregation and analysis.
Relational databases, flexible key-value storage and data warehouses were compared through RDS, DynamoDB, Redshift and Aurora. The discussion included availability, distributed storage and variable workloads. Students worked through cases involving migration, large-scale storage and e-commerce, choosing services before completing a knowledge check. Load balancing then introduced another part of application architecture. Listeners, target groups and health checks explained how incoming requests can be directed to available resources, preparing the ground for later work on monitoring and scaling.
Different load balancers were compared through their routing capabilities, network layers and health checks. Students selected suitable types and assessed example alarm definitions. CloudWatch introduced logs, metrics, notifications and event-driven responses, with demonstrations of log groups, streams and alarm configuration. The class then examined automatic scaling groups and policies. Connecting alarms, scaling and load balancing showed how observed demand can lead to capacity changes, rather than leaving monitoring as a dashboard separate from application behaviour.
Students completed a lab combining an application load balancer, an automatic scaling group, private virtual machines and processor-utilisation monitoring. The session examined traffic distribution, removal of unhealthy targets and capacity changes in response to demand. Earlier work on listeners, health checks and alarms was revisited within this assembled architecture. The AWS Well-Architected Framework then introduced a broader review method: its six pillars and design questions offered ways to examine a cloud system beyond whether it currently runs.
A case-study company's rendering and printing workflows provided material for an architecture review. Queues, redundant resources, health checks and deployment approaches were discussed in relation to resilience and downtime. Operational excellence included observability, automated recovery, small reversible changes and learning from incidents. Security was considered through least privilege, traceability, data protection and preparation for failures. Restrictive network rules and controlled external data access connected those principles to concrete architectural choices in the example, rather than abstract recommendations alone.
The reliability discussion examined availability targets, fault tolerance, recovery and repair time. Scenarios considered deployments across availability zones, cross-region data replication, load testing and scaling configuration. The class revisited permissions and data protection, then examined performance choices such as instance selection, caching and read replicas. Cost optimisation included scheduled capacity changes, spare-capacity instances, storage classes and managed databases. These discussions connected resilience, performance and cost without presenting any one of them as a substitute for the others.
The Well-Architected Tool was demonstrated through workload definitions, review questions, identified risks and improvement reports. Trusted Advisor introduced recommendations concerning costs, security, performance and service limits, illustrated through account protection, network exposure and storage checks. Reliability, fault tolerance, scalability and elasticity were revisited. Students then began planning a longer-running application lab, starting with an architecture diagram for a secure, scalable and highly available web application with a database, alongside the need to estimate its costs.
The first project phase asked students to design a secure, highly available architecture for a university student-registration application. Multiple availability zones, a load balancer, a private database and appropriate security groups formed its main components. Guidance focused on clear diagrams and documented design decisions, with route tables offered as an additional detail. Students also began pricing estimates that accounted for seasonal admissions peaks. They were asked to explain assumptions and avoid unnecessary default configurations when presenting the proposed system.
The class reviewed how a public load balancer can forward traffic to private web servers within a multi-zone architecture. Security-group references were compared with fixed network addresses for controlling connections between the load balancer, application and database. Statefulness, restricted administrative access and route tables were also discussed. Secrets Manager introduced a way to store database credentials separately from application code. Students were asked to finalise diagrams, security-group tables and justified cost estimates before moving into the next lab phase.
Pricing review covered instance sizing, capacity commitments, scaling, backups, monitoring and secrets management. The class considered how availability requirements affect costs before introducing a proof of concept as a minimal working demonstration of viability. Students began constructing one using a network, subnet and Ubuntu virtual machine. Startup configuration installed a web server and local MySQL database, and access was tested through the public address. Resource shutdown was explicitly discussed to avoid charges from leaving the lab running unnecessarily.
The next lab phase introduced a private managed MySQL database and a separate web server. Students were shown the deployment arrangement and how a cloud development environment could act as an intermediary for database export and import. The session examined database-port access, public and private subnet placement, and the use of a secrets service to avoid hard-coded credentials. Cloud9 provided the development environment within the virtual network, while MySQL export and import commands illustrated the movement of the application's data.
Students continued configuring their application environments and received individual checks on their progress. Those further ahead were encouraged to try accessing their database from their own computer. The next phase was introduced briefly, with completion of the lab intended for the following session.
The session revisited database migration, record checks and credential-related access errors before focusing on high availability. Machine images and launch templates supported an automatic scaling group behind an application load balancer. The class examined instance permissions for retrieving secrets, target registration and private access to the secrets service. Scaling thresholds, minimum capacity, notifications and load testing were discussed. Attention to these connections helped distinguish the new architecture from simply retaining an earlier standalone server behind the same interface.
Practice questions revisited Azure and AWS concepts across compute, networking, storage, identity, governance and cost. Azure material included resource organisation, availability, service models, policies and monitoring. AWS questions covered architectural and financial foundations alongside permissions, virtual networks, content delivery, virtual machines and attached storage. Shared responsibility and cost-management approaches were revisited alongside the service-specific questions. Learners were directed to practice assessments and study resources, bringing the account's configuration work and architectural discussions back into preparation for the cloud examinations.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Bare-metal installation, system configuration, networking, virtualisation and automation with PowerShell and Linux shell scripting.
BSc · Year 1 · 11 sessions
Course code: SSS-001
Operating-system concepts were explored alongside the tools used to inspect and administer real machines. The sessions connected process scheduling, memory and permissions with Windows administration, PowerShell, Linux commands and virtual machines. Guided exercises moved between graphical interfaces and scripts, comparing how the same kinds of tasks can be expressed and checked. Backup, access control and recovery were part of that practical work.
Processes, memory, file systems and access rights explained the services an operating system provides and the boundaries it maintains.
PowerShell and Linux exercises used paths, pipelines, text processing and scripts to inspect files and perform repeatable administrative tasks.
Virtual-machine activities introduced resource allocation, installation, remote administration and checkpoints as practical tools for testing and restoring system state.
The session introduced the role of an operating system as the interface between hardware and software, including resource allocation, security and application isolation. It covered process management and scheduling methods, including first-in, first-out (FIFO), priority scheduling, shortest-remaining-time scheduling, round robin scheduling and multilevel queues, with attention to starvation and pre-emption. Memory management was explored through contiguous allocation, segmentation, paging, virtual memory and fragmentation. The class also introduced file systems, comparing the FAT family and NTFS file systems, and discussed file storage, allocation tables and defragmentation. Different operating-system types, including Windows, Linux-based systems, server, embedded and mobile systems, were outlined, along with graphical interfaces, command lines and scripting.
The session introduced Windows as a proprietary operating system, covering its architecture, driver support, advantages and limitations, and key Windows 11 security and productivity features. It demonstrated the Windows interface, including the taskbar, Start menu, notifications, Snap layouts, virtual desktops and File Explorer. Students were shown how to manage files, reveal file extensions and hidden items, access remote resources, search for files, and review disk usage and temporary files. The class also covered Task Manager for monitoring processes, resource use, start-up applications, users and services, followed by an introduction to Event Viewer for investigating system events and errors.
The session covered Windows file security, including user and group permissions for reading, writing, executing and taking full control of files and folders. It explained permission inheritance, explicit permissions, folder traversal, and the importance of considering the full path when granting access. The class then reviewed Windows Control Panel categories, including security and firewall rules, scheduled tasks, encryption with BitLocker, network settings, hardware and drivers, programs and optional Windows features, user accounts, display settings, fonts, regional formats, accessibility settings and time synchronisation. Finally, it introduced the Windows Registry as a hierarchical configuration database, described its keys and values, demonstrated the Registry Editor, and stressed backing up the registry before making changes.
The session introduced PowerShell as a cross-platform command-line tool and scripting language for Windows administration. It explained cmdlets, their verb–noun structure, aliases, parameters, relative and absolute paths, and the use of objects rather than plain text as command output. Students practised navigating folders and creating, viewing, editing, copying, moving, renaming and deleting files and directories. The class also covered pipelines for filtering and sorting command output, redirection of normal output and errors to files, and discarding output. Finally, it demonstrated the structure of PowerShell scripts, including variables, loops, conditional statements, parameters and execution-policy requirements.
The session was a practical PowerShell workshop on command-line file and folder manipulation. Activities covered listing files, filtering by extension, displaying directories, reading and editing file contents, replacing text, and using pipelines to create summary files. Students also practised searching and counting entries in log files, recursively finding files, filtering by modification date, and copying selected files. The class introduced environment variables, including their use for system and application paths, and covered importing, selecting and filtering data from comma-separated values (CSV) files. Script-writing exercises using loops, conditional statements and functions were assigned for later completion.
The session reviewed PowerShell scripting through iterative and recursive implementations of factorials, including input validation, type casting, loops, function calls and recursion base cases. It compared iterative and recursive approaches, noting recursion’s memory use and risk of stack overflow. The class then introduced Linux and Ubuntu distributions, open-source software, and the principle that Linux treats devices and system resources as files. Students installed Ubuntu through the Windows Subsystem for Linux and explored the Linux directory structure, users, groups, file permissions and numeric permission modes.
The session reviewed Linux as an open-source operating system in which many resources, including devices, are treated as files, and revisited the Linux directory structure, users, groups and file permissions. It introduced the shell, working directories, relative and absolute paths, and common commands for listing, navigating, creating, deleting, copying and moving files and directories. File contents were examined using commands such as cat, less, head and tail, alongside output redirection, pipes and basic text filtering. The class also covered process inspection and control, command documentation, user and group administration, and changing ownership and permissions. Finally, it introduced simple Bash scripts, including shebang lines, executable permissions, variables and command-line parameters.
The session introduced a guided Linux command-line lab on file and directory manipulation, including copying, renaming, permissions, backups and redirection. It covered viewing parts of text files with head and tail, counting lines with wc, and searching text with grep. Regular expressions were explained as patterns for matching text, including case-insensitive searches, optional characters and version-like strings. The class also demonstrated awk for processing fields and lines, and sed for replacing text in streams or redirected output files. Finally, Bash scripting was introduced through iterative and recursive factorial functions, user input validation, variables, loops, conditions and executable script permissions.
The session introduced virtual machines as software-based simulations of complete computers, including virtual hardware as well as an operating system. It distinguished virtual machines from containers and subsystems, emphasising isolation, hardware emulation and the role of a hypervisor in allocating processor, memory, storage, networking and device resources. Uses discussed included safely isolating untrusted software, testing hardware configurations, running multiple workloads on one physical machine, cross-platform testing and cloud hosting. The class also covered operating-system images, snapshots and checkpoints for deploying, cloning, restoring and backing up machine states. A demonstration showed how to enable Hyper-V, create and configure a Windows virtual machine, install an operating system from an disc image, clone a virtual disk and revert a machine to a checkpoint.
The session was a practical lab on creating and configuring an Ubuntu virtual machine using Hyper-V. It covered virtual machine generations, memory allocation, virtual disks, Ubuntu installation and resolving secure boot issues. Students updated package lists, installed administration tools, configured a firewall to permit Secure Shell (SSH), and tested remote access from the Windows Subsystem for Linux. The lab also introduced secure copy (SCP) for secure file transfer and used checkpoints plus export and import operations to practise virtual-machine backup and recovery.
The session reviewed the role of an operating system, including kernel functions for process scheduling, memory management, file systems, security and user interaction through graphical and command-line interfaces. It covered scheduling approaches such as FIFO, round robin, priority scheduling and shortest remaining time first, with emphasis on avoiding starvation. Memory concepts included paging, segmentation, internal and external fragmentation, and virtual memory. The class also revised Windows and Linux file systems, PowerShell pipelines and redirection, core Linux commands, processes, users, groups and file permissions, including the execute permission on directories. Finally, it defined virtual machines and hypervisors, explaining their isolation, snapshot and multi-operating-system benefits, followed by a short practice quiz.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Installation, configuration and introductory administration of relational database systems including MySQL and Microsoft SQL Server.
BSc · Year 1 · 9 sessions
Course code: SSS-002
A relational model becomes an operational system through installation, configuration, queries and maintenance. These sessions used Microsoft SQL Server to explore that transition. A films database provided a recurring example for relationships, views, stored procedures and data changes. Students also examined authentication, backups and transactions, keeping database structure connected to the practical responsibilities of running and modifying a service.
Client/server architecture, virtual machines and authentication framed the practical setup of a database engine and its administration tools.
A films schema supported work on Structured Query Language (SQL), views, stored procedures, triggers and transactions, including checks before modifying data.
Aggregation, backup, restoration and migration exercises considered how an existing database can be investigated, protected and changed without ignoring its relationships.
The session introduced relational database management systems as the practical continuation of relational modelling and Structured Query Language (SQL), covering database installation, configuration, data loading, querying, performance and maintenance. It distinguished structured relational data, represented in fixed table structures, from unstructured or variable data that may require non-relational key–value designs, using books and video-game statistics as examples. The class explained databases as client–server systems, with a client interface or program connecting to a database server for querying, storage, backups, encryption and security. It also covered database connections through software, websites or back-end code, including connection details such as host, database name and user credentials, alongside administrator-controlled permissions. Finally, it compared proprietary and open-source database systems, including their costs, support and security considerations, and identified common examples.
The session reviewed relational database management systems as client-server architectures, in which the database server is accessed through a client interface rather than directly. It compared three ways of interacting with databases: application code and application programming interfaces (APIs), websites, and dedicated client software, with SQL used to query relational databases. The class introduced the planned installation of Microsoft SQL Server and SQL Server Management Studio, and explained the Windows version requirements and how to access an Education licence. It also covered local, virtual-machine and hybrid installation models, explaining virtual-machine isolation, resource allocation, Hyper-V configuration, and the need to install an operating system disc image on a virtual machine.
The session reviewed client-server architecture in relational database systems, distinguishing the database server’s roles in storage, security, backups and query optimisation from the client used to send SQL queries. It explained how to create a Windows virtual machine with Hyper-V, allocate suitable resources, install a Windows operating system and apply basic virtual-machine security practices. Students were guided through installing Microsoft SQL Server and selecting the database engine, analysis services and client connectivity features, then configuring services to start automatically. The class also covered Windows and SQL Server authentication, strong administrator passwords, installation logs for troubleshooting, and use of SQL Server Management Studio to connect to the server.
The session introduced Microsoft SQL Server Management Studio as a client for connecting to and working with a database server, including checking server services and using Windows or SQL Server authentication. It explained the Object Explorer and SQL workbench, the purpose of database backups, and the create, read, update and delete (CRUD) operations that can be performed graphically or through SQL. Students revised relational modelling by designing a films database with country, artist, user, film, rating and role entities, identifying one-to-many and many-to-many relationships, foreign keys and reified relationship tables. Functional dependencies were written to support a third normal form design. A films database and country table were then created in SQL Server, with column data types, null constraints, a primary key, indexing and sample country data added and queried through the graphical interface.
The session reviewed database views as reusable, up-to-date results of frequently needed and potentially complex queries. A film database example was used to derive a query in relational algebra and translate it into SQL using projections, selections, aliases and an inner join. The class then introduced Transact-SQL as an extension that provides programming-style features, including variables, conditions and stored procedures. A new genre table was created with an auto-incrementing identity primary key, and a stored procedure was developed and tested to add a genre only when it did not already exist.
The session reviewed programmatic SQL in SQL Server, including the distinction between functions and stored procedures, variables, conditions and automation. It examined how COUNT behaves with non-null values, COUNT(*), and arbitrary inputs, and explained why stored procedures are useful for database operations that do not necessarily return a value. The class developed a stored procedure to add a film genre only when it does not already exist, helping to maintain consistency between film and genre tables. Database collation was covered, particularly case sensitivity and accent sensitivity, and how these settings affect text queries. Finally, triggers were introduced and implemented so that inserting a new film automatically calls the stored procedure to add its genre when needed.
The session reviewed T-SQL automation using stored procedures and triggers, including the use of the virtual inserted table to add new film genres only when they do not already exist. It introduced database transactions as a way to protect sensitive SQL operations, control concurrent access and prevent conflicting updates or deletions. A practical example used BEGIN TRANSACTION, ROLLBACK and COMMIT to show how one user’s operation can be held safely while another user decides whether to keep or undo a deletion. The session also covered database backups, versioning and restoring a complete database from a .bak file in SQL Server Management Studio.
The session reviewed the films database schema, including entities and reified many-to-many relationships such as ratings and roles. Students learnt to use COUNT and GROUP BY to aggregate data, producing a report of how many films each actor has appeared in, and ORDER BY to sort query results. The class then developed a query using GROUP BY, HAVING, COUNT(DISTINCT ...) and subqueries to identify actors who have appeared in every film, while considering duplicate roles in the same film. Finally, it introduced division queries using nested NOT EXISTS conditions as a reusable approach for questions of the form ‘find all A entities associated with every B entity’.
The session introduced database cursors in T-SQL as pointers that process table rows one at a time, using loops and requiring declaration, opening, fetching, closing and deallocation. A cursor was used to migrate a films database from storing genre names directly in the film table to storing genre identifiers linked to a separate genre table. The class added and populated a genre identifier column, investigated missing values caused by inconsistent data, removed the redundant genre-name column, and created a foreign-key relationship. It also showed how to inspect table relationships by generating a database diagram in SQL Server Management Studio.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Installation and administration of web servers, SSL/TLS certificates and WordPress-based content management systems.
BSc · Year 1 · 10 sessions
Course code: SSS-003
The sessions followed a web application beyond its visible pages. Students worked with local server stacks, request and response behaviour, database connections and WordPress administration. Windows and Linux configurations provided different settings for similar tasks. Access permissions, encrypted connections and backups appeared alongside page construction, showing how the content a visitor sees depends on services and configuration that remain behind it.
Web protocols, virtual hosts and PHP applications connected browser actions with server-side processing, data changes and protected administration areas.
Linux server exercises brought together web serving, PHP processing, databases, certificates and permissions, with checks on configuration and access.
WordPress, themes, plugins and Elementor introduced editorial structure, responsive layouts, accessibility and maintenance as parts of an operating website.
The session introduced web systems as architectures that exchange data between clients and servers through request–response communication. It covered the roles of web servers, databases and web applications, including examples of server software and database technologies. The distinction between front-end and back-end development was explained, along with the roles of HyperText Markup Language (HTML), Cascading Style Sheets (CSS), JavaScript, server-side languages and frameworks. The class examined web protocols, particularly Hypertext Transfer Protocol (HTTP), HTTP over Transport Layer Security (HTTPS), file-transfer protocols and Secure Shell (SSH), including encryption, certificates and protection against interception. It also explored HTTP requests, headers, bodies and methods such as GET, POST, PUT and DELETE, followed by a brief demonstration of configuring a web server and HTTPS redirection.
The session reviewed the architecture of web systems, including clients, web servers, web applications, databases, front-end and back-end roles, and HTTP/HTTPS communication. It explained HTTP requests, headers, request bodies and the intended use of GET, POST, PUT and DELETE methods, including the distinction between repeatable PUT operations and POST side effects. Students installed and started a local Windows, Apache, MySQL and PHP (WAMP) environment, tested Apache through localhost, created a basic PHP project and observed how server-side PHP generates HTML responses. The class also covered Apache virtual hosts, local subdomains, phpMyAdmin and basic database management, then used a small PHP application to retrieve, add and delete user records while inspecting the associated GET and POST requests.
Students practised configuring a local web application environment using WAMP, PHP and SQL scripts. They set up a website supporting project creation, deletion and updating, including image-file uploads through HTML forms and POST requests. The activity involved placing supplied files correctly, configuring a local domain name, restarting services and checking that the application worked. Students also created a protected administration folder using web-server password protection and an encrypted password value. The session concluded with a planned comparison of the equivalent configuration under Microsoft Internet Information Services (IIS).
The session introduced Nginx as an event-driven web server and compared its role with Apache. Students installed, started and checked the status of Nginx on Ubuntu, then explored its main configuration, logging, worker processes, site directories and symbolic links used to enable sites. They created a local virtual host, configured its document root, server name, locations and access permissions, and tested static HTML delivery. The class then connected Nginx to PHP FastCGI Process Manager (PHP-FPM) to process PHP files, before configuring a self-signed Transport Layer Security (TLS) certificate and redirecting HTTP requests to HTTPS. The next practical activity was outlined as extending this setup with a PHP application and MySQL or MariaDB.
The session covered installing and configuring MySQL and phpMyAdmin alongside Nginx, PHP and PHP-FPM. Students were asked to secure a new MySQL installation by removing anonymous users, test databases and weak authentication options, then practise creating, deleting and editing databases through phpMyAdmin. A demonstration showed how to deploy phpMyAdmin on a cloud server using Domain Name System (DNS) records, SSH, Nginx configuration and an HTTPS certificate. The configuration included restricting access through IP allow-listing, denying other connections, using TLS settings and caching static files. The forthcoming work on deploying and securely managing a WordPress content management system was introduced.
The session introduced WordPress as a content management system, including its history, common uses for blogs, business sites and e-commerce, and the distinction between WordPress.com hosting and self-hosted WordPress.org. It covered themes, plugins, user roles, accessibility, search engine optimisation (SEO), security updates, backups and the importance of community support. The structure of a WordPress installation was explained, including the MySQL database tables used for posts, users, settings, categories and metadata. Students set up a local WordPress site using Wamp, created a database, completed the installation and explored the administration dashboard. Practical work covered creating and publishing posts and pages, using the block editor, adding categories, tags and media, managing users, and configuring home pages, search-engine visibility and permalinks.
The session covered WordPress themes, including installing and switching themes, understanding how themes change layout without changing page content, and customising site identity, colours, typography and page settings. It explained how to create and edit navigation menus, including external links and opening links in a new tab. The class introduced theme file editing and child themes as a safer way to customise a theme without altering the original files, as well as the role of page templates. It then covered WordPress plugins: installation, activation, dependencies, deactivation, removal, troubleshooting conflicts, updates and backups. Students began a practical exercise using plugins for security, import/export, redirects, backups and multilingual content.
The session introduced Elementor as a WordPress page-builder plugin for creating and customising web pages through containers, layouts and widgets. It covered using flexbox containers and columns, adding headings, text, images and videos, and applying typography, alignment, colours, margins and padding. The importance of semantic heading levels for page structure and search-engine indexing was explained, alongside responsive sizing units such as pixels, em, rem and viewport width. Students also learnt about templates, page structure navigation, previewing content, and the possibilities for adding custom HTML, JavaScript and, more generally, extending Elementor. The practical activity involved building and experimenting with a complete page layout in Elementor, with an optional contact-form task.
The session demonstrated how to set up a WordPress website from scratch on Linux using Windows Subsystem for Linux (WSL). It covered updating packages, installing and testing Nginx, MariaDB, PHP and PHP-FPM, and configuring phpMyAdmin. The class configured an Nginx virtual host with HTTP-to-HTTPS redirection, a self-signed certificate, PHP FastCGI handling, caching and upload-size settings. It also created a database and restricted database user for WordPress, installed WordPress, set permissions and completed its initial configuration. The project assessment was explained, including the importance of server configuration, WordPress pages and plugins, and submitting command history and configuration files.
The session explained the individual project to build and configure a WordPress portfolio website on a complete Linux, Nginx, MySQL/MariaDB and PHP stack. Requirements included HTTPS access through dev.localhost, HTTP-to-HTTPS redirection, a self-signed TLS certificate, PHP-FPM, upload limits, caching, secure permissions and a dedicated database user. The project also required WordPress configuration, a suitable portfolio theme, structured pages and navigation, and plugins for security, contact forms, backups, multilingual content and Elementor. Guidance was provided on submission materials, including configuration files, installation commands, database scripts, certificate files and a zipped project, alongside advice on testing configurations and using the support session.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Administration of on-premises, cloud and hybrid collaboration environments using Active Directory, Azure AD, Exchange, Teams and SharePoint.
BSc · Year 1 · 9 sessions
Course code: SSS-004
Microsoft 365 provided a practical setting for examining how an organisation manages collaboration. The class connected email, meetings and shared documents to the less visible decisions behind them: domain control, user identities, permissions, data handling and staff departures. A fictional company with several offices and external collaborators gave these decisions a common context, with configuration demonstrations and design activities kept distinct from completed deployments.
Users, groups, roles and account lifecycles examined as connected decisions affecting permissions, security, collaboration and the cost of assigning licences.
Domain verification, email routing and authentication examined alongside the order in which a collaboration platform should be configured and made available.
External access, meeting settings, retention and access reviews connected to organisational responsibilities, using security incidents and a fictional company as discussion material.
Networking, domain names and client–server interactions established the systems context for collaboration platforms. The Domain Name System (DNS) connected service names to their infrastructure. Identity, authentication and authorisation were distinguished, alongside groups, roles and least privilege. Central administration, external access, data sovereignty and regulatory considerations were introduced. Students considered a growing company operating in two countries, identifying its needs for email, meetings, shared documents and access control rather than starting with a list of product features.
A security-breach case study examined social engineering, repeated authentication prompts, excessive permissions, exposed credentials and poor offboarding. Managed collaboration platforms were introduced as a way to centralise communication, identities, sharing and audit records. Students began identifying gaps and priorities for a fictional company moving away from personal accounts and informal tools. Domain control, central directories and controlled external access were considered together, showing how networking, identity, services and administration depend on one another in the proposed environment.
Weak account and domain management illustrated how operational, security and legal problems can compound. The General Data Protection Regulation was discussed through retention, consent records and restricted access to personal information. Infrastructure, platform and software service models framed the responsibilities of providers and customers. The class examined tenant isolation, virtualisation and scalability, then considered jurisdiction, sovereignty, contractual service levels and vendor dependence. Selecting a collaboration platform was therefore treated as an organisational decision as well as a technical one.
Microsoft 365 tenant setup introduced administrator accounts, users, licences, settings and service health. A custom domain connected these arrangements with professional email and consistent service naming. The class examined domain-verification and mail-routing records, alongside email-authentication mechanisms. Students were encouraged to explore tenant creation where possible; a shared demonstration environment was planned rather than already established for everyone. Multi-factor authentication, restricted administrative roles, credential storage, offboarding and phishing awareness were considered alongside the practical setup sequence.
The distributed DNS hierarchy was examined through root servers, registrars, authoritative servers and zones. Caches and time-to-live values helped explain why record changes may appear at different times. Learners interpreted records for domain addresses, aliases, mail routing and verification. Email authentication covered Sender Policy Framework, DomainKeys Identified Mail and Domain-based Message Authentication, Reporting and Conformance. Their roles and failure policies were considered through configuration and migration scenarios, keeping the focus on how records affect a working collaboration service.
A text record containing a verification token illustrated how to demonstrate domain control to a tenant. The class distinguished that control from legal ownership and examined caching and independent visibility checks. Publishing mail-routing records was deliberately separated from verification: identity, governance and mail configuration needed to be ready first. Students considered regional settings, data location, licences and access policies in a staged company deployment, then discussed how to justify that order to people outside the technical team.
Entra ID introduced user attributes, authentication, administrative roles and licence management. Security groups, collaboration groups and distribution lists were compared through their different purposes. The class examined bulk account creation, auditing and departure procedures, including disabling access while retaining business records. Students began designing a naming convention, group structure and restricted administrator roles for a fictional company. A previous incident provided context for least privilege, connecting the design activity with the consequences of granting more access than necessary.
Onboarding and offboarding were considered alongside group structures, licences and role assignment. Demonstrations showed permission checks and bulk-import validation. The class examined multi-factor authentication, number matching, conditional access, compliant devices and hardware security keys as layered controls. Students designed an authentication rollout covering employees, contractors and privileged accounts, including emergency access arrangements. These activities linked day-to-day administration with exceptions and failure scenarios, rather than assuming that the normal sign-in path would always be available to every user.
Teams configuration distinguished external access from guest access and examined domain restrictions, group membership and access reviews. Meeting settings included lobbies, anonymous participation, recording, transcription and screen sharing. Recordings and transcripts were discussed as personal data, with retention and sensitivity considered alongside their usefulness. The class connected these controls with identity and email security in the wider architecture. Guidance on an open-book multiple-choice assessment and a separate design exercise concluded the session, alongside a practice scenario for the assessment.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Logic, sets, combinatorics, sequences, limits, continuity, differentiation and the core theorems needed for engineering studies.
BSc · Year 1 · 22 sessions
Course code: FSDE-001
These sessions built a common mathematical foundation by asking how a statement can be expressed, tested and justified. Logic and sets led into functions, relations and counting; sequences and calculus introduced changing quantities and limits. Complex numbers and probability extended the same habit of reasoning. Exercises used counterexamples, diagrams, calculations and proofs, with attention to the conditions under which a result actually holds.
Truth tables, quantifiers, sets and relations made assumptions explicit and distinguished examples from claims that hold in general.
Sequences, derivatives and integrals connected numerical exploration with bounds, continuity, convergence and methods for evaluating quantities.
Combinatorial cases and probability calculations required careful definitions of outcomes, overlap, independence and the information available when making a calculation.
The session introduced propositional logic, defining statements as either true or false and using truth tables to analyse them. It covered conjunction, disjunction, negation, implication and equivalence, including how brackets change the meaning of compound statements. Truth tables were used to establish logical identities, including negation rules, implications and equivalences, and to distinguish tautologies from contradictions. The class also examined contraposition, proof by contradiction and counterexamples. Finally, universal and existential quantifiers were introduced, alongside the distinction between necessary and sufficient conditions.
The session developed logical implications, distinguishing sufficient and necessary conditions, converses and contrapositives, using numerical examples and counterexamples. It also covered quantifiers such as ‘for all’ and ‘there exists’, including how to negate statements involving them. Students translated statements about a program into symbolic logic and practised negation, converse and contrapositive rules. The class then introduced standard number sets, membership and subset notation, unions, intersections, complements and proofs of set equality by double inclusion. Finally, it examined disjoint sets and partitions, including examples involving integers and intervals.
The session introduced power sets, including listing all subsets of a set and showing that a set with n elements has 2 to the power of n subsets. It practised set inclusions involving intersections, unions and power sets, using counterexamples where an assertion was false. Partitions, symmetric difference, complements and direct proofs by considering cases were also studied. The class examined conditions for solving an equation of the form A union X = B, using set diagrams to identify possible solutions. Cartesian products and their cardinalities were introduced, with a dice example used to represent outcomes as ordered pairs.
The session introduced functions as mappings between a domain and a codomain, using diagrams of finite sets. It defined injective, surjective and bijective functions, and showed how restricting domains or codomains can produce bijections. The class explained that a two-sided inverse function requires a bijection, practised finding inverses algebraically, and considered examples involving integer, quadratic and rational functions. Graphs were used to identify injectivity and surjectivity through horizontal-line intersections, and the notions of image and preimage were introduced. The session ended with definitions and examples of even and odd functions.
The session reviewed functions involving absolute values, including evenness, injectivity, surjectivity, bijectivity and inverse functions. It also covered how changing a function’s domain and codomain can affect these properties, and how to determine images of intervals using monotonicity and quadratic forms. General results about compositions of functions were proved, showing how surjectivity or injectivity of a composition implies properties of its component functions. A new topic on binary relations introduced reflexivity, symmetry, antisymmetry and transitivity through examples. Equivalence relations, equivalence classes, order relations and total orders were defined and compared.
The session covered binary relations defined by non-empty intersections of sets, including how to represent them in a table and test whether they are reflexive, symmetric and transitive. Examples were used to construct relations with specified properties and to establish when a relation is an equivalence relation. Equivalence classes were found by solving the defining equation, with attention to exceptional cases where two possible solutions coincide. The class then studied partial and total orders, including lexicographic order and componentwise order on pairs of real numbers. Finally, it distinguished greatest and least elements from upper and lower bounds, least upper bounds and greatest lower bounds through examples involving intervals, integers and a disc in the plane.
The session revised propositional logic, including truth tables, implication, contrapositives, converses, and the negation and ordering of quantifiers. It covered set theory through power sets, partitions, unions, intersections, complements and proofs of set equality. Functions were reviewed in terms of injectivity, surjectivity, bijectivity, images, inverse functions and restricting domains or codomains. The class also studied relations, including reflexive, symmetric and transitive properties, equivalence classes and total orders. It finished with least elements, lower and upper bounds, and greatest lower and least upper bounds of intervals.
The session introduced combinatorics as a way of counting elements in sets and events, particularly for later use in probability. It covered cardinality, permutations without repetition, and permutations with repeated elements, using anagrams as examples. The multiplication principle was used to count outcomes such as possible phone numbers and room allocations. Arrangements and combinations were distinguished by whether order matters, with formulae for their numbers and examples involving race results and card selections. Binomial coefficients, Pascal’s triangle, and the link between binomial coefficients and the binomial expansion were also explored, followed by practice exercises.
The session reviewed counting methods including combinations, arrangements and the multiplicative principle, using examples involving card hands, lottery selections, lock codes and IP addresses. Combinations with repetition were introduced through dominoes, with the stars-and-bars method used to explain the formula for selecting k objects from n types when repeats are allowed. The class also applied the pigeonhole principle to initials and birthdays. Further card-hand problems explored counting constrained selections, using complementary sets for “at least one” conditions and disjoint unions to avoid double-counting. Students were asked to consider a final case involving exactly one queen and two hearts by separating whether the queen is a heart or not.
The session reviewed combinatorial counting using card hands, with emphasis on splitting overlapping conditions into disjoint cases and using combinations to count each case. It introduced equiprobability, where probabilities are found by dividing favourable outcomes by the total number of equally likely outcomes. Further examples considered drawing coloured balls with and without replacement, distinguishing labelled from unlabelled objects, and counting binary bytes. The class then began sequences, comparing explicit and recursive definitions and introducing convergence, divergence, limits at infinity, monotonicity and boundedness. The squeeze theorem and the result that a monotonic sequence with an appropriate bound converges were also explained.
The session reviewed counting problems involving “at least” and “at most” conditions by splitting them into exact cases or using complements. It introduced explicit and recursively defined sequences, using numerical calculation and plots to explore convergence, divergence and oscillation. Difference sequences were used to derive an explicit formula from a recurrence, alongside summation formulae and proof by induction. Several recursive sequences were analysed for monotonicity, bounds, limits and fixed points, including convergence to the golden ratio and examples that oscillate rather than converge. The class concluded by defining arithmetic sequences, their common difference and their behaviour, and previewed geometric and mixed arithmetic-geometric recurrences.
The class reviewed arithmetic and geometric sequences, including their recursive and explicit formulae. It used compound interest to model a geometric sequence, calculate a value after ten years, and find when an investment doubles using logarithms or spreadsheet/computer calculations. Students practised determining sequence parameters from given terms and identifying whether sequences are arithmetic, geometric, or neither. The session also introduced sequences of the form U(n+1) = aU(n) + b, transforming them by subtracting their possible limit to obtain a geometric sequence, and discussed convergence. A final example used differences between consecutive terms and induction to establish an explicit formula for a recursively defined sequence.
The session introduced real-valued functions defined on the real numbers or subsets of them, linking their study to the behaviour of numerical sequences. It focused on limits, including finite and infinite limits as x tends to plus infinity, and used epsilon–M definitions to justify limits rigorously. Examples showed that 1/(1+x²) tends to 0, that 1+x² tends to plus infinity, and that oscillating functions such as sine may have no limit at infinity. The class also introduced left- and right-hand limits at a point, relating these limits to continuity.
The session used the sign of a derivative to determine where a differentiable function is increasing or decreasing, and to construct variation tables including critical values and limits at infinity. Polynomial examples were used to count the solutions of equations of the form f(x) = k, with the intermediate value theorem explaining why continuity guarantees at least one solution over an interval. Approximate solutions were found using a spreadsheet or interval-halving method. The comparison of two function graphs was reduced to studying the sign of their difference, including solving a quadratic equation by factorisation or the discriminant method. A recurrence sequence defined by u(n+1) = f(u(n)) was analysed by proving an interval was stable, establishing monotonicity and boundedness, and deducing convergence to a fixed point.
The session completed work on functions by using derivatives, factorisation and sign tables to determine intervals of increase and decrease, extrema, limits and the number of solutions to equations. It also covered indeterminate limits at zero, including simplification, removable discontinuities, one-sided limits and cases where a limit does not exist. The equation of a tangent was introduced and applied using derivative rules for polynomials, quotients and composite functions. Convexity, concavity and inflection points were explained through the sign of the second derivative and the position of a curve relative to its tangents and chords.
The session introduced integration as the reverse of differentiation, defining antiderivatives and explaining that they differ by an additive constant. Standard antiderivative rules were derived for powers, exponentials, trigonometric functions and 1/x, alongside linearity for sums and constant multiples. Integration by parts was developed from the product rule and applied to logarithmic and polynomial–exponential products, with guidance on choosing the factor to differentiate or integrate. Definite integrals were evaluated by finding an antiderivative and subtracting its value at the lower bound from its value at the upper bound. The geometric meaning of an integral as signed area under a graph was explained, including its connection to volumes and later applications in probability.
The session explained substitution in integration as the reverse of the chain rule, using logarithmic and exponential examples. Definite integrals were applied to the exponential distribution to obtain its cumulative distribution function and expected lifetime, with integration by parts used for an improper integral. Numerical integration was introduced by approximating an area with many small rectangles and averaging function values, including its use where no explicit antiderivative exists, such as the normal distribution. The class then introduced complex numbers through quadratic equations with negative discriminants, defining i² = −1 and writing complex numbers as x + yi. Addition, subtraction and multiplication of complex numbers were demonstrated, alongside applications to polynomial roots, computing, and signal compression.
The session developed complex numbers in algebraic form, including addition, subtraction, multiplication and division. It introduced conjugates and used them to rationalise denominators, alongside the modulus and argument of a complex number. Complex numbers were represented in polar and exponential forms, with these forms used to simplify products, quotients and powers. The class derived trigonometric addition and subtraction formulae from complex-number representations and reviewed key values on the unit circle. It also covered powers of i, the lack of an ordering for complex numbers, and conjugate complex roots of quadratic polynomials.
The class covered converting complex numbers from Cartesian form to polar form by finding the modulus and argument. It used the unit circle, standard angles and quadrant signs to identify arguments, and explained the relationship between cosine, sine and the complex exponential form e^(iθ). Multiplication, division and powers of complex numbers were carried out in polar form by multiplying or dividing moduli and adding or subtracting arguments. The session also interpreted multiplication by i as a 90-degree rotation and practised addition, multiplication and division in Cartesian form, including the use of conjugates.
The class introduced probability through random experiments, sample spaces, elementary events and random variables, using dice throws as an example. It defined the main properties of a probability measure, including probabilities of complements, disjoint unions and general unions. Probability calculations were carried out for finite sample spaces, including checking whether tables of values can define a valid probability distribution. Equiprobability was linked to combinatorics through the rule that the probability of an event equals its cardinality divided by that of the sample space. Card-drawing examples were used to calculate probabilities, distinguish unions from intersections, introduce total probability and define independence; a without-replacement card exercise was set for the next class.
The session revised probability in equally likely situations, using counts of outcomes to calculate probabilities. It distinguished arrangements, permutations and combinations by considering whether order and repetition matter, with examples involving race medals and committee selection. It also reviewed independence of events through the condition P(A ∩ B) = P(A)P(B). Conditional probability was introduced and shown to be a probability measure, followed by applications of total probability and Bayes’ theorem to school preferences, defective products and committee compositions.
The session reviewed combinatorics and probability through counting arrangements, combinations, complementary events, and repeated independent trials. Arithmetic and geometric sequences were covered, alongside monotonicity, bounds, limits and proof by induction. The class practised derivatives, tangent equations, continuity using one-sided limits, and proving that a continuous function has a root on an interval. Integration was revised through logarithmic antiderivatives, integration by parts and linearity. Complex numbers were expressed in algebraic and polar forms, including conjugates, powers and quadratic roots.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Fundamental data structures and algorithms, implemented in C with manual memory management and in VBA for Excel.
BSc · Year 1 · 18 sessions
Course code: FSDE-002
The sessions examined how a program’s choice of data structure affects both its operations and its correctness. Examples in Excel’s Visual Basic for Applications (VBA) progressed from array-based lists to stacks, queues, dictionaries, records and trees. Students traced operations, ran supplied code and considered edge cases. A recurring question was what must remain true after each operation, including when an operation cannot succeed.
Arrays and linked structures introduced invariants, capacity limits and explicit success or failure behaviour rather than ambiguous substitute values.
Searching, sorting and recursion were traced step by step, connecting bounds, base cases and data organisation with the work performed.
Reporting and task-management examples brought collections, dictionaries, records and hierarchical structures together without adding complexity that the problem did not require.
The session introduced the relationship between data structures, which organise data, and algorithms, which process it, with emphasis on selecting structures that support efficient and scalable operations. Students used Excel Visual Basic for Applications (VBA) to create a macro-enabled workbook, enter a small set of numerical values, and run code that counted positive values and identified values in a range. The class covered function contracts, including inputs, outputs, rules, edge cases, failure behaviour and sentinel values for cases such as an item not being found. It also introduced loop invariants as statements that remain true before, during and after iteration to support correctness, alongside lower and upper bounds, indexing differences between VBA and C, and an initial overview of Big O complexity.
The session introduced abstract data types through a fixed-capacity integer list implemented using an array. It explained the representation invariant: the size must remain between zero and capacity, and only indices from zero to size minus one form the valid region. Operations such as append, get and remove were examined in terms of preserving this invariant, handling invalid indices safely, and shifting elements to maintain contiguity after removal. The class also compared constant-time direct indexing with the linear work involved in shifting elements, relating code structure and loops to complexity. Students ran the example, interpreted its results, and practised explaining the concepts generally before linking them to code examples.
The class introduced dynamic arrays as an improvement on fixed-capacity lists, allowing an abstract data type to grow without changing its operations such as append, get and remove. It explained that, when an array is full, its capacity can be doubled, existing elements copied to the new storage, and the new item appended. The session covered amortised analysis, showing that although a resize makes an individual append costly, resizing happens infrequently enough for the average append cost over many operations to remain constant. It also considered memory use as proportional to the number of stored elements and reviewed VBA’s ReDim and ReDim Preserve commands for resizing arrays while retaining data. Students examined example output that logged capacity changes and discussed using a practical mini-project to apply these ideas.
The session introduced singly linked lists as an alternative representation of a list, using nodes containing a value and a reference to the next node. It explained the roles of the head, tail, null references and traversal, and compared linked lists with arrays and dynamic arrays. The class considered representation invariants, preconditions and postconditions as ways to preserve correctness during operations such as adding or removing elements. It compared the time costs of indexing, insertion, deletion, shifting and relinking, including constant-time operations when a tail reference is available. Students ran a VBA demonstration, observed how head and tail references changed, and were directed to a quiz and further resources on complexity.
The session introduced stacks as a last-in, first-out data structure, with access restricted to the top element. Core stack operations were covered: push, pop, peek, checking whether a stack is empty, and checking whether a bounded stack is full. The class examined array-based stack representations, including capacity, the top index, representation invariants, underflow and overflow, and common off-by-one errors. Students were asked to implement and test a stack in VBA, including explicit success or failure handling, edge cases, and a balanced-parentheses validator. Time complexity and the distinction between array-based and linked-stack representations were also discussed.
The session explored stacks as disciplined last-in, first-out containers and related them to everyday software features such as undo/redo and browser history. It defined stack operations including initialise, push, pop, peek, size and is-empty, with emphasis on the invariant that top is a count rather than an array index. The class used visual simulations and traced push and pop operations, including failure conditions for full and empty stacks and the use of Boolean success values rather than fake sentinel data. Stacks were applied to checking correctly nested parentheses, square brackets and braces, and to evaluating postfix expressions by popping operands in the correct order. Students were asked to inspect example code and work through a postfix-expression evaluation exercise before the next session.
The session introduced queues as abstract data types that follow the first-in, first-out principle, contrasting them with last-in, first-out stacks. It covered queue operations including initialisation, checking whether a queue is empty or full, finding its size, enqueueing, dequeueing and peeking, with Boolean success or failure used to avoid ambiguous sentinel values. Array-based queues were examined, showing why shifting elements after each dequeue is inefficient and how circular buffers use front indices, size and modulo arithmetic to wrap around without moving stored elements. Students worked with VBA code to implement and test enqueue, dequeue and peek operations, including edge cases such as dequeueing or peeking from an empty queue and enqueueing into a full queue. The session also discussed queues for fair task processing and briefly introduced linked queues as an alternative without fixed capacity.
The session reviewed stacks and queues, comparing last-in-first-out stack behaviour with first-in-first-out queue behaviour and their common operations, including push, pop, enqueue, dequeue and peek. It covered failure conditions for full or empty structures, Boolean success values and the use of output values rather than sentinel values. Circular-buffer queues were explained through front, back, size, capacity, logical positions and modulus arithmetic, emphasising that indices move rather than stored elements. Students then used VBA examples of stack and queue implementations, running separate code blocks and changing capacities or values to observe successful operations and failure cases.
The session introduced linked queues as node-based first-in, first-out (FIFO) structures, using head and tail references rather than a fixed-capacity array or circular buffer. It explained nodes, references, queue invariants, and the enqueue, dequeue and peek operations in VBA, including how to handle empty queues and why these operations have constant-time work. The class compared linked queues with array-based queues, highlighting dynamic growth and the avoidance of shifting elements. It then introduced recursion through the ideas of a base case, recursive step, decreasing problem size and the call stack, using summing the first N array values and testing palindromes as examples. Students were asked to review the supplied code, glossary and presentation materials before practical exercises in the next session.
The session reviewed recursion through the examples of summing array elements, testing palindromes, counting occurrences of a value, and binary search in sorted arrays. It focused on identifying the base case, the smaller subproblem, the measure of progress, recursive calls, returned values and the combined step performed after a call returns. The call stack and call frames were explained by tracing calls down to a base case and then following the returned results back up. Students practised tracing a chosen recursive example and considered common errors, including missing or incorrect base cases, failure to reduce the problem, and incorrect return logic. Recursion was compared with iteration, with binary search used to illustrate how halving a search interval can reduce recursion depth.
The session introduced searching in arrays, defining a successful search as returning an index and an unsuccessful search as returning -1 to avoid confusion with index 0. Linear search was explained as checking elements from left to right until the target is found or every element has been checked, and its usefulness for unsorted data was compared with its slower performance on large arrays. Binary search was taught as a faster method for sorted arrays, using low, high and middle indices to discard half of the remaining interval after each comparison. Students practised tracing both search methods in tables, including found and not-found cases, and identifying typical errors in search code such as incorrect bounds, midpoint calculations and interval updates.
The session introduced sorting algorithms as step-by-step methods for rearranging array elements according to a chosen rule, usually ascending order, without changing the values themselves. It explained why sorting is useful, including making data easier to read, report on and search, particularly because binary search requires sorted data. Selection sort was taught as repeatedly finding the smallest value in the unsorted portion and swapping it into the next fixed position, using outer and inner loops, a minimum-position variable and a temporary variable. Insertion sort was compared with selection sort: it takes the next value, shifts larger values rightwards to create space, and inserts the value into its correct position. Students completed exercises tracing both algorithms, reading and debugging VBA code, and identifying why these methods become inefficient for large arrays.
The session showed how to combine previously learnt helper functions into a simple reporting program using an array of scores. It covered preserving original data by sorting a copy, then using linear search, occurrence counting, minimum and maximum calculations, totals and averages to produce worksheet output. The class practised tracing minimum, maximum and running-total logic by hand, and examined why an average must use the number of array elements rather than simply the final index. It also introduced good programming practices: decomposing a larger task into testable helper functions, debugging one component at a time, and keeping raw data unchanged.
The session compared arrays and dynamic arrays with VBA collections and dictionaries as alternative storage structures. Collections were presented as ordered, growable lists whose size and capacity are managed automatically, while dictionaries were explained as key–value pairs suitable for look-ups, category totals and frequency counting. Students practised running and safely modifying VBA examples, examining outputs in Excel, and explaining in plain English what changed. The class emphasised choosing and justifying a data structure according to whether indexed ordering, simple growth, or key-based counting was required.
The session reviewed stacks and queues as restricted forms of lists, focusing on their different retrieval rules: last in, first out for stacks and first in, first out for queues. It explained stack operations such as push, pop and peek, and queue operations such as enqueue, dequeue and peek. Students examined how VBA collections can simulate stacks by removing the final item and queues by removing the first item, using examples such as undo histories and print-job queues. Activities involved reading and running supplied VBA code, making safe changes to stored values, identifying data-structure clues in code, and justifying which structure best fits a practical task. The session also recapped arrays, dynamic arrays, collections and dictionaries, emphasising selection based on indexing, growth, key-value pairs and required removal order.
The session reviewed how collections, dictionaries and queue-like first-in, first-out logic can cooperate within a simple task-management program. It explained that parallel collections depend on an invariant: matching indexes must remain aligned, but this becomes error-prone when each item needs many associated fields. Records were introduced as bundles of named fields that keep related information, such as a task name, category, deadline and priority, together as a single value. The class considered how records are declared and used in VBA, including iterating through a collection of records and avoiding common syntax and value-copying errors. Students also discussed adding meaningful detail to their own project designs, while being reminded that greater complexity should only be used where it meets a real need.
The session introduced trees as data structures for representing hierarchies, using examples such as file systems, organisational charts, reply threads and nested web elements. Key terminology covered included root, parent, child, node, internal node, leaf and depth, alongside the distinction between flat data and hierarchical data. Trees were represented in a worksheet through parent-child records, then traversed from the root using recursive depth-first walking. Students completed guided VBA activities to draw a tree, print its hierarchy, modify nodes, count nodes at each depth and identify the deepest leaf. The session also consolidated the principle of breaking problems into sub-problems and selecting suitable data structures.
The session reviewed how to decompose a problem into smaller needs, match each need to an appropriate data structure, and then implement the solution. It compared collections for ordered storage, dictionaries for key–value counting and lookup, records for keeping related attributes together, queues for first-in-first-out processing, and trees for hierarchical data. A mock assessment was used to practise recognising data structures from descriptions and VBA-style code, including recursion and the purpose of a base case. A design exercise modelled conference-paper submissions, using records, collections, dictionaries and queue logic, and considered how adding a new attribute should require only local changes.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Relational modelling, normalisation, SQL queries, joins, aggregation, subqueries and an introduction to programmatic SQL.
BSc · Year 1 · 8 sessions
Course code: FSDE-003
The class approached databases through the problems that arise when information is repeated, ambiguously identified or poorly connected. Tables and keys led into relational algebra, Structured Query Language (SQL) and the design of relationships. Exercises moved between customer purchases, cinema records and other small datasets, asking both how to retrieve an answer and how to organise the data so that the answer remains meaningful.
Tables, attributes and keys used to identify records and connect related information, with attention to duplication and errors when data changes.
Selection, projection, joins and division translated into query plans, distinguishing questions about some, only or all members of a set.
Functional dependencies, normal forms and relationship diagrams used to examine table structure before creating constraints and inserting data into a database.
Data was introduced through values and tabular representations, with rows as records and columns as attributes. An employee-and-department example gave students a table to read and update, exposing problems caused by repeated employee information. Candidate and composite keys introduced the requirement to identify a record uniquely. Foreign keys then connected separate tables. Splitting related information provided a concrete way to examine duplication and update errors, alongside the broader requirements for complete, consistent and non-redundant data.
Relational algebra introduced a set-based way to retrieve information. Union, intersection and difference were considered alongside projection, selection, joins and division. Examples distinguished choosing columns from filtering rows, then combined related tables through matching conditions. The class also examined self-joins and briefly discussed different join forms. Division addressed a different kind of question: which entities are related to every item in another set? Keys and relationships remained the foundation for deciding how these operations could connect the data.
Client, product and sales tables supported exercises in constructing relational queries. Students distinguished customers who bought particular products from those who bought only those products or every product in a set. Selection, projection, joins, intersection and difference provided the building blocks, with division addressing the “all” case. Further exercises used a cinema database. The session then began translating these plans into SQL, connecting row filtering with WHERE, column selection with SELECT and source tables with FROM.
A cinema example showed how SQL could retrieve screen and seat information for a film through projections, selections and joins. Relational division introduced nested NOT EXISTS queries because SQL has no direct division operator. The session then returned to data design through customers, products and invoices. Primary keys, foreign keys and functional dependencies were examined as ways to identify records and describe relationships. Redundancy and contradictory values made the consequences of poor table structure visible.
Functional dependencies led into attribute closure and rules for deriving further dependencies. Students calculated closures and examined whether attribute sets could identify records minimally. Manuscript-and-reviewer data provided a decomposition exercise using related tables and keys. The first three normal forms introduced atomic values, partial dependencies and dependencies between non-key attributes. Examples involving addresses, sports participants and vehicles grounded the discussion, while Boyce–Codd normal form was introduced briefly as a further condition on the structure of dependencies.
Students examined apartment, tenant and film tables for violations of normal forms, then decomposed them into related tables. The class distinguished harmful redundancy from repeated values that legitimately occur in data. Joins showed how information could be reconstructed after decomposition. Relational and non-relational models were then compared, including more flexible key-value and graph representations. Entity–relationship diagrams introduced a planning notation for entities, attributes, keys and cardinalities, connecting the earlier table exercises with database design before implementation.
Films, directors, countries and user ratings illustrated one-to-many and many-to-many relationships. Entity–relationship diagrams connected those relationships to proposed tables and keys. Students also calculated attribute closures to identify candidate keys and revisited dependencies that indicate a need for decomposition. A linking table with a composite key showed how a many-to-many relationship could be represented. The session therefore moved between a visual model of the information and the more formal conditions used to check its structure.
Create, read, update and delete operations introduced the familiar CRUD grouping of database actions. Indexes and views were discussed as ways to support searches and reusable queries. The class examined database access through web-application layers and introduced programming extensions such as variables, conditions, loops and stored procedures. A practical exercise translated an entity–relationship diagram into tables, keys and constraints. It also covered inserting records and handling deletion by setting dependent values to NULL where configured.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
French for non-native speakers or practical business English for students strengthening professional communication.
BSc · Year 1 · 20 sessions
Course code: OS1-002
Technology and workplace questions supplied the material for practising English. Students discussed smart devices, personal data, artificial intelligence and security, then examined management and leadership through presentations and case studies. Speaking, listening, paraphrasing and source evaluation were interwoven with language practice. The sessions asked students to explain an example, respond to another view and support an argument rather than simply repeat technical vocabulary.
Presentations, listening activities and structured debates developed ideas through examples, clarification, respectful disagreement and attention to how an audience follows an explanation.
Articles and case studies prompted questions about credibility, privacy, misinformation and uncertainty, alongside practice in paraphrasing and acknowledging sources.
Collocations, workplace communication and leadership scenarios connected accuracy and register with the practical demands of discussing professional choices and their consequences.
The session introduced the aims of practical and business English, including professional communication, writing, presentations, workplace culture and preparation for internships. Students introduced themselves and discussed their interests, study choices and confidence in speaking English, helping to establish a supportive environment for speaking practice. The class explored technological change through older and current methods of storing data and accessing media, including floppy disks, CDs, streaming and cloud storage. Students also discussed data centres and their environmental demands. The main language focus was on common collocations with make, take and do, with practice examples and preparation for a quiz and Moodle exercises.
The class discussed how language students can progress by balancing grammar study, regular input and practical speaking opportunities. Students revised collocations with make, take and do, including expressions such as make a decision, take a break, do homework and take an exam, and completed and reviewed a quiz on these forms. The class also practised the grammar patterns avoid + -ing and prevent + object + from + -ing. A new topic on smart devices was introduced through discussion of their functions, benefits, data use and environmental concerns. Students were assigned an individual mini-presentation on a published article about smart devices, including a summary, purpose, vocabulary, an example device, personal learning and a discussion question.
Students delivered and discussed news presentations on smart-home data privacy and brain–computer interfaces, including their benefits, risks, ethics and possible effects on autonomy. The class considered how connected devices collect and share personal data, and debated whether convenience justifies privacy risks. Students watched and answered comprehension questions about a talk on smart homes, surveillance, data mining, smart-device tracking and the idea of a commercial panopticon. The session also included advice on improving spoken English through regular exposure to English media and conversation practice.
The class examined how smart technology and the Internet of Things are becoming part of everyday life. A student presentation covered smart speakers, wearable technology, automated home systems, telehealth, diagnostic tools and smart transport, with relevant vocabulary and examples. The group discussed the benefits of smart devices, including convenience, health monitoring and home security, alongside privacy, data-sharing and hacking risks. Students considered whether people should limit unnecessary connected devices in order to protect their privacy and security. The session also briefly compared retail business models, including supermarkets, wholesale membership stores and luxury grocery shops.
Students delivered and discussed presentations on the growing role of smart devices in daily life, including health monitoring, home automation, navigation and transport. The class examined DNA-based data storage as a possible high-density, more sustainable alternative to conventional data centres, including encoding, synthesis and sequencing. It also considered driverless taxis, their sensors and safety potential, alongside concerns about cost, privacy, employment and personal choice. The session included guidance on making clear presentation slides, using readable font sizes and limiting text, as well as paraphrasing, quotation marks and citing sources. Students were asked to read an article about AI-generated misinformation and fake social-media content before the next class.
The class distinguished between understanding language and producing it, stressing that speaking requires practice, confidence and familiarity with sounds and sentence structure. It introduced data brokers as intermediaries that collect, package and sell information drawn from online activity, public records and connected devices. Students examined targeted advertisements to consider what the internet may infer about their habits, interests and location. They watched and discussed a talk about data privacy, anonymity, political microtargeting, data-driven insurance and credit decisions, and the trade-off between convenience and privacy. Students then completed case studies on location data, insurance pricing and political targeting, explaining and justifying their views in writing.
The class reviewed case studies about the use of personal data, including location tracking by police, insurance prices based on online behaviour, and political micro-targeting. Students considered privacy, consent, accuracy, discrimination, transparency and the possible effects of targeted political messages. The difference between misinformation and disinformation was discussed, with disinformation defined as the deliberate spread of false information. Students then held a structured debate on smart homes, using respectful disagreement, questions and evidence to discuss convenience, security, privacy, dependence on technology, internet reliability, cost and environmental impact.
The class analysed an article comparing fully automated artificial intelligence (AI) social-media accounts with accounts where people guided, corrected and managed AI-generated content. Students discussed misinformation, fake online personas, inappropriate messages, the ‘dead internet’ theory, and the limitations of relying entirely on AI for business marketing. The session explained how to assess source credibility by checking authors, publication type, dates, references, bias, peer review and cross-checking sources, including the appropriate use of Google Scholar and Wikipedia links. Students completed a paraphrasing activity based on the article, using complete sentences and giving credit to sources. The class also considered professional workplace communication, including how to remain neutral and avoid controversial, personal or divisive topics at work.
The session explored evidence about artificial intelligence adoption across industries, using survey data to distinguish experimentation, pilot projects, scaling and full integration. Students analysed the possible business benefits of AI, including efficiency, innovation, customer targeting and product development, alongside risks such as increased costs, intellectual-property infringement, privacy concerns, regulatory compliance and job displacement. Study-planning strategies were also discussed, including prioritising weaker subjects, using practice tests, scheduling revision in timed blocks and reducing phone distractions. A student presentation examined AI in automotive manufacturing, focusing on humanoid robots in production lines and AI-based battery quality control, as well as ethical, employment, data-security and trade-related concerns.
The class reviewed evidence on the adoption of AI in business, including the fact that many companies are still testing AI in individual functions rather than transforming their entire operations. Students discussed how to assess the credibility of sources and were asked to research how AI is used in particular industries. A word-cloud activity was used to explore AI’s effects on healthcare, automation and employment, including benefits such as faster analysis, safer working conditions and fewer routine tasks, alongside possible job losses. Student presentations examined AI-supported climate-risk prediction and disaster warnings, and the use of AI and data science in embryo genetic screening, covering limitations, uncertainty, privacy, inequality, disability rights and ethical decision-making.
The class revisited AI-assisted embryo screening and discussed how it uses genetic data to estimate the likelihood of diseases and traits without changing genes. Students considered ethical questions about consent, disability, diversity, privacy, commercial reliability and the possible psychological effects of selecting embryos. The session then introduced a research task on how AI and data science support different industries, change jobs and create risks such as inaccuracy, intellectual-property issues and weak regulation. Students were asked to research several industries, use credible sources and prepare examples for a future speaking assessment.
The session introduced cybersecurity as protecting devices, systems, networks and data from unauthorised access, fraud and privacy breaches. Students discussed common threats including phishing, malware, password attacks, data breaches and denial-of-service attacks, using examples of suspicious emails, messages, links and fake login pages. The class considered practical safety measures such as checking domains and URLs, using unique strong passwords and two-factor authentication, avoiding unknown downloads, keeping software updated, and not sharing credentials. Students completed a safe-or-dangerous cybersecurity quiz and created short stories using cybersecurity vocabulary.
Students completed a vocabulary quiz on cybersecurity terms and corrected errors in the quiz. They explored quantum computing, including bits and qubits, superposition, the difference between supercomputers and quantum computers, and the potential speed of quantum calculations. A talk on cryptography explained how public-key encryption protects digital data, why quantum computers could break current encryption, and the need for quantum-resistant methods of data protection. The class discussed privacy, ethical risks, financial security, surveillance and possible positive uses of quantum computing in medicine, AI, energy and fraud detection. A student presentation also examined automated “dark factories” in China, considering efficiency, worker safety, environmental effects and job losses.
The class discussed how artificial intelligence and machine learning may both improve cybersecurity by detecting attacks and create new risks through more convincing scams, deepfakes and automated hacking tools. Students considered password alternatives, two-factor authentication, regular updates, privacy, and ways to protect data on smart devices. Presentations explained phishing, smishing and vishing, including warning signs such as urgency, suspicious links and requests for credentials, and stressed verifying messages through an official second channel. The session also explored ethical hacking, bug bounty programmes and the difference between authorised security testing and malicious hacking. A further presentation examined deepfake scams, their impact on identity, finance, misinformation and non-consensual content, alongside practical safeguards such as multi-factor authentication, verification codes and checking requests independently.
The session included student presentations on cybersecurity, covering the causes, consequences and prevention of data breaches, including phishing, weak passwords, software updates, multi-factor authentication and corporate responsibility. The class discussed the dark web, distinguishing common online myths from its use as an anonymity tool, while considering its links to criminal activity, privacy and online surveillance. Students debated whether organisations should be fined after data breaches and whether anonymous networks should continue to exist. The class then introduced management styles, comparing autocratic, democratic, laissez-faire and bureaucratic approaches through workplace examples. Students reflected on their own leadership experience and were asked to research the advantages and disadvantages of different management styles.
The class explored management and leadership styles, including laissez-faire, servant, coaching, bureaucratic, transactional, transformational, situational and charismatic leadership. Students reflected on workplace and team experiences to consider autonomy, support, authority, motivation, accountability, team bonding and the advantages and limitations of different approaches. The class discussed how management styles may vary according to the task, company size, employee experience and organisational change, using workplace scenarios as case studies. Students were assigned a short presentation on a chosen chief executive, analysing their dominant management style, leadership examples, strengths and weaknesses, sources and personal opinion.
The class reviewed preparation for its final speaking assessment, and students were encouraged to create a shared study guide from course topics. Students discussed responsible use of AI tools in academic work, including using them for outlines, corrections and ideas while checking facts, adding personal input and avoiding plagiarism. Two presentations examined the leadership and management styles of the leaders of major companies, including transformational, autocratic and laissez-faire approaches, accountability, autonomy, feedback, workplace culture and the advantages and drawbacks of each approach. The class also compared employment practices, job security, networking, internships and remote work in different countries.
Students presented leadership analyses of two technology and automotive business leaders, considering vision, transformational leadership, innovation, company culture, decision-making, employee motivation, scalability and potential drawbacks. The class discussed empathy as both a personal quality and a developable workplace skill, including its relevance to leadership and organisational culture. The session then explored how comics can reflect historical and social contexts, using superhero comics linked to economic hardship, war and civil rights, as well as comics about artificial intelligence and employment. Students were assigned a short final presentation analysing a comic’s theme, message about current society and their own response.
The class reviewed the main course themes: smart devices and data privacy, AI misinformation, AI in different industries, cybersecurity, and management and leadership. Students began creating a shared study guide by writing possible final-exam questions and considering examples and links between topics. Assessment preparation considered complete answers, relevant examples, vocabulary, grammar, fluency and clear pronunciation. Students also completed a written reflection on what they had learnt, preferred activities, areas for improving business English, and suggestions for next year.
The class examined how artificial intelligence can support medical imaging and cancer diagnosis, including potential benefits such as faster analysis and earlier detection, alongside risks concerning bias, transparency, privacy, security and equal access to healthcare. Students presented and discussed technology-themed comics about AI-generated communication, software bugs, and AI companionship, considering automation, authenticity, human responsibility and the limits of AI. The class also reviewed preparation for the oral final assessment, practising how to give structured answers supported by examples from topics including smart-device data collection, data brokers, AI-generated misinformation and phishing scams. Students were encouraged to build a shared study guide with key questions, evidence and examples.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Word, Excel, PowerPoint and Outlook skills, with focused preparation for Microsoft Office Specialist: Associate (Excel).
BSc · Year 1 · 20 sessions
Course code: OS1-003
The teaching used the desktop Office applications to connect everyday tasks with careful execution. Students organised messages and meetings, structured Word documents, manipulated spreadsheet data and built presentations. Excel practice formed a substantial part of the account, including timed exercises and review. Across applications, the sessions returned to accurate selection, readable presentation, accessibility and checking what a task actually requires.
Outlook and Word activities combined organisation, formatting and references with collaborative review, professional presentation and accessibility checks on document content.
Excel exercises linked imports, tables, formulas and references with filtering, charts, printing and the need to select and check the intended data.
Timed practice and PowerPoint work brought together procedural accuracy, restrained visual design, reusable layouts and review of completed tasks.
The session introduced the Microsoft Office Specialist Associate certification and the Office applications covered: Outlook, Word, Excel and PowerPoint. It outlined Outlook functions including email, contacts, calendars, tasks, notes and automation, as well as Word document formatting, objects, tables, references and automated contents tables. Excel coverage included workbooks, worksheets, formatting, tables, data ranges, formulae, functions, charts and printing, while PowerPoint coverage included slide content, visuals, tables, notes, printing and slide masters. The class also explained that the focus would be on the desktop version of Microsoft Office, the scope of the Excel Associate examination, and the learning materials and practice files available through the online platform.
The session continued the introduction to Outlook for Microsoft Office Specialist preparation. It covered using the online student guides and exercise files, organising messages with folders, categories, flags, conversation view, search and deleted-item recovery. Students practised composing emails, adding and removing attachments, considering attachment size, sharing file links, and recognising phishing messages. The class also covered calendar meetings, including invitations, recurring events, availability, privacy and cancellations, as well as contacts, groups and task management for individual and team work.
The session introduced Microsoft Word and its main interface, including the Quick Access Toolbar, ribbon tabs, templates, document creation, saving and AutoSave through OneDrive. It covered customising the ribbon, using text and paragraph formatting, lists, alignment, line spacing, styles, themes, page orientation, page and section breaks, and document views. Students practised copying, cutting and pasting with the Clipboard, and using Find and Replace to update repeated text efficiently. The class also introduced tracked changes for collaborative editing and discussed using columns to improve the readability of documents and CVs.
The session covered Outlook tools for organising email, including Quick Steps, categories and rules that act on messages based on specified conditions such as words, senders or recipients. It also introduced Word document design features, including themes, templates, colour palettes and styles. Students practised formatting shapes, text boxes and graphics, using selection and grouping tools, and modifying picture appearance through colour, transparency and background-removal options. Accessibility was considered through the use of alternative text for images, alongside guidance on completing practice activities and using the student guide for certification preparation.
The session covered creating and formatting tables in Word, including inserting tables, converting comma- or tab-separated text into tables, and converting tables back into text. It demonstrated applying table styles, sorting data, resizing rows and columns, merging and splitting cells, and using table properties such as alignment and alternative text. Students also practised creating and modifying bulleted lists, numbered lists, text boxes and SmartArt diagrams. Practical certification exercises included inserting and formatting 3D models and images, enabling tracked changes, and using the accessibility checker to identify missing alternative text.
The session completed a Word module on document references and finalisation. Students practised creating footnotes, controlling their numbering across sections, and generating and updating tables of contents using heading styles. The class also covered managing bibliographic sources, inserting citations, selecting citation styles, and using spelling, grammar, dictionary and thesaurus tools. Further work included adding headers, footers and page numbers, editing document properties and tags, checking accessibility and compatibility, and applying document protection and inspection options. Students then began formatting a CV in Word by adapting templates, colours, images, text boxes, hyperlinks and skills displays.
The session introduced Microsoft Excel for the Microsoft Office Specialist (MOS) Associate certification, including the workbook interface, ribbons, quick-access tools and worksheets. It covered creating, opening and saving workbooks in different formats, particularly XLSX, comma-separated values (CSV) and macro-enabled files, and explained compatibility and file-sharing considerations. Students practised organising worksheets by adding, deleting, renaming and moving sheets, resizing rows and columns, merging cells, formatting values, and freezing panes. The class also demonstrated named cells and ranges, hyperlinks within a workbook, automatic fill, copying and pasting data, and the use of templates such as calendars and project plans. Students were asked to begin an exercise reorganising data from Excel and CSV files before the next class.
The session covered formatting Excel cells, including changing fonts, sizes, colours, fills, borders, alignment and text wrapping. Students practised formatting numbers, dates and currencies, adjusting column widths and row heights, merging and centring cells, and using table and cell styles. The class also covered copying formatting with Format Painter, clearing formats or contents, and recognising warnings when merging cells may remove data. Practical activities revised deleting and inserting rows and columns, freezing panes, copying headings across worksheets, saving CSV files as Excel workbooks, renaming worksheets, zooming and moving or deleting cell contents.
The session covered Excel tables and data ranges, including creating tables from selected cells, applying table styles, and recognising the Table Design tab. Students practised converting tables back into ordinary data ranges while retaining formatting, and naming tables or ranges for easier reference. The class explored table options such as headers, filter buttons, banded rows and columns, inserting columns, and adding or changing total-row calculations. Students also practised sorting and filtering data, including multi-level custom sorts and number-based filters, before completing exercises on these skills.
The class covered basic Excel formula entry, including starting formulae with an equals sign, selecting cell ranges and using AutoSum. It reviewed the order of operations, the use of brackets, and the multiplication, division, addition and subtraction operators. Students practised relative and absolute cell references, using dollar signs to fix rows, columns or entire cells when copying formulae with AutoFill. The session also introduced named ranges and calculation functions including SUM, AVERAGE, MAX, MIN, COUNT, COUNTA, COUNTBLANK and IF. A practical exercise applied these functions to attendance, ticket sales, donations and bonuses.
Students completed a timed mock Microsoft Office Specialist Excel examination using seven independent projects, then discussed time management and exam strategy. The class reviewed importing CSV and text data, clearing formatting, naming ranges, changing page orientation, checking workbook compatibility and saving work. Further tasks covered formulae and absolute references, autofill, conditional formatting, table styles, sorting, hyperlinks, column widths, chart styles, print areas, document properties, and filtering. Guidance was given on using keyboard shortcuts, reading instructions carefully, moving on from difficult tasks, and interpreting certification scoring.
The session covered importing tab-delimited text files and CSV files into Excel, checking delimiters and confirming that data has loaded correctly. Students practised Text to Columns to split data using delimiters such as spaces, tabs and commas. The class used text functions including LEFT, RIGHT, LEN, MID, PROPER, UPPER, LOWER, CONCAT and TEXTJOIN to extract, format and combine text values, including names and postal codes. Students also created hyperlinks to web pages, workbook locations and external documents, and completed a practical activity using imported crop data. The final section introduced print areas, print preview, page layout, headers and footers, and checks for document issues, accessibility and compatibility.
The session reviewed common errors in Excel certification practice tests, focusing on following instructions precisely, selecting the correct worksheet and cell range, and using formulae with the correct syntax. Students learnt how to apply, edit, inspect and remove conditional formatting, including colour scales, data bars and icon sets. The class covered creating and modifying charts, including chart types, titles, legends, layouts, axes, data selection, moving charts and adding alternative text for accessibility. It also introduced sparklines for displaying trends within cells and practised these skills through guided Excel exercises. Finally, students worked on print settings, document inspection, accessibility checks, document properties, page headers and automatic numbering.
The session completed Excel practice projects for Microsoft Office Specialist preparation. Activities included combining text with CONCAT, extracting text with LEFT, converting text to upper case, using AutoFill and Flash Fill, and applying named ranges in calculations. Students created and edited a clustered column chart, added data series, changed chart layout and size, moved it to a separate sheet, and added alternative text. The class also practised table formatting, sorting and filtering data, hyperlinks, conditional counting, page setup, print areas, headers and footers, accessibility checking, document properties, Portable Document Format (PDF) export and compatibility checking. The next project was introduced as further practice in importing data, cell and table management, references, named ranges, sorting, grouping and text wrapping.
The session completed an Excel practice project for Microsoft Office Specialist preparation. Activities included importing text data, converting tables to ranges, deleting cells and rows, creating tables, copying formatting between workbooks, and using formulae, named ranges, AutoFill, COUNTIF and relative, absolute and mixed references. Students also practised conditional formatting, multi-level sorting, filtering by colour, freezing panes, sparklines, charts, print settings, document properties and inspection for comments or hidden sheets. Guidance was given on reading task instructions carefully and completing a timed practice exam.
Students completed and reviewed a timed Excel practice test designed to prepare them for the Microsoft Office Specialist Associate certification. The session covered importing CSV data, naming ranges and tables, changing page orientation, freezing panes, using SUM formulae across worksheets, and handling formula warnings. Further work included filtering and highlighting data, clearing formats, applying currency formats, converting between tables and ranges, sorting by region and month, and adding total rows. Students also practised copying and transposing data, with attention to reading task instructions accurately and managing examination time.
The session introduced PowerPoint as a presentation tool and compared its interface, customisation options and common menus with other Microsoft Office applications. It covered creating, saving and editing presentations; using slide layouts, notes, presenter view, sections, headers and footers, themes, fonts, text columns, tables and imported Excel content. Students practised inserting, cropping, resizing, styling, rotating and arranging images, shapes, text boxes, icons, screenshots and grouped objects, including alignment and layer order. The class also explored hyperlinks, slide and section zooms for non-linear navigation, slide sizes and exporting to formats such as PDF, images and video. Accessibility features, including alternative text and live captions with translation, were demonstrated, alongside advice on clear and restrained visual presentation design.
The session covered advanced PowerPoint content, including creating tables manually and importing tables from Word and Excel while preserving or adapting formatting. It demonstrated creating and editing charts through linked Excel data, selecting data ranges, changing chart types and adding titles or legends. Students explored SmartArt, flowcharts, image placeholders and 3D models, including how images may be cropped to fit preset shapes. The class also covered inserting stock, online and YouTube videos, screen recordings and audio narration, then organising slides with sections, hidden slides and zoom links. Finally, it showed print layouts, speaker notes and accessibility checks such as adding alternative text.
The session completed PowerPoint work on transitions, including their effects, duration, sound options and manual or automatic slide advancement. It then covered animations for text, images and 3D objects, including sequencing, timing, motion paths and using animations to reveal presentation points gradually. Students learnt how to create custom slide shows, configure presentation settings for multiple screens, record presentations and export them as videos. The class also examined themes, templates, slide masters and notes masters, including creating reusable layouts, image placeholders, consistent branding and protected templates. Collaborative commenting, version recovery, presentation optimisation and file protection were also discussed.
The session used a Microsoft Office Specialist practice test to prepare for the certification examination. It reviewed Excel tasks including creating and editing charts, adding alternative text, importing CSV data, formatting tables, calculating totals and conditional averages, and managing worksheets. Further activities covered page layout, conditional formatting, named ranges, hyperlinks, sorting, text functions, saving workbooks as PDF or HTML, and configuring publication options. Guidance was also given on reading task wording carefully, using the correct worksheet and options, confirming each completed task, and managing time during the examination.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
The development of computing, AI, networks, large-scale data systems and connected objects in their social and political contexts.
BSc · Year 1 · 5 sessions
Course code: OS1-004
Computing was examined as a history of needs, institutions and technical choices, rather than a succession of inventions alone. The sessions connected calculation and information processing with administration, industry, war and research. They followed the emergence of computer science, operating systems and networks, then considered platforms and physical infrastructure. Historical sources and comparisons provided ways to question simple accounts of where technologies came from.
Calculating devices and early computers were related to the administrative, scientific, industrial and military problems they were developed to address.
Programming languages, computing centres and operating systems showed how engineering difficulties, research and teaching contributed to the development of computer science.
Telecommunications, platforms and semiconductor industries connected technical developments with standards, state strategies, commercial power and the material costs of digital infrastructure.
The session introduced the history of computing as part of the wider history of information technologies, explaining how historians study sources, compare cases and identify technological trajectories. It traced early writing, numerical systems, astronomical mechanisms, clocks and calculating devices as ways of recording, processing and communicating information. The class examined calculating machines from Pascal and Babbage to punch-card tabulators, relating their development to administration, industry, banking, science and military needs. It then covered the emergence of electronic stored-program computers during and after the Second World War, including codebreaking, the Electronic Numerical Integrator and Computer (ENIAC), the von Neumann architecture, early memory technologies, information theory and cybernetics. Students also asked questions about the accuracy of early calculators, computer input and output, and the definition of a computer.
The session examined how growing states, businesses and scientific institutions created demand for increasingly powerful methods of calculation and data processing, from mechanical calculators and punch-card systems to electronic computers. It explained how wartime requirements in ballistics, cryptanalysis and scientific modelling accelerated the development of electronic and stored-program computers, with memory holding both data and instructions. The class considered why the computer became a universal machine capable of replacing specialised technologies through advances in components, memory, software, programming languages and microprocessors. It also covered the transfer of computers from academic laboratories to industry, contrasting academic and industrial research, intellectual-property protection, and the types of companies that entered the early computer market. Finally, it discussed the strategic importance of computing during the Cold War, the role of semiconductors, and the continuing influence of dominant firms, standards and regulation in the computer industry.
The session examined how computing developed from a technical response to large-scale calculation and data-processing needs into an academic discipline. It challenged simple origin stories that present computer science as a direct product of abstract theory, emphasising instead the interaction between practical engineering, applied mathematics, industry, government and research institutions. The class covered stored-program computers, their architecture, early reliability and memory problems, and the role of computing centres in teaching, research and contracted work. It traced the development of programming from binary machine code and autocodes to high-level languages such as FORTRAN, COBOL and ALGOL, focusing on compilers, portability and the relationship between programming languages, logic and formal linguistics. It also discussed the emergence of theoretical computer science, operating systems, the software crisis and software engineering.
The session traced the development of operating systems from early stored-program computers through batch processing, multiprogramming, real-time computing and time-sharing. It explained how operating systems enabled the automation of tasks, protected memory between concurrent programs, and supported increasingly accessible personal computing. Major projects including OS/360, Multics and Unix were used to examine compatibility, software complexity, project management and the development of the C language. The class then surveyed the history of telecommunications and digital networks, from optical telegraphs to electronic communication, packet switching, the Advanced Research Projects Agency Network (ARPANET) and the Internet. Digital networks were discussed in relation to military air defence, industrial control, electricity distribution, economic planning, and the later commercial expansion of the Internet.
The session traced military involvement in the development of digital networks, the development of packet switching, and the expansion of networks from ARPANET to commercial internet services. It examined the rise and decline of centralised management information systems, the network effect, data privacy concerns, and the French Minitel system. The class considered the World Wide Web’s utopian ideals alongside the later dominance of major internet platforms, the material infrastructure of cables and data centres, and their environmental costs. It also compared the development of information technology industries in Russia and China, including state strategy, manufacturing and competition with Western firms. Finally, it surveyed the history of electronics from vacuum tubes and transistors to integrated circuits, Moore’s law, semiconductor planning, and hybrid quantum-classical computing.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Energy fundamentals, production, distribution, heat transfer, electricity, storage and optimisation across renewable and non-renewable systems.
BSc · Year 1 · 10 sessions
Course code: OS1-005
How do we produce energy, move it, convert it and decide how to use it? These sessions approached those questions through energy systems, global pressures and the physics of heat, waves and electrical circuits. Computing appeared both as an engineering tool and as a subject for scrutiny: modelling physical systems, monitoring infrastructure and deciding when an automated prediction needs human review. Through these physical and applied cases, students practise the typical mathematics used in computer science.
Electricity generation, storage and distribution, considered alongside climate pressures, energy poverty, geopolitical dependence and the practical constraints of different technologies.
Thermodynamics, heat transfer, waves and electrical circuits, using mathematical tools to describe how physical systems behave and how energy is converted.
Digital monitoring, numerical modelling and industrial artificial intelligence (AI), with attention to prediction errors, operating costs and the role of human judgement.
Energy was introduced as the capacity to do work or cause change, with a distinction between energy and power. The discussion connected its use to climate change, population growth, urbanisation and rising electricity demand from digital technologies. Students compared generation methods, including fossil fuels, nuclear power and renewables, considering intermittency, storage, land use, transmission losses and maintenance. Electrified transport, charging infrastructure and smart grids brought these questions into everyday systems. The session also examined consumers who produce electricity, the cybersecurity risks of connected infrastructure, nuclear safety and waste, and the current limits of fusion.
The session compared established nuclear reactors, small modular reactors, advanced designs and fusion, alongside wind and solar power. Controllability, land use, lifetime, waste and delivery constraints framed a discussion of diversified energy systems supported by storage and flexible generation. Digital monitoring, predictive maintenance, microgrids and hydrogen production extended that discussion. Attention then turned to cost and schedule overruns in major nuclear projects. Systems engineering methods—including digital twins, structured requirements, interoperable data platforms, construction planning and traceability—were examined as ways to address those difficulties, together with carefully governed use of artificial intelligence.
Comparing the 1973 oil crisis with the effects of the war in Ukraine showed how energy disruption reaches transport, food security, employment, inflation and trade. The session examined supply shortages, rising prices and dependence on imported fossil fuels, alongside historical responsibility for emissions and energy poverty. Countries’ different positions as producers, exporters, importers and consumers shaped the discussion. Renewable technologies were considered in terms of costs, limitations and the difficulty of financing transition in lower-income countries. Students also discussed greenwashing, carbon capture claims, hydrogen, fusion and practical reductions in personal energy use.
Thermodynamics introduced a way to describe systems containing very large numbers of particles. A review of differentiation covered gradients, tangents, changing functions, concavity and points of inflection. Students distinguished open, closed and isolated systems, and intensive from extensive variables. The ideal gas law, states of matter, internal energy, pressure and temperature led into the first law of thermodynamics. Heat transfer and irreversibility brought in entropy, discussed through the number of possible microscopic configurations, with a connection to information theory.
Functions of two variables, partial derivatives, extrema and gradients provided mathematical tools for describing transport. Heat transfer and material diffusion were presented as irreversible processes driven by differences in intensive quantities. The session explored conduction, convection and radiation through Fourier’s law, thermal conductivity, everyday examples and black-body radiation, then introduced diffusion through Fick’s law. Heat engines, refrigerators and heat pumps connected these ideas to devices. Comparing petrol, diesel and Stirling engines brought together different conversion processes, their energy sources and the associated fossil-fuel use and carbon emissions.
A wave was described as a disturbance that propagates without net transport of matter. Mechanical and electromagnetic waves introduced transverse and longitudinal motion, speed, delay, period, frequency, wavelength and phase. Sound provided examples of pressure waves, pure and complex signals, spectral analysis, intensity and decibel scales. The electromagnetic spectrum extended the discussion to visible light, black-body radiation and the greater energy of higher-frequency radiation. A concrete application connected this physics to environmental observation: using infrared spectral absorption in satellite measurements to identify and estimate methane emissions from oil extraction sites.
Complex numbers provided tools for representing sinusoidal electrical signals. Resistors, capacitors, inductors, diodes and transistors were reviewed through their laws, energy behaviour and uses. Students examined impedance, transfer functions, frequency response, different filter types and Bode diagrams. Electromagnetic induction connected circuit behaviour to generators, motors, induction hobs, microphones and loudspeakers. Loudspeaker design then served as an application of filtering: multi-way speakers, crossovers, bass-reflex enclosures and passive radiators brought several concepts together. The session also considered the audio chain from analogue signals to digital representation.
Fission in existing power stations was compared with fusion, which combines light hydrogen isotopes. Atomic structure, chain reactions and energy from mass differences led into the roles of deuterium, tritium and lithium. Students considered plasma, magnetic and inertial confinement, tokamaks, stellarators and the Lawson criterion. The ITER fusion project illustrated challenges involving materials, superconducting magnets, tritium breeding and remote maintenance. Potential benefits were considered alongside technological limits. Numerical modelling, inverse problems and finite-element meshes showed how plasma behaviour can be reconstructed from external measurements.
An industrial example examined automated vehicle classification at motorway tolls. Height and axle detection can misclassify vehicles; labelled camera images offered a route to training a deep-learning model that returns a class and a confidence score. Students distinguished classification from regression and, in groups, identified model inputs and outputs. They considered how fleets, weather and camera equipment change over time, and why retraining may be needed. Confusion matrices supported calculations of accuracy, error rate, precision and recall, connecting model performance to undercharging, overcharging and the proportion of transactions automated.
Continuing the classification example, students calculated errors and checked whether individual error categories could plausibly fit within the overall error rate. They compared confidence thresholds using the share of transactions automated and the costs of manual processing, undercharging and overcharging. The class selected a threshold that met an industrial quality requirement while minimising total cost, with uncertain cases passed to human operators. The session also revisited heat transfer, black-body radiation, waves, electrical quantities and filters, alongside the distinction between classification and regression.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Core networking concepts and practical labs preparing students for the Cisco Certified Network Associate (CCNA) certification.
BSc · Year 2 · 5 sessions
Course code: ITAS-002
Network concepts became concrete through small topologies in Packet Tracer. Students assigned addresses, connected switches and routers, and checked how traffic moved between networks. The sessions progressed from local connectivity to routing, shared network services and access restrictions. Configuration was paired with verification: inspecting a table or testing a failed link helped distinguish a plausible design from a working one.
Subnet calculations, virtual local area networks and switching tables connected logical network boundaries with the ports and links carrying traffic.
Static and dynamic routing led into address allocation, name resolution and other services needed by hosts to communicate beyond their subnet.
Connectivity tests, diagnostic commands and access restrictions were considered together, including how configuration choices affect resilience and permitted communication.
Networks were introduced as shared infrastructure connecting users, devices and applications. The class examined campus and wide-area design, including access, distribution and core layers, redundant links, switching and routing. Internet Protocol (IP) addresses, subnet masks and default gateways connected addressing decisions with the path a packet takes. Protocol layering explained how data is packaged and unpackaged during transmission, while reliable transport was compared with approaches suited to real-time traffic. Students built small computer, switch and router topologies in Packet Tracer, assigned addresses, tested connectivity with ping and inspected interfaces and learned hardware-address tables.
Students revised subnet calculations: usable host counts, block sizes, subnet masks and binary operations for finding network addresses. Configuration checks and ping tests helped establish whether hosts shared a subnet or needed a gateway. Internet Protocol version 6 (IPv6) introduced compressed addresses, address types, automatic configuration and coexistence with IPv4. Virtual local area networks (VLANs) then connected logical separation with access ports, tagged trunk links and routing between networks. Spanning Tree Protocol explained how redundant switches can avoid loops. A practical task asked students to build a virtual local area network (VLAN) and trunking topology with redundant switches and consider its protective settings.
The session covered multilayer (Layer 3) switches and their use for inter-VLAN routing, replacing a router-on-a-stick design with switch virtual interfaces (SVIs). Students built a Packet Tracer topology using VLANs, access ports, trunk links, EtherChannel, spanning tree configuration and VTP VLAN propagation. The class practised IPv4 subnetting, including usable host ranges, broadcast addresses, default gateways and /26 and /30 networks. Routing concepts were introduced through routing tables, directly connected and static routes, return routes, loopback interfaces, administrative distance, metrics, longest-prefix matching, floating static routes and default routes. The session also distinguished campus networks from WANs and introduced routing protocols, autonomous systems and the differing roles of internal and external routing.
The session covered configuring OSPF on routers, including network statements, wildcard masks, areas, router IDs, passive interfaces and default-route propagation. Students examined OSPF neighbour adjacencies, routing tables, link-state databases, equal-cost load balancing and troubleshooting commands for common configuration faults. A practical lab required building an OSPF topology, injecting a static default route, testing connectivity and observing rerouting after a link failure. The session then introduced network services including Dynamic Host Configuration Protocol (DHCP) and relay agents, Domain Name System (DNS), network address translation (NAT) and PAT, NTP, Syslog, SNMP and quality of service. Students also reviewed relevant verification commands and began configuring DHCP, NAT overload and NTP in a further lab setup.
A support session explained the assessed network lab, covering VLANs, trunk links, addressing and routing between networks. The brief included connectivity to an internet service provider, loop prevention and verification of blocked links. Address allocation, address translation, encrypted remote administration, port security and access control lists added service and security requirements. Students were advised to verify each configuration stage through diagnostic commands, routing tables, ping tests and captured evidence. A question-and-answer activity revisited subnetting, switching, IPv6 neighbour discovery, routing and automation. These were lab requirements and revision activities, rather than a record of every configuration having been completed.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
AWS cloud services and architecture, with preparation for AWS Certified Solutions Architect – Associate.
BSc · Year 2 · 5 sessions
Course code: SEIT-001
These sessions examined how data moves through Amazon Web Services (AWS), and how an architecture can recover when something goes wrong. Data ingestion and processing led into backups, replication and recovery strategies. Revision activities then connected these choices with wider architectural questions about security, availability and cost. The account follows the supplied sessions rather than presenting them as an exhaustive introduction to every AWS service.
Batch and streaming pipelines introduced choices for ingesting, cataloguing, transforming and querying data, including quality checks and handling sensitive information.
Backups, replication and redeployment were compared against recovery objectives, with attention to corruption, regional failures, cost and operational complexity.
Knowledge checks and assessment preparation revisited the reasons for selecting particular services, rather than treating a product name as an answer.
The session introduced data engineering on AWS, focusing on the five Vs of data: value, veracity, volume, velocity and variety. It explained data pipelines, including extract, transform and load (ETL) and extract, load and transform (ELT) approaches, structured and unstructured data, and the choice between batch and streaming processing. AWS ingestion services were covered, including AppFlow for software-as-a-service data, DataSync for file transfers, and Data Exchange for third-party data. The class examined AWS Glue for data catalogues, crawlers, ETL jobs, schema management, data quality and handling sensitive information. Streaming tools including Kinesis Data Firehose, Kinesis Data Streams, managed Apache Flink and Kafka services were compared, alongside data lakes, data warehouses, Lake Formation, Athena, Redshift and OpenSearch.
Disaster recovery planning connected acceptable data loss and recovery delay with storage, computing, databases and networks. Backups, snapshots and cross-region replication were compared, including why replication alone does not protect against corruption. The class reviewed storage migration, lifecycle management and shared file services, then considered machine recovery, automatic scaling, load balancing and regional failover. Managed database recovery and repeatable infrastructure deployment added further recovery options. A guided hybrid-storage lab covered configuring storage, moving files to Amazon Simple Storage Service (S3) and replicating data into another region, connecting architectural choices with the mechanics of protecting and moving data.
The session completed the disaster recovery module by reviewing recovery point objectives (RPOs), recovery time objectives (RTOs), and the relationship between disaster recovery and business continuity planning. It covered AWS services and approaches for resilience, including S3 replication, Storage Gateway, Amazon Machine Images, snapshots, CloudFormation infrastructure as code, Route 53 health checks and failover. Four disaster recovery patterns were compared: backup and restore, pilot light, warm standby, and multi-site active-active, with emphasis on their cost, recovery speed and suitable use cases. Students worked through knowledge-check and exam-style questions on selecting the appropriate recovery pattern and AWS service for different scenarios. The session also introduced the certification exam structure, exam guide and practice-question resources.
Certification preparation used a modular study guide and short quizzes to identify topics needing further revision. The material revisited computing, storage, networking, databases and security, alongside name resolution, logging, resilience, performance and cost. Students were shown how quiz results could guide their study rather than treating every topic as equally familiar. Additional resources included hands-on AWS practice environments, an architecture project and configurable practice tests. The session concerned ways to prepare and assess understanding; the source does not establish completion of the project or an eventual certification result.
The session reviewed commonly misunderstood AWS concepts in preparation for an assessment. It covered service-level agreements, Elastic Compute Cloud (EC2) Auto Scaling, S3 durability, encryption and access logs, virtual private cloud (VPC) networking, network address translation (NAT) gateways, VPC peering, security groups and availability zones. It also compared relational databases with DynamoDB, explained Identity and Access Management (IAM) permissions and roles, and distinguished CloudWatch, CloudTrail and AWS Config for monitoring and auditing. Further topics included messaging with SNS and SQS, CloudFormation, caching, VPC flow logs, cost-allocation tags, SSL offloading, and gateway versus interface VPC endpoints. Practice-question answers were used to reinforce how to select appropriate AWS services for performance, security, scalability and cost management.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
BSc · Year 2 · 12 sessions
Course code: ITI-001
A café application provided a recurring example for examining Amazon Web Services (AWS). Labs moved from website hosting and access permissions to application servers, databases and network connections. Later sessions considered availability, infrastructure automation and serverless designs. The progression made architectural decisions tangible: a copied machine image, a database connection or a routing rule each exposed a different question about how a system behaves.
Website storage, virtual machines, shared file systems and managed databases were explored through their roles in hosting and evolving the café application.
Permissions, network boundaries, private connections and encryption linked resource configuration to who could access an application and its data.
Load balancing, repeatable infrastructure and decoupled application services introduced ways to change, scale and operate systems with fewer manual configuration steps.
The session introduced the AWS Cloud Architecting course, its learning resources, guided labs, challenge labs and preparation for the AWS Certified Solutions Architect – Associate examination. It explained how a café business case will be developed from a static website into a secure, scalable online ordering system with databases, automation and monitoring. The class reviewed cloud architecture roles, including IT professionals, developers, DevOps practitioners and cloud architects, alongside development, test and production environments and CI/CD pipelines. Key cloud concepts included high availability, scalability, reliability, virtual machines, cloud service origins and the distinction between on-premises infrastructure and cloud services. The AWS Well-Architected Framework was presented through its six pillars: operational excellence, security, reliability, performance efficiency, cost optimisation and sustainability, including the use of assessment and recommendation tools.
The session covered AWS Identity and Access Management (IAM) security, including resource-based and identity-based policies, ARN structure, principals, policy statements, conditions and the precedence of explicit denies over allows. Examples were used to distinguish permissions on Simple Storage Service (S3) buckets from permissions on objects within buckets, and to interpret IAM and Elastic Compute Cloud (EC2) policy conditions such as IP ranges and permitted instance types. Students completed a lab exploring IAM users, groups, managed policies and inline policies, then tested the different S3 and EC2 permissions granted through group membership. The class also reviewed security best practice: create individual IAM users, assign permissions through groups, use temporary role credentials where appropriate, apply least privilege, and avoid using the root user for routine administration.
The session completed an Amazon S3 lab for hosting a static website and granting public read access through a bucket policy. It covered S3 versioning to recover from accidental overwrites or deletions, and showed how uploading an updated Hypertext Markup Language (HTML) file creates a new object version. Lifecycle rules were configured to move non-current versions to Standard-IA after 30 days and delete them after 365 days to manage storage costs. Cross-Region Replication was set up with a destination bucket and IAM role, demonstrating replication of new objects and the effect of not replicating delete markers. The class related these choices to security, cost optimisation, resilience and disaster recovery in the AWS Well-Architected Framework, then practised an exam-style question on protecting S3 files from accidental deletion.
The session continued the AWS EC2 compute module by comparing storage options, with particular focus on Amazon Elastic File System (EFS) for shared Linux file storage and Amazon FSx for Windows workloads. It explained EFS mount targets, multi-AZ availability, network file system access on port 2049, security groups, performance monitoring through CloudWatch, and the trade-offs of the One Zone storage class. Students completed a lab creating an EFS file system, configuring access, mounting it on an EC2 instance and observing throughput metrics. The class then covered EC2 user data scripts, instance metadata, and the use of base, silver and golden AMIs to balance build time, boot time and configuration consistency. It also introduced placement groups and reviewed EC2 pricing models, including on-demand, reserved, Savings Plans and Spot Instances.
The session completed a lab on duplicating a dynamic café website hosted on Amazon EC2 by creating an Amazon Machine Image (AMI), copying it to another AWS Region, and launching a new instance from it. It covered configuring instance roles, security groups, virtual private cloud (VPC) networking, public IP access and regional Secrets Manager secrets so that the replicated application could access its database. The class explained that an AMI creates a point-in-time copy, so the copied database is not synchronised with the original, and introduced Amazon Relational Database Service (RDS) as the next step for managed databases. It also reviewed EC2 best practice through the Well-Architected Framework, including security, right-sizing, managed services, AMI use, user data and pricing models. Learners completed knowledge-check questions on AMIs, storage, instance types, metadata, user data, EFS, FSx and Savings Plans.
The session reviewed relational and non-relational database choices in AWS, focusing on Amazon RDS, Aurora and DynamoDB. It covered RDS architecture, database engines, private subnet deployment, replicas, serverless capacity, RDS Proxy, backups, encryption and security controls. DynamoDB data modelling was explained through items, attributes, partition and sort keys, secondary indexes, consistency, global tables and monitoring. The class also compared purpose-built databases for analytics, documents, wide-column data, in-memory workloads, graphs, time series and immutable ledgers, and introduced AWS Database Migration Service for homogeneous and heterogeneous migrations. Students then began a lab to migrate a café application database from an EC2 instance to Amazon RDS.
The session introduced Amazon VPCs as logically isolated virtual networks within AWS Regions, covering Classless Inter-Domain Routing (CIDR) address ranges, Availability Zones, subnets and route tables. It explained how public and private subnets use Internet Gateways, network address translation (NAT) Gateways and Elastic IP addresses to control internet connectivity, with examples of suitable placement for databases, batch-processing workloads, web applications and NAT components. The class compared security groups and network ACLs, including their resource or subnet scope, allow/deny behaviour, and stateful or stateless handling of return traffic, alongside AWS Network Firewall and bastion hosts. It also covered VPC endpoints for privately accessing AWS managed services, distinguishing interface endpoints, gateway endpoints and Gateway Load Balancer endpoints. A console demonstration showed the creation of a VPC, subnets, routing, an Internet Gateway, a NAT Gateway and security groups, before students began a guided VPC configuration lab.
The session reviewed VPC networking, including security groups and network ACLs, public and private subnets, NAT gateways, bastion hosts, VPC endpoints and flow logs. It introduced Transit Gateway as a hub-and-spoke method for connecting many VPCs, compared it with one-to-one VPC peering, and explained routing requirements and non-overlapping address ranges. A practical activity created and accepted a VPC peering connection, added routes between two VPCs, connected an application server to a MySQL database, and inspected VPC Flow Logs in CloudWatch. The session also covered site-to-site VPNs, Direct Connect, Global Accelerator, redundant connections, and choosing connectivity options according to security, performance, availability and cost requirements. Knowledge-check questions were used to practise selecting suitable AWS networking solutions.
The session covered AWS security and access management, including attribute-based access control using resource tags and identity federation with IAM Identity Centre, STS and identity brokers. It explained Amazon Cognito user pools for authentication and identity pools for granting temporary AWS credentials, using a lab scenario involving controlled access to a DynamoDB table. Multi-account governance was reviewed through AWS Organisations, organisational units, service control policies, permission boundaries and Control Tower. The class also examined encryption of data at rest, comparing symmetric and asymmetric encryption, envelope encryption, server-side and client-side encryption, and AWS Key Management Service integration with S3 and EBS. Finally, it introduced security services including AWS WAF, Macie, Inspector, Detective, Security Hub and CloudTrail.
The session reviewed Elastic Load Balancing, including listeners, target groups, health checks and the use of multiple Availability Zones to remove single points of failure. It compared Application, Network and Gateway Load Balancers by their network layers, routing capabilities and security uses. The class then introduced Domain Name System (DNS) resolution and Amazon Route 53, covering domain registration, hosted zones, DNS records, caching and authoritative name servers. Route 53 routing policies were explained, including simple, weighted, latency, failover, geolocation, geoproximity, multivalue and IP-based routing, alongside health checks and failover notifications. A lab was introduced to make a café application more scalable and highly available using a load balancer, Auto Scaling and resources distributed across two Availability Zones.
The session covered infrastructure as code using AWS CloudFormation, including YAML template structure, resources, stack creation and validation. A practical lab automated the deployment of a static website in an Amazon S3 bucket, including website hosting configuration, outputs and public access settings. It then introduced Git and AWS CodeCommit for version control, and AWS CodePipeline for automatically deploying CloudFormation changes to create networking resources and an EC2-hosted café application. The class also examined CloudFormation parameters, outputs and conditions, including using conditions to distinguish production and development environments. Finally, it introduced caching with CloudFront for static edge caching and ElastiCache for in-memory database caching, including cache expiry, cache hits and misses, lazy loading, write-through caching, Redis and Memcached.
The session reviewed microservices and serverless architecture, explaining how AWS services can separate application functions so that they can be deployed, changed and scaled independently. It covered AWS Lambda, including execution limits, pricing, permissions, VPC access, layers, triggers, and synchronous, asynchronous and streaming invocation models. Container-based microservices were compared with Lambda, with Amazon ECS, AWS Fargate, EKS, task definitions, services, load balancing and container registries explained through an ECS deployment example. The class also examined Step Functions for orchestrating workflows, error handling, branching and long-running processes, and application programming interface (API) Gateway for exposing and securing Hypertext Transfer Protocol (HTTP), Representational State Transfer (REST) and WebSocket APIs. A design activity applied these services to shopping-cart, payment and delivery workflows, followed by introduction to a lab creating scheduled café order reports using EventBridge, Lambda and SNS.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Deployment, security, updating and management of Windows Server workloads across on-premises, hybrid and Azure environments.
BSc · Year 2 · 8 sessions
Course code: OSIS-001
Windows Server administration was explored across local virtual machines and Azure services. Directory structure, permissions and remote management led into networking, storage, recovery and migration. A simulated client engagement asked students to configure resources and document evidence in a runbook. The sessions combined explanation, demonstrations, lab work and revision, keeping operational questions alongside the commands and interfaces used to administer the environment.
Directory services, policy inheritance and delegated access connected the organisation of users and machines with controlled ways of administering them.
Local virtualisation and Azure networking, storage and management services introduced the dependencies involved in running an environment across different locations.
Backup, migration, monitoring and troubleshooting were examined alongside runbook evidence and revision activities, distinguishing configuration steps from proof of their effects.
The session introduced Windows Server administration in hybrid on-premises and Azure environments, with a focus on Active Directory Domain Services (AD DS). It explained AD DS logical and physical components, including forests, domains, organisational units, users, groups, computer accounts, service accounts, domain controllers and the Global Catalogue. Students learnt about deploying and maintaining domain controllers, FSMO roles, functional levels, replication, backup and recovery, and recommended practices for deploying domain controllers in Azure. The class also covered Group Policy Objects, their scope, processing order, inheritance, default policies, storage and administrative templates. Practical activities demonstrated enabling Hyper-V, creating a local Windows Server virtual machine, installing AD DS through PowerShell and Server Manager, and preparing an Azure virtual machine while considering resource costs and security requirements.
The session covered secure Windows Server administration, including security principals, least privilege, delegated permissions, restricted groups, User Account Control, privileged access workstations and jump servers. It introduced administration tools such as Windows Admin Center, Server Manager, Remote Server Administration Tools and PowerShell, including remoting, Secure Shell (SSH) support and the second-hop authentication issue. Post-installation configuration was reviewed, covering server naming, static IP addressing, Domain Name System (DNS), updates, roles, monitoring, Server Core configuration and unattended answer files. Students then began a practical activity using Hyper-V to create Windows Server virtual machines, configure networking, and install and promote Active Directory domain controllers.
The session introduced a six-day simulated client engagement focused on building and managing a hybrid Windows Server environment. It reviewed Active Directory Domain Services, including domains, forests, organisational units, domain controllers, replication, DNS and Group Policy processing. Students were instructed to create a Hyper-V virtual switch and Windows Server domain controller, configure organisational units, users, groups, a baseline Group Policy Object and Windows Admin Centre, while documenting evidence in a runbook. The class also covered least-privilege administration, Just Enough Administration, Azure Arc, remote server management and preparation for hybrid identity. Finally, it taught Windows containers and Kubernetes, including container isolation, Docker commands, networking, images, orchestration and Azure Arc-enabled Kubernetes.
The session covered Azure hybrid networking, including VNets, subnets, network interfaces, address planning, network security groups, Azure Firewall, VPN gateways, ExpressRoute and Virtual WAN. It explained Azure DNS, private DNS zones, hybrid DNS forwarding, split-horizon DNS and a structured approach to diagnosing name-resolution problems. Learners also reviewed Azure VM IP addressing, routing, static and dynamic private addresses, public IP exposure, Bastion and IPv6 dual-stack design. The class then covered Windows Server storage technologies, including file systems, File Server Resource Manager, SMB security, Volume Shadow Copy Service, Storage Spaces, Storage Spaces Direct and data deduplication. A practical activity was introduced to configure PowerShell remoting, onboard a server to Azure, create Azure networking resources, deploy a VM with Bastion, and document evidence in a runbook.
The session covered Windows Server security, including least-privilege user rights, Group Policy security settings, fine-grained password policies, Protected Users, authentication policies and Credential Guard. It examined server hardening through OS Config, Windows LAPS, privileged access workstations, domain controller protection, security baselines and SMB encryption. Update management was discussed using WSUS and Azure Update Manager, including testing, deployment rings, maintenance schedules, reporting and hybrid management through Azure Arc. Azure network and virtual machine security covered network security groups, application security groups, Azure Firewall, host firewalls, Defender for Cloud and Microsoft Sentinel. Learners then worked on or completed labs involving virtual machine connectivity, Windows Admin Centre, file shares, quotas, data deduplication and Azure File Sync.
The session covered disaster recovery for Windows Server hybrid environments, distinguishing Hyper-V Replica, Azure Site Recovery and Azure Backup according to their different purposes. It explained replication prerequisites, authentication, replication intervals, extended replication, failover types, and the difference between recovery time objectives and recovery point objectives. Azure Site Recovery was presented as a service for orchestrated, dependency-aware disaster recovery, including isolated test failovers, failback and re-protection. Azure Backup covered Recovery Services vaults, the Microsoft Azure Recovery Services agent, backup policies, snapshots, file-level recovery, VM restoration options and backup-cost considerations. Students were then directed to use lab time or complete practice tests to identify areas needing revision.
The session covered planning and carrying out Windows Server migrations, including lift-and-shift strategies, Azure Migrate assessments, replication, test migrations and cutover. It compared server upgrade approaches and explained Storage Migration Service for file-server inventory, data transfer and identity cutover. It also covered containerising supported ASP.NET applications for Azure App Service, including version requirements and the distinction between updating and upgrading. Monitoring and troubleshooting topics included performance and resource monitoring, event logs, auditing, Hyper-V resource metering, capacity forecasting and centralised event collection. Active Directory topics included object and database recovery, SYSVOL recovery, replication troubleshooting, FSMO roles, and hybrid identity synchronisation with Microsoft Entra Connect.
The session reviewed key AZ-800 and AZ-801 Windows Server hybrid administration topics through recap diagrams and exam-style questions. It covered Active Directory Domain Services, domain controllers, FSMO roles, Group Policy processing, replication, trusts, Microsoft Entra integration and managed domain services. It also reviewed secure administration, remote management tools, PowerShell Just Enough Administration, Azure Arc, Hyper-V, containers, Kubernetes, VM deployment and configuration automation. Further topics included Dynamic Host Configuration Protocol (DHCP), DNS, IP address management, VPN and hybrid networking, file and storage services, data replication, Azure Files, security hardening and update management. Learners were encouraged to use key terms, command names, process orders and elimination techniques to answer certification questions.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Administration and automation of Linux and Windows systems, including filesystems, network services, security and maintenance.
BSc · Year 2 · 8 sessions
Course code: OSIS-002
The course moved from inspecting users and file permissions to automating administrative tasks in Bash and PowerShell. Students worked with paths, parameters, conditions and loops before combining these tools with account and access management. Exercises asked scripts to check their inputs, expose useful information and report errors. A later access-control brief brought these ideas together around the needs of different roles in an organisation.
Linux ownership and permission models led into Windows users, groups and file access, with inspection commands grounding the discussion in system state.
Parameters, functions, iteration and error handling turned repeated tasks into scripts that could work with different inputs and explain failures.
An organisational scenario connected users and groups to permitted resources, requiring validation, configuration, testing and evidence rather than account creation alone.
The session introduced Linux user management, including root, application and standard user accounts, and the use of UID and GID values to identify them. Students used commands such as id, sudo -i, cat /etc/passwd, top and ls -l to inspect accounts, processes and file permissions. The class explained that system and application accounts support controlled access to resources, while interactive accounts use a shell such as /bin/bash. It covered file ownership and the owner, group and other permission categories, with read, write and execute permissions illustrated through /etc/passwd and /etc/shadow. Password storage was discussed in terms of hashes in the shadow file, and students practised changing their own password with passwd before comparing the passwd command with the /etc/passwd file.
Linux permissions were reviewed in symbolic and octal notation, connecting read, write and execute settings with chmod commands. Extended permission bits and the sticky bit introduced further access behaviour. The class distinguished permissions on resources from privileges or capabilities, using system administration examples. Regular expressions and shell wildcard patterns were introduced as different pattern-matching tools. Exercises examined filename selection and patterns such as numerical endings or address formats. Students were asked to explain chmod commands in plain language and construct symbolic and octal commands that gave users only the access required.
The session covered Bash arrays, including defining arrays, accessing indexed elements, retrieving all elements and counting them. It explained how to pass command-line parameters to scripts using positional parameters such as $1 and $2, so that scripts can work with different paths and values without being edited. Conditional logic in Bash was introduced through if, elif and case statements, logical operators, pattern matching and the need for precise spacing and variable syntax. The class also used the test command and conditional expressions to check file types, file existence and permissions, including read, write, execute, SUID, SGID and sticky-bit permissions. Students began an exercise to create a directory and files, set SUID and SGID permissions, verify them and remove the created directory.
Loops were used to process files and directories before the class introduced while conditions, user input, break and continue. Shell functions separated tasks and accepted arguments, with attention to the difference between returning from a function and exiting the script. Directory traversal connected file-type checks and absolute paths with recursion through nested folders. The Linux manual and command help supported independent investigation, while stat exposed attributes such as ownership, size, permissions and access time. An exercise asked students to list a directory’s files and report selected attributes for each, bringing iteration and inspection together.
The session reviewed shell automation through an earlier exercise that gathered file and directory attributes, then introduced basic Linux networking concepts. It covered IPv4 addresses, Classless Inter-Domain Routing (CIDR) notation and netmasks, network and host portions of addresses, routing tables, gateways and interfaces, alongside commands such as systemctl, ip, route, ping, traceroute, whois and netcat. The class then moved to Windows automation with PowerShell, including PowerShell ISE, cmdlets using verb–noun naming, PowerShell script files with the .ps1 extension, and execution policies. It also introduced PowerShell’s object-based approach, using Get-Help, Get-Command, Get-Member and Get-Item to inspect commands, files, properties and methods. Students were asked to identify the PowerShell command for listing network adapters by searching available commands.
The session covered PowerShell file management, including copying files, reading file contents, retrieving line counts and specific lines, and writing or replacing text with Add-Content and Set-Content. Students practised extending a script to check whether files exist, retrieve file properties and write results to a text file. The class introduced string comparison operators, Windows environment variables, automatic variables, conditional Switch statements, loops and functions, including passing script arguments through $args. It also covered accessing and checking Windows services with Get-Service and foreach loops. Error handling was taught using try/catch, ErrorAction and ErrorActionPreference, with exercises to produce clear, specific error messages.
The session reviewed PowerShell automation for retrieving file and folder permissions with Get-Acl, including recursive directory structures, indentation and saving results to a text file. It then introduced local Windows user accounts and groups, using Get-LocalUser to view accounts and inspect properties such as enabled status and SID. Students learnt to create a local user with New-LocalUser, using Read-Host and secure strings to avoid hard-coding passwords in scripts. They practised creating a user in a virtual machine, adding it to the Users group with Add-LocalGroupMember, restarting if needed, and testing whether they could log in with the new account.
A PowerShell brief brought together users, groups and file permissions through a hospital scenario. Students were asked to model role-based access control for doctors, nurses, administrators and IT staff, granting access according to each role’s needs. Scripts were to validate structured input, create accounts and resources, assign group membership, apply permissions and remove created items when needed. The brief also required restrictions on administrative tools, tests of those restrictions and screenshot evidence. The expected group submission comprised scripts and a report; this session records the assignment and its requirements, not a completed hospital deployment.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Object-oriented development in Java and C++, covering JVM concepts, multithreading, data access, pointers, memory management and hardware fundamentals.
BSc · Year 2 · 9 sessions
Course code: SDE-001
Small Java exercises developed into examples of web applications with distinct responsibilities. Objects and methods came first, followed by request handling, presentation, persistence and data services. Students practised building and refactoring components, using local development tools to observe their behaviour. A library-management brief then brought these layers together, asking how a web interface and an application programming interface could share the same underlying data.
Classes, references, encapsulation and inheritance were explored through short exercises, including choosing when specialised behaviour should replace an inherited method.
Servlets and server-rendered pages introduced request handling, sessions and the separation of validation logic from what an interface displays.
Object-relational mapping, data-access components and web service endpoints connected application objects to stored records and different kinds of client.
The session introduced Java as a compiled, portable, object-oriented language that runs through the Java Virtual Machine, with comparisons to C++ and an explanation of automatic memory management through the garbage collector. Students installed or checked the Java Development Kit, verified the Java and Java compiler commands, then created, compiled and ran a basic Hello World program from the terminal. The class covered the structure of a Java program, including classes, the main method, console output, semicolons and code blocks. It then introduced typed variables, basic arithmetic and modulo operations, user input using Scanner, conditional structures with if/else and switch, and while loops. Students completed short programming exercises involving personal information variables and calculations on two decimal inputs.
The session reviewed core Java concepts, including variables, methods, arrays, strings, object references and the difference between passing primitive values and object references to methods. Through live coding, students observed that modifying an object inside a method changes the original object, whereas modifying a primitive parameter affects only a copy. The class then introduced classes, attributes, methods, object instantiation and arrays of objects, using student records as an example. Students completed and reviewed an exercise creating a Colour class with red, green and blue (RGB) attributes, collecting values through user input and displaying them with loops. The session also introduced object-oriented programming, encapsulation, private and public access, and getters and setters as ways to validate and control changes to object state.
The session reviewed Java object-oriented programming, including classes, encapsulation, constructors, inheritance and polymorphism through animal-based examples. Students completed and corrected an exercise in which instrument subclasses overrode a shared play method, while also considering when inherited default behaviour should be retained or overridden. The class introduced Jakarta EE as a platform for enterprise full-stack web applications, comparing it with standard Java and Spring Boot, and discussing scalability, structured architecture, Representational State Transfer (REST) APIs, databases and authentication. Students installed and configured IntelliJ IDEA, Postman and a local TomEE server, then created and ran a Jakarta EE web application project. The session concluded with an introduction to servlets as Java classes that handle Hypertext Transfer Protocol (HTTP) requests and responses.
The session reviewed Jakarta EE web development using Java servlets, including servlet classes, URL mappings and handling HTTP GET, POST, PUT and DELETE requests. It covered retrieving request parameters, testing endpoints with Postman, servlet lifecycle methods such as init and destroy, response formats, redirects versus forwards, and user session management. Students completed and corrected a practical exercise building a simple login system with an Hypertext Markup Language (HTML) form, credential checks, session creation, protected dashboard access, error handling and logout through session invalidation. The correction also explained comparing Java strings with equals, parsing values such as booleans, and retrieving typed session attributes.
The session reviewed JavaServer Pages (JSP) as the presentation layer for Java web applications, emphasising the separation of user-interface code from servlet-based logic. It covered JSP syntax including scriptlets, expressions, declarations, implicit objects, standard actions, and Expression Language, particularly its readable access to parameters and scoped attributes with null-safe behaviour. Students refactored a form-validation exercise so that validation and message construction took place in the servlet, while the JSP displayed only a prepared message and style. The Model–View–Controller pattern was then introduced, with Java classes as models, JSP pages as views, and servlets as controllers; students began organising these components into separate model, view and controller packages.
The class revisited form handling, request parameters, validation and forwarding to success or error pages. The Model–View–Controller pattern separated Java models, servlet controllers and page views, with restricted view locations preventing direct access. Java Persistence application programming interface (API) (JPA) then introduced object-relational mapping: connecting Java objects with stored database records. Entities, entity managers, configuration and Hibernate explained the persistence layer. A practical setup activity configured Docker and MySQL, connected the database through the development environment, tested table creation with Structured Query Language (SQL) and added the Maven dependencies needed by the application.
The session reviewed Java Persistence API (JPA) as an object-relational mapping approach, using Hibernate to connect Java objects to a MySQL database. It covered turning a Java class into an entity through annotations, including table mapping, primary keys, auto-incremented identifiers and column settings. Students practised using the EntityManager for create, read, update and delete (CRUD) operations: persist, find, custom queries for retrieving all records, merge and safe removal after checking that a record exists. The class then implemented a data-access object (DAO) layer through an interface and implementation class, and integrated it into an Model–View–Controller (MVC) application using a servlet to retrieve student data and forward it to a JSP page for display.
The session introduced REST APIs as a way of separating back-end data services from front-end presentation, allowing different clients such as web and mobile applications to consume the same data. It covered REST principles including client-server separation, stateless requests, uniform resource paths, resources and collections, and the use of HTTP methods for CRUD operations. The class also reviewed common HTTP response status codes and explained serialisation of Java objects into JavaScript Object Notation (JSON) or XML. Students configured JAX-RS using Jersey and Maven dependencies, created an application base path, and built and tested simple GET endpoints returning plain text and JSON.
A support session introduced a library-management project combining a web interface with a service interface. Books and borrowings were to become linked persistence entities, supported by database tables, queries, transactions and data-access objects. The brief required creation, retrieval, updates and deletion for books and loans. The web interface was to use servlet controllers, server-side validation and page templates; service endpoints were to return structured data and appropriate response codes. Students were advised to build incrementally and verify behaviour through test scenarios. These were the project’s design and implementation requirements, rather than evidence that the complete application had been delivered.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
BSc · Year 2 · 5 sessions
Course code: SDE-002
C++ fundamentals were introduced through short programs that could be compiled, run and examined. Variables and control flow led into functions, references, pointers and objects. Later exercises used standard collections and explicit memory allocation, before a library-management brief brought several concepts together. The emphasis in the supplied sessions is on understanding how a program represents information and how its operations change that information.
Functions, references, pointers and allocation introduced different ways to access and change data, with small exercises making their effects visible.
Encapsulation, constructors and virtual methods connected class structure with the behaviour of individual objects and more specialised derived classes.
Maps, sets and vectors supported concrete data-handling exercises, while file streams and a project brief introduced saving information beyond a program run.
The session introduced C++ as a compiled, performance-oriented language derived from C, with uses in embedded systems, robotics, games, critical software and finance. Students set up or accessed C++ compilation tools, then created and ran basic “Hello World” programs. The class covered program structure, libraries, the main function, console input and output, variables and common data types, arithmetic operators and user input. Students completed short exercises using variables, calculations and displayed results, before learning conditional statements with if, else if and else, switch statements, and while, do-while and for loops.
The session reviewed conditional statements, functions, and the difference between passing arguments by value and by reference, including exercises to calculate an average and swap two variables. It also revisited arrays, indexing from zero, and using for loops to input and display array contents. Character strings were introduced using the modern string type, contrasted with older C-style character arrays and their null terminator. Pointers were explained as variables that store memory addresses, with practice in reading and modifying pointed-to values and passing pointers to functions. Structures were then introduced to group related attributes, and arrays of structures were used in an exercise to enter and display red, green and blue (RGB) colour values.
The session reviewed core C++ object-oriented programming, including classes, attributes, methods, object instantiation, encapsulation, constructors, copy constructors and destructors. Students completed and corrected an exercise creating a Car class with private attributes, getters and setters, several constructors, a destructor, a display method, and a collection of objects processed with an array and a for loop. The lesson then introduced inheritance through parent and child classes, showing how specialised classes inherit attributes and methods while adding their own behaviour. It also covered protected access for members needed by derived classes, and polymorphism using virtual methods and method overriding to give inherited methods different behaviours.
The session covered automatic and dynamic memory allocation in C++, including pointers, the use of new and delete, and dynamically allocated arrays. It introduced function templates, allowing the same function to work with different data types. The Standard Template Library was explored through vectors, maps and sets, including adding, removing, finding and counting elements. Practical exercises involved creating a telephone directory with a map, checking whether contacts exist, and performing union, intersection and difference operations on sets. File input and output streams were also briefly introduced.
A support session explained a small library-management project applying object-oriented programming. Students were asked to create a Book class with borrowing, returning, display and storage behaviour, then specialise it through an Ebook subclass. A Library class would use vectors to manage physical and digital books, with functions for adding, searching and saving items. The brief required an interactive console menu and persistence to a text file. It clarified that downloading an ebook was a console simulation, not a real transfer, and encouraged Git-based version control. The session records project guidance rather than completed implementations.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Object-oriented programming, UML-based software architecture and the foundations of C# development.
BSc · Year 2 · 5 sessions
Course code: SEIT-704
The sessions approached software engineering through both design choices and the behaviour of running code. C# and .NET examples connected object modelling with types, parameter passing, collections and memory. A password-generator project introduced further concerns around randomness, authentication and persistence. The account follows the explanations and demonstrations supplied, including a support session, without treating the project brief as evidence of a finished application.
Software lifecycle questions, compilation and object modelling introduced the relationship between a design, its implementation and the environment executing it.
Debugging, parameter passing and collection choices connected language features with memory behaviour, complexity and the cost of changing stored values.
A password-generator example linked secure randomness with web services, stored data and the risks of keeping credentials inside source code.
Software engineering was introduced through design, implementation, testing, deployment, maintenance and evolution. The class distinguished algorithms and data structures from the act of writing code, and discussed architectural choices for which no single solution is correct. Compilation stages connected syntax checks and code representation with machine instructions and platform dependencies. Java’s bytecode, virtual machine and just-in-time compilation illustrated portability and performance questions. The .NET ecosystem was then introduced as a multi-language environment, including C#, Visual Basic .NET, F# and PowerShell. Plans to use Visual Studio connected these ideas with the development environment for subsequent work.
Visual Studio Live Share introduced collaborative access to a project, including read-only and editable participation. Constructors, getters and setters were explored through objects whose data becomes available at different stages. Method and constructor overloading showed how one name can support different parameter sets. A geometric path-finding exercise used points, lines, segments and a polyline to connect object modelling with Euclidean distance. Discussion compared local and global optimisation, computational complexity, parallel processing and heuristics. The class also considered .NET development conventions, including namespaces, top-level statements, code documentation and inherited methods for representing objects as text.
The session reviewed object-oriented and functional programming paradigms, and compared explicit, implicit, strong and weak typing in several languages. It explained C# type inference with var, the object nature of basic types in C#, and contrasts with C++, Java and Python. The class explored parameter passing by value and by reference through a swap function, using debugging tools to observe local copies, references and call stacks. It then related parameter passing to stack memory, pointers, dynamic memory allocation, the heap, input/output data of unknown size, and automatic versus manual memory management.
The session compared arrays and linked lists as fundamental collection structures, explaining fixed versus dynamic size, contiguous storage, and the implications for other collections such as dictionaries, tuples, stacks and sets in .NET. It examined algorithmic complexity, including worst-case and amortised time, using stack growth and internal array resizing as examples. Generic types and immutable collections were introduced, alongside the memory and performance trade-offs of immutable values such as strings. The class also covered cryptographically secure random-number generation for password creation, distinguishing it from ordinary pseudo-random generators and considering entropy sources. A password-generator project was presented, involving parallel processing, a protected .NET web service, authentication, logging and database access.
A support session introduced persistence through Entity Framework, which maps .NET objects to relational database tables. Database contexts, drivers and connection configuration led into a SQLite example demonstrating creation, retrieval, updates and deletion through Language Integrated Query (LINQ). Package installation with NuGet was discussed alongside the risks of putting credentials or encryption keys in source code. External configuration, controlled network access and certificates provided alternative approaches to consider. The session also attempted a simple ASP.NET front end for the password-generator project; the record supports describing the demonstration attempt, not a completed web application.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Relational databases, advanced SQL, stored procedures, triggers, dynamic SQL and practical work with Microsoft SQL Server.
BSc · Year 2 · 4 sessions
Course code: DM-001
The sessions connected relational structure with the questions people ask of business data. Students restored databases, inspected tables and wrote Structured Query Language (SQL) queries before examining joins, missing records and normalisation. Small wording differences mattered: finding a matching product, an order without an invoice or a customer who bought every product required different reasoning about relationships and the records a query would return.
Keys, schemas, row counts and collation provided starting points for understanding a database before drawing conclusions from its contents.
Self-joins, filters and missing-record queries connected business questions with explicit comparisons between rows and relationships between tables.
Normal forms and functional dependencies exposed possible inconsistency, while aggregation and division queries tested more demanding conditions across related records.
The session introduced relational databases, explaining how tabular data is organised into rows and columns and how tables are linked through primary and foreign keys. It contrasted relational and non-relational data models, using document and key-value structures to show why highly variable data may create sparse tables. The class explained client-server database architecture, including database servers, clients, web interfaces, back-end code, SQL queries, connection details and access permissions. It also compared proprietary and open-source database systems, and outlined the course case-study approach and SQL-based assessment.
The session covered restoring a SQL Server database from a backup file, including verifying the backup and using the database interface to inspect tables. It reviewed relational tables, primary and foreign keys, schemas, and the use of schemas for functional organisation and access permissions. Students wrote basic SQL queries using SELECT, FROM, USE and COUNT, and discussed why row counts should be checked before using SELECT * on an unfamiliar or very large table. The class also examined database collation, including case and accent sensitivity, and explored customer data to identify data-quality inconsistencies and infer how customer and billing identifiers were structured.
Self-joins compared product prices, including a query for non-USB products priced at least as highly as a USB product. Text filters, wildcard placement and case conversion affected which rows matched; DISTINCT addressed repeated results from multiple comparisons. An entity–relationship diagram then connected customers, orders and invoices through their keys. The class explored orders without invoices using an outer join with missing-value filtering and alternative subqueries. These examples led into invoice structure: identifiers, dates, line items, quantities, prices and totals. The queries were examined in their data context, without asserting that every alternative behaves identically for all missing values.
The session reviewed database normalisation, covering first, second, third and Boyce-Codd normal forms, functional dependencies, atomic values, composite keys and the risks of duplicated or dependent non-key data. Examples from a sample database were used to identify non-atomic JavaScript Object Notation (JSON)-style fields and third-normal-form breaches that could create inconsistent customer and invoice information. The class then restored and explored a second SQL Server database, checked table keys and case-sensitive collation, and used the graphical interface to add and edit a city column. Finally, it practised GROUP BY, COUNT and HAVING, then developed two approaches for finding customers who had bought every product, including a division query using nested NOT EXISTS conditions.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
A course that covers the fundamentals of relational databases, advanced SQL queries, stored procedures, triggers, dynamic SQL and their applications with Microsoft SQL Server.
BSc · Year 2 · 4 sessions
Course code: SDE-003
These labs used enterprise sales data to connect Structured Query Language (SQL) with practical analysis. Students inspected tables, counted rows and traced keys before combining invoice and product information. The recurring question was the grain of the data: what does one row represent, and does a join preserve that meaning? Financial calculations and business indicators were built alongside checks intended to expose misleading totals.
Environment checks, keys, row counts and duplicate detection established what was available and how the tables represented business activity.
Invoice and invoice-line relationships showed why repeated identifiers can be expected and why removing duplicates is not always a valid repair.
Revenue measures, returns and financial fact tables linked numerical results with business rules, precision and checks on the reliability of joins.
The session introduced the SQL lab workflow using SQL Server Management Studio and the Wide World Importers database, including restoring the specified database version and checking that the environment was working. It explained how SQL data wrangling supports business intelligence by preparing enterprise data before analysis, reporting and visualisation. Students reviewed data profiling, including inspecting tables and columns, counting rows, identifying primary and foreign keys, and checking for duplicate records. The class also covered table grain and how joins can change the level of detail and create incorrect totals, followed by exercises on profiling tables and writing brief comments to explain each query’s purpose and findings.
The session introduced a simplified teaching schema built from invoice, invoice-line and stock data to make the database easier to query. Students checked that their SQL environment and database connection were working, then used a cheat sheet and guided examples to practise SELECT, TOP and ORDER BY queries. They applied filters to quantities and customer names, linking these operations to possible business questions. The class also began joining tables to create an invoice-line-level dataset, with emphasis on identifying the correct grain and checking row counts before and after joins to detect duplication or incorrect joins. Students were asked to annotate and save their SQL files clearly for later reuse in a mini-project.
The class reviewed row grain, keys and relationships before revisiting joins, filtering, grouping and row-count checks. Repeated invoice identifiers were expected when each row represented a line item; removing them indiscriminately would lose information. Database inspection then investigated returns and their effect on revenue measures. Returns were not stored as negative invoice lines in the inspected data. A proposed returns table introduced constraints on quantities, invoice-line references and reasons. Students were asked to consider the necessary fields and business rules, then work through a SQL template based on the demonstration.
The session reviewed how to check that an SQL environment and source data are working correctly before analysis. It covered views, aliases, data granularity, joins, common table expressions and casting numeric values to decimal formats for financial calculations. Students practised building an invoice-line fact dataset, calculating net, tax and gross amounts, and carrying out sanity checks to ensure joins and calculations were reliable. The class then used GROUP BY, HAVING and WHERE to create business KPIs, including top customers and invoices by gross sales in the dataset. It also introduced the reuse and adaptation of reports through stored procedures and adjustable parameters.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Arithmetic foundations and modern cryptography, including hash functions, RSA principles, security and practical examples.
BSc · Year 2 · 4 sessions
Course code: SDE-004
Cryptography provided a practical reason to examine integers, primes and modular arithmetic. Historical ciphers introduced the problem of protecting information, while Python exercises connected mathematical rules with executable steps. The sessions progressed through divisibility, primality and congruences to public-key and symmetric encryption. Along the way, students considered both what an algorithm computes and why its execution terminates or becomes impractical at larger scales.
Confidentiality, integrity and authentication framed comparisons between historical ciphers, public-key approaches and symmetric encryption, including their different roles.
Divisibility, prime numbers and congruences supplied mathematical tools for analysing algorithms, solving modular equations and understanding cryptographic constructions.
Python examples connected sieves, primality tests and small encryption operations with termination, computational cost and the limits of simple methods.
The class introduced the main aims of cryptography: confidentiality, integrity and authentication, and compared steganography with cryptography for protecting information. It examined substitution and transposition ciphers, frequency analysis, historical mechanical encryption, and the distinction between symmetric and asymmetric cryptography. Public and private keys, certificates, man-in-the-middle attacks, hybrid encryption and digital authentication were explained, along with the potential impact of quantum computing. Students were then introduced to Python using Anaconda and Spyder, covering variables, functions, indentation, conditions, loops, numerical types, tuples and fraction-manipulation exercises. The session began practical work on the Caesar cipher, using character codes and modular arithmetic to shift letters.
The class reviewed natural and integer numbers, divisibility, and the use of strictly decreasing non-negative integer quantities to prove that loops and recursive functions terminate. Examples in Python illustrated repeated integer division and recursive digit summation, with discussion of loop and recursion variants. It introduced prime numbers, prime factorisation, testing primality up to the square root, and why naïve primality testing is impractical for cryptographic-sized numbers. The Sieve of Eratosthenes was explained and implemented in Python using Boolean lists and list comprehensions. The session also covered proofs concerning infinitely many primes and arbitrarily long sequences of composite numbers, followed by calculating greatest common divisors and least common multiples from prime factorisations.
The session continued the study of modular arithmetic, reviewing congruence and its compatibility with addition, multiplication and powers. Exercises used simplified powers to calculate remainders and prove divisibility, including showing that a sum of powers is divisible by 13. Divisibility tests for 2, 3, 5, 9 and 11 were derived from the decimal expansion of a number and the residues of 10 modulo each divisor. Modular equations were converted into linear Diophantine equations, with solvability determined using greatest common divisors and solutions expressed as congruence classes. The class also introduced the residue rings Z/nZ through addition and multiplication tables, additive opposites and multiplicative inverses.
The class reviewed the Miller–Rabin probabilistic primality test, including how repeated tests reduce the probability of error. Large probable primes were used to construct Rivest–Shamir–Adleman (RSA) keys, encode messages numerically and perform modular encryption and decryption. Discussion linked security with the difficulty of factorising large products and considered quantum computing as a potential threat. Symmetric cryptography introduced a comparison between protecting a key and encrypting message data. Shannon’s confusion and diffusion principles then connected with exclusive-or operations and substitution–permutation networks, explored through small Python implementations rather than production cryptographic systems.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Professional English for communication, sector vocabulary and effective interaction in English-speaking work environments.
BSc · Year 2 · 12 sessions
Course code: OS2-001
English practice was organised around conversations students might need to have about technology, work and their own experience. Grammar and vocabulary were used in small talk, article discussions, presentations and career pitches. Activities also asked students to evaluate sources and explain competing viewpoints. Feedback on clarity, pronunciation and specificity connected language practice with the task of making an idea understandable to someone else.
Professional small talk and role-play gave a context for tense choices, open questions, active listening and ways to sustain or close a conversation.
Articles, creative tools and presentations supported discussion of technological uses and limits, asking students to explain evidence and defend a position.
Career pitches, job advertisements and management styles connected vocabulary with concrete choices about employers, collaboration, personal strengths and credible supporting sources.
The class introduced the aims of Practical and Business English, with a focus on speaking, listening, reading, writing, professional communication and confidence in international workplaces. Students discussed their previous learning and identified personal goals, including technical vocabulary, professional writing, presentations, debates and workplace small talk. An AI conversation tool was demonstrated as a possible way to practise spoken English independently. Students completed a speaking activity in which they either explained technical computing concepts in layman’s terms or argued for a position on technology-related topics, receiving feedback on clarity, pronunciation and grammar. The session also began a discussion of generational differences and how they may affect attitudes to work and technology.
The class explored small talk and business networking, focusing on ways to begin, maintain and end conversations at professional events. Students discussed how asking context-specific questions, showing genuine interest, pausing, paraphrasing and using phrases such as ‘tell me more’ can make spontaneous conversations easier. They watched and analysed a business communication video, then began an individual written response activity about its advice, including the ‘what, so what, now what’ structure and the ‘white flag’ method for ending a conversation. Students also delivered and discussed article presentations on health technology, fitness-app communities and programming-language design, with feedback on clear, concise slide design and vocabulary explanation.
The session practised the present perfect continuous for actions that began in the past and are still continuing, using forms such as ‘I have been studying’ and ‘What have you been doing lately?’. Students compared this tense with the simple past and practised giving personal examples. The class explored small talk in social and business settings, including role-plays for meeting classmates, attending parties and speaking at technology conferences. It covered active listening, open questions, paraphrasing, validation, concise responses and building rapport with clients, colleagues and business contacts. Students also identified overly personal, dismissive or potentially offensive topics to avoid in small talk.
The class practised the present perfect and present perfect continuous to ask about duration, comparing forms such as ‘How long have you worked?’ and ‘How long have you been working?’. Students translated and completed example questions about work, study, living, waiting, sport and software use, then completed a grammar and vocabulary quiz. Vocabulary included the meaning and use of ‘bloated’. The class discussed articles about AI-generated art, considering its value compared with human-made art, copyright, ownership, ethics, environmental impact and the adoption of new technology in different cultures. Students then worked in groups to create slides responding to discussion questions using ideas from the articles and their own opinions.
The class explored how generative AI tools can be used to create marketing materials for a small business. Students used Sora to produce flyers or videos advertising an English activity for children, then evaluated prompts, image size, language choice, target audiences and the professional quality of the results. The group discussed benefits such as speed, accessibility and reduced marketing costs, alongside limitations including repetitive designs, errors, glitches, misleading imagery and possible effects on marketing jobs. Business vocabulary and concepts included advertisements, word of mouth, target customers, expenses, net income, entrepreneurship, competitive advantage, hard skills and soft skills. Students also prepared arguments for a later debate on whether AI-generated art can be considered art alongside human creativity.
The class practised making recommendations and discussing French-language songs and films, with attention to explaining meanings and translating song lyrics. It reviewed the grammar pattern ‘interested in’ followed by an -ing form, as well as the difference between ‘will’ and ‘be going to’ for predictions and definite plans. Students wrote and corrected example sentences using conference-related vocabulary, including keynote, networking, panel discussion, exhibitor and Q&A session. They then completed and presented research on suitable data science conferences, discussing themes, speakers, costs, locations, registration, networking opportunities and relevance to professional goals. The session also developed conversational questioning skills for discussing conference recommendations.
The class developed professional elevator pitches for internship and apprenticeship applications. Students reflected on their skills, qualifications, interests and career goals, and discussed how data science can be applied in sectors such as sports technology, healthcare and IT support. The session covered the structure of a pitch: introducing oneself, presenting relevant strengths and technical evidence, stating a target role, and using an appropriate call to action. Students drafted and delivered their pitches, then received feedback on concision, strong vocabulary, sentence variety, specificity, certifications and adapting applications to employers.
The session contrasted hard, technical skills with soft skills such as communication, teamwork, reliability, empathy, conflict resolution and staying calm in difficult situations. Students discussed how customer service affects client satisfaction and practised ways of addressing poor service or unhelpful behaviour respectfully. Cultural differences in communication, including language expectations and attitudes towards smiling, were considered in relation to international workplaces. Students delivered and discussed presentations on applications of artificial intelligence and data science in football, medical imaging, supply-chain optimisation and drug discovery, including benefits, limitations, bias, privacy and human responsibility.
The session began with a quiz on previously studied business idioms. The class then examined ten management styles, including autocratic, democratic, laissez-faire, bureaucratic, servant, coaching, charismatic, transactional, transformational and situational leadership. Learners discussed the advantages and disadvantages of each style, considering issues such as decision-making, employee autonomy, feedback, motivation, competition, flexibility and team relationships. They identified management styles from written descriptions and practised related vocabulary such as charisma, incentives, feedback and relaying information. Students were assigned to produce at least two pros and two cons for each management style, using a specified business article and other credible sources if needed.
The class reviewed ten specified management styles, their advantages and disadvantages, and their relevance to future workplaces. Students compared preferred and least preferred styles, particularly democratic, coaching, autocratic and laissez-faire approaches, considering collaboration, decision-making, feedback, independence, motivation and productivity. The class also discussed whether leaders reflect on their own management style and whether deadlines and limited pressure can support performance. Students began preparing an individual or pair presentation analysing the leadership style of a real business leader, using credible sources and relevant business vocabulary.
Students presented job advertisements they had chosen and explained the role, their reasons for choosing it, its responsibilities, and the technical and soft skills required. The class practised speaking naturally rather than reading, with feedback on using ‘keep up with’ and ‘interested in’. Discussion covered career planning, apprenticeships and internships, researching employers, networking, preparing for interviews, and developing skills through further study and practice. Students also compared programming and machine learning, considered communication in international teams, and explored the meanings of ‘imposter syndrome’ and ‘conflict of interest’.
The class reviewed how to assess credible sources for presentations, including checking authors’ expertise, institutional affiliation, publication type and supporting evidence. Students discussed study planning, time management and using reliable educational resources to strengthen their understanding of difficult subjects. They practised answering interview questions about skills to improve, with a focus on giving professional, constructive answers and using vocabulary such as “overcome”. Students delivered presentations on communication, discipline, public speaking and stress management, receiving feedback on source evaluation, practical improvement plans, clear speech and effective slide design.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Double-entry accounting, French and Anglo-Saxon approaches, balance sheets, income statements and operating and fixed-asset accounts.
BSc · Year 2 · 8 sessions
Course code: OS2-002
Accounting was introduced through the task of representing an organisation’s activity in a structured form. Journal entries led into financial statements, while later sessions examined how costs could be assigned and interpreted for internal decisions. Worked examples connected transactions, stock, depreciation and financing with profit and cash. Costing exercises then asked how activity levels and allocation choices change the result being reported.
Double-entry bookkeeping and the French accounting framework connected individual transactions with the balance sheet and profit and loss account.
Stock movements, fixed assets and depreciation showed how timing and classification affect the statements used to describe an organisation’s position.
Full and partial costing, contribution margins and budget variances introduced ways to examine profitability while recognising the assumptions behind each calculation.
The session introduced the purpose of accounting as a standardised system for recording, classifying and communicating an organisation’s financial information to internal and external stakeholders. It explained the French accounting framework, including the Plan comptable général, the principle of a faithful representation, historical cost, prudence, entity separation and accounting periods. Students distinguished the balance sheet, profit and loss account and notes, and learned to classify assets, liabilities, equity, stock, receivables, cash and debts. Worked examples were used to prepare simplified balance sheets and profit and loss accounts, calculate profit, track cash movements and receivables, and value unsold stock at purchase cost.
The session introduced the French chart of accounts, including the main account classes for balance-sheet items, expenses and income. It explained double-entry bookkeeping: every transaction has matching debit and credit entries, with assets, liabilities, expenses and income increasing or decreasing on different sides. Students practised recording capital contributions, loans, purchases, sales, supplier debts, customer receivables, cash movements and staff costs in journal entries. They then used these entries to prepare an income statement and opening and closing balance sheets, distinguishing investment activities from financing activities. The session also introduced depreciation as an annual expense reflecting the use of fixed assets.
The session completed an accounting exercise by preparing journal entries, calculating the income statement and producing the balance sheet for year N+1. It covered the treatment of capital, loans, loan instalments split between principal and interest, purchases, sales, wages, taxes, supplier debts, receivables, stock movements and reversing opening stock entries. Students practised applying debit and credit rules to assets, liabilities, expenses and income, including depreciation of vehicles and buildings. A further practice case was introduced to consolidate the full sequence from entries to profit or loss and the balance sheet.
The session practised preparing income statements and balance sheets from accounting entries, including stock adjustments, loan repayments, supplier and customer settlements, depreciation and cash movements. It then introduced fixed assets, distinguishing them from expenses according to their useful life, value, purpose and the business activity concerned. The class covered tangible, intangible and financial fixed assets, value added tax (VAT) on asset purchases, lease arrangements, subsequent repair costs and asset disposals. It also explained depreciation, impairment, residual value, straight-line depreciation, time apportionment and depreciation based on units of production, followed by balance-sheet exercises.
Management accounting was introduced as a way to analyse costs and performance within an organisation, alongside statutory financial accounting. Product pricing, stock valuation, forecasts and break-even calculations connected costs with operational decisions. The class distinguished full, partial and marginal costs; actual and predetermined costs; and direct, indirect, fixed and variable expenses. Cost centres and production stages provided ways to organise allocations. Discussion also considered which expenses enter a costing calculation and which adjustments it requires. A bakery exercise asked students to classify direct and indirect costs and calculate full and partial costs.
The session reviewed the full-cost method, including its benefits, limitations and the risks of arbitrary allocation of shared costs. It introduced rational allocation of fixed overheads, using the ratio of actual to normal activity to smooth unit costs and identify the cost of underactivity. Students completed worked examples comparing unit costs under the full-cost and rational fixed-overhead methods. The class then introduced partial-cost methods, especially variable costing, contribution margins, specific costs and the treatment of fixed and indirect costs. It also covered cost-volume-profit analysis, including contribution margin, break-even turnover, break-even sales volumes and graphical interpretation of the break-even point.
The class reviewed a cost-accounting exercise on full cost, contribution margin, the contribution margin rate, break-even point and safety margin. Calculations were carried out for break-even turnover, sales quantity and number of days, with checks using fixed and variable costs. The session also covered the operating leverage ratio and how changes in turnover affect profit. It then introduced budgetary control, including budget forecasts, pre-established and standard costs, and criticisms and limitations of using standards. Finally, it explained how to identify and interpret variances between budgeted and actual costs, activities, production, sales and margins.
The session prepared students for the assessment through worked accounting exercises. Students distinguished direct costs from indirect costs using a bakery production example, then calculated contribution margin, contribution margin ratio, break-even turnover, break-even quantity and break-even point in days, including checks for the reasonableness of results. The class also examined full costing for several business activities, allocating indirect costs using activity drivers and turnover-based allocation keys, accounting for changes in stock, and reconciling activity results with the overall operating result. The next stages of the exercise were introduced: variable costing and rational allocation of fixed overheads based on actual and normal activity levels.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Climatology, climate change and environmental impacts, explored through scientific principles and practical examples.
BSc · Year 2 · 4 sessions
Course code: OS2-004
The seminar examined climate through connections between the atmosphere, oceans, energy use and living systems. Weather observations provided a starting point before discussion moved to circulation, greenhouse gases and environmental impacts. Students compared data and considered consequences for ecosystems and societies. The supplied sessions emphasise climate and energy relationships; they do not present a separate practical project in sustainable computing.
Observations across locations introduced the difference between short-term conditions and long-term patterns, alongside the interacting components of the climate system.
Heat storage, circulation and carbon absorption connected ocean processes with greenhouse gases, energy production and changes in environmental conditions.
Changing habitats, food and water supplies and unequal impacts linked physical processes with biodiversity, human vulnerability and possible responses.
The session distinguished weather, as short-term atmospheric conditions, from climate, as long-term patterns and averages, and introduced meteorology as the study of atmospheric phenomena. Students compared weather and climate data from different locations, using online tools to examine temperatures, rainfall, forecasts and historical records. The class discussed meteorological events such as storms, hurricanes, floods, sandstorms, fog and hail, including how warmer oceans can intensify tropical cyclones. It introduced the interacting components of the climate system: the atmosphere, oceans, biosphere, cryosphere and lithosphere, with emphasis on carbon emissions, ocean warming, acidification, ice melt and sea-level rise. The session also covered unequal solar heating across latitudes, heat transfer through radiation, conduction and convection, and the oceans’ role in storing and redistributing heat.
The oceans were examined as stores of heat and carbon and as part of the water cycle. Wind-driven surface currents were distinguished from deep circulation associated with temperature, salinity and density. The Gulf Stream, ocean gyres and the Coriolis effect connected circulation with regional climate. The class then considered carbon sources and sinks, fossil-fuel emissions, warming and sea-level rise. Ocean acidification linked changing water chemistry with carbonate availability and risks to shell-forming organisms and coral reefs. Fisheries, food security and tourism illustrated how changes in marine systems can also affect human activity.
Energy production was examined through greenhouse gases and their environmental effects. Carbon dioxide, methane and nitrous oxide were compared by source, warming effect and atmospheric lifetime. Discussion connected emissions with climate impacts and unequal historical responsibility. Hydroelectricity illustrated both the benefits of renewable generation and its environmental and social costs, including altered rivers, habitat loss, methane emissions and displacement. A lifecycle comparison then considered construction and disposal alongside operation. Wind and solar were presented as having substantially lower carbon emissions than fossil-fuel generation, while still requiring attention to their material and environmental impacts.
The session examined how climate change affects ecosystems, biodiversity and human societies through rising temperatures, altered rainfall, droughts, wildfires, floods, storms, sea-level rise and ocean acidification. It explained how species shift their geographical ranges towards cooler latitudes, higher elevations or deeper waters, reshuffling ecosystems and sometimes enabling pests, diseases or invasive species to spread. The class considered the effects on water supplies, agriculture, food security, coral reefs and other ecosystem services such as pollination, soil processes and climate regulation. It also discussed biodiversity loss, the vulnerability of apex predators, cascading effects in food webs, and the importance of conservation, ecosystem restoration, renewable energy, sustainable consumption and citizen science.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Derivation, integration, linear algebra, trigonometry, complex numbers and computer-based modelling.
BSc · Year 2 · 5 sessions
Course code: OS2-003
Multivariable functions and linear algebra were examined through calculations that made their structure visible. Students worked with derivatives, vectors, bases, determinants and eigenvalues, connecting symbolic operations with geometry and computation. Changing coordinates became a recurring idea: the same object could be represented in a form that simplified a calculation. Revision exercises returned to the conditions under which operations and transformations were valid.
Surfaces, partial derivatives, gradients and Hessians introduced ways to describe how a function changes with more than one variable.
Dot products, norms and independence connected geometric relationships with coordinates, including how a change of basis changes a representation.
Determinants, inverses and diagonalisation linked algebraic conditions with practical calculations, while examples introduced complex eigenvalues and computational costs.
The session introduced the course’s focus on multivariable calculus, linear algebra and the analysis of data sets. It reviewed one-variable differentiation rules and used a quadratic function to construct a variation table and identify its minimum. Functions of two variables were then represented as surfaces, illustrating how cross terms can create more complex shapes and why changing coordinate directions can reveal useful structure. Partial derivatives, critical points, second derivatives, the gradient and the Hessian were introduced, with exercises on calculating them. The session ended by introducing vectors as column arrays and explaining their role in efficient computation and data analysis.
Worked examples connected dot products with orthogonality and the Euclidean norm. Bilinearity and symmetry were contrasted with the norm’s triangle inequality and its response to scaling. Normalising vectors to unit length introduced a way to handle differences in numerical scale. The class then examined linear independence, dependence and bases: a basis provides unique coordinates, while a change of basis changes those coordinates rather than the vector itself. Orthogonal and orthonormal bases simplified coordinate calculations and connected the algebra with data-analysis methods, including principal component analysis and linear regression.
The class derived the inverse of a 2×2 matrix and showed that it exists precisely when its determinant is non-zero. It introduced determinants as a test for invertibility and for whether column vectors are linearly independent, with applications to removing redundant variables from data sets. Students practised expanding 3×3 determinants along a chosen row or column, using minors and alternating signs, and learned that choosing zeros reduces the amount of calculation. The inverse of a 3×3 matrix was constructed from the cofactor matrix, its transpose, and the reciprocal of the determinant. The session also considered the rapidly increasing computational cost of recursive determinant calculations and noted that numerical methods are used for large matrices.
The session reviewed the diagonalisation of a 2×2 matrix by finding eigenvalues from the characteristic equation and then calculating corresponding eigenvectors. It showed how to normalise orthogonal eigenvectors, construct an orthogonal change-of-basis matrix, and use its transpose as its inverse to obtain a diagonal matrix. The practical advantages of diagonal matrices were explained through simpler multiplication, inversion and powers of matrices, including the potential for independent parallel calculations. A second example introduced complex eigenvalues, leading to the definition of complex numbers, their arithmetic, conjugates, moduli and geometric representation in the complex plane. The class also considered how complex-number calculations and type conversions are handled in R.
The session practised partial differentiation of functions of two variables, including mixed second derivatives and the fact that the order of differentiation does not affect the result in the examples considered. It then covered matrix operations: checking whether products and sums are defined, calculating matrix products, and finding an inverse using determinants, cofactors and transposition. Students also calculated traces and determinants of matrices, choosing efficient rows or columns for cofactor expansion. Finally, the class found eigenvalues and unit eigenvectors, formed an orthogonal change-of-basis matrix, and used it to diagonalise a matrix.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Security across Azure identity, access, networks, storage, computing and databases, with preparation for the Azure Security Engineer Associate certification.
BSc · Year 3 · 9 sessions
Course code: CSHI-001
Cloud security was examined through the connections between identities, networks, stored data and operational monitoring. Configuration choices were linked to practical questions: who needs access, which route can traffic take, and what evidence would reveal a problem? Azure labs and certification practice were accompanied by comparisons with Amazon Web Services (AWS) database services, bringing different cloud environments into the account without treating their controls as interchangeable.
Users, service identities and role scopes connected everyday access decisions with least privilege, temporary elevation and the protection of sensitive operations.
Routing, private endpoints, storage permissions and encryption showed how several controls combine to determine whether a resource can be reached and used.
Logs, security alerts and incident workflows connected configuration with operational evidence, including vulnerability detection and the management of temporary access.
The session introduced preparation for the AZ-500 Azure Security Engineer certification, including its four learning paths: identity and access, networking, compute/storage/database security, and security operations using Microsoft Defender for Cloud and Microsoft Sentinel. It explained the Microsoft Cloud Security Benchmark, particularly identity management and privileged access, alongside the principle of least privilege. The class covered Microsoft Entra ID, including tenants, directories, licences, identities, principals, users, groups, managed identities, service principals, federation and role scopes. Students then began a practical lab on role-based access control, creating and managing users and groups and assigning roles within an Azure environment.
The session reviewed Microsoft Entra ID identity and access management, including licensing, users and groups, external identities, Identity Protection, hybrid identity synchronisation and authentication methods. It covered passwordless authentication, password protection for on-premises Active Directory, and the planning and lifecycle management required for security keys. Students examined single sign-on methods and a SAML-based integration example, including application gallery configuration, certificates, user provisioning and testing authorised and unauthorised access. The class also covered Azure management groups, Azure and Entra role-based access control, scopes, role assignments, deny assignments, custom roles and zero-trust principles. Finally, it introduced Privileged Identity Management, just-in-time role activation, approval workflows, time-bound eligibility and the need to protect highly privileged roles.
The session covered non-relational database models, focusing on DynamoDB key-value and document data, primary keys, global tables and security monitoring. It compared AWS database services for relational, document, graph and data warehouse workloads, including how to select an appropriate database model. A practical activity migrated a café application’s MariaDB database from an EC2 instance to Amazon RDS, using backups, Secrets Manager, private networking and security-group rules. The session also covered Azure network and application security groups, remote desktop and web access rules, user-defined routes, service tags, virtual network peering, VPN gateways and route precedence.
The session covered Azure virtual network routing, including route prefixes, route priority, system routes, user-defined routes and Border Gateway Protocol (BGP) routes. It compared virtual network peering and virtual private network (VPN) gateways, including hub-and-spoke designs, gateway transit, site-to-site and point-to-site virtual private networks (VPNs), active-active and active-standby configurations, and Virtual WAN hubs. Azure ExpressRoute was introduced as a private, high-bandwidth connection to on-premises networks, including its use with VPN encryption and route selection. The class also examined encryption at rest and in transit, Azure Key Vault, virtual network encryption, and security practices such as segmentation, network security groups, zero trust, privileged access, perimeter networks and secure remote administration. Students practised creating Virtual WAN, hubs and VPN-related resources with Azure PowerShell, then reviewed Network Watcher tools, service endpoints and private endpoints for private access to Azure services.
The session reviewed preparation for the Azure Security Engineer Associate certification, including the need to understand Azure services, pricing tiers and role-based permissions rather than memorising every detail. It covered securing Azure networking through network security groups, user-defined routes, service endpoints, private endpoints, private link services, VPN connectivity and Azure Firewall. Public access security was explored through Transport Layer Security (TLS) certificates, Azure Application Gateway, load balancing, health probes, Web Application Firewall rules, bot protection, Azure Front Door and distributed denial-of-service (DDoS) protection. Students completed and discussed practice questions on secure networking, then began the next topic on securing compute resources with Azure Bastion for protected remote access to virtual machines.
The session reviewed deploying container images from Azure Container Registry to Azure Kubernetes Service, including Dockerfiles, image manifests and digests, managed identities, role assignments, pods, services, load balancers and public versus private access. It then introduced Azure storage services, including blobs, files, queues, tables, disks and data lake storage, with emphasis on choosing appropriate storage types. Access control for storage was covered through storage account keys, Microsoft Entra ID role-based access control, managed identities, access control lists, anonymous blob access and shared access signatures. The class also considered key rotation, least-privilege roles, resource locks, soft deletion, versioning, snapshots, redundancy, customer-managed keys and double encryption. A lab exercise configured network security rules and service endpoints so that a private subnet could access an Azure file share while being denied internet access.
The session reviewed security measures for Azure Kubernetes Service, storage, Structured Query Language (SQL) databases and virtual machines, including network isolation, soft delete, backups, encryption, Azure Bastion and access-key rotation. It explained how Azure Disk Encryption protects data at rest and outlined its requirements, including a Key Vault, supported virtual machines, network connectivity and the required extension. The class introduced Azure Policy and policy initiatives, covering scopes, parameters, effects, compliance auditing and remediation of existing resources. It then examined Azure Key Vault, including role-based access control, managed identities, keys, secrets, certificates, hardware security modules, certificate lifecycles, key rotation and backups. Students began a practical exercise to create a Key Vault and use Always Encrypted with a database.
The session reviewed Azure Monitor and Log Analytics, including workspaces, tables, data collection rules, transformations using Kusto Query Language, agents and regional data collection endpoints. It explained just-in-time virtual machine access as a way to reduce attack surfaces by temporarily opening Secure Shell (SSH) or Remote Desktop Protocol (RDP) access through network security groups and firewalls. The class covered Microsoft Defender for Cloud capabilities for containers, DevOps and artificial intelligence (AI) services, including posture management, image and vulnerability scanning, agent-based protection, secret scanning, prompt-injection detection and sensitive-data controls. It then introduced Microsoft Sentinel, covering log types and retention, analytics rules, alerts, incidents, connectors, playbooks and Logic Apps for automated incident response. Students were directed to complete a final practical lab on Log Analytics, Defender for Cloud, just-in-time access and Sentinel playbooks.
The session focused on preparation for the AZ-500 Azure Security Engineer certification, including the exam format, renewal requirements and use of Microsoft Learn during the assessment. Students completed and reviewed identity and access management quiz questions covering app registrations, service principals, managed identities, administrative units, authentication methods and password protection. The class examined Microsoft Entra ID roles and least-privilege access, including Global Reader and privileged identity management. Conditional Access policies, grant and session controls, multi-factor authentication, device trust and access from untrusted locations were also discussed. Students were then directed to continue with a quiz on Azure network security.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Linux architecture, installation, command-line tools, filesystems, shell scripting, networking, security and system administration.
BSc · Year 3 · 13 sessions
Course code: CSHI-002
Linux administration was approached through inspection and practical intervention: finding what the machine is doing, understanding why it behaves that way, and making a controlled change. Command-line exercises moved from hardware and booting to files, permissions, users and automation. Certification-style questions sat alongside recovery tasks and scripts, connecting individual commands with the larger system they inspect or modify.
Kernel modules, boot loaders, services and logs provided ways to inspect a running machine and investigate failures before normal operation is available.
Variables, quoting, redirection, pipelines and control structures turned command sequences into scripts that handle data and report their own behaviour.
Permissions, accounts, scheduled tasks, storage and system time linked configuration choices with access, predictable execution and routine administration responsibilities.
The session introduced the structure and assessment approach of an LPIC-focused Linux course, including demonstrations, practical exercises and timed quizzes. It covered Linux origins, open-source distributions, the layered Linux architecture, and common uses of Linux in servers, cloud computing, mobile devices and embedded systems. The class examined kernel modules, hardware detection, Basic Input/Output System (BIOS) and Unified Extensible Firmware Interface (UEFI) boot systems, pseudo-filesystems such as /proc and /sys, and device management through udev. Practical activities used commands including uname, lspci, lsusb, lsmod, modinfo, modprobe, grep and cat to inspect hardware, drivers, modules and system information. Students also practised safely loading and removing modules in a virtual machine, using sudo privileges, redirection and pipes, and identifying device naming conventions.
The session reviewed Linux booting and system management for certification preparation, including Master Boot Record (MBR), UEFI, EFI system partitions, GRUB, kernel parameters, initramfs, kernel ring buffers and boot logs. It compared legacy System V run levels with systemd targets, including rescue, emergency, multi-user and graphical modes, and explained how to inspect or change current and default targets. Practical command demonstrations covered systemctl, journalctl, dmesg, runlevel, shutdown, reboot, wall, process inspection, symbolic links and service enablement. The class also examined graceful and forced process termination using SIGTERM and SIGKILL, output-error redirection to /dev/null, and background jobs in the shell.
The session reviewed Linux storage concepts, including Logical Volume Manager (LVM) physical volumes, volume groups and logical volumes, swap space, mount points, and standard directories such as /var, /var/log, /media and /root. It explained the LPIC-1 examination structure, question formats, topic weighting and approaches to answering certification-style questions. The main topic was GRUB and the boot process: installing GRUB, generating its configuration, configuring boot-menu settings, and distinguishing GRUB 2 from legacy GRUB numbering and configuration files. Students practised recovering from a missing GRUB configuration by entering the GRUB shell, locating the correct partition, setting the root device, loading the kernel and initramfs, booting manually, and regenerating the configuration.
The session introduced Linux shells, especially Bash, and explained why command-line work remains important for administration and automation. It covered how the shell processes commands, including variable expansion, command lookup order, aliases, functions, built-ins, executables, and the PATH environment variable. Practical demonstrations showed how to inspect commands with type, which, man, apropos and help, create and run scripts, alter PATH, and use quoting and escaping for special characters and spaces in filenames. The class also covered shell and environment variables, exporting variables to child shells, unsetting variables, command history, and keyboard shortcuts for efficient command-line editing.
The class compared package management on Debian, Red Hat-based and openSUSE systems, distinguishing low-level tools such as RPM from high-level tools such as YUM, DNF and Zypper. It covered installing, querying, verifying, extracting and removing RPM packages, managing repositories and caches, and using package searches to identify providers of files or commands. Virtualisation was introduced through hypervisors, type 1 and type 2 models, virtual-machine migration, KVM, copy-on-write storage, cloning requirements and containers such as Docker. The session then covered Linux file management, including paths, file types and permissions, and demonstrated commands for listing, creating, copying, moving, deleting, archiving and finding files, with glob patterns and recursive operations.
The session introduced basic Bash scripting, including shebang lines, executable permissions, variables, command substitution and relative paths. Students practised creating a diagnostic script that generated report and error-log files, using grouped commands, redirection, here documents and here strings. The class reviewed standard output, standard error and standard input, including how redirection order affects where messages are sent. It then covered pipelines, the tee command, safe processing of filenames with spaces using find, print0 and xargs, and placeholder-based commands. Practical activities used log and comma-separated values (CSV) files to filter, count, sort and report on data with commands such as grep, cut, sort, uniq and wc.
The session covered Linux process scheduling, including process priorities, niceness values and the distinction between real-time system processes and normal user processes. It demonstrated how to inspect priorities with top and ps, start commands with adjusted niceness using nice, and alter the priority of running processes with renice, including the permissions required for higher priority. Practical scenarios explored reducing the impact of CPU-intensive compression tasks and giving urgent backup processes greater priority. The class then reviewed basic and extended regular expressions, using grep to search log files with anchors, character classes, quantifiers, alternation and case-insensitive matching. It also introduced grep options for filtering and recursive searches, alongside sed for stream editing, substitutions, line selection and safe in-place file changes.
The session covered Linux file-system integrity, including journalling, disk-usage checks with du and df, inode exhaustion, and repair checks using fsck. It compared tools for ext4 and XFS file systems, including tuning reserved space, resizing, inspection and the limitation that XFS cannot be shrunk. Students practised configuring persistent mounting by identifying a partition with blkid, adding a six-field entry to /etc/fstab, testing it with mount -a, and confirming the mount after rebooting. The class then introduced Linux ownership and permissions for users, groups and others, using symbolic and numeric chmod modes. It also explained default permission limits through umask and special permissions including set-user-ID, set-group-ID and the sticky bit.
The session covered Bash shell variables, including assignment syntax, valid names, quoting, escaping special characters, and variable substitution. It explained local shell variables, exported environment variables, read-only variables, unsetting variables, and how child shells inherit exported values without sharing later changes. Students examined environment-inspection commands, temporary clean or modified environments, common variables such as PATH and prompts, and ways to alter PATH safely. Practical activities tested variable scope, quoting, exports, read-only behaviour, unsetting, and environment manipulation. The class then introduced aliases and shell functions, including arguments, local function variables, return codes, persistence through shell configuration files, command lookup order, and removing aliases or functions.
The session practised Bash scripting through an audit script that scans a directory and identifies symbolic links, directories and regular files. It covered file tests, including checks for links, directories, regular files, empty files and files newer than a reference file. The script used for loops, if/elif conditions, case pattern matching to classify file extensions, variables, command substitution, basename, and a while-loop countdown with arithmetic. The session also introduced X11/Xorg as a legacy Linux graphical display system, explaining its client-server model, modular extensions and the role of display managers.
The session practised Linux user and group administration, including creating groups and users, setting primary and supplementary groups, assigning login shells and passwords, and using root privileges safely with sudo. It covered locking and unlocking accounts, enforcing password changes, setting password ageing policies, and using the skeleton directory to create default files and folders for new users. The class examined the roles and contents of /etc/passwd, /etc/shadow, /etc/group and related configuration files, alongside commands such as useradd, usermod, userdel, groupadd, getent and id. It also introduced automated task scheduling with cron and anacron, including crontab fields, timing syntax, missed jobs and output redirection.
The session covered Linux localisation, including time zones, locales, language settings, regional formats and character encodings. It explained the use of Coordinated Universal Time (UTC), the TZ environment variable, time-zone files and tools such as date, timedatectl and tzselect. Students examined locale variables including LC_ALL, LC_TIME, LC_MONETARY and LC_COLLATE, and learnt why scripts should use the standard C/POSIX locale for predictable behaviour. Character encodings were compared, particularly ASCII, ISO-8859-1 and UTF-8, and iconv was used to convert files between encodings. The class then covered system-time maintenance: hardware and system clocks, Network Time Protocol (NTP) synchronisation, NTP strata, ntpd and chrony, followed by practical command exercises using date, hwclock, timedatectl and ntpq.
The session covered Linux mail systems, including the roles of mail user, transfer and delivery agents, common MTA implementations, aliases, per-user forwarding, mail queues and command-line mail use. It also covered Common UNIX Printing System (CUPS) printing, including its daemon, web interface, configuration files, printer drivers and PPD files, network printing protocols, print queues, job control and printer classes. Practical-style questions reviewed installation, service status, configuration locations and common printing commands. The introduction to networking explained the TCP/IP stack, IPv4 and IPv6 addressing, address classes, private networks, subnet masks, gateways, NAT, ports, and the TCP, UDP and ICMP protocols.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
DevOps tools and practices including monitoring, service discovery, containers, automation, GitHub, Jenkins, Kubernetes and continuous integration.
BSc · Year 3 · 8 sessions
Course code: OMP-004
Development and operations were considered together through collaboration, automated testing and repeatable environments. The class moved from Git and small changes into infrastructure definitions, containers and Kubernetes, then examined monitoring and reconciliation with repository configuration. Labs and demonstrations connected these ideas to running services, while the discussion retained the organisational questions of feedback, reliability and reducing the consequences of failure.
Version control, meaningful commits and automated tests connected to small changes, refactoring and feedback before software reaches a running environment.
Infrastructure definitions, containers and orchestration examined through provisioning labs and demonstrations of deployment, recovery, networking and persistent storage across changing workloads.
Metrics, dashboards and repository-driven configuration used to discuss how teams observe services and keep deployed applications aligned with their intended state.
DevOps was introduced as collaboration between development and operations, supported by communication and automation. Waterfall and agile approaches were compared through iteration, stakeholder feedback and sustainable working practices. Reliability discussions covered monitoring, service objectives and the expectation that failures will occur. Semantic versioning and naming conventions introduced ways to communicate changes clearly. Students began a small project lab with documentation and a change log, preparing to use Git and Node.js as part of the practical work.
The Git workflow covered repositories, staging, commits, remote updates and inspection of differences. Automated testing was discussed through unit, functional, integration and end-to-end checks, including browser automation. Test-driven development introduced a cycle of writing a failing test, implementing the behaviour and refactoring while keeping the checks passing. Students began a JavaScript lab for user-related application programming interface functionality. Self-contained tests, setup, validation and cleanup connected the method with tests that are fast enough to use repeatedly.
Continuous integration and continuous delivery or deployment connected version control, tests and releases. Infrastructure as code then introduced declarative and imperative approaches, repeatable application of configuration, and mutable or immutable infrastructure. Vagrant provided a setting for managing virtual machines, while Ansible introduced declarative provisioning. Students worked on labs using shell provisioning and Ansible to deploy and check a GitLab environment. Earlier discussion of small changes and testing remained relevant as the subject moved from application code to its infrastructure.
Containers were compared with virtual machines through isolation, shared operating-system resources and portability. Docker demonstrations covered obtaining images, running containers and managing their lifecycle. Dockerfiles introduced custom builds through base images, copied files and build commands, including tagging and troubleshooting. Storage volumes addressed data that must persist, while Docker Compose described applications with several containers. A WordPress site and MySQL database illustrated this arrangement, connecting application packaging with the services and data it needs to run.
Kubernetes introduced deployment, networking, scaling and recovery across a cluster. The class examined control-plane and worker components, then used manifests and commands to inspect and change resources in Minikube. A demonstration showed a deployment replacing a deleted managed pod, unlike a standalone pod. Namespaces, labels and services helped organise the workloads. Configuration, secrets and persistent storage were introduced before students were directed to practical labs, extending the discussion from individual containers to the system that manages them.
The class traced a pod request through authentication, scheduling and container creation before examining storage choices. Temporary volumes, host-mounted data, configuration and secrets raised different persistence and security questions. Demonstrations covered static and dynamic provisioning through persistent volumes, claims and storage classes. Binding, reclaim policies and pending workloads were investigated, including checking data after pod replacement. Students were directed to practise temporary and host-path volumes, with further persistent-volume work offered as an optional exploration rather than assumed completed work.
Cloud-native architecture linked loosely coupled services with containers and delivery practices. Kubernetes networking was examined through pod communication and stable service addresses, with demonstrations of different service types and troubleshooting. Load balancing and ingress routing introduced distinctions between transport and application-level traffic handling. Service meshes then brought together observability, encrypted service communication and traffic control, including canary releases. The discussion connected these mechanisms with the architecture around them rather than presenting orchestration as simply another way to start a container.
Grafana introduced dashboards over metrics queried from Prometheus. The class examined connections, local access, query-based panels and imported dashboard definitions, then discussed related tools for logs, traces and metric storage. GitOps connected declarative infrastructure with Git as the record of intended configuration. Push and pull approaches were compared, including Argo CD's reconciliation of Kubernetes applications. Students were asked to complete labs using the monitoring and reconciliation tools, bringing observation and configuration management into the same operational discussion.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
HDFS, resource and workflow management, ETL, dataflows, scalable messaging, Spark processing and data exploration.
BSc · Year 3 · 8 sessions
Course code: DM-004
These sessions followed data across a distributed system: where it is stored, how work is divided, and how results move between services. Hadoop, Spark, Kafka and NiFi supplied different parts of that picture. Labs and demonstrations connected architecture with queries, processing jobs and data flows, while fault tolerance, access control and operational limits remained part of the discussion rather than separate concerns.
Replication, cluster roles and failure scenarios exposed the trade-offs behind spreading storage and computation across machines connected by a network.
Hive tables, MapReduce jobs and Spark DataFrames connected storage formats and execution choices with practical ways to query and transform data.
Kafka events and NiFi pipelines introduced time, delivery, queues and provenance as concerns when data keeps arriving and moving between systems.
The session introduced big data as data that cannot be stored or processed effectively by a single machine, focusing on volume, velocity and variety. It explained distributed systems, horizontal and vertical scaling, clusters and nodes, along with the benefits and challenges of distributing computation across networked machines. The consistency, availability and partition tolerance (CAP) theorem was used to compare consistency, availability and partition tolerance in distributed data storage. The Hadoop ecosystem was outlined, including Hadoop Distributed File System (HDFS) for storage, Yet Another Resource Negotiator (YARN) for resource management, and processing tools such as MapReduce and Spark. Students began a practical activity by connecting securely to a Hadoop edge node through Secure Shell (SSH) and practising basic Linux command-line use.
The session reviewed distributed systems, Hadoop HDFS and YARN, including master, worker and edge nodes, replication, fault tolerance and high availability. It distinguished online transaction processing (OLTP) from online analytical processing (OLAP) systems and compared databases, data lakes, data lakehouses and data warehouses, including atomicity, consistency, isolation and durability (ACID) properties. The class introduced Apache Hive as a data-warehouse tool built on HDFS, using HiveQL and execution engines to query stored data. It covered external versus managed Hive tables, row-based and columnar file formats, Hive partitioning, and the bronze, silver and gold stages of the medallion architecture. Students then began practical Hive exercises creating and querying external and managed tables, including use of ORC files.
The session reviewed core big-data concepts, including the three Vs, data types, horizontal versus vertical scaling, networking risks and the CAP theorem. It covered Hadoop’s main components: HDFS for distributed block storage, YARN for cluster resource management, and MapReduce for distributed processing. The class examined how HDFS splits and replicates files, why small files create metadata overhead, and why processing should be located with the relevant data blocks where possible. MapReduce was introduced through a word-count example, explaining map, shuffle and sort, reduce, network communication, and disk-based fault tolerance. Students then worked on Hadoop-based Python MapReduce word-count exercises and began designing a MapReduce job from scratch.
The session reviewed distributed-system reliability, including single points of failure, standby NameNodes, split-brain scenarios, leader election and ZooKeeper heartbeats. It compared MapReduce and Spark, covering disk-based versus memory-based fault tolerance, resilient distributed datasets, transformations and actions, lazy evaluation, and narrow versus wide transformations and shuffles. The teaching then introduced Spark DataFrames and Spark Structured Query Language (SQL) as higher-level, more readable alternatives to low-level resilient distributed dataset (RDD) programming, explaining schemas, the Catalyst Optimiser and the benefits of explicitly defining schemas for large production data sets. Students began a practical Docker-based Jupyter lab using New York City taxi data to explore DataFrame operations, SQL queries and joins, with exercises requiring work in both PySpark and Spark SQL.
The session introduced real-time event streaming, distinguishing unbounded streams from bounded datasets and comparing hard, soft, near-real-time and batch processing requirements. It reviewed stream-processing concepts including event time versus processing time, windows, triggers and watermarks, and strategies for refining aggregated results. The class then examined Kafka as an event-streaming platform, covering events, producers, consumers, brokers, topics, partitions, offsets and consumer groups. It explained partitioning by round-robin allocation or message keys, replication through leaders and followers, producer acknowledgements and delivery guarantees, and leader election using KRaft rather than ZooKeeper. Students were asked to deploy a Kafka cluster in containers, run a consumer, and optionally process streamed events with Python, Spark or an extract, transform and load (ETL) service.
The session reviewed OLAP and OLTP workloads, row-based and columnar file formats, the medallion architecture, Apache Spark, and Kafka’s publish-subscribe model. It introduced Apache NiFi as a tool for managing data flows and compared ETL, extract, load and transform (ELT) and light-transformation loading pipelines. The class covered NiFi’s security, scalability, delivery guarantees, data provenance and lineage, clustering, registry-based version control, and core components including flow files, processors, connections, funnels and process groups. It also considered why NiFi is best suited to moving data and carrying out light transformations rather than heavy processing. Students began a practical Docker-based lab to build, version and document a basic NiFi data flow.
The session reviewed Apache NiFi as a tool for building ETL and ELT data flows, contrasting transformation before loading with transformation after loading into a data lake. It covered NiFi architecture, including flow files, metadata attributes, content, provenance, repositories, processors, controller services and clustering. The class demonstrated the NiFi interface, process groups, ports, funnels, connections, relationships, queues, back-pressure thresholds, load balancing and debugging. It also explained scheduling, retry and penalty behaviour, parameter contexts, expression language, and version-control alternatives following the planned retirement of NiFi Registry. Students were assigned sequenced labs to build increasingly complete pipelines, culminating in consuming Kafka streams with NiFi, transforming the data, and loading cleaned results into PostgreSQL.
The session reviewed distributed cluster roles and introduced four security principles: identification, authentication, authorisation and encryption. It explained how LDAP, Kerberos, Apache Ranger, Knox and Atlas can support identity management, ticket-based access, role-based permissions, gateway access and governance in Hadoop ecosystems, with comparisons to cloud-native tools. The class then compared file, block and object storage, focusing on object storage features such as buckets, metadata, flat namespaces, immutability, S3-compatible application programming interfaces (APIs) and storage tiers. Software-defined storage, MinIO, Ceph and erasure coding were discussed as ways to provide scalable, resilient cloud storage. Students were assigned a lab to deploy MinIO in Docker and create and manipulate object-storage buckets.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Descriptive statistics, probability and applied data analysis using R, providing a foundation for machine learning.
BSc · Year 3 · 4 sessions
Course code: CDSAI-002
Probability and statistics were developed as foundations for interpreting data and preparing for machine learning. The sessions moved from distributions and descriptive measures to conditional probability, random variables and statistical inference. Examples, simulations and work in R connected mathematical definitions with what can be observed in a sample, including variation, uncertainty and the care needed when drawing conclusions from limited data.
Tables, plots and summary measures made distribution shape, spread and relationships visible, with attention to outliers and the limits of correlation.
Conditional probability, independence and random variables provided a language for distinguishing observed outcomes from the probability models used to interpret them.
Estimation, confidence intervals and hypothesis tests connected sample evidence with uncertainty, error risks and the assumptions behind a statistical conclusion.
The session introduced the course’s focus on probability, statistics and their role as foundations for machine learning, with R and RStudio as supporting tools. It reviewed mathematical notation for sums, products and sets, including unions, intersections and complements. Descriptive statistics were covered through frequency tables, bar charts, histograms, density plots and empirical cumulative distribution functions, with emphasis on interpreting distribution shape. The class defined quantiles, the median, mean, variance, standard deviation, interquartile range, skewness and kurtosis, and used box plots to examine spread and potential outliers. It then introduced multivariate descriptive analysis using contingency tables, scatter plots, covariance and correlation, stressing that correlation does not establish causation.
The session completed an introduction to probability distributions for finite, countably infinite and continuous sample spaces. It covered conditional probability, Bayes’ theorem and base rates through diagnostic-test, screening, production-defect and transmission examples, as well as the Monty Hall problem. Independence, incompatibility and mutual independence were distinguished using coin-toss and permutation examples. Students then completed practice multiple-choice questions on descriptive statistics, including means, medians, empirical cumulative distribution functions and probability calculations. The session ended by introducing random variables as functions mapping outcomes to real-number values and motivating probability distributions for them.
The session reviewed random variables through uniform, binomial, Poisson and normal distributions, focusing on their parameters, probability mass or density functions, cumulative probabilities, quantiles, means and variances. Simulated samples were compared with theoretical distributions to show how observed data can differ from ideal probability models. The class then introduced multivariate random variables, joint and marginal distributions, conditional distributions, independence, covariance and correlation, including a bivariate normal simulation and covariance matrix. It concluded with an introduction to convergence, random samples that are independent and identically distributed, parameter estimation, and the motivation for the law of large numbers and central limit theorem.
The session reviewed descriptive statistics, probability theory, random variables, probability distributions, convergence, the law of large numbers and the central limit theorem. It introduced estimators and estimations, including bias, variance, mean squared error and the use of large samples to improve estimates. Confidence intervals were explained as ranges around an estimate associated with a chosen risk level, and a practical activity used one-sample t-tests in R to calculate 95% and 99% confidence intervals for mean height. Statistical hypothesis testing was then introduced through null and alternative hypotheses, rejection regions, p-values, significance levels, and Type I and Type II errors, with examples involving coin tosses and comparisons of group means. The session concluded by outlining common tests for one mean, two means and independence, in preparation for further study.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Professional Python practices for building reliable, reproducible data pipelines for analytics and AI.
BSc · Year 3 · 9 sessions
Course code: DEAI-002
A retail-data example connected Python programming with the reliability of later analysis and machine learning. Students worked through project structure, relational loading, quality checks, incremental processing and monitoring before moving to features and baseline models. The recurring question was whether a result could be traced and trusted: what changed in the data, what the code did, and whether evaluation accidentally used information it should not have seen.
Immutable inputs, manifests, structured logs and repeatable runs made the history of a result inspectable across raw, clean and analytical layers.
Schema checks, key consistency and monitoring helped distinguish valid inputs from failures or unexpected changes before data reached later analytical stages.
Baseline models, train–test splits and fitted preprocessing connected predictive results with the boundaries needed to keep an evaluation meaningful.
The session introduced foundational data-engineering practices for building reliable Python projects. It covered reproducibility, determinism, traceability and observability, including the importance of immutable raw data, run manifests, structured logs, configuration management, isolated environments and basic smoke tests. A retail-data scenario was used to illustrate how changes in real-world data or in a pipeline can affect results and why systems must distinguish between them. Students began a practical exercise to create a structured project repository, separating input data, source code, generated data, tests and run artefacts, and discussed using Python, virtual environments, Git, Makefiles and Pytest. Idempotency was explained as the ability to repeat an operation safely without altering the outcome or damaging the project structure.
The session introduced SQLite as a Python-based tool for creating a relational analytics layer from raw product and order data. Students reviewed relational modelling, including tables, rows, columns, primary keys, foreign keys and constraints such as non-null and non-negative values. The class covered creating and applying an Structured Query Language (SQL) schema, connecting to a database from Python, enforcing foreign-key checks, and verifying that database files and tables were created correctly. Planned practical work involved loading comma-separated values (CSV) data, identifying deliberately introduced errors, running data-quality checks for nulls, duplicates and invalid values, and producing manifests and logs for traceability.
The session introduced data quality as a prerequisite for reliable data engineering, analytics and later machine-learning work. It explained the use of raw, clean, structured and analytics layers, with the clean layer acting as a quality gate before data is loaded into a database. Students practised designing validation checks for schema compliance, required fields, numeric and date values, duplicates, value ranges and foreign-key consistency, using a deliberately invalid product reference to demonstrate safe failure. The class also covered fail-fast recovery, quality statuses such as green, yellow and red, and extending manifests with quality metadata and reports. It additionally outlined the role of monitoring, drift, security hardening and adversarial data poisoning in production artificial intelligence (AI) and data pipelines.
The session examined how reliable data pipelines depend on traceability, reproducibility and observability. It explained how duplicate data and weak validation can cause serious service failures, using a major cloud-service outage to illustrate the business impact. The class explored observability for AI systems, including monitoring logs, metrics, costs, retrieval quality, model drift and mismatches between training and production data. It then introduced extract, transform and load (ETL) practices for incremental loading, watermarking, safe re-runs, full refreshes and backfills. Students were asked to run a supplied pipeline twice and inspect its manifest to confirm that incremental processing was stable and did not create duplicates.
The session linked data-engineering pipelines to later machine-learning work, emphasising that raw data should remain immutable, clean data should be validated, and workflows should be reproducible and traceable. It defined a machine-learning feature as a data-derived variable, often created from existing columns, rather than a software capability. Python and Pandas concepts were revised, including DataFrames, imports, functions, parameters, return values, assignments, dictionaries, lists, merges, grouping and aggregation. Code was examined through four perspectives: syntax, meaning, purpose and possible failure modes. Students were asked to analyse helper functions and run a small analytics workflow that loaded clean data, checked candidate keys, joined orders to products, calculated estimated revenue and summarised results by category.
The session introduced pipeline health monitoring as a prerequisite for reliable machine-learning work. It covered checks at run, data and analytical levels, including successful runs, expected output files and manifests, row and null counts, duplicate keys, category distributions, grouped revenue and quantity summaries, and engineered-feature rates. Students were asked to run a Python monitoring script on their own projects, inspect recent manifests and outputs, and identify unexpected changes that could indicate data or model drift. The class also discussed when to retain exploratory work in scripts and when to move stable, reusable work into Jupyter notebooks, with Jupyter preferred over collaborative notebook tools for robust projects. Binary threshold-based features and their grouped rates were revisited as preparation for later modelling, especially time-series analysis.
The session introduced baseline machine-learning models as simple, interpretable reference points for assessing whether more complex models are worthwhile. It covered the distinction between features (X) and targets (Y), train-test splitting, random states, class stratification, model fitting, loss, and the purpose of cross-validation. A strong emphasis was placed on data leakage, including duplicate records, target information entering features, future information, and preprocessing the full dataset before splitting. Students began using Jupyter notebooks and Python tools such as pandas, pathlib and scikit-learn to locate cleaned data, define features and targets, and prepare data for a dummy classification baseline.
The session covered safe machine-learning pre-processing, with an emphasis on splitting training and test data before fitting transformations in order to prevent data leakage. Numeric and categorical features were distinguished, including missing-value imputation, numeric scaling and one-hot encoding of categories. Scikit-learn pipelines and column transformers were used to apply the appropriate transformations consistently before logistic-regression modelling and evaluation with accuracy and a confusion matrix. Students practised running and annotating a notebook, explaining the purpose of code blocks, imports and workflow stages. The session also introduced time-based splitting and data drift, comparing earlier and later data to assess whether changing data contexts could affect model performance.
The session reviewed the structure of a supervised machine-learning workflow using logistic regression, including the distinction between input features (X) and target labels (Y). It covered train/test splitting, reproducible splits using a random state, data leakage, and why preprocessing should be performed within pipelines, with column transformers applying different treatments to numerical and categorical data. Students practised interpreting code, accuracy, confusion matrices, incorrect predictions and error slices, while considering the limitations of small datasets. The class also discussed data drift over time, cautious reporting of evidence and recommendations, and how to give specific, constructive critiques of a model. Mock assessment formats were explained and practised through multiple-choice and short written questions.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Full-stack development with HTML, CSS, JavaScript, PHP, databases, REST APIs, MVC and Node.js, using professional testing and code organisation.
BSc · Year 3 · 8 sessions
Course code: DEAI-003
The sessions built a path from a structured web page to applications that request, process and display data. Browser work in Hypertext Markup Language (HTML), Cascading Style Sheets (CSS) and JavaScript was followed by PHP, databases and application programming interfaces. Examples then widened to service boundaries and testing. Throughout, the implementation raised questions about responsibility: where validation belongs, how components communicate, and how behaviour can be checked without relying only on what appears on screen.
Semantic pages, styles, browser events and dynamic content connected readable interfaces with the code that changes their state in response to users.
Server-side architecture, database queries and interfaces separated request handling, data operations and presentation, with attention to authentication and failure handling.
Microservices and automated tests exposed the costs of component interaction, from distributed coordination to independent, repeatable checks against a test database.
The session introduced web applications as client–server systems, explaining Hypertext Transfer Protocol (HTTP) requests, web servers, front-end development in the browser and back-end development on the server. It covered HTML as a semantic markup language for structuring content, including document structure, headings, paragraphs, links, images, block and inline elements, lists, tables and forms. The importance of semantic markup, accessibility text for images, browser compatibility and search-engine indexing was discussed. CSS was introduced for presentation, including internal, external and inline styles, selectors, specificity, positioning, fixed and relative units, and colour formats. A practical example began building a responsive blog homepage using semantic HTML elements and a linked stylesheet.
The session introduced JavaScript as a client-side, dynamically typed language used alongside HTML and CSS to create interactive web applications. It covered variable declarations with var, let and const, scope, primitive and reference values, functions, arrays, loops, conditional statements, equality operators and switch statements. Students learnt how to include JavaScript in HTML, how script loading order affects page rendering, and how to use Document Object Model (DOM) selection and manipulation to change content, styles and CSS classes. The class also demonstrated event handling, including clicks, form changes, preventing default browser behaviour and updating a form summary dynamically. The afternoon began a JavaScript Kanban-style task board, using DOMContentLoaded, DOM element selection, task creation and data attributes.
The session introduced PHP as a server-side scripting language for creating dynamic web applications, generating HTML, and interacting with sessions, forms and databases. It covered the CGI model, PHP’s use alongside HTML, the need to separate logic from presentation, and the role of MVC-style architecture. Students practised PHP variables, weak and dynamic typing, type casting, control flow, arrays, associative arrays, loops, functions, parameters and common debugging and string functions. The class then demonstrated handling GET and POST form data, checking submitted inputs, and explained basic security concerns when processing login details. In the afternoon, work began on a multi-page PHP example intended to filter, sort and paginate tabular data using shared includes, utility functions and a static dataset.
The session introduced the Model–View–Controller architectural pattern in PHP, relating it to design patterns, SOLID principles and separation of responsibilities. It explained how controllers process requests, call models for data and business logic, and pass results to views that generate HTML, with routing used to select controller actions from URLs and HTTP methods. PHP Data Objects (PDO) were covered for connecting PHP to Structured Query Language (SQL) databases, including prepared statements to prevent SQL injection, exception handling and transactions for reliable multi-query operations. A practical example built a small project-management application with a database connection, create, read, update and delete (CRUD) model methods, HTML views, a controller and an index.php router. The session concluded by outlining a later extension involving authentication and further practical work.
The session introduced application programming interfaces, distinguishing general application programming interfaces (APIs) from web and Representational State Transfer (REST) APIs, and explaining how REST APIs separate front ends from back ends for reuse across web and mobile applications. It covered stateless, resource-based application programming interface (API) design, the HTTP methods GET, POST, PUT and DELETE, idempotency, and common HTTP status codes including redirects and timeouts. Authentication approaches were discussed, including API keys, bearer tokens and OAuth, alongside the purposes of authentication and authorisation. The class explained middleware for tasks such as authentication, validation, logging and Cross-Origin Resource Sharing (CORS), stressing that CORS is a browser restriction rather than server security. A PHP REST API was then built around a user resource, using request and response classes, middleware, routing, JavaScript Object Notation (JSON) responses, database access, and a simplified object-relational mapping model.
The session focused on consuming REST APIs with JavaScript in front-end web applications. A country browser was built using an unauthenticated API, covering asynchronous functions, promises, async/await, fetch requests, HTTP response checking, JSON parsing, sorting and displaying returned data. The interface included dynamically generated country cards, a details modal, event listeners, search and region filtering, and handling object values such as languages and currencies. A second example demonstrated making authenticated POST requests to an artificial intelligence (AI) service API, structuring prompts, alternating messages between two agents, managing conversation state, and explaining why API keys must not be exposed in production front-end code. Students were then introduced to a weather-dashboard exercise using API data.
The session introduced microservice architecture and compared it with monolithic applications, focusing on domain boundaries, independent services and separate data ownership. It covered benefits such as targeted scaling, resilience and easier evolution, alongside drawbacks including distributed-system complexity, technical debt, service coordination and observability. Synchronous API calls were contrasted with asynchronous event-driven communication using message brokers, with order processing used to explain eventual consistency and saga-style workflows. Good microservice practices included explicit API contracts, idempotent requests, failure handling, logging, metrics, independent deployment and continuous integration and continuous delivery (CI/CD). A practical Node.js exercise began by setting up separate services with Express, Axios and SQLite, then creating product API routes to retrieve products and partially update stock.
The session introduced software testing, distinguishing unit tests for isolated logic from integration tests for interactions between components such as databases, APIs and controllers. It explained the benefits of testing, including preventing regressions, supporting refactoring, improving maintenance and measuring code coverage. Practical PHP examples used PHPUnit and Pest to write assertions, parameterised tests with data providers, exception tests, mocks and factories. Integration testing was demonstrated with a separate test database, including resetting data so that each test remains independent and predictable. The project brief was introduced: teams will build a smart-city data dashboard using external APIs, PHP with Model–View–Controller (MVC) and REST endpoints, a SQL database, JavaScript visualisations, authentication, weather data, analytics and charts.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Workshops and coaching to prepare students to enter the job market.
Facilitated by DSTI Direction of Studies & Corporate Relations Team.
Project lifecycle management and practical use of traditional and Agile delivery approaches.
BSc · Year 3 · 4 sessions
Course code: MEL-002
Project management was explored through both structured planning and short delivery cycles. The sessions connected business purpose, scope, resources and stakeholders with sprint planning, review and adaptation. Simulations and practical activities made the methods discussable in terms of work actually planned or reviewed. Traditional and agile approaches were compared through uncertainty, constraints and coordination, rather than presented as a choice with one answer for every project.
Business cases, project charters and scope, time and cost constraints connected planned work with the reasons for undertaking it and the resources available.
Sprint reviews, retrospectives, capacity and velocity introduced ways to inspect progress and make realistic commitments as a team learns from delivery.
Roles, stakeholder relationships, dependencies and scaled agile practices linked local planning decisions with wider organisational objectives and collective delivery.
The session introduced the course structure and its aim of preparing students to participate in or lead data science projects. It contrasted traditional, waterfall-style project management with agile approaches, explaining time-boxed sprints, sprint reviews, retrospectives, planning and visual task boards. A project was defined as a temporary undertaking with a unique objective, a defined timescale and required resources, distinguishing it from routine operations. The class also examined product and sprint backlogs, prioritisation, team commitment, transparency and measuring progress. Business cases, break-even points, return on investment and the need to reassess a project when business conditions change were introduced.
The session began with sprint planning and reflection, using completed work and team capacity to agree a realistic commitment for the next sprint. It covered project vision statements, the limitations of AI-generated content, and the need to understand project-management concepts well enough to assess artificial intelligence (AI) outputs critically. Key traditional project-management concepts included the triple constraint of scope, time and cost; project life-cycle phases; uncertainty, risk and the rising cost of change; and the Project Management Institute (PMI) waterfall framework, including project charters, planning, resources, communication, procurement and stakeholder management. Students practised preparing elements of a project charter and assigning stakeholder roles through a responsible, accountable, consulted and informed (RACI) matrix, then discussed stakeholder power and influence. The class also covered Gantt charts, task estimation, S-curves, earned value, cost and schedule variance, key performance indicators (KPIs), and the Plan-Do-Check-Act cycle.
The session used a simulated sprint review, retrospective and planning exercise to demonstrate approval of completed work, velocity tracking, forecasting and commitment to a minimum sprint scope. It introduced Agile values from the Agile Manifesto, stressing individuals and interactions, working software, customer collaboration and responding to change whilst recognising the continuing value of plans, documentation and contracts. Agile and waterfall approaches were compared in terms of fixed constraints, planning, suitability for different levels of uncertainty, stakeholder involvement and regulated environments. The class examined timeboxing, incremental delivery, technical debt, minimum viable products, proof of concepts, product backlogs, prioritisation and Agile contract models. It also covered the roles of the product owner, Scrum Master and self-managing cross-functional teams, followed by a scenario activity, quiz and video on Agile product ownership.
The session showed how an agile backlog can be adapted as new information emerges, using prioritised user stories and changing investigation scenarios to illustrate this process. It emphasised the importance of direct, timely communication for agile teams, particularly where teams are distributed. Agile software development practices included automated testing, continuous integration and delivery, code standards, collective code ownership, technical-debt reduction, and responsible use of AI-assisted programming. The class then introduced scaled agile working through Scaled Agile Framework (SAFe), including Agile Release Trains, programme increments, programme increment (PI) planning, cross-team dependencies, and the roles of product manager, Release Train Engineer and system architect. It also considered how agile delivery can be connected with wider business strategy and product value.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
CRM data management and preparation for Exam PL-200: Microsoft Power Platform Functional Consultant.
BSc · Year 3 · 4 sessions
Course code: OMP-003
Customer relationship management was explored as a system of related records, access rules and business activities. Practical work in Dataverse moved from tables and environments to imports, applications and process flows. Sales examples connected those structures with leads, opportunities and orders, while troubleshooting and security made visible the operational questions behind a form: who may change a record, what happens next, and how a failure is investigated.
Tables, relationships, solutions and separate environments connected the structure of customer data with controlled changes to the applications that use it.
Record privileges, business rules and flow histories showed how permissions and conditions influence what users can do and how automated steps behave.
Leads, opportunities, quotes and orders gave related data a business sequence, including follow-up activities and the handling of disqualified leads.
The session introduced customer relationship management (CRM) data modelling in Dataverse, including tables, primary and foreign keys, and one-to-many, many-to-one and many-to-many relationships. It compared on-premises and cloud CRM deployments, and covered Dataverse features such as application programming interfaces (APIs), security, auditing, business rules, workflows, duplicate detection, reporting and integrations. Students learnt how development, test and production environments are managed, including environment types, access groups, backup, copying and solution deployment. Practical activities involved accessing a shared CRM environment, creating account and contact records, creating a solution with a publisher and prefix, and creating, publishing and testing a custom table. The session also explained table ownership, activity tables, virtual tables, auditing, quick create forms and record management.
The session began with a practical exercise in exporting account data to Excel, amending a phone number, importing the file back into the CRM system, and checking that the change had been applied. It then covered Dataverse security, including business units, security roles, record privileges, access levels, teams, column-level security and hierarchy security. Further topics included environment analytics, storage capacity, auditing, duplicate detection, bulk deletion and long-term data retention. The class also introduced model-driven, canvas and Power Pages applications, before practising the creation of a model-driven app with grouped tables for customer and sales functions.
The session covered testing and troubleshooting Power Automate flows using Flow Checker, test runs, run history, action statuses and error details. It also explained administrative tasks such as monitoring flow activity, reviewing run histories and sharing flows with appropriate permissions. Business rules were introduced as a no-code way to apply conditions and actions, including showing, hiding, enabling, disabling or requiring form fields, with a practical exercise to control four contact fields according to whether an account had been selected. The class then introduced business process flows as stage-based guides for users, including their steps, limits, associated tables, conditional branches and use in opportunity management.
The session explained the CRM sales pipeline, from creating leads through imports, website forms or direct contact, to recording follow-up activities such as calls, emails, meetings and tasks. Leads can be qualified to create account, contact and opportunity records, or disqualified with a recorded reason while remaining available for later reactivation. Opportunities use price lists and product line items to calculate prices and totals, then progress through quotes, orders, fulfilment, payment and invoicing. The class also distinguished system-generated record IDs from customer-facing quote and order numbers, discussing uniqueness and restrictions on changes after creation. A practical activity asked students to carry out both a successful sales-pipeline case and a disqualified-lead case in the Sales Hub application.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Data-driven personal branding and professional visibility, using LinkedIn to build a clear digital identity and career roadmap.
BSc · Year 3 · 4 sessions
Course code: OS3-002
Digital marketing was approached through students’ professional presence and the ways online content is found, read and measured. LinkedIn profiles and project posts supplied practical material for exploring keywords, audience intent and communication. Search, advertising, video and automation broadened the picture, with analytics used to consider what a response means. The sessions described these tools through concrete activities, without making visibility a substitute for the work being presented.
Profile keywords, search intent and competitor comparisons connected professional positioning with the way people and search systems discover relevant information online.
Posts, storytelling and short video explored different ways to present work, adapt it to an audience and make its purpose understandable.
Campaign metrics, experiments and dashboards introduced feedback on content and advertising, alongside tracking choices, automation and data-protection considerations.
The session introduced digital marketing as a strategic process for attracting attention, creating value and building relationships, rather than simply advertising. It focused on personal branding for computing students, including professional visibility, niche definition, unique selling propositions and the use of LinkedIn as a professional landing page. Students used emojis to consider how visual identity shapes first impressions, searched for their names online, and reviewed how recruiters use keywords and search tools. The class covered buyer personas, networking, reciprocity and search engine optimisation (SEO) principles, particularly the placement and repetition of relevant skills and keywords within a LinkedIn profile. Students also used artificial intelligence (AI) tools to draft and refine professional headlines describing their skills, interests and intended sectors.
The session explored search engine optimisation and search engine advertising, including crawling, indexing, ranking factors, backlinks, metadata, content quality and trust signals. Students examined how keywords support online visibility, with particular emphasis on long-tail keywords, search intent and using Google Trends to identify emerging topics. The class compared the longer-term benefits of SEO with paid search advertising, including bidding, cost per click and quality scores in Google Ads. Activities included refining LinkedIn profiles for keyword relevance, identifying suitable career-focused keywords, analysing competitor profiles and using benchmarking to identify gaps and plan content.
The session examined content marketing for professional platforms, particularly LinkedIn, and began with an activity identifying posts that attract attention while scrolling. It covered inbound marketing, four broad types of content, the attention, interest, desire and action (AIDA) framework, storytelling, calls to action, social proof, readability, keyword use and repurposing a longer idea into shorter posts. Students used AI prompts to draft and adapt posts about their own projects, compared direct and storytelling styles, and experimented with generating accompanying visuals. The class also considered LinkedIn engagement signals, profile visibility, networking, direct messages, groups, editorial calendars, analytics, newsletters and employee advocacy.
The session reviewed how to create professional short-form videos, focusing on clear audio, lighting, captions, strong hooks and maintaining audience attention. It covered repurposing video into other content formats and planning LinkedIn content using a balance of educational, personal-brand and promotional posts. Students learnt about organic and paid social media, advertising formats, A/B testing, campaign metrics, tracking through Urchin Tracking Module (UTM) parameters and Google Analytics, and the importance of General Data Protection Regulation (GDPR) compliance. The class introduced marketing automation tools, explaining triggers, actions, filters, customer relationship management (CRM) use and workflows that connect platforms such as LinkedIn, GitHub and email. Students were encouraged to post content, track personal-brand performance in a dashboard, and use data to guide future strategy.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Key commercial and intellectual-property concepts, risks and good practices for digital and AI professionals.
BSc · Year 3 · 4 sessions
Course code: OS3-003
Legal questions were approached through situations a computing professional may encounter: negotiating a service, handling data, working for an employer and using artificial intelligence. Contract examples and discussion connected technical choices with responsibility and ownership. The sessions examined competing interests and possible harms, including generative output and training material, while keeping attention on the human and organisational decisions surrounding the technology.
Liability examples and pre-contractual duties connected technical work with harm, information sharing, confidentiality and the obligations that parties may undertake.
Service, licensing and data agreements were examined through control, performance, ownership and change, asking which party bears a particular risk.
Employment relationships, freelance status and generative artificial intelligence raised questions about rights, surveillance, authorship and the use of existing works.
The session introduced the relevance of commercial and intellectual property law to data science, covering contracts, employment or freelance status, company matters, intellectual property and professional liability. It examined AI-related liability through examples involving training data, privacy, autonomous vehicles, algorithmic harm and the possible responsibility of users, developers, providers and employers. The class distinguished civil and professional liability, including risks such as financial losses, discriminatory outputs, intellectual property infringement and defamation, and noted the role of professional indemnity insurance. It then began contract law by defining contracts as legally binding mutual obligations, including informal everyday agreements, and explained the pre-contractual phase. Activities considered good faith, duties to inform and maintain confidentiality, abusive termination of negotiations, and the purpose and key terms of non-disclosure agreements.
The session examined IT, data and artificial intelligence (AI) contracts, contrasting time-based service contracts and obligations of means with fixed-price contracts and obligations of results. It considered software development, maintenance, software-as-a-service and licensing agreements, focusing on how control over a system affects the allocation of technical, operational and financial risk. The class also covered data-sharing, data-provision, model-training, AI partnership and platform-access agreements, including data rights, intellectual property, confidentiality, liability and governance. Students classified example clauses and contracts, identified which party bore particular risks, and suggested improvements such as measurable performance criteria, clearer ownership terms, security standards and formal change-management procedures.
The session examined workplace harassment, sexual harassment and discrimination, including their legal definitions, evidential issues, employer prevention duties, reporting channels and protection against retaliation. It then covered employee surveillance and data protection, stressing legitimate purpose, proportionality, transparency, data minimisation, purpose limitation and storage limits. The class compared resignation, dismissal and mutual termination of employment contracts, alongside non-compete and intellectual property clauses. It also considered freelancing, the risk of reclassifying a freelancer as an employee, the legal benefits of incorporating a business, suitable French business structures, and civil, criminal and tax liabilities in data-related work.
The session examined intellectual-property issues raised by generative AI, including whether AI systems can be regarded as writers or artists and whether their outputs can receive copyright protection. Students debated these questions and considered the importance of human authorship, creative control, intention and originality, using the example of a non-human taking photographs to discuss the relationship between copyright protection and human authorship. The class reviewed disputes concerning AI training data, reproduction of copyrighted material, trademarks, memorisation of source works and possible compensation mechanisms for creators whose works are used to train models. It also considered the use of AI in legal practice, stressing the need for reliable, specialised systems, human review and collaboration between lawyers and engineers to protect fundamental rights. The session then introduced competition law, its aims of protecting consumers, innovation and efficient markets, and its relevance to dominant digital and AI-based platforms.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
EU and US data privacy and security frameworks, with comparison of common-law and code-law approaches.
BSc · Year 3 · 5 sessions
Course code: MEL-001
The sessions examined data and artificial intelligence through law, ethics and geopolitical choices. Discussion moved between regulatory approaches and concrete questions about privacy, discrimination, ownership and human control. Cases involving conversational robots, connected products and autonomous weapons showed why technical capability alone does not settle a decision. The account follows the arguments explored in class, including tensions between innovation, enforceable obligations and the protection of rights.
Different jurisdictions and risk-based regulation provided a setting for distinguishing enforceable duties from voluntary commitments and for discussing competing public priorities.
Privacy, consent, data-subject rights and sharing rules connected system design with identifiable people, potential discrimination and the limits of control over information.
Human control, professional ethics and supply-chain oversight extended the discussion to how systems are supplied, deployed and used by other organisations.
The session introduced the legal, ethical and geopolitical issues raised by data and artificial intelligence, emphasising that regulation varies across jurisdictions and societal contexts. It explored why artificial intelligence (AI) and data engage areas including data protection, liability, intellectual property, constitutional law, international law and discrimination. Students considered the limits of using AI in legal decision-making, including predictive systems for human-rights cases, balancing legal certainty and efficiency against human interpretation and the evolving nature of law. The class also examined definitions of AI, the distinction between narrow and general AI, calls to regulate future technological risks, and the possible legal personhood of robots. A case discussion considered arguments for and against a conversational robot inheriting an owner’s assets.
The session examined the development and purpose of the European Union (EU) AI Act, including tensions between innovation, competitiveness, sovereignty, public regulation and private ethical codes. It distinguished legal obligations from voluntary ethical commitments, explaining why enforceable rules and sanctions are significant. The class explored the Act’s risk-based model, covering prohibited, high-risk, limited-risk and minimal-risk AI systems, alongside the duties imposed on providers and other actors. It also considered the Act’s extraterritorial reach, exclusions such as military and research uses, enforcement mechanisms, regulatory sandboxes, and the particular rules for general-purpose AI models. Students discussed practical difficulties in assessing risks to fundamental rights, democracy and human dignity, as well as potential conflicts between European and international regulatory approaches.
The session introduced data protection law through discussion of children’s data, profiling, algorithmic bias and the limits of consent in digital services. It examined why data protection is important for AI, comparing the European rights-based approach with the more sector-specific approach in the United States. The class covered privacy as a broader concept than information control, including dignity, intimacy, home and communications, and considered the EU Charter rights to privacy and personal-data protection. It then introduced the General Data Protection Regulation (GDPR), including personal data, identifiable natural persons, processing activities, material and territorial scope, and the basic obligations on organisations processing data. Students discussed examples involving health data, policing, profiling, data transfers and cross-border services.
The session examined GDPR data-subject rights in AI systems, including access, rectification, erasure, restriction of processing, portability and objection, and explained privacy by design across training and deployment. It considered how biased datasets and algorithmic design can create or reinforce discrimination, and discussed fairness, auditing, impact assessments and ethics by design. The class then introduced the EU Data Act, its application to data from connected products and related services, its relationship with the GDPR, and rules on user-led data sharing, competition, gatekeepers, contracts, compensation and dispute resolution. The final section used neurotechnology to explore mental privacy, brain data, cognitive liberty, and the need for ethical and legal safeguards against misuse by companies or governments.
The session examined the ethical, legal and professional responsibilities of scientists and data specialists in relation to autonomous lethal weapons and AI used in conflict. It considered the limits of existing regulation, particularly the military exemption in the AI Act, and debated whether emerging technologies should be regulated or prohibited before they are fully developed. The class compared arguments for and against autonomous weapons, including meaningful human control, bias, accountability, international consensus and historical preventive bans on certain weapons. It also discussed whether advanced AI systems merely imitate reasoning or might develop forms of understanding or consciousness, and considered the implications for law and responsibility. Finally, the session explored corporate due diligence, value-chain oversight and contractual controls through examples of technology companies supplying tools that may be used for immigration enforcement, surveillance or defence.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
Self-awareness, assertiveness, relationship management, continuous feedback, coaching and employment rights and responsibilities.
BSc · Year 3 · 4 sessions
Course code: OS3-004
These sessions concentrated on the interpersonal side of professional work: understanding one’s own priorities, listening to another person and making expectations clear. Reflection, coaching role-play, group planning and peer feedback gave those ideas practical settings. Later work connected management with objectives and time allocation. The emphasis was on communication and working relationships, with employment rights and duties considered briefly at the outset.
Reflection, assertiveness and open questioning explored how a message is understood and how a conversation can help someone formulate their own response.
Factual feedback, emotional awareness and peer discussion connected professional presentation with the handling of tension, stress and constructive disagreement.
Delegation, measurable results and effort–impact comparisons provided ways to organise work while considering both outcomes and the people responsible for them.
The session introduced the course aims, including self-awareness, relationship management, feedback, ownership, employability and a brief consideration of employment rights and duties. Students distinguished between transferable soft skills and job-related technical skills, then reflected on their own strengths, development areas, values and preferred working environments. Effective communication was explored through non-verbal, vocal and verbal elements, active listening, assertiveness, congruence and metacommunication. Students completed group and individual reflection activities, presented examples from their experience, and practised using the situation, task, action and result (STAR) structure to communicate skills and achievements clearly.
The session explored assertive communication, including adapting messages to the listener, respecting different viewpoints, using an appropriate tone and accepting feedback. It examined levels of active listening, with emphasis on asking open questions, rephrasing accurately and avoiding premature advice when coaching someone through a problem. Students completed a coaching role-play on time management and procrastination, then reviewed how deeper questioning can help someone identify their own solutions. The class also introduced the Myers–Briggs Type Indicator (MBTI) preference framework and used it as a discussion framework for communication styles, motivation, team complementarity and role allocation. In a group activity, students designed and presented a plan for a school graduation event, including objectives, roles, logistics, sponsorship, communication and success measures.
The session revisited constructive feedback, including active listening, separating facts from judgements, checking availability, avoiding public criticism, and using the FEED structure: facts, impact or feelings, expectations or needs, and a demand or call to action. Students received practical feedback on CVs and LinkedIn profiles, focusing on clear job titles, measurable achievements, relevant technical and soft skills, consistent language, recommendations, and professional online activity. The class introduced emotional intelligence as recognising emotions, identifying the needs or messages behind them, and responding with empathy, clear communication and action. Different responses to joy, sadness, anger and fear were discussed, alongside conflict management and the importance of addressing hidden tensions through feedback. In a peer activity, students identified stressful situations and considered preparation, communication, prioritisation and support-seeking as possible responses.
The session explored management through balancing achievement of results with care for and development of people, including feedback, delegation, conflict management and setting boundaries. Students considered circles of control, influence and concern, and discussed routines that help them focus energy on controllable actions. The class introduced specific, measurable, achievable, relevant and time-bound objectives and objectives and key results (OKRs), distinguishing ambitious objectives from measurable key results and action plans; students then drafted and peer-reviewed personal, academic and career-related OKRs. Further time-management tools included an effort-and-impact prioritisation matrix, task scheduling, delegation and dropping low-value work. Students compared ideas from productivity approaches, including capturing and reviewing tasks, breaking work into next actions, building small habits, reducing distractions and using timed work sessions.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
IT sustainability and ethics, including data-centre energy use, AI impact, efficient computing, edge computing, blockchain and 5G.
BSc · Year 3 · 4 sessions
Course code: OS3-005
Environmental questions about computing were examined through measurement, infrastructure and modelling. The sessions compared data-centre efficiency and reporting claims before turning to the energy demands of artificial intelligence and forecasting electricity consumption. Calculations and practical activities connected the vocabulary with quantities and models, while keeping distinctions visible: efficiency is not total consumption, and a renewable-energy claim is not the same as a reduction in emissions.
Energy, water and emissions indicators introduced different boundaries for a claim, including operational electricity, supply chains and the location of a data centre.
Cooling, utilisation and model training or inference connected digital services with physical infrastructure and trade-offs that an efficiency figure alone cannot describe.
Neural-network exercises and electricity forecasts linked model choices with evaluation, temporal order and the interpretation of predictions and their uncertainty.
The session introduced measures used to assess the environmental impact of IT, including kilowatt-hours, carbon dioxide equivalents, global warming potential, power usage effectiveness and water usage effectiveness. It examined the growing energy demand of data centres and artificial intelligence (AI), explaining the efficiency–consumption rebound effect and the main roles of computing equipment, cooling, backup systems and infrastructure. Different data-centre cooling methods were compared, with particular attention to trade-offs between electricity consumption and water use, as well as the importance of local water scarcity. The class compared public cloud services with on-premises data centres, considering server utilisation, energy efficiency, renewable-energy claims, carbon offsets and lifecycle emissions. Students explored cloud carbon-reporting tools and learned to distinguish direct, energy-related and supply-chain emissions across Scopes 1, 2 and 3, including location-based and market-based reporting.
The session reviewed sustainability in IT, including power usage effectiveness, water usage, greenhouse-gas reporting scopes, life-cycle emissions, and the Jevons paradox. It examined sustainability claims made by major technology and AI companies, distinguishing genuine emissions reductions from renewable-energy matching and carbon offsetting. The class explored data-centre cooling systems, the role of air, water, temperature and humidity control, and the energy used by heating, ventilation and air conditioning (HVAC) and airflow equipment. Examples of data centres of different scales were used to compare efficiency, grid carbon intensity and the environmental effects of expanding AI infrastructure. Students completed calculations comparing data-centre efficiency and annual carbon emissions for sites in France and Ireland.
The session introduced the environmental impact of AI, including the energy used in model training and inference, and the role of AI in forecasting electricity-grid demand. It explained deep learning as a form of machine learning based on neural networks, covering neurons, weights, biases, activation functions, layers, classification and regression outputs. Training concepts included loss functions, optimisers, batch size, epochs, train-test splits, underfitting and overfitting. Students experimented with neural-network complexity in an interactive playground and began setting up Amazon Web Services (AWS) SageMaker and JupyterLab for a lab on image classification and carbon-aware computing.
The session introduced time-series analysis for understanding and forecasting energy consumption in smart grids. It explained why temporal ordering prevents random train-test splits, and showed how lagged values, baseline forecasts and R-squared can be used to evaluate predictions. The class covered trend, seasonality, residuals, stationarity, differencing, autocorrelation and partial autocorrelation, leading to autoregressive integrated moving average (ARIMA) and seasonal ARIMA forecasting models with confidence intervals. Students then began an AWS SageMaker Canvas activity using French hourly electricity-consumption data, configuring and training forecasting models, comparing holiday settings and discussing weighted quantile loss.
An account of teaching delivered in this course. Content and sequencing may vary between cohorts.
A structured internship experience in which students apply their technical knowledge in a professional setting, develop professional responsibility and validate 10 ECTS toward graduation.