Teaching

Advanced Programming (CSE201): Fall semester 2017-Current

The Advanced Programming is a successor to the Introduction of Programming course. The main goal of this course is to prepare students to the challenge of building large-scale programs which multiple functional components, some of which could be designed/implemented independently. The course will use Java to to introduce students to concepts of object orientation, reusable code design, test-driven development, programming to an application-programming-interface, pattern oriented program design and implementation etc. At the end of the course the students are expected to be able to work in teams in order to develop large application programs starting from a reasonably well-defined application design with multiple independent components with well-defined interfaces.

Foundations of Parallel Programming (CSE502): Spring semester 2017-Current

Constrained by the heat and power usage, today all computing devices are composed of multicore processors, with little or no increase in clock speed per core. In order to harness the power of the multicore processors, software applications being developed also needs to be parallelized. This makes parallel programming a very important paradigm of computing.This course introduces the fundamentals of parallel programming. It will cover both traditional approaches and new advancements in the area of parallel programming. A key aim of this course is to provide hands-on knowledge on parallel programming by writing parallel programs in different programming models taught in this course.