Courses List
First Year
Year Long
ACM101 ACM ICPC Training Module
This module is the official page for the Coders Guild. Sessions include training for the ACM International Collegiate Programming Contest, other related contests, as well as other fun programming related activities.
First Semester
COS131 Introduction to Programming
The aim of this module is to acquire a sound knowledge of basic computer programming
concepts and an introductory knowledge of data structures. The theory of these concepts,
as well as design methodologies, will be investigated. Understanding rather than
memorising is emphasised in order to stimulate creative thinking and the development of
innovative skills amongst students in the field of computer programming. The C
programming language is used to implement these concepts. At the end of the module a
short introduction to object-oriented programming using C++ will be given. After
completing this module, a student should be able to design and write structured, efficient
programs using the C programming language, be familiar with the basic data structures,
pointers and file processing, and have an introductory knowledge of advanced data
structures and object orientation.
COS132 Imperative Programming
This module introduces imperative computer programming, which is a fundamental building block of computer science. The process of constructing a program for solving a given problem, of editing it, compiling (both manually and automatically), running and debugging it, is covered from the beginning.
The aim is to master the elements of a programming language, and be able to put them together in order to construct programs using types, control structures, arrays, functions and libraries. An introduction to object orientation will be given.
After completing this module, the student should understand the fundamental elements of a program, the importance of good program design and user friendly interaction mechanisms. Students should be able to conduct basic program analysis and write complete elementary programs.
COS133 Introduction to Programming 1
Introduction to Programming 1
This module introduces imperative computer programming, which is a fundamental building block of computer science. The process of constructing a program for solving a given problem, of editing it, compiling (both manually and automatically), running and debugging it, is covered from the beginning. The aim is to master the elements of a programming language, and be able to put them together in order to construct programs using types, control structures and arrays. COS133 is part of the four-year programme for Computer Science.
COS135 Introduction to programming 3
The module follows a practical programming approach. It
will consolidate fundamental prior problem solving and programming
knowledge.
COS151 Introduction to Computer Science
This module introduces concepts and terminology related to the computer science discipline. Topics covered include the history of computing, machine level representation of data, Boolean logic and gates, basic computer systems organisation, algorithms and complexity and automata theory. The module also introduces some of the subdisciplines of computer science, such as computer networks, database systems, compilers, information security and intelligent systems.
The module is divided into two parts. Firstly, an introduction to program design will be presented by means of flowcharts. The focus of this first part will be on practical, pen-and-paper program design prior to program implementation, in addition to a software-based practical flowcharting component. Secondly, a broad overview of the fundamental concepts underlying computer science, as well as many of the sub-disciplines within the field will be given. The practical focus of the second part will be on short research assignments.
SIT110 Information Technology Orientation
This module provides academic support and development within the context of Information Technology. The course will help guide students with regard to communication skills, study methodologies and values. Students will specifically be exposed to different study methods in order for them to develop their own, critical thinking, time management and prioritisation, taking of notes, and the use of references and citation thereof. Additionally the module will expose students to Information Technology and its influences.
SIT133 Information Technology Orientation 1
Information Technology Orientation 1
This module provides academic support and development within the context of Information Technology. The module will help guide students with regards to communication skills, study methodologies and values. Students will specifically be exposed to different study methods in order for them to develop their own critical thinking, time management and prioritisation, taking of notes, and the use of references and the citation thereof. Additionally, the module will expose students to Information Technology and its influences.
Second Semester
COS110 Program Design: Introduction
The focus is on object-oriented (OO) programming. Concepts including inheritance and
multiple inheritance, polymorphism, operator overloading, memory management (static
and dynamic binding), interfaces, encapsulation, re-use, etc. will be covered in the
module. The module teaches sound program design with the emphasis on modular code,
leading to well structured, robust and documented programs. A modern OO programming
language is used as the vehicle to develop these skills. The module will introduce the
student to basic data structures, lists, stacks and queues.
COS121 Software Modelling (C++)
The module will introduce the concepts of model-driven analysis and design as a
mechanism to develop and evaluate complex software systems. Systems will be
decomposed into known entities, such as design patterns, classes, relationships,
execution loops and process flow, in order to model the semantic aspects of the system
in terms of structure and behaviour. An appropriate tool will be used to support the
software modelling. The role of the software model in the enterprise will be highlighted.
Students who successfully complete this module will be able to conceptualise and
analyse problems and abstract a solution.
COS143 Introduction to Programming 2
This module follows on from the previous module and introduces the concepts of functions, memory management and libraries in the imperative programming paradigm. An introduction to object orientation will be given. After completing this module and the module prerequisite, the student should understand the fundamental elements of a program, the importance of good program design and user friendly interfaces. Students should be able to conduct basic program analysis and write complete elementary programs.
SIT120 Information Technology Orientation
This module SIT 120 is a continuation of the SIT 110 module. Hence, it provides academic support and development within the context of Information Technology. The module will help guide students with regard to communication skills, study methodologies and values. Students will specifically be exposed to different study methods in order for them to develop their own, critical thinking, time management and prioritisation, taking of notes, and the use of references and citation thereof. Additionally the module will expose students to Information Technology and its influences.
SIT143 Information Technology Orientation 2
Continuation of the SIT133 module.
Second Year
Year Long
First Semester
COS153 Introduction to Programming
Introduction to Programming 3
The module follows a practical programming approach. It will consolidate fundamental prior problem solving and programming knowledge.
COS212 Data Structures and Algorithms
Data abstraction is a fundamental concept in the design and implementation of correct
and efficient software. In prior modules, students are introduced to the basic data
structures of lists, stacks and queues. This module continues with advanced data
structures such as trees, hash tables, heaps and graphs, and goes into depth with the
algorithms needed to manipulate them efficiently. Classical algorithms for sorting,
searching, traversing, packing and game playing are included, with an emphasis on
comparative implementations and efficiency. At the end of this module, students will be
able to identify and recognise all the classical data structures; implement them in different
ways; know how to measure the efficiency of implementations and algorithms; and have
further developed their programming skills, especially with recursion and polymorphism.
COS216 Netcentric Computer Systems
This module introduces the principles of netcentric computing that can be applied to the
WWW and internet as well as to distributed applications. The main focus is on the
concepts of client and server side programming, web-based applications, port and socket
interaction, writing programs that require remote function calls, and achieving database
connectivity using the appropriate technology. The supporting technologies of mark-up
languages and scripting languages are also studied. It will also test the ability of a student
to use, integrate and maintain the necessary software and hardware required to illustrate
the concepts specified.
SIT153 Introduction to computing
Introduction to computing
This module introduces concepts and terminology related to computing. Topics covered include the history of computing, machine level data representation, Boolean logic and gates, basic computer systems organisation and algorithms. The module also introduces some of the subdisciplines of computing, such as computer networks, information management, information security and intelligent systems.
Second Semester
COS222 Operating Systems
Fundamental concepts of modern operating systems in terms of their structure and the mechanisms they use are studied in this module. Real Time, Multimedia and Multiple Processor Systems are defined and analysed. This module also deals with modern design issues of process management, deadlock, memory management, input/output management, file systems and security.
COS226 Concurrent Systems
Computer science courses mostly deal with sequential programs. This module looks at
the fundamentals of concurrency; what it means, how it can be exploited, and what
facilities are available to determine program correctness. Concurrent systems are
designed, analysed and implemented.
Third Year
Year Long
COS301 Software Engineering
The module exposes students to problems associated with software development on an
industrial scale. Overall goals of the module are: to become familiar with the latest trends
in software engineering; to understand the software engineering process and to
appreciate its complexity; to be exposed to a variety of methodologies for tackling
different stages of the software lifecycle; to understand and apply the concepts of
systems administration and maintenance; to complete the development of a fairly large
object orientation-based software product. The focus of the module is on a project that
lasts the whole year. The project is completed in groups of approximately five (5)
students and teaches students to take responsibility for a variety of roles within a group,
and to understand the different requirements for these; to experience the advantages and
problems of working in a group; professionalism with regards to particularly colleagues
and clients.
After the successful completion of this module, the student will be able too: understand
the psychology of a client; work in groups; and have an appreciation for planning,
designing, implementing and maintaining large projects. These qualities should place the
students in a position in which they are able to handle software development in the
corporate environment.
First Semester
COS314 Artificial Intelligence
The main objective of this module is to introduce a selection of topics from Artificial Intelligence (AI), and to provide students with the background to implement AI techniques for solving complex problems. This module will cover topics from classical AI, as well as more recent AI paradigms. These topics include: Search methods, game playing, knowledge representation and reasoning, machine learning, neural networks, intelligent agents and evolutionary computation.
In the practical part of this module, students will get experience in implementing (1) game trees with suitable algorithms, (2) a genetic algorithm and applying it to solve a real-world problem, and (3) a neural network and applying it to solve a real-world problem.
COS332 Computer Networks
The objective of this module is to acquaint the student with the terminology of
communication systems and to establish a thorough understanding of exactly how data is
transferred in such communication networks, as well as applications that can be found in
such environments. The study material includes: concepts and terminology, the hierarchy
of protocols according to the OSI and TCP/IP models, protocols on the data level,
physical level and network level as well as higher level protocols. The practical
component of the module involves programming TCP/IP sockets using a high level
language. The emphasis throughout is on the technical aspects underlying the operation
of networks, rather than the application of networks.
COS341 Compiler Construction
This module introduces you to the fundamentals of compiler construction, based on the classical recursive descent approach.
The course powerfully demonstrates the practical value of theoretical notions such as regular grammars,context free grammars and attribute grammars, etc.
The course is structured around the idea of specifying a so-called LL(1) grammar for a programming language. When you can do this, you can then easily derive the code for both a scanner and a recursive descent parser for the language.
Once this is achieved, you are shown how to enhance the code so that it not only finds the first syntax error in an input source program, but recovers, and finds all other syntax errors.
Then you are shown how to enhance the code even further to find so-called static semantic errors---errors that relate to typing issues.
Finally you are shown how to derive, for an error-free source program, the translated (eg assembly / machine) code for an input program.
The really "magic" thing about all of this, is that, once you have specified the language in LL(1) format, a substantial part of the compiler's code can be automatically generated by compiler-generator tools.
COS344 Computer Graphics
The aim of this module is to acquire a sound knowledge of the basic theory of interactive
computer graphics and basic computer graphics programming techniques. The theory will cover graphics systems and models, graphics programming, input and interaction, geometric objects and transformations, viewing in 3D, shading and rendering techniques. The module includes a practical component that enables students to apply and test their knowledge in computer graphics.
Second Semester
COS326 Database Systems
This module builds on a prior introductory module on database technology and provides
more advanced theoretical and practical study material.
COS330 Computer Security and Ethics
This module develops an appreciation of the fundamentals and design principles for
information assurance and security. Students will develop a clear understanding of the
basic information security services and mechanisms, enabling them to design and
evaluate the integration of solutions into the user application environment. Emphasis will
be placed on services such as authorisation and confidentiality. Students will acquire
knowledge and skills of Security Models such as the Bell-LaPadula, Harrison-Ruzzoconfidentiality service by focusing on cryptology and the practical implementation thereof.
The student will be introduced to professional and philosophical ethics. At the end of the
module students will be able to engage in a debate regarding the impact (local and
global) of computers on individuals, organisations and society. The professionalism of IT
staff will be discussed against national and international codes of practices such as those
of the CSSA, ACM and IEEE.
COS333 Programming Concepts: Declarative Programming
In courses to date students have encountered languages within the imperative, object-oriented and concurrent programming paradigms. Conventional "Programming Languages" courses focus on cross-comparing language features within and between these paradigms---e.g. studying the differences and similarities between OO languages such as Java, C++ and Smalltalk; or cross-comparing C++ and its imperative counterpart C.
This year, COS333 will have a somewhat different focus. The course will zoom in on two entirely new (to students) programming paradigm: declarative programming, which divides into functional and logic programming. In each case, the relevant background theory to these programming styles will be presented (Lambda calculus for functional programming, and resolution refutation within first order predicate calculus for Logic programming). Then, a representative programming language from each paradigm will be studied, showing how the theory finds application in these languages, and showing how the languages can be deployed in powerful ways.
Historically these language paradigms have played important roles in computer science. They continue to influence the design of new programming languages and features. Description Logics in the study of ontologies for the semantic web and generics/templates in C#, Java and C++ are some recent examples of such influence. For this reason, it is important that a rounded education in Computer Science should include knowledge of these programming paradigms.
Honours
Year Long
COS700 Research Methods and Project
This course shall prepare the student for scientific and scholarly research projects. To this end, we must ask ourselves: What does this mean - "scientific"? What is a "method"? - etc. This course COS700 offers some answers to such questions. This website IS your study guide to COS700; NO printed study guide will be handed out in addition to this study guide website. Please check regularly for updates and further announcements. ALWAYS KEEP IN MIND THAT THIS COURSE IS DIFFICULT AND NEEDS A LOT OF WORK EFFORT IN ORDER TO BE PASSED SUCCESSFULLY!
HON013 Hons-Curriculum: General Announcements for 2013
This page will convey general information about BSc-Hons in the academic year 2013. Please make sure that you regularly visit this page.
First Semester
COS710 Artificial Intelligence (I)
This module focuses on two Computational Intelligence paradigms, namely Evolutionary Computation and Swarm Intelligence. Within the Evolutionary Computation paradigm, algorithmic models of Darwinian evolution will be studied, including genetic algorithms, genetic programming, evolutionary strategies, evolutionary programming, differential evolution, cultural algorithms and co-evolution. Within the Swarm Intelligence paradigm algorithm models of social organisms found in nature will be studied, including ant algorithms and particle swarm optimisation. These algorithms will mostly be studied in the context of complex optimisation problems, including multi-objective optimisation, dynamic environments, constraints, and finding multiple solutions. Prior knowledge assumed include good programming skills and an undergraduate module in calculus.
COS720 Computer and information security (I)
This module focuses on state-of-the-art security topics that are current and relevant to industry. The curriculum for the module is determined annually to reflect the current research directions as pursued by the Information and Computer Security Architectures (ICSA) researh group. The main topics include, but are not limited to: Applied security, including operating system security, secure coding, and cryptography; Trust and trust management systems; Privacy and privacy-enhanced technologies; Social Engineering. Students will be challenged to contribute innovative research ideas in the field of Computer Security by completing a number of mini projects such as writing research papers and writing software programs.
COS730 Software Engineering, I
This module covers various perspectives of Software Engineering theory and practices. It provides an overview both of the challenges in contemporary software engineering (such as scale, complexity and urgency) and of the recommended practices for overcoming these challenges. It will familiarise students with both the historical and current theories about activities for the design, development, deployment and ongoing operation of software. It will show how these activities aim to be predictable, repeatable, robust, value-producing, and how they aim to meet the specified requirements for the intended system users. It will also emphasise that standardisation and reuse can be important factors in successfully engineering software. The module assumes prior knowledge about Software Engineering at the level of an introductory/undergraduate module.
This course is divided into two parts: Part A will cover topics on advanced software methodology. Part B will cover topics on component based development.
COS740 Formal aspects of computing (I)
The focus of this module is on a formal approach to deriving algorithms, known as "correctness by construction". It relies on Dijkstra's guarded command language (GCL) for specifying the derived algorithms. The requirements of an algorithm are initially stated in terms of a pre- and a post-condition, specified in first order predicate logic. Strategies are given for progressively refining these specifications to GCL notation which can, in turn, easily be translated into a conventional programming language. The surprising power of the method will be demonstrated. Not only are algorithms guaranteed to be correct (in the same sense that the proof of a mathematical theorem is guaranteed to be correct); they frequently turn out to be remarkably efficient. In the early part of the module, a number of well-known algorithms (such as linear and binary search, raising a number to an integer power, finding the approximate log of a number, etc) will be derived in order to become thoroughly familiar with the approach. Later various intermediate level algorithms will be derived (such as simple raster drawing algorithms, pattern matching algorithms, finding the longest string of a certain type, an algorithm to solve the majority voting problem, etc). Finally, the method will be used to derive state-of-the-art algorithms to minimize finite automata and to construct formal concept lattices. The theory necessary to understand these topics will be provided. The value-objectives of the module are: to develop an appreciation that theory can be effectively deployed to solve practical problems; to value the elegance of the algorithmic solutions; and to value a correctness-by-construction mindset over one that is content with debugging into correctness. A basic understanding is assumed of first order predicate logic, as well as competency in mathematical reasoning.
COS785 Computer graphics
This module is intended as an advanced module in real-time computer graphics and shader programming. The module includes the following topics: Advanced texture mapping, curves and curved surfaces, shadow mapping, skeletal animation, ray tracing and collision detection. The module assumes prior knowledge of introductory graphics as presented in an undergraduate module and a working knowledge of linear algebra and calculus.
COS787 Spatial databases
This module covers the major themes of spatial databases with application to geographic information systems (GIS), i.e. systems concerning data with an implicit or explicit reference to a location relative to the earth. Topics covered include an introduction to spatial databases and spatial data management systems, representation of geographic data, spatial data modelling, computational geometry, spatial data indexing, query processing and spatial data standards. For Computer Science students the module is an introduction to the ever increasing application field of geographics information systems (GIS), and for Geoinformatics students the module provides insight into the Computer Science foundations of the field.
Second Semester
COS711 Artificial Intelligence (II)
This module focuses on three Computational Intelligence paradigms, namely Artificial Neural Networks, Artificial Immune Systems, and Fuzzy Systems. Within the Artificial Neural Networks paradigm algorithmic models of neural learning will be studied, including supervised, unsupervised, and reinforcement learning. Aspects that influence the performance of artificial neural networks will be studied in depth. Within the Artificial Immune Systems paradigm algorithm models of different views of the human biological immune system will be studied, including negative selection, clonal selection, network theory and danger theory models. The Fuzzy Systems paradigm include models of reasoning with uncertainty, specifically fuzzy logic and rough sets. Prior knowledge assumed include good programming skills and an undergraduate module in calculus.
COS721 Computer and information security (II)
This module focuses on state-of-the-art information security topics that are current and relevant to industry. The curriculum for this module is annually determined to reflect the current research directions as pursued by the Information and Computer Security Architectures (ICSA) research group. The main topics include, but are not limited to: Information security management, including policies, standards and procedures; Risk management; Privacy; Ethics; Legal issues in Information Security; Information security services and technologies. Students will be challenged to contribute innovative research ideas in the field of Information Security Management by completing a number of mini projects such as writing research papers and writing software programs.
COS731 Software engineering (II)
This module discusses software architecture, including the representation of designs, definitions, styles and patterns of architecture. Its themes include model-driven architecture, formal modelling and analysis, and architectural description languages. The module will show that the architecture of a software system is determined by the collection of significant design decisions made early on in the development of that system – decisions concerning the components comprising the system, repeating-patterns of system-wide aspects, and the platforms on which the system will be built. It will discuss how, once these decisions are made and subsequently followed, they end up profoundly affecting the development, deployment, use and ongoing enhancement of that system. The module assumes that the student is familiar with software development lifecycle concepts, and that she/he has been part of at least one significant software development effort. Those who have not completed COS730 will be provided additional background.
COS741 Formal Aspects of Computing II
[29-Jan-2013]: In any engineering discipline it would be unthinkable to construct a large system without having a precise notion of what is to be built and without verifying how the system is functioning. Software engineering should be no different in this respect. In order to support these goals, FORMAL METHODS involve the use of mathematical notation and calculus in software development.
COS750 Educational software development
This module provides the foundation to evaluate and develop educational software. It will introduce didactic principles applicable to the discipline of Computer Science. Using these principles, educational software, such as tools for teaching programming, on-line testing software, and adaptive software to name a few, can be evaluated and developed. Computer Science topics of interest are: programming environments, persistence of information and knowledge, knowledge representation etc.
COS781 Data mining
Data mining is the extraction of novel knowledge, or hidden patterns, from large data bases. The focus of this course is on how the computational intelligence techniques (such as evolutionary algorithms, swarm algorithms and neural networks) can be used for knowledge extraction. In addition, traditional machine learning techniques (such as decision trees and rule induction) will be covered. The pre-processing of data in preparation for data mining algorithms, as well as the post-processing of results after data mining, will be discussed. Exploratory data analysis and statistical data mining methods are also investigated. Finally, some attention will be given to more modern problems, such as the extraction of hidden knowledge from unstructured data, such as text and images. It is highly recommended that students do COS710 and COS711, as knowledge of these modules are assumed.
COS783 Digital forensics and investigations
This module will teach the basic theoretical concepts of digital forensic investigations. This module is designed to prepare a student for a wide range of people including, but not limited to, law enforcers, crime investigators and people responsible for internal incident investigations in larger organisations. Digital forensics is a relatively new and upcoming field. It is a field that is not well known by most organisations and therefore, such organisations are ill informed about the digital forensic processes required to conduct a successful digital forensic investigation. The large number of digital devices used to commit crimes or other related incidents, such as fraud and corruption, proved motivation for this module in order to investigate and combat these incidents successfully. The main topics covered, but not limited to, include: An introduction to Digital Forensics; Digital forensic processes; Hardware forensics; Digital forensics tools (software forensics); Forensic readiness; A digital forensics laboratory/facility; Network forensics; Live forensics; Professionalism and ethics in digital forensics; Cyber forensics; Cyber law. Students will be challenged to contribute innovative research ideas in the field of Digital Forensics by completing a number of mini projects such as writing research papers and writing software programs.
COS784 Computer networks
This module covers computer networking principles and the operation of the TCP/IP protocol suite. The module includes studying the operation of relevant protocols, administration of network services, troubleshooting, as well as network design issues and challenges. Prior knowledge is assumed on basic data communications principles, the ISO OSI reference model, and the basic operation of protocols in the TCP/IP protocol suite.
COS786 Parallel & distributed computing
Computational science relies on the analysis of often complex models, for its empirical data and analyses typically involve an enormous amount of calculations. Parallel computing is one means of reducing the time needed to complete such calculations. This module will examine the kinds of problems that lend themselves to parallel computation and the methods for implementing programs to solve such problems. The aim of the module is to provide a background for parallel and distributed computing as well as practical knowledge of the implementation of computational experiments.
COS791 Special topics (II)
From time to time, the department presents lectures on special topics within Computer Science. This module will be used to present such special topics.
Postgraduate
Year Long
MIT840 Mini-dissertation (Class-based portion)
This part of MIT840 is the final preparation phase for the research component of the MIT degree.
First Semester
MIT842 Computer Science in Perspective
Computer Science in Perspective: The aim of this module is to serve as an introduction to the discipline of Computer Science. We will be exploring algorithms on different levels of abstraction; some basic modelling of algorithms and code using UML; understanding the nature of programming and how to manage programmers. We will also be exploring some selected topics in Computer Science such as Formal Methods, Artificial Intelligence and Computer Security.
MIT860 ICT Infrastructure Management
The course covers various disciplines of IT infrastructure management from the perspective of people, process, and technology. Topics include performance management, network management, and capacity planning.
Second Semester
MIT850 Life Cycle and Maturity Models for IT
The module aims to introduce the fundamental techniques of software engineering, by looking at maturity models, software life cycles and methods, standards and procedures to assess and measure quality of processes.
MIT853 Corporate IT Systems
This module focuses on the problems posed by large systems typically exemplified by integrated IT applications in the corporate sector. Facets covered are the relationships between components in the system (hardware, software, people) and the processes in the system.
The following themes will be covered: Enterprise Resource Planning (ERP) Systems, Customer Relationship Management (CRM) Systems, IT Security & Privacy, Free/Libre/Open Source Software and Corporates, Modern Mainframe Systems.
MIT862 IT Research
MIT862 introduces the student to research skills required to complete the research required for the mini-dissertation.

