One of the unexpected side effects of the COVID-19 pandemic was the opportunity to virtually co-teach Computer Architecture at Princeton University during the spring of 2021. Princeton was in need of an instructor, and given that everything was over Zoom anyway, they were able to choose riffraff from anywhere, and we were it.
The experience of teaching Computer Architecture from the Hennessy and Patterson text we fondly remember was both interesting and gratifying. The course was a senior undergrad/grad course with a heavy lab component focused on implementation of the concepts from text and lectures. For both of us, having taken the course approximately 20 years prior and coming back to teach it after working in industrial settings, led us to want to recap our experience for the SIGARCH crowd.
The tl;dr of it is that we had a great experience and we think most of the students did as well. One comment from a course evaluation in particular stuck out:
I loved this course. I hope industry guest lecturers like the magnificent Dr. Hsu and Dr. Vantrease become more of a recurring thing in the future – one of the silver linings of the pandemic.
Of course, it never hurts to be called magnificent (you take your wins when you get them!). But we think part of the reason for the student enthusiasm is this: Computer Architecture is not a basic science, it is an applied and industrial field. Our industrial experience, as expressed through connecting the course material to professional stories, retrospects, and lessons learned, brought the course material to life. Simply put: when students see the curriculum’s relevance, they are more interested.
Employing industrial practitioners to teach the next generation should be a regular occurrence in our universities. It helps reach students as they are at the cusp of deciding how they want to spend their careers and whether they go to graduate school or not. But in order for it to be successful, there are a few key ingredients:
- Co-teaching can be time-efficient. It is possible to co-teach a semester and hold down a full-time job. Being responsible for only half of the lectures not only spread the workload out, but also enabled a bit of flexibility for when immovable meetings occurred. It also allowed us to divvy up the lectures according to expertise, which reduced the number of times one of us had to go back and “relearn” material that had been paged to disk (or even tape!).
- Co-teachers should work well together and have a similar level of commitment and goals for the course. Despite having split lectures, we wanted the students to have a cohesive experience. We have been friends for over a decade and have similar styles in terms of how to really drive educational narratives with examples, discussions, and humor. We were both very dedicated to making a good educational experience for the students and put a lot of time and effort into our roles.
- Up-front organization is vital. We front-loaded before the course started and got familiar with the operational aspects of the course – course materials are all on the web these days – setting a syllabus and posting it, discussion threads on course websites, etc. Additionally, we made a plan for exactly what we wanted to cover and how to split them up so that we could plan ahead, made sure our meetings schedules could be accommodated, and carved out lecture-prep time on our calendars. It was during this time we evaluated and made decisions about where we would follow the prior course and where we would stray. For record, the most-to-least-changed: schedule, lecture material, exams, homework material, course readings (H&P), laboratories (verilog).
- Be Authentic. It’s best to lecture in one’s own voice. Neither of us felt comfortable just regurgitating someone else’s lectures – at the same time it seemed daunting to build a series of lectures from scratch. So we ended up with a bit of a hybrid approach, bootstrapped by a mish-mash of borrowed slides as well as a fair amount of our own spin. Creating our own custom content was really fun, but meant we also had to adjust the exams accordingly for veering off script. We now have deep respect for any professor who develops new courses.
- Have good support systems in place. We were new to this experience and busy people. With full time jobs and as a one-time investment, we leaned on others.
- Teaching Assistants: The department was great in this regard and made certain that we would have strong TA support, and we are forever grateful for our main TA Marcelo Orenes-Vera for his role in making the course successful, as well as Paul Jackson, who did some supplemental TA work that was incredibly helpful to us also.
- Bootstrapped Slides/Exams: We are intensely grateful for David Wentzlaff, whose course we took over, for providing us with all of his materials so that we could bootstrap his efforts. We also borrowed heavily from the marvelous Dan Sorin, who also generously provided his entire slide decks to us to freely use. And finally, we scraped the internet for material as well, and found muses in material from Christos Kozyrakis, Onur Mutlu, and Natalie Enright Jerger for both lectures and exams.
- Miscellaneous: Internal Department Resources, like the chair and department administrators were also on hand to help us navigate unexpected situations. Additionally, an informal network of trusted professorial friends, consulted at odd hours over SMS, were a catch-all for everything else (like how to best administer online exams during a pandemic).
- Stories matter. We each had stories about how or why certain tradeoffs were made from the trenches, and this helped capture the student imaginations and made the material more lively. It also helped that we work at competing public cloud providers, which also allowed the students to see that there is not necessarily “one answer” for times when we do not do things the same way.
- Dedicate lecture time to current work experiences. Describing one’s “day job” can help students see where a career in computer architecture can carry them. We each drew from our current work experiences – Dana in ML accelerators and Lisa in datacenters – to color a lecture.
Despite our good experience, we had challenges, too. The pandemic put a damper on the traditional socializations that happen inside and outside of the classroom. As lecturers, we missed the efficient and reliable method of quickly glancing across a class full of body language to gauge how the material was landing. Over Zoom, this was difficult and frankly impossible when cameras were off. Outside of the lectures, the student-to-student teaching was missing: the sort that happens in the wee hours of university basement lab spaces. The conversations we remembered and imagined our students having were not happening: “Oh, here’s a script I wrote to make X easier.” “Oh *that’s* the difference between sequential and combinational.” “Oh – dude nWave is amazing, check out what you can do with it.” We did our best to compensate with a variety of experiments: periodic surveys, offering guidance, connecting individuals, and supplementing slide decks to fill the gap, but nothing substitutes for the real thing of person-to-person interactions. Improving these social experiences, which build knowledge, community, and soft skills, should be a top priority for any future teaching, particularly if virtual.
Some time has passed since we taught the course. In that time, we have had time to reflect about the experience. On a professional level, it has helped us recruit interns and form new professional mentor/mentee relations. On a personal level, the intriguing opportunity Princeton professor Margaret Martonosi identified for us turned into a fully encompassing and tiring passion project that we look back on fondly and with pride. Long story short – we really enjoyed our experience and hope that others – both practitioners and university department administrators – may consider this more of a regular occurrence than a one-off.
About the Authors:
Dana Vantrease is an engineer at Amazon Web Services – Annapurna Labs. Dana leads end-to-end (customer-to-metal) programmability and performance initiatives for the Trainium1, a custom-silicon datacenter-scale ML chip.
Lisa Hsu is a Principal Engineer at Microsoft in the Azure Compute group, working on strategic initiatives for datacenter deployment.
Disclaimer: These posts are written by individual contributors to share their thoughts on the Computer Architecture Today blog for the benefit of the community. Any views or opinions represented in this blog are personal, belong solely to the blog author and do not represent those of ACM SIGARCH or its parent organization, ACM.