Student Led Courses
In my first year at UC Davis, I had the opportunity to take a course taught by an undergraduate student. The course proved to be the most practical course I took as an undergraduate, and I felt inspired to pass that knowledge on through teaching the class myself after the instructor graduated. But there was a problem. Davis didn't have a program to support this kind of student-led teaching. In fact, undergraduate instructors were technically not permitted. This didn't sit well with me and a close friend of mine. We had a class we wanted to teach. And we knew that students at other universities, like Berkeley, Stanford, and Carnegie Mellon, to name just a few, had the ability to do exactly that.
We approached the Academic Senate and proposed a policy to permit undergraduates to design and teach classes on topics of their own choosing. After a year of researching, presenting, lobbying and negotiating, the Senate accepted our proposed policy under the title "Student Facilitated Courses." As you can tell by the section title above, we disagreed on what to call the program. I am still insulted by their choice as it minimizes the effort that student instructors put in to design their courses. Since then, I've had the pleasure of teaching three courses, two through my home department of Computer Science. All three are described below.
If you are currently an undergraduate at UC Davis and are interested in teaching your own student-led course, feel free to contact me. I'm more than happy to walk you through the process and provide guidance on being an instructor.
Bitcoin and Cryptocurrency Technologies
I designed and taught my third class, a 2-unit upper division course titled Bitcoin and Cryptocurrency Technologies in Spring 2016 under the supervision of Karl Levitt. I co-taught with Vincent Yang. The first half of our course is based on Princeton's Bitcoin and Cryptocurrency Technologies course. Lecture notes (some incomplete) and their corresponding .tex files are available online.
The term project specifications can be viewed here. Towards the end, the project morphed from "What new system would you create?" to "Present an existing system or propose a modification of an existing system." In retrospect, that should have been the project from the beginning. The projects are publicly available here; I was most impressed by Team 2.
Nine of 23 students submitted evaluations. The first three questions are on a five-point scale, and the remaining questions are on a ten-point scale. Before the course began, students with little programming experience asked to add a 1-unit version of the class to learn the conceptual material; we agreed. Looking back, this was a mistake. It increased our workload, which precluded us from developing more thoughtful assignments. We also had to teach to two very different audiences, which I think was best captured in a student's following comment: "I had no idea what hashing was and never constructed a tree before. I couldn't understand how those concepts played a major role in Bitcoin. Similarly, I felt lost throughout most lectures. I'm not sure if it's because of my insufficient background, or me just not taking good enough notes." Given another opportunity, I would have been adhered to the course's prerequisites I initially set.
History of Computer Science
I designed and taught my second course, a 1-unit lower division seminar in Spring 2015, on the History of Computer Science. In case you're interested in learning more about it, here is the updated syllabus. I want to thank Sean Davis for serving as my instructor of record, as well as Nina Amenta, Phillip Rogaway, Matthew Farrens, Norm Matloff, Vladimir Filkov, Patrice Koehl and Lori Avellar for making the seminar possible.
The two main books I used were Computer: A History of the Information Machine and The Universal Computer: The Road from Leibniz to Turing. I also enjoyed reading Logicomix: An epic search for truth while searching for course material.
Eleven of 15 students submitted course evaluations, and nine submitted the extended course evaluation. You can read their responses. The evaluations were handwritten, so I digitized the students' responses. Some handwriting was illegible, so some information was lost.
The first course I taught was a 1-unit seminar for University Honors Program students on how to maximize one's undergraduate educational experience. I co-taught with Patrick Sheehan. The course was based on a previous course we both took taught by Rajiv Narayan. I may post the material at some later date, but for those interested in the key lessons, read Cal Newport's Blog.