Teaching

In Fall 2014, I will be teaching a graduate-level course titled “Fault Tolerant Computer System Design” (ECE 695/CS 590). The course can be taken by any graduate student with some programming (C, C++, or Java; some scripting language) and OS experience; it is not meant only for advanced PhD students.

I am involved with a service learning program at Purdue called EPICS. Through this, I have been working with a team of undergraduate students building innovative software for community non-profit organizations – Home with Hope and the Tippecanoe County Probation Department. Our team is called “Database and Innovative Software for the Community” (DISC). I was awarded a service learning grant from Purdue University in 2006-07 for this project.

In previous semesters I have taught:

  • ECE 695 (earlier ECE 572): Fault Tolerant Computer Systems (Spring 03, Spring 04, Spring 05, Spring 07, Spring 09, Spring 11, Fall 12, Fall 13) – a research oriented course on building dependable computer systems
  • ECE 369: Discrete Mathematics for Computer Engineering (Fall 2004, 05, Spring 06, Fall 07, Spring 08, Fall 08, Spring 13) – a junior level undergraduate course
  • ECE 368: Data Structures and Algorithms (Fall 02, Fall 03) – a junior level undergraduate course

Here is some advice for Plan of Study (PoS) of graduate students whose advisory committees I am serving on.

  1. Put the minimum number of courses in the Plan of Study (POS) that you have to take as per the guidelines. You can always take more courses than what you have put in the POS. But you are committed to taking the courses that you have put in the POS.
  2. In the early semesters (say the first three semesters), take 2 courses each. After that take preferably 1 course each semester. You may have to break this guideline to get the courses that you want, prepare for QE, etc. Balance project/implementation-heavy courses with analytical courses, such as, ECE 547 with CS 503.
  3. If you have a prior MS, see if you can transfer some of the credits from there. These would count as “Related Area” courses.
  4. Courses offered by Computer Science (CS) count toward the “Related Area” courses. So consider taking relevant ones from there. As a result, most students in our research group take 2 Math and 3 Related Area courses.
  5. For the core courses, you would typically take ECE 608 and ECE 600.
  6. You should consider taking ECE 695 (Fault-tolerant Computer System Design) and ECE 673 (Distributed Systems). These courses meet the requirement of ECE courses numbered above 611. ECE 695 will get a permanent number from Fall 2013.
  7. If you are working in a security-related project, consider taking CS 526.
  8. If your probability and statistics background is not solid, say if the knowledge has become somewhat rusty, consider one or two of the following courses for your Math requirement: MA 519 (Introduction To Probability), MA 532 (Elements Of Stochastic Processes), or MA 538 (Probability Theory I).
  9. An easy, though irrelevant for most (but not all) DCSL students, Math course to take to meet the requirement is MA 511 (Linear Algebra with Applications).
  10. If you feel you are lacking in some programming, object-oriented, or OS background at the undergraduate level, consider taking one or more of these in your first year: ECE 368 (Data Structures) – for learning C and basic algorithms, ECE 435 (Object-Oriented Design Using C++ And Java) and ECE 469 (Operating Systems Engineering). These can qualify for graduate credit.
Last modified: April 21, 2015