My Philosophy on Teaching

In teaching and mentoring I aim to engage students through personal attention, group work, and competition. Students can only learn by small leaps of brilliance, and so identifying the next step and explaining it successfully is the the best way to help students absorb course material. Students benefit from explaining concepts to their peers and working through problems together. To enable such collaboration, I try to give assignments to groups of students to work out together, which tends to minimize the time students spend banging their head against the wall trying to work out difficult problems individually. In fact I have observed that group work allows students to approach and solve substantially more difficult problems. Finally, I try to promote competition among students, be it in the class room by challenging groups of students to answer a question first, or in lab sections by pitting groups against each other. Competition promotes engagement with the material, as well as leadership, communication, and reasoning skills, all parts of good engineering education.


CSCI 520: Distributed Systems - Spring '22

The design and implementation of software systems that utilize multiple host computer networks as a foundation. Concurrency control, homogeneous and heterogeneous systems, interprocess communication, protocols and application design.

CSCI 246: Deiscrete Structures - Spring '22

This course covers logic, discrete probability, recurrence relations, Boolean algebra, sets, relations, counting, functions, maps, Big-O notation, proof techniques including induction, and proof by contradiction.

CSCI 466: Computer Networks - Fall '22

Organization of computer networks and communication protocols. This course will cover the ecosystem of technologies used in today's Internet within the context of its evolution and future trends. Time permitting, topics such as mobile networks, multimedia, and network security will also be discussed.

CSCI 566: Advanced Networks - Spring '21

This course will build on CSCI 466 in exploring current research problems in telecommunications and distributed system implementation.

CSCI 366: Computer Systems - Spring '20

This course will introduce you to the fundamental concepts in computer systems, including software environments and development tools, computer organization, concurrency, databases, network communications, and cloud computing.

CSCI 440: Database Systems - Fall '17

DBMS architecture; major database models; relational algebra fundamentals; SQL query language; index file structures, data modeling and management, entity relationship diagrams.

CSCI 361: Computer Architecture - Fall '15

The structure and function of computer systems: CPU, memory, I/O. Includes digital logic, data type, instruction set design, pipelining, RISC, parallel processing, and assembly language programming.

CSCI 107: Joy and Beauty of Computing - Spring '15

Examines the computing field and how it impacts the human condition. Introduces exciting ideas and influential people. Provides a gentle introduction to computational thinking using the Python programming language.

CSCI 549: Networking Research Seminar - Fall'11 (taught jointly with Qing Yang)

In this seminar we will discuss the latest research in communication networks. Student will present choose and present papers from the following conferences: CoNEXT, NSDI, Sigcomm, IMC, MobiCom, and MobiHoc. If you are interested in attending the seminar, email me and I will add you to the Google calendar for the course.