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 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.

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 unit 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 will examine elementary graphics concepts, algorithms and programming skills for producing graphical applications, in both two-dimension (2D) and three-dimension (3D) using Open GL. Techniques and algorithms will be programmed in Processing, which is a very easy-to-learn programming language yet powerful and comprehensive.