Computer Science and Engineering, Lehigh University
I teach courses in two broad areas. The first is low-level computer systems topics, such as Operating Systems, Computer Architecture, and Programming Languages/Techniques (particularly parallel programming). At the undergraduate level, these courses typically involve a textbook (Tanenbaum's Operating Systems; Bryant and O'Hallaron's CS:APP; Herlihy and Shavit's Art of Multiprocessor Programming; McCool, Robison, and Reinders Structured Parallel Programming). The parallelism course employs six projects, involving C++/TBB for parallelism topics and java.util.concurrent for the concurrency topics. The OS and Architecture courses emphasize programming ability, along with concepts that are evaluated through a series of exams. At the graduate level, my operating systems course emphasizes reading and analyzing research papers (2-4 papers per week), along with low-level systems programming.
The second area in which I teach is mobile computing. Here, my focus is on the Anrdoid platform, with an introductory project in mobile gaming for first year (undeclared) engineering students, and a capstone-style course for seniors in advanced mobile application development. Source code for the undergraduate mobile gaming project is available here
Below is a listing of courses I have taught, or expect to be teaching in the near future.
Unfortunately, most of the materials for these courses are only available through CourseSite. Please contact me if you seek additional information about syllabus, projects, or other aspects of these courses.
I have also supervised a number of undergraduate independent study courses, as well as several senior projects in Computer Science and Computer Engineering. Please contact me if you are interested in working together.