Courses I taught as a TA are elaborated below:

 Rutgers University (Department of Computer Science)

+ CS534 Computer Vision [Spring 2014]: This is a basic graduate-level computer vision course that intends to cover a variety of fundamental computer vision topics to get you acquainted with the field.

+ CS314 Principles of Programming Languages  [Spring 2012, Fall 2012, Spring 2013, Fall 2013]]: The course is aimed at making the student familiar with the general concepts common to all programming languages so as to facilitate learning new languages.  Language paradigms (i.e., logic, functional, procedural, object-oriented) are compared and implementation strategies are discussed.

+ CS110 Introduction to Computers and their applications [Fall 2012]: General survey about what computers is and how they are used, including an introduction to computer programming and contemporary application packages. 

Ain Shams University (School of Computer Science)

+ Peripheral Interfaces [Fall 2007]: targeted interfacing between CPU and attached peripheral device via serial port, parallel port, USB port in addition to building custom devices and interface with CPU through IO ports.


+ Introduction to algorithms [Fall 2007, 2008, 2009]: The main focus is on techniques for constructing correct and efficient algorithms, and on tools to reason about them. Design paradigms include greed, divide-and-conquer, dynamic programming, and reduction to network flow.


+ Digital Signal Processing Applied [Fall 2007, 2008, 2009, 2010]: targets DSP concepts and their relation to applications which include Image Processing, Audio Processing and Brain Computer Interface.


+ Distributed Processing (OpenMP, OpenCL, MPI) [Spring 2008, 2009]: presents distributed processing models. The practical work comprises message passing model in terms of MPI and shared memory model in terms of OpenMP. Furthermore the course spanned OpenCL as a framework for writing programs that execute across heterogeneous platforms consisting of CPUs, GPUs, and other processors


+ Computer Architecture [Spring 2007, 2008, 2009]: targeted the design of computer systems and components. Processor design, instruction set design, and addressing; control structures and microprogramming; memory management, caches, and memory hierarchies; and interrupts and I/O structures. Practical work included VHDL design tasks, building assembler and emulator for Intel-Like processor, small-scale version.

+ Numerical computing methods [Fall 2010]: emphasizes the development of numerical algorithms to provide solutions to common problems formulated in science and engineering. The primary objective is to develop the basic understanding of the construction of numerical algorithms and the applicability and limits of their appropriate use.


+ Object Oriented Design Patterns [Summer 2008, 2009, 2010]: provides an in-depth look into how experts apply design skills. An overview of the 'gang of four' design patterns and detailed discussions on specific design patterns was presented. In addition, principles of good object oriented design and heuristics was introduced.