Postgraduate Information
Higher Diploma
Applicants for the HDipCS must have a degree in a science-related field, provided that they have completed some mathematics as part of their degree. The material covered in the Higher Diploma contains most of the material covered in our undergraduate programme, and diplomats are well equipped for careers in computer science. These include (but are not limited to) the following:
- Systems analysis and design
- Systems development and maintenance
- Management
- Consultancy
- Teaching
- Research
The HDipCS offers students a solid grounding in the essential aspects of Computer Science. Prepar- ing them for positions in the computing industry and many other sectors such as banking, finance etc. While the HDipCS is primarily intended for graduates from other disciplines, computer science graduates from other universities whose curricula are significantly different from the Wits curriculum and who wish to pursue research degree studies at Wits may also find this a good place to start. This is an intensive diploma programme, covering most of the computer science undergraduate topics. In initiating the programme, our School’s intention was to provide an additional opportunity to graduates from other science-based disciplines, by introducing and exposing them to a significant breadth and depth of com- puter science knowledge. The aim is to place you, the HDipCS student, in a strong position to make the best use of computing technology in your area of original expertise, or to reorient your career towards computing.
- Basic Computer
Organisation
A Computer System is a dynamic entity used to solve problems and interact with the environment. It is composed of software, hardware and the data they manage. At the center there is the information that needs to be processed and stored as data. The textbook describes this as the Information Layer. To understand this we will address
- Binary values, number systems
- The relationship to representing different types of information
Directly dealing with the data is the Hardware Layer. While we have no intension of designing or even describing a real computer, there is a variety of principles and ideas that are basic and enable us to understand the organisation of computers and the way they work. These include:
- Boolean algebra
- Electrical circuit design
- Basic components and how they interact
In order to do the processing required, computers need to be given - and to follow in order - a set of instructions. To illustrate the idea of how the machine is programmed at the lowest level, we will introduce the ideas of machine code and assembly language. These concepts are part of the programming layer.
- Data and Data
Structures
In any job relating to the discipline of Computer Science, it is of vital importance to be able to solve problems efficiently, decide which problems are amenable to computational solutions, and implement those solutions in an efficient manner. To this end. this course will be focused on problem solving and its relation to programming. The programming language used is Python, a powerful open-source language.
Course content:
- Problem solving
- Computational thinking
- Basic Python
- Data structures in Python
By the end of the course you are expected to be able to do the following:
- solve simple computational problems
- reason about solutions to problems
- choose between multiple solutions
- program correctly and efficiently in Python
- make use of accepted programming practices
- reason about data structures and their relation to algorithms
- have an understanding of basic searching and sorting algorithms
- Fundamental Algorithmic
Concepts
Algorithms are a central issue in Computer
Science. The School of Computer Science at Wits recognises this and so
we have an algorithms theme throughout our curriculum (at least one
algorithms and data structures course per year of study). The first
year Fundamental Algorithmic Concepts (FAC) topic covers important
proof techniques and introduces some of the well-known algorithms and
data structures.
This topic focuses on algorithms. Specifically we
want to start looking at how we, as computer scientists, can develop
correct and efficient algorithms. There are two main threads in the
topic - correctness and complexity. This study of algorithms will focus
on such issues as problem description, developing a formal specification
of the problem, developing an algorithm to solve the problem, reasoning
about the correctness of the algorithm and determining the complexity of
the algorithm.
Graphs, which are an important abstraction in
Computer Science, will form the basis of our study. They can be used
to represent many concepts in Computer Science. A number of proof
techniques that are useful in Computer Science will also be studied.
These include direct proofs, proofs by contradiction, proofs by
mathematical induction and constructive proofs. Graphs will be used as a
vehicle for studying these proofs. We will then move onto studying some
well-known algorithms. Some of the algorithms that we study will be
algorithms that operate on graphs.
- Database
Fundamentals
A Computer System is a dynamic entity used to
solve problems
- Application and
Analysis of Algorithms
The Application and Analysis of Algorithms
course explores techniques of designing, analysing and implementing
algorithms by using graph algorithms as a case study. Graph algorithms
and the theory behind them are among the most important and useful in
Computer Science, with applications in a surprisingly wide range of
practical problems, including finding paths and routes in networks,
resource allocation, project management, design and simulation. We
will look at how to go about designing such algorithms, analysing them
for their efficiency, and choosing appropriate data structures.
The theoretical part of the course will be
complemented by a strong practical component, and there will be
significant programming work. In this basics section, we shall be using
the Java language for implementing algorithms. Material covered will
include: programming techniques and practice (including an introduction
to object orientation and abstraction), the Java language, and debugging
techniques.
- Operating Systems
A Computer System is a dynamic entity used to
solve problems
- Programming
Languages
A Computer System is a dynamic entity used to
solve problems
- Algorithms and
Artificial Intelligence
A Computer System is a dynamic entity used to
solve problems
- Software
Engineering
A Computer System is a dynamic entity used to
solve problems
Honours
The School offers a strong Honours programme in computer science (BScHons). This course covers as much computer science as is done in the entire undergraduate programme, which allows us to broaden and deepen students’ knowledge of computer science. The Honours programme also introduces students to research, which is important for students who intend to study further, and for students going into industry where they will be expected to do self-motivated analytic work. Students who do well in the HDipCS may apply to do Honours in a subsequent year. Note that entry to Honours is extremely competitive. We have in the past expected students to obtain 65% in the Higher Diploma for admission to Honours, but you should aim for 70% to be sure of a place in the Honours programme.
Honours Courses
- Introduction to Research Methods
The Introduction to Research Methods (IRM) and Research Report (RR) topics are intended to give you some exposure to research and the scientific method. If you will be going on to a higher degree in Computer Science then the knowledge and experience gained from these topics is invaluable. If you do not intend to read for a higher degree the knowledge and skills gained will still be of great benefit, and you may even change your mind about a higher degree. Other benefits are learning to read and understand scientific papers, learning to argue logically and coherently and improving your writing and presentation skills. You will also get an opportunity to find out more about current computer science research beyond the research area that you will specialise in during the Research Report.
The aim of this topic is to start the process of introducing you to research methods (the process will be continued in the RR topic). This will be achieved by working through various stages of the research process — starting with reading and analysing papers, finding literature, studying research methods, analysing hypotheses and experiments, coming up with hypotheses, and finally preparing a prototype research proposal.
- Analysis of Algorithms
Algorithms are a central issue in Computer Science and thus we have an algorithms theme throughout our curriculum (at least one algorithms or data and data structures course/topic per year of study).
The objectives of this algorithms theme are that our Honours graduates should
- be able to discuss and use various classical approaches for designing algorithms
- be able to analyse the efficiency of algorithms
- be able to compare two algorithms
- be able to reason that the solution method for an algorithm is correct
- understand and be able to discuss classic algorithms
- be able to discuss and use various classical data structures
- understand the interrelationship between algorithms and data structures
- be able to design and perform an experiment to empirically verify the analysis of an algorithm
- be able to design and perform an experiment to empirically establish the running time of an algorithm
- have some idea of designing and analysing parallel algorithms
- have an understanding of NP-Completeness, intractability, computability at least at a superficial level.
- Computational Molecular Biology
The use of computational methods in the biological sciences has become one of the key tools for molecular biologists, and are increasingly important in their research. Many of the computational problems are very hard, and are often characterised by very large data sets. Computational biology is important and interesting because of the growing application areas and the difficult computational problems posed in the area.
Many of the techniques have great applicability in other domains. The material we study is not only important because of the interest in computational biology, but also because the theory and techniques are generalisable in other areas.
The course is primarily intended for computing and mathematical science students. A basic introduction to the biological models will be given, but only to the extent that it is necessary to understand the abstractions that are used to express the computational problems. This topic is a formal part of the computer science honours programme. Students from other mathematical sciences honours programmes will be able to do the course, provided they are able to demonstrate the requisite mathematical and computational background (including ability to program). This course will provide an overview of the problems in the area, and give an overview of the algorithms and approaches used to solve them.
- Image Data Processing
An Image is a data set of points each of which has two (or more) geographical coordinates (i.e. there is a spatial grid). At each point there is an associated attribute vector. The vector data can be of any type, and the purpose of image analysis is to visualize and extract information from the data in the context of its geographical relationship.
Examples of images would be photographs (i.e. recordings of reflected light - of any spectral range - across a scene), displays of other geographically related measures (such as the intensity of the Earth’s magnetic field), or other types of information such as voting patterns by districts etc.
The databasing and comparison of multiple co-registered images is normally handled in a Geographic Information System (GIS). (Not addressed in the course.)
The purpose of processing image data is to extract features and information of interest from the plethora of data available in the image. We will always be considering digital images, but any image can be scanned (and thus discretized) to provide it in this format. We will also assume that the geographic information associated with the image is given and accurate and that storage is not a problem (not trivial expectations).
Topics covered in the course include:
- Image Enhancement
- Recognising Patterns
- Visualising Data as an Image
- Data Condensation
- Image Compression
- Computer Architecture (High Performance Computing)
This is an introductory course on models of high-performance computing architecture and their use for both compute and data intensive applications. It focuses on the models of supercomputers, network clusters, general purpose graphic processing units (GPGPUs) and techniques that not only speed up computations but also manipulate massively large datasets.
The course content will be contain topics on:
- Introduction to High Performance Computing Architectures: SMP, Network Clusters, GPGPUs
- Introduction to Parallel Computing Concepts
- Introduction to Message Passing Interface (MPI)
- Intermediate level coverage of MPI
- Using MPI Inter-communicators
- High-level Derived Datatypes
- Graph Virtual Topology
- Collective Communications and Performance Testing
- Parallel I/O (MPI-IO) and Scientific Data Management
- Use of Parallel File System with PVFS2
- Scientific Data Management with HDF5, NetCDF, Chunked Array Files & PyTables
- Introduction to OpenMP
- Hybrid Programming with MPI and OpenMP
- Parallel programming models: Partitioned Global Address Space (PGAS), Global Array Toolkits, Unified Parallel C(UPC) and MapReduce
- Parallel Numerical Libraries
- HPC in Scientific Applications: Diffusion Equation, Interacting Particles
- Database Management Systems
The requirement to evolve database management systems to handle the massive amount of data being generated today, has defined new areas of active research. Not only are traditional databases undergoing redesign, but new disk architectures and new parallel multi-core computing architectures and availability of relatively large main memory, are directing database researchers to develop new processing techniques for handling very large datasets. This course covers a number of topics from core techniques in relational data management to emerging topics on specialized file systems. We will address structures and components used in building traditional DBMS and examine their limitations. We then study techniques developed for highly-scalable data processing in parallel database systems. The course material will be drawn from textbooks as well as recent research literature.
Topics to be covered will be drawn from the following:
- Review of database architecture
- Relational database design
- Relational algebra and SQL
- Databases versus emergence of specialized file-systems
- External memory algorithms and analysis
- Index structures
- Query execution and query optimizations
- Parallel query plans and operators
- Concurrency control and recovery
- Transaction management
- Data warehousing and online analytical processing
- Semi-structured Data models - XML and XQuery
- Honours Research Project
All Computer Science Honours degree students must satisfactorily complete an honours project before he/she can graduate. The work of the project must be self-directed but supervised or co-supervised by an academic staff of the School of Computer Science. It is the student’s responsibility to get an academic supervisor, based on intended interest of the student and research areas of the supervisor. The student is responsible for conducting the work and submitthing copies of the final report to the supervisor and the research report coordinator. Note that a research project can be one of the number of topics proposed by the academic supervisor or one proposed by the student. A guide towards selecting a supervisor that matches your intended project is to browse through the research interests of the academic staff.