University Of Pretoria Computer Science Department

First Year

First Semester

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.

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, 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. 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 write complete elementary programs.

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.

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.

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.

SIT143 Information Technology Orientation 2
Continuation of the SIT133 module.

Anti Semester

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.

COS101 COS101
This module is a companion for the COS132 module. It is not for credits. It is an open online module which presents the material for the credited COS132 module presented at the Computer Science Department during the first semester every year It 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, 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. 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 write complete elementary programs.

COS000 Orientation and Registration
This module has been created to aid the with orientation and registration process for first year students as well as the registration process for 2nd and 3rd year students in 2016. Degree detail, not available in the online yearbooks, will be posted here. Subject forms and other details will also be made available here.

Second Year

First Semester

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.

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.

SIT153 Introduction to computing
Introduction to computing This module introduces essential concepts and terminology related to computing. Topics covered include machine level data representation, Boolean logic and gates, data structures and types, basic computer systems organisation and algorithms.

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.

COS284 Computer Organisation and Architecture
This module provides the foundations on which other modules build by enabling a deeper understanding of how software interacts with hardware. It will teach the design and operation of modern digital computers by studying each of the components that make up a digital computer and the interaction between these components. Specific areas of interest, but not limited to, are: representation of data on the machine-level; organisation of the machine on the assembly level; the architecture and organisation of memory; inter- and intra-component interfacing and communication; data paths and control; and parallelism. Topic-level detail and learning outcomes for each of these areas are given by the first 6 units of ‘Architecture and Organisation’ knowledge area as specified by the ACM/IEEE Computer Science Curriculum 2013. The concepts presented in the theory lectures will be reinforced during the practical sessions by requiring design and implementation of the concepts in simulators and assembly language using an open source operating system.

Anti Semester

Year Long

Third Year

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, evolutionary computation, and swarm intelligence. 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, as examples.

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 web page constitutes the ONLINE STUDY GUIDE for module COS341 in the 1st Semester of 2016. Please check frequently for new announcements!

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

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.

COS326 Database Systems
This module builds on a prior introductory module on database technology and provides more advanced theoretical and practical study material.

COS333 Programming Languages
Programming languages are the backbone for software development. Each language has its own unique syntax and semantics, but there are many common concepts that can be illustrated and studied through the languages. This module concentrates on issues of object orientation, including delegation, iteration and polymorphism. It surveys how languages provide the basic building blocks for data and control, as well as exception handling and concurrency. At the end of the module, students will be able to appreciate the rich history behind programming languages, leading to independent principles that have evolved over time. They will be skilled at using a variety of programming languages (including new paradigms such as functional, logic and scripting), and will know how to learn a new language with ease. From this experience, they will be able to apply evaluation criteria for choosing an appropriate programming language in a given scenario.

Anti Semester

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.

LAB300 Project lab module
Project lab module


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
The course aims to deepen the understanding of requirements engineering, software development methodologies, quality assurance, component based development and software testing.

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.

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.

COS788 Information Hiding
Information hiding is a category of computer security that focuses on embedding information in digital objects. Information, such as digital signatures, is sometimes embedded in objects to indicate ownership or origin – a technology that is called watermarking. Alternatively information is sometimes hidden in digital objects to facilitate invisible or inaudible communication – called steganography. Steganography focuses on the confidentiality of information, while watermarking is used to protect intellectual property. This module covers the techniques and algorithms used in both technologies to embed information in objects with minimal perceptual and audible changes to the objects. The module also provides a brief overview of different multimedia formats, such as image, audio and video, in order to understand their potential and limitations in the field of information hiding. Potential attacks on information hiding systems are also investigated.

COS782 Generic programming
This module introduces the concepts of generic programming in order to generate code at compile-time. Of particular interest is the automatic generation of design pattern implementations at compile-time for use at run-time. To this end, design patterns and compile-time programming techniques such as: basic compile-time programming constructs, object allocation, generalised functors, smart pointer and multi-methods are discussed in detail and applied to design patterns.

COS786 Parallel and Distributed Computing
In COS786 we study the fundamental algorithms and techniques from Gerard TEL's classical textbook: "Introduction to Distributed Algorithms" (2nd ed.), Cambridge University Press. This course is suitable for students of Computer Science as well as for students of Computer Engineering who have already studied computer networks and concurrent programming at undergraduate level.

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/cyber-security topics that are current and relevant to industry. The curriculum for this module is annually determined to reflect the current research interests of the Cyber-security/Information security researchers in the department. The main topics include, but are not limited to: Big Data Science and Cyber-security (Identity Deception), Big Data Science and the Insurance industry, Security-aware cloud computing, and other related topics. Students will be challenged to contribute innovative research ideas in the field of Cyber-security/Information Security 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
[20-July-2016]: 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, if it truly deserves the title "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. In this course COS741 we study particularly the SOFL method which is also CASE-tool-supported.

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
(Please pardon poor paragraph breaks below.) <p>In 2016 COS783 will explore two related, but distinct themes: digital forensics and digital investigations.</p> <p>An immediate challenge when studying these two topics is that they are often conflated in the literature and in practice. An additional challenge is that the notion of digital forensic science is not mature yet, and arguably needs further development and creative thinking.</p> <p>Digital forensic science is situated in the contexts of other branches of forensic science, of the judicial and law enforcement systems and the requirements of being scientific. Given its potential impact on peoples' lives, ethics forms an inherent part of this context - not only in terms of the professional ethics of the practitioner, but also in terms of the nature of the discipline itself. Therefore a broad perspective is required. In this module students will be confronted by concepts dictated by the contexts described above. Many of these concepts will be outside the typical frame of reference of a computer science students - and, quite possibly, outside the comfort zones of some students.</p> <p>In general the purpose of forensic science is to apply science to conclude facts that may be of use in matters of law. In particular such factual conclusions assist the court to decide a legal dispute. The best known example of such a conclusion is arguably a finding that two DNA samples originate from the same donor. This may prove that a subject was indeed on the scene of a crime or that DNA found on such a scene originated from another donor. The word 'forensic' refers to the forum where legal matters were argued in Roman times. Forensic science therefore literally refers the application of science to reach conclusions that may be used in such a forum - or, in the modern context, in a court of law.</p> <p>The same factual conclusions that assist the court to decide a legal matter are often useful when the police, private investigators or similar entities investigate a crime or incident. Note that neither the court, nor the investigator relies solely on forensic evidence to reach its conclusion, though.</p>

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.

COS791 Special Topics (Image Analysis and Understanding)
In this course you will learn the foundations of image analysis and how we can use this to understand the image better. Topics that will be covered are: the human computer vision system, sampling and frequency domain processing (Fourier Transforms and other transforms), image processing operations, feature extraction and object description.

Anti Semester

Year Long

COS700 Research Methods and Project
COS700 is COMPULSORY. All students ---also part-time students--- MUST take it in their FIRST study-year at Honours Level.

HON016 Honours 2016


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

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 &amp; Privacy, Free/Libre/Open Source Software and Corporates, Modern Mainframe Systems.

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.

MIT862 IT Research
MIT862 introduces the student to research skills required to complete the research required for the mini-dissertation.

Anti Semester

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.

All content copyright © Department of Computer Science, School of IT, University of Pretoria, South Africa