Course Information
Undergraduate
Computer Science is usually done as part of a Bachelor of Science degree over a three year period. The Wits Computer Science entrance requirement is a good Matriculation pass with at least a C in Mathematics on higher grade.
The curriculum is:
| Computer Science I | Mathematics I | Two other courses |
| Computer Science II | Mathematics II | One other course |
| Computer Science III | One or two other courses |
We advise our students to choose other courses on the basis of what interests them. Many of our students do Computational and Applied Mathematics, but one can select from a wide range of courses from the Faculties of Science and Humanities.
A number of students register for the Bachelor of Economic Science and major in Economics and Computer Science.
First Year
- 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.
- Limits of
Computation
Computers are becoming more and more a part of
everyone's daily
life - it is difficult to find an area of life which is not affected
by computing. As future Computer Scientists it is important that you
have an understanding of the limitations on the things computers can
do and of the limitations on the things computers should be used for.
The purpose of this topic is to investigate the
limits of aspects of Computer Science from various perspectives -
theoretical, technical and sociological. The topic is divided into
three parts:
- Computability
- Artificial Intelligence
- Social and Ethical Issues
Second Year
- 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
Third Year