“Those that know, do. Those that understand, teach. ”
CSC/ECE 579 — Introduction to Computer Performance Modeling
This course covers two important techniques for performance modeling and analysis of computer systems and networks: simulation and queueing theory. The course provides a good balance between theory and practice, and includes a significant project and programming component which involves the design and implementation of analytical and simulation tools to model the operation of complext computer systems, such as web servers.
CSC 316 — Data Structures (course website) A core undergraduate Computer Science course that introduces the fundamental principles and concepts underlying algorithm design and problem solving. This is the first course in the curriculum that introduces a formal treatment of data structures and algorithms. Homework assignments are designed to insitll the principal concepts, while several substantial programming projects are intended to help students integrate a wide range of data structures and algorithms for tackling complex problems.
CSC 401 — Data and Computer Communications Networks
Nearly every one of us makes use of networking on a daily basis, often without a second thought about the details of operation. A principal goal of this course is to reveal the underlying principles of operation, including packet/circuit/virtual-circuit switching and the Internet's layered communication architecture.
CSC/ECE 573 — Internet Protocols
The course is designed to instill the principles and fundamentals of Internet technologies, and it has evolved over the years to incorporate the latest developments in Internet architectures, protocols, and applications. It covers Internet architecture and protocols today and likely evolution in future, case studies of particular protocols to demonstrate how fundamental principles applied in practice, and selected examples of networked clinet/server applications to motivate the functional requirements of internetworking.
I first created and offered this course in the Spring 1997 semester. Since then, it has been one of the most successful and popular graduate courses in the department and College, with more than 2000 students having taken it, including distance education students and many students whose major is not in Computer Science, ECE, or even in the College of Engineering. Since then, the course has been taught by several Computer Science and ECE faculty.
My teaching philosophy is based on three simple tenets: planning, preparation, and enthusiasm. This mirrors my research philosophy in many ways. Planning defines the high-level course goals and what students are expected to acquire from the course. This is analogous to defining a research problem and setting a research agenda to solve it, but with a different objective function to measure success. Preparation includes the activities involved in the week-to-week delivery of the course to the students and ultimately results in meeting the planned objectives. Finally, my own experience sitting in a classroom or attending conference presentations has taught me that there is no substitute for enthusiasm. If the teacher is unable to convey his interest in the material, then there is little chance that the students will independently acquire that interest.
I teach both undergraduate and graduate Computer Science courses. My teaching goals for undergraduate courses are to help students develop the ability to think critically and independently. This includes learning problem solving skills that will be useful well after the course is finished. For graduate courses, my teaching goals are to stimulate interest in the material that encourages exploration outside the confines of the classroom, and hopefully generates interest in research topics. To achieve these goals, all my courses involve substantial, systems-oriented projects.
I have created and offered graduate-level courses in several key areas of Computer Networking: Internet Technologies and Protocols, Optical Networks, Survivability, and Performance Evaluation. I have also taught and made contributions to the core undergraduate Data Structures course and the undergraduate elective Computer Networks course. I am an avid proponent of distance education, and I have been an active participant in the College's distance education program by offering several courses through Engineering Online. One of the aspects of teaching that interests me most is to explore innovative ways for using new technology in the classroom for actively engaging students in the learning process.
I also understand that my role as a teacher does not end when I leave the classroom. I have been actively involved in advising and mentoring students since early on. For my MS and PhD students, I strive to be more than just a research advisor. I encourage them to think beyond the research problem at hand, and to consider the wider impact and implications of their research activities, decisions, and actions. I also recognize diversity and encourage different points of view and ways of thinking. I intend to continue to work with my students not just as part of their research activities, but also to help them define a meaningful role for themselves in the society at large.