Students must complete the following six compulsory units

Data Structures and Algorithms

This unit introduces students to fundamental data structures and algorithms used in computing. The material covered forms the basis for further studies in programming and software engineering in later units. The unit focuses on the ideas of data abstraction, object-oriented programming, and software reuse. Issues relating to computational complexity of algorithms are addressed throughout the session. Topics covered include: the fundamental abstract data types (lists, stacks, queues, trees, hash tables, graphs); recursion; complexity of algorithms; internal and external sorting and searching algorithms; file structures; and B trees.

Systems Programming 1

This unit provides an introduction to the knowledge and skills required for the design, writing and support of technical software and other such functions normally falling within the role of the systems programmer. It provides for detailed study of a systems programming environment and its application to systems programming tasks.

Formal Software Engineering

This unit is concerned with the design, development and post-delivery maintenance of software systems. The unit pays special attention to requirements engineering, formal specification techniques and design methodologies. The B-method is used to produce consistent, re-usable specifications and develop code that is both efficient and correct.

Systems Programming 2

This unit complements and extends the work already done in Systems Programming 1. It covers advanced topics in programming that are directly relevant to systems level application design and implementation. As such it addresses the main concepts, principles, and techniques for system level programs that utilise virtual memory, dynamic link libraries, asynchronous I/O, and multi-threading that can support high levels of concurrency. The unit also emphasises and builds a sound understanding of kernel level objects, as well as error and exception handling techniques, and focuses primarily on using the low-level functionality exposed by the operating system's C/C++ language API.

Operating Systems

This unit provides an introduction to the theory and practice of the internal structure, implementation and functionality of operating systems. The unit is relevant not only for systems programmers, but also for applications developers who need to understand how operating systems control computer hardware, and how they provide convenience, efficiency and security for application development and implementation.

Computer Organisation

This unit is designed for computer science students, particularly those interested in memory and CPU functional organisation, hardware/software interface, systems programming, and computer system performance evaluation. The unit will provide students with a fundamental knowledge of computer systems abstraction, design, exploitation and configuration. Students will primarily gain an insight into the low level interface between the hardware and software in terms of ISA (Instruction Set Architecture) abstraction of a computer system, where students will use assembly language to deal with memory addressing, load-store architecture, and I/O operations. The students will also learn about the hardware implementation of major datapath components and pipelined micro-architectures. After completing this unit students will understand the major issues in the state-of-the-art computer architecture, especially the modern microprocessors.

And choose two of

Internet Programming

This unit offers students basic concepts and latest technologies of internet programming and web-based application development. Utilising one of the popular internet programming languages, such as Java, it aims to develop the programming skills and methodologies required for both client-side and server-side programming as well as general purpose programming. The range of topics covered by the unit includes HTML, XML, Java applets, desktop application in Java, servlets, JavaServer Pages and JDBC.

Distributed Systems and Programming

This unit covers concepts and design of, and programming for distributed systems. It builds on basic network communication protocols (specifically IP) to cover client-server programming using both the system level socket interface and remote procedure calls. It also examines large-scale distributed system architectures, particularly those based on distributed objects, and considers the complexities inherent in distributed transactions. Key concepts covered include data and algorithmic distribution, idempotent protocols, stateless and stateful servers, and distributed system transparency. Illustrative case studies are included.

Systems Administration Programming

This unit covers programming techniques and tools used to administer standalone and networked computer systems. The unit focuses on the use of high level interpretive scripting languages to automate everyday administrative tasks, and to monitor and control running systems. Techniques to extend scripting language capabilities by dynamic linking to compiled code are examined, particularly in terms of access to operating system level functions. The unit also examines the use of administrative programs and tools to monitor and adjust system performance and capacity.