I love to teach. I find that there are very few experiences that compare with the satisfaction of imparting knowledge to receptive students. My philosophy is that teaching has to be fun for both the teacher and the students. Otherwise, it quickly becomes a chore for everyone involved. To that end, I use a number of techniques to ensure that teaching remains fun both for me and my students. This includes incorporating a large amount of interaction and short fun puzzles into my teaching. These elements ensure that students are constantly involved in the class. I also ensure that all elements of the class (lectures, assignments, and projects) are challenging and meaningful by either using real-world examples to motivate concepts or by making the assignments and projects use real world applications and scenarios. For example, when teaching about stacks, instead of making students answer routine textbook questions, it would be far more engaging and challenging to give them an assignment where they had to actually perform a buffer overflow exploit by changing the return address on the stack.
While I was an undergrad, in Singapore, I helped organise and teach a class on TCP/IP protocols. As part of the class, I helped set up practical lessons where students were provided routers, switches, and other networking equipment. They were then asked to solve interesting problems such as configuring the routers into an OSPF tree.
In addition to these university classes, I also volunteered frequently in education programmes for children organised by various external organisations. As a university student leader, I organised many activities designed to educate children. These activities included plays, weekly classes, drawing competitions, summer camps, and debate competitions.
At Carnegie Mellon university, I have helped teach both a senior level networking class and a junior level systems class. The junior level class, in particular, required me to conduct weekly recitations. Additionally, I also mentored an undergraduate student for his senior thesis and a masters student for his masters thesis. In both cases, I met the student weekly and played a key role in helping them develop, implement, and validate their thesis. This past semester, I advised three masters students on a semester long class project. The project was to design a service discovery infrastructure for mobile devices. I met with them weekly and helped them design, implement, and evaluate their project. In the spring semester, I will be helping to teach a new senior-level class on enginnering techniques for building large-scale computer systems.
As a computer science tenure-track faculty, I would be most interested in teaching courses on operating systems and mobile computing at both graduate and undergraduate levels. In addition, I am also interested in teaching courses related to file systems, distributed systems, networking and applied software engineering and usability testing.