Welcome to NtateLephadi's homepage

bookmarks are recommended for new users

View My GitHub Profile

Checkout my github repos

CSC1015F

Introduction to Computer Science: What is Computer Science, Applications of Computing, History of Computing, Computer Hardware (Machine Architecture), Computer Software (System Software, Applications), Algorithms, Programming Languages Introduction to Python Syntax: Basic syntax, variables, operators, comments, expressions, output Conditionals: Boolean expressions and logical conditions, If statements, nested ifs, if-else, if ladders, Loops: for, while, nested loops Strings and Input Functions: parameters, return values Testing: debugging, equivalence classes Arrays: lists, dictionaries, sets, multi-dimensional arrays Recursion Sorting and Searching File I/O: text files, exceptions Number Systems: Machine representations of data, Binary operations, Boolean algebra

CSC1016S

Introduction to Object Oriented Programming (OOP), Java syntax OO Design, UML I, Classes and Instances Methods, Variables, Constructors Statics, References, Aggregation/Composition Inheritance, Polymorphism, UML II Graphics, GUIs Abstract data types, Interfaces, Generics, Design Patterns Arrays, Linked lists Stacks, Queues Testing with JUnit Ethics in Computing and ICT for Development Ethics; Professional Practice; Legalities of Software Systems; Open Source Software Development; ICT for Development

CSC2001F

Data Structures 1:

Analysis of Algorithms: We will discuss how to express the running times of algorithms in a way that enables us to distinguish an efficient algorithm from an inefficient one. Trees (general, binary, AVL): We will study tree data structures, their applications, their algorithms and various techniques for ensuring their efficiency. We will end by studying Hash Tables in order to learn how to store large amounts of data in ways that are relatively easy to index and search.

Data Structures 2:

Searching must sometimes be done in terms of priority. Priority queues ensure that the information is always ordered so that the information with the highest priority is easily accessible. This is a good thing because retrieval can occur in constant time. Priority queues, and also B-tree indexes, will be studied. On a final note, we will discuss some graph algorithms because indexing and searching operations typically do not occur independently but rather as a sequence. It is therefore important to find ways of doing so optimally. For each of the data structures, we will discuss their pros and cons, as well as application examples for which each one is best suited. Databases: This module aims to develop an understanding of what makes a good database and an awareness of the issues in database management. On completion of the module students should be able to design, create, populate and query a database.

CSC2002S

Parallel and Concurrent Programming

This module covers the basic principles and practice of parallel and concurrent programming with threads in Java, with aim of highlighting both the power and inherent complications of multithreaded programming. Topics: Introduction to parallel and concurrent programming, with definitions and overview of hardware; Threads; Parallel algorithms; Parallel Performance; Mutual exclusion; Thread safety; Condition Deadlock and Reader/Writer problem; Other topics - GUI’s and cancellation

Mobile design and Development

Mobile Development is an in-depth view and discussion on evolving mobile interface design principles with the objective of creating improved mobile user experiences. Topics: What is Mobile?; Mobile Operating Systems; Coding Apps; Mobile Web; UI Design Principles for Mobile; Input and Visualizations Computer Architecture This is an introduction to high-level concepts in modern computer architecture. Topics include: assembler; principles and implementation of CPU architecture; pipelining; multicore architectures; caching; virtualization; CPU/memory performance; RAM; and secondary storage. Additional topics, such as interfacing, GPUs and USB may be covered as well.

CSC3002F

Networks

Starting with the application layer network configurations and popular tools, the focus will be on the TCP/IP suite’s transport, network, and data link layers.

Operating Systems

This is an introduction to the structure and organisation of operating systems. Major topics include storage management (paging/segmentation, virtual memory, file systems) and protection and security issues.

CSC3003S

Advanced Software Design 1 and 2

This part of the course is about software design, that is, how to turn ideas into quality effective and efficient code in a systematic and controlled manner. We start by reviewing O-O & UML, project management and software development methodologies. We investigate software development with SCRUM. Software architecture is an important topic together with design patterns. Theory of Algorithms Algorithms are central to computing. This course describes how algorithms are categorised. We learn interesting algorithms in each category and analyse their complexity.

Theory of Computation

This part of the course focuses on the question: What are the fundamental capabilities and limitations of computers? We study this question by considering the central areas of the theory of computation: automata, computability, and complexity.

CSC3022H

Introduction to C++

C++ program structure; pointers and C++ memory management model; streams and I/O; object orientation in C++; resource management; operator overloading; function objects; templates; the STL; exceptions

EEE2050F

The purpose of this course is to introduce second year students to a wide range of digital system concepts with a specific focus on embedded systems. This course aims to give students a strong foundation in embedded systems by introducing them to digital system fundamentals, including: information representation, Boolean algebra, logic gate behaviour, combinational and sequential digital circuits, digital building blocks and algorithmic state machines; C programming with a focus on microcontroller applications; basic microcontroller usage, including an introduction to computer architecture, general purpose input/outputs, analogue to digital convertors and basic timers.

EEE3096S

This course integrates aspects of embedded systems and computer architecture. This course builds upon the Embedded Systems 1 (ES1) second year course, which provided fundamental knowledge of electronics, computer architecture and embedded system design. The course is divided into two parts.

Part I

involves computer architecture, operating systems, and using a single board computer embedded platform and an embedded Linux operating system in case studies and in practicals. A miniproject (Project A) is performed which involves implementing a state machine and performing thorough analysis of its design and performance.

Part 2

concerns digital system design, focusing on HDL coding and applying these skills in lab practicals to simulation state machines and other constructs that are useful in embedded system design.

ML_LABS

Introduction to Machine Learning

Types of learning – supervised, unsupervised, evolutionary, reinforcement; neural networks; Naïve Bayes networks; generative learning algorithms; clustering; Q-learning; policy and value function approximation.