This page summarizes my teaching accomplishments at the University at Buffalo (UB).
I have pursued a variety of teaching activities at UB. I adapted an existing course on computer operating systems to be more efficient and improved it repeatedly over 6 years. I designed and deployed a new flipped course on the internet and taught it to 440 freshman. I supervised a complete revision of our undergraduate curriculum and contributed designs for two new introductory programming courses. I led the development of several new tools to support these efforts, including autograding and video delivery software.
Much of what follows narrates material that is already available online. My courses page has a great deal of information about
every class I have taught, including links, syllabi, and student evaluations. Both of my main undergraduate courses have their own websites—
internet-class.org. My projects page describes several of my group’s experimental education projects, including software support for
ops-class.org. And my
CV (PDF) and
diversity (PDF), and
service (PDF) statements are all available online.
Overview of Courses Taught
I have taught courses to freshman, seniors, and beginning and advanced graduate students.
CSE 199: How the Internet Works
CSE 199 is a freshman-level course on the internet. I designed and deployed all content and materials for this flipped-format course. It was taught for the first time in Fall 2016 to 440 freshman. Computer science majors were not required to take it. However, all were placed into it and so many did. But the course was also open to enrollment by students from other majors.
CSE 421/521: Introduction to Operating Systems
CSE 421/521 is a joint undergraduate and graduate level course. It enrolls primarily junior and senior undergraduates and Masters-level graduate
students. It is currently required for undergraduate CS majors. I adapted the OS/161 assignments from Harvard and created the
test161 autograding system to grade them. I have taught
this class every spring since 2012 to between 100 and 200 students.
(Please note that Carl Nuessle has been lecturing frequently in Spring 2017 while I have been traveling for job interviews.)
CSE 622: Advanced Computer Systems
For two years I co-taught a 20-student course on advanced computer systems, primarily to Masters students. The course focused on introducing students to mobile systems research literature and having them rapidly prototype and build a novel computer system.
CSE 72x: Special Topics in Mobile Systems
Since 2013 I have taught a small seminar on rotating advanced topics in mobile systems. The course usually enrolls a handful of Ph.D. students. We read research papers together and provide students the opportunity to contribute to one of my group’s active research projects.
Evidence of Instructional Excellence
Below I provide evidence that I have succeeded in deploying excellent and effective undergraduate courses. I discuss my work inside and outside the classroom on specific courses, contributions to curriculum development and improvements, and a variety of other educational accomplishments.
At UB I am known as an engaging and popular classroom instructor. I have been recording my operating systems lectures since 2012, resulting in hundreds of hours of lecture content available on my YouTube channel. My channel has almost 3,000 subscribers and my videos have been viewed over 227,000 times. Course and instructor rankings for my operating systems course are regularly among the highest in the department ( 2016 (PDF), 2015 (PDF), 2014 (PDF)), despite the course’s reputation as being extremely challenging.
All the course evaluations for my large undergraduate courses are available online on my courses page. Students at UB are not required to complete the course evaluation, and typical course response rates hover around 30%. To collect representative feedback, I have used incentives to encourage students to complete the course evaluation. As a result, course evaluation response rates for my courses have usually been over 90%. I suspect that this results in more outliers—both positive and negative.
I have led several efforts aimed at improving existing courses and pioneering new instructional techniques.
To support more effective autograding for my
operating systems course, I initiated the development of the
test161 OS/161 autograder. The design of
test161 benefits from the many years of experience I had with OS/161-based operating systems courses—as
a student, teaching assistant, and instructor. It also addressed many of the problems that we encountered in early efforts to develop autograding
systems for OS/161 kernels.
The project web page has more details about its design and implementation.
But it has proved extremely effective in helping students with the challenging
OS/161 operating systems
assignments. Spring 2017 is the time that I have taught
CSE 421/521: Introduction to Operating Systems with
test161 stable from the beginning of the course
1. Student performance on the assignments has improved dramatically from prior years.
In Fall 2016 I designed and deployed a new course on the internet in a large flipped format. Several aspects of the course were novel. Course material was divided into 5-minute videos, making it easy for other faculty, industry collaborators, and students to contribute content. We built a new video delivery system to support this format, as well as a number of tools to simplify the process of recording and organizing such a large video library.
Class time was devoted to hands-on activities introducing students to a variety of internet concepts, as well as tools and environments that they would need to learn to use to succeed in future courses. Here is the list of 24 activities that we used. We aimed for a variety reflecting the diversity of the course material. Some activities were scavenger hunts. Others had students using command line UNIX networking utilities. Others had students playing online (security) games, or using existing online tutorials ( codecademy). Others had students learning about parallel processing using decks of cards or routing using toothpicks and marshmallows.
As one assignment, students were required to submit their own videos explaining course content. To grade these assignments, we modified the HotCRP paper reviewing system to simplify staff grading. A similar approach could be used in the future to support peer video grading.
I was not satisfied with the course evaluations (PDF) for the first iteration of CSE 199. Everything about the course was new, and not everything worked as planned. I am currently working with Greg Bunyea and Heeba Kariapper to understand the student feedback and plan improvements for the next time the course is taught. As part of this process I am blogging (slowly) about our experiences.
Contributions to the Discipline
Starting in Fall 2015 I led a holistic overhaul of UB’s Computer Science curriculum. Leading a team of faculty and students, we managed to modernize and streamline the curriculum while meeting ABET and SUNY Seamless Transfer (PDF) constraints. The new curriculum includes completely revamped introductory programming and theory sequences. It eliminates unnecessary requirements that had crept into the program over the years, and thereby increases the number of electives from 4 to 7. As a core part of the process, we performed a careful analysis of curricula at multiple other institutions, coding them for the purposes of comparison.
A significant part of the new curriculum is a new set of introductory programming courses. I designed these courses with help from other faculty members. Our goal was to produce a modern, rigorous, and accessible introduction to both programming as a skill and computer science as an intellectual discipline. We produced a detailed design document for the two new courses, as well as shorter descriptions of P1 and P2.
The new curriculum will begin to go into effect in Fall 2017 and be fully realized by Fall 2018. The new introductory courses will also be taught for the first time during this period.
In addition to the contributions described above, I have also been involved in a variety of other teaching-related activities:
I have served on the Undergraduate Advisory Committee for the CSE department since 2011. My service statement (PDF) describes this and other departmental and professional service activities.
I have secured a large amount of external funding. Components of my CAREER award support educational innovation. I have also received internal funding from UB’s Center for Educational Innovation to support developing our new introductory courses.
I have designed and led educational outreach programs. I started and have served as the faculty mentor for UB’s chapter of the Scientista Foundation. Scientista is a national organization dedicated to advancing women in STEM. I have also served as the faculty mentor for UB’s chapter of the ACM.
I have supervised a number of students at both the graduate and undergraduate level. In addition to research done by my Ph.D. students, I have also supervised multiple undergraduate research projects. Nick DiRienzo published several papers as a member of my group. Greg Bunyea has had a significant role in the development of our Internet seminar as the head undergraduate teaching assistant.
I lead the blue Systems Research Group and also direct the PhoneLab. My research interests are in systems and networking, mobile systems, and smartphones. I teach an introduction to computer operating systems, a new freshman course on the internet, and a graduate seminar covering a variety of contemporary topics in mobile systems.
Please click here for a longer biography.