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.

Computer Organisation

This unit is designed for computer science students, particularly those interested in systems programming and hardware development. The students will learn about the interface between the hardware and software of a computer system. This will involve study of some aspects of computer architecture and low level interfacing to gain an insight into CPU organisation at the assembly language level. After completing this unit students will be able to write procedures in an assembly language, and use their understanding of the relationship between the instruction set architecture and the implementation of high level languages to write efficient programs.

Computer Architecture

This unit is designed for computer science students, particularly those interested in systems programming, hardware/software interfaces, and computer system performance evaluation. The topics cover memory system organisation and architecture, CPU functional organisation, pipelined and superscalar microarchitectures, multiprocessor systems, and I/O systems. After completing this unit students will understand the major issues in the state-of-the-art computer architecture, especially modern microprocessors, and will be able to use this knowledge as a basis for product choice and systems configuration.

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.

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.

Formal Languages and Automata

Three abstract models of computation are studied in this unit. The first is the finite automaton, together with regular languages and regular expressions. The second is the pushdown automaton, together with the associated languages and grammars. The third is the Turing machine. This allows study of the power of computers in general and their limitations, in particular situations: it is shown that there are problems for which there is no algorithmic solution. This unit explores the application of formal languages in the design of compilers and text processors.

And choose two of

Information Security

This unit is concerned with the protection and privacy of information in computer systems. The focus of the course is primarily on introducing basic concepts in computer and information security and then using this knowledge as the vehicle to study the design and implementation of secure computer and network systems. This unit also provides students with practical experience with security programming. In more specific terms, the unit is intended to provide the following: basic concepts of conventional and public key encryption; number theory and its application in public key encryption and signatures; protocols used in secure computer systems.

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.

Intelligent Systems

This unit provides basic studies in the major areas of artificial intelligence: search, knowledge representation, logic programming, machine learning and knowledge based systems, agent planning and learning. The first part of this unit will focus on the foundation of artificial intelligence: search algorithms and their implementations, game playing, logics and knowledge representation, and inference in reasoning systems. The second part will cover the principles of knowledge based systems (intelligent systems), planning, and machine learning.

Computer Graphics

Computer graphics is a fascinating area of computer science. It is widely used as a tool for visualising information in a broad variety of fields, including science and engineering, medicine, architecture, and entertainment. This unit teaches the concepts and techniques of computer graphics. It is designed as an introduction to the study of visual presentation techniques. Topics covered are intended to provide students with an understanding of the basic principles for design, use and understanding of graphics systems. The unit covers the basic concepts in computer graphics using VOGLE library on UNIX. Techniques and algorithms will be emphasized and programming in C or C++ under UNIX will be required.