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.