DAVID MALAN: So my name is David Malan and I do teach this course called CS50 at Harvard, which is our introductory course in computer science for majors and non-majors. All of the slides and photos and visuals that I'm about to show will be at this URL right here. If you'd like to play along at home cs50.ly/illinois21. So in the call for participation for the workshop there is this wonderful list of directions that each of us could go in and I feel like I could touch on most any of these, but I thought I should try to focus on just one of them, ultimately, and let me propose that, ultimately, my case here be for advocating for new approaches in a way that I'll soon define. And I should note too, a disclaimer of sorts. So not only was everyone in our orbit here in Cambridge fortunate enough to stay healthy this past year, this was also, for us, sort of the evolution of some 15 years worth of experimentation and teaching online. So what you're about to see is not the result of our having woken up some year plus ago and decided we'll do things this way. But really was an evolution of the things we've been trying out, some successes and failures along the way. And so ultimately, even though what you're about to see does involve quite a few people, quite a few resources, ultimately, the germ of the idea that I'd ultimately like to leave us all with is just rethinking what it is we do with our more traditional on-campus courses. And as we infuse them with these online aspects, not to think of it as being an either or between on-campus or online, but really to design these online courses in a way that they're fully woven into the fabric of our on-campus courses. So that very on-campus course here is called CS50. It is indeed freely available as OpenCourseWare, if you'd like to take a look at the curriculum at any point there, and it is also one of these MOOCs, or massive open online courses on edX as well. So back in the day this is what things used to look like in 2019 and prior, when we would all convene for the course's lectures. Here in Cambridge, we would have some 800 students on campus through Harvard College as well as a couple of more through Harvard Extension School and other variations of the class. And beyond just gathering more traditionally for the academics of lecture have we have long had a tradition of more community oriented events. These are our office hours and a big library on campus. This is a photo from one of our hackathons, sort of a capstone toward the end of the course where students spend quite a bit of time in close proximity to each other as well working on final projects. And then a so-called CS50 fair at semester's end, which is a presentation of all students' final projects. So among the first questions we had this past year when deciding how to go into Fall 2020 was which, if any of these, traditions we could preserve. And right off the bat it looked like none of them, really. And so, really, our interactions with students were going to be limited, of course, to Zoom in some form. And so we began to focus as heavily as we could really on trying to bring the course as much to life as we could even in that strictly online format. Even for our otherwise on campus students. Now for many years we had indeed had this tradition of having the fortune of being able to film the class, even prior to COVID, and with nice 4K resolution, widescreen cinematography in a beautiful space like this here, one of the theaters on campus. And so frankly one of our first considerations early on was: well, maybe we should just rerun the previous version of the course. 2019's version was very highly produced, it seemed to go quite well curricular and otherwise. We could just reuse all of those same assets. And in fact, this was something we had in sort of the back of our pocket, just in case we weren't able to do justice to what it was we had as a vision for Fall 2020. As well. Now, of course, this was also an image from a previous lecture in Fall 2019 and all of this had to go. And as much as we've endeavored over the years to bring lectures, in particular, to life once more or more per week by involving students on stage and demonstrations, the creation of these so-called memorable moments. That too was something we feared that if we redid the class live Fall 2020 online only in some form where we're going to have to start sacrificing some of those very visuals, some of those very memorable moments that we could reuse in some form in 2020. So that too was on the forefront of our mind. But kind of ridiculously, I think, the first fix or change that occurred to multiple members of our team here was that for like 5, 10 years have I been using at the very start of CS50, which is ostensibly taught in C and in Python primarily as an introduction to programming for students, we also spend a week on Scratch, this graphical programming language from MIT's Media Lab. And for some reason or other, for years, I had been introducing students to the notion of loops and iteration by making a cat like this on the screen cough not once, not twice, but three times iteratively just to paint a picture of what loops are for. So we got, sort of, multiple realizations off the bat that this is the first thing that had to go. Now in retrospect, I don't know why we weren't using what we went with in Fall 2020, which was just have the cat say meow instead of cough, but that was at least among the earliest and easiest challenges to then tackle. So at this point now back in March, April, May of 2020 did we start thinking about how we were going to approach presenting this course to students presumably, if they themselves were entirely online. And we again have experimented over many years, now, with different demographics of students both at the college, through executive education, graduate schools here at Harvard. So we had a number of different formats and evolutions over time. So for instance, this year is a picture of what perhaps the most homegrown solution might have been. You can also use phone books if you have a stack of those as well. But this is perhaps the sort of most makeshift approach that we took, myself took when teaching Zoom in some form in the past. Now we started experimenting shortly thereafter, though, with something a little more conducive to a teacher moving around a little bit and standing and feeling like they're in sort of a classroom. And so we essentially, through experimentation and a bit of hardware here and there, turned my kitchen, an artist's rendition of it appears here, into essentially a mini video Studio a big white backdrop from Amazon and back, a couple of LED lights in the front and the back, and then just my laptop at standing height on the kitchen counter on one of those stand to sit desks that would allow me ultimately to stand. And so indeed, this for me was sort of one of the primary goals, was not to have to teach a whole course sitting. As you can see, my sort of extremities sort of start to exude energy on their own. And so having a setup like this actually lent itself to a bit more dynamism in the kinds of feel of the class that we wanted to present to students. Picture here is just a closer up of that same sort of setup. So early on too, last summer, we started experimenting with software. And of course, we're all here on Zoom and most of us are familiar with sharing a screen on Zoom, which in the traditional way looks a little something like this screenshot here, where one of us is relegated to a pretty small tile, maybe in gallery mode with a few other teachers or students. And then the screen takes up most of the space, which makes sense for visuals but very easily starts to decouple the presentation from the presenter. And it starts to feel more like just a sort of old school slide show as opposed to a live and living and breathing class. And so we experimented with one tool with which some of you might be familiar, OBS, which is an open source project which allows you to create your own layouts in software on your own Mac or PC and then present it to Zoom as a virtual camera. So we started experimenting with formats like this. So same code same slides, but a bigger version of me, which I don't think was motivated by, fundamentally, a desire for just me to be what students see primarily, but just to try to keep them all the more visually engaged, especially if the slides or the code are up there, the entirety of class. It feels a little more closely like you're actually continuing to have a one on one or one on few chat with each other. So besides using a tool like OBS, we began to experiment, too, with some topologies that we had used in here on campus. So in fact Margaret Seltzer, one of yesterday's presenters, and I used to co-teach a class together here on campus, for which we started experimenting with a Zoom based set up like this, pre COVID, for an executive Ed class at Harvard's Business School, where we just had a big screen TV at the end of a table. We even had a teleprompter, at one point, with a camera hidden behind it. So that when Margo or I were sort of talking to or looking at the students, it actually looked like we were looking right at them with none of this odd eye line looking at the middle of the screen and not the camera. It was just a way to focus on whoever it was was speaking, was asking, or answering a question. And I would say that this kind of felt 50% of the way there. There were no students physically in the room, certainly, they were all tiles on the screen. But the tiles were pretty small but it was certainly better than just sitting, for instance, at a laptop and a much smaller screen, interacting with the same sort of discussion based audience. So we started thinking about how we could bring it a bit more to life and try to create on-campus, COVID permitting and protocol permitting. Just something that felt more for the faculty member like it was indeed a classroom, even if they're the only one in the room. And so we started experimenting with a few other TVs. We put three of them, for instance, in a row. And instead of using the traditional Zoom meeting software, which most of us are using right now, we downloaded the Zoom room software, which is typically used in like conference room corporate environments for multiple TVs on the wall. And we just laid out the TVs like this sort of in an ellipse around a few other monitors. So if I sort of Zoom in on this setup, what you'll see is not just three screens of students, potentially, as many as 75 at a time given the current restrictions of Zoom rooms, there's a camera up there at the top middle, there's a confidence monitor just so I know that I'm in or out of frame, and then there's a couple of more monitors behind the table here that has one, the participants window. So I or a colleague of mine could see any of the students' hands going up virtually. And then also a tall monitor with just the chat window to see any questions or comments coming in along the way. And I would say that this set up here, especially once we added a green screen so that we could project our content behind us, did it really start to feel 80% like being in a class. Right now I'm literally the only one in this room. And to be fair, most of us, during the workshop, have had our tiles off. But once these tiles all come to life and you can actually move around in this space and look at different cameras and different screens, I genuinely mean that it felt more like 80% of the way to being in a classroom with students otherwise being seated there in seats. I didn't mean to guilt anyone into turning your cameras on. I see some faces starting to shine, that that's certainly OK. And if you're curious just to break the fourth wall here, Patrick would you mind killing our virtual background for a minute? Sort of depressing that it's indeed just me now in this room with colleagues of mine listening in on microphones, but this is just what we have. Some lights above, some lights below, a green screen behind us, and granted, some fancy hardware controlling it all. But it's just a room that we then try ultimately to bring to life. All right, Patrick, we can go back to virtual reality here. So this was our default plan so this would have been early midsummer last year. Harvard, like many universities, wasn't really sure what the fall semester was going to be like. So at least we had a plan in place. And we started practicing with it endlessly. We would, not so much with our undergraduates, who were very much focused on fall or spring semesters, but some of our online students through edX for instance, we would just invite them to optional one off classes or tech talks or office hours, if you will, just so that we could play with and try out this set up again and again just to get me comfortable with it and our whole team just familiar a bit more with the mechanics of it. But at the same time we realized that maybe there's some silver lining here. If we fortunately can stay healthy through all of this and we can access Harvard per its current protocols could we may be leverage some of the otherwise dormant resources on campus because pretty much every building now was indeed offline. And it turns out that there were-- Harvard has a bunch of buildings beyond the traditional classroom buildings. One of which happens to be a sort of dinner theater down the road. Those of you who've been to Cambridge, it's called the Oberon theater. They too couldn't hold any shows or dinner events or the like. And here's a photo of it, complete with a disco ball in the middle of the ceiling, and it had a little stage, pictured here. It's just me and some of my colleagues on it. And we started to spec this out because it turned out we could maybe, if we wanted, filmed the course's lectures and try to bring them to life on an actual stage in an actual theater with no audience, admittedly. But even though the pictures don't quite tell that story it was actually pretty space-constrained. And at the time, Harvard was prescribing at least 25 feet of distance between someone like me, if teaching and unmasked in a space, with all of my colleagues masked with face shields and the like, would have to be at least 25 feet away. And so the space could have been used but wasn't necessarily the best option since it actually would have been quite confining. And so just kind of on a whimsy did we ask the same folks who manage the real estate here in Cambridge, what about that slightly larger theater down the road? Otherwise known as the low main stage or American Repertory Theater, where they're based. Which is actually this beautiful space across campus that in healthy times would host plays and shows in the traditional sense. But that space and, in turn, its team of very artistic lighting experts and stage experts and audio experts and prop masters complete with their own prop shop were essentially offline, potentially for the whole year unless that space were somehow utilized. And somehow or other we got back a yes. And we had access to this multiple hundreds seat theater that normally would be used for these more theatrical shows, a blank slate of sorts. If we flip the camera around and look at what was a sort of black box stage with plenty of lights up and above it. And so we started to think now in probably July, August starting to cut it close to September 2020, how we could bring this stage to life even without an audience in there. And so one of the first things we did, for instance, was started trolling through Harvard's archives. Where they have documents and paintings and everything from hundreds of years ago. And we actually found this, a watercolor painting from 1794. A graduate student by the name of Jonathan Fisher at the time, happened to be standing, sitting in Harvard Square, painting some of Harvard's earliest buildings here right there in Harvard Yard. And so this was only a painting about yay big, I believe they did have a digital image of it. And we decided with the help of the library system here to bring this thing to life. And thus was born a 30 foot tapestry, version thereof. Even here did we already have a chance to weave in some computer science. This was even though shot at pretty high resolution with a nice glass lens. It's one thing to take it from this size to 30 feet so we ran it through some of this machine learning type software that's now built into Photoshop and other open source tools that would actually allow us to interpolate among the pixels and actually blow it up to something that looks nice as well as it did here. And so thus began a collaboration with this American Repertory Theater. These amazingly talented artists that would otherwise be working on amazing shows and plays and performances and the like. And thanks to not only those talents and also this prop shop in back did we, as the teaching staff have an opportunity to rethink how we were presenting CS50's lectures. And any sort of prop or demonstrations that I might fancifully in the past, at home in my apartment have wished "Oh that be fun to do." Not having the resources did those resources suddenly come into play. And so ultimately, we not only put up this big backdrop. They kindly helped us set up the sort of traditional red curtains and black curtains and all of the requisite lights. We brought in some of our technology, like a big touch screen display to actually display code and slides on as well as the lectern. And we tried to bring this space to life. And indeed thanks to these talented artists did over the course of the semester, we try to infuse a bit of fun, even interest to the visuals of the class to help students feel like something was indeed coming to life here. So pictured here is the default photo around October did the artisans decorate it with a little more of a fall motif, it eventually evolved into something with Halloween in mind, and then ultimately wintertime did the whole stage evolve. So just little touches, separate certainly from the curriculum of the class, just to try to make a little bit different what it is students were logging in for these multiple hours per week. And as for my view, if we flip the camera back around, there were no one in those seats, but there were some 6 large TV displays on which were at least 25 faces on each. So this gave us 15, 75, 150 students could actually be virtual members of the audience. And, for my sake, actual members of the audience with whom to interact. To not only have the sort of psychology of those eyes looming down on me feeling like I do have to rise to those interpersonal expectations, but it was also possible for us, pictured here is me interacting with one student to blow the student's face up onto the screen. So that I could see them in perfect fidelity, see their name on the screen. And we had a camera right atop the screen. So that when a student did ask a question virtually or physically and I interacted with them, to answer or ask some question of them, did it actually feel a bit closer to what it might have been if they were in a similarly large space here on campus. So here are some of our undergrads over on the right here. And in fact, if we Zoom out from the 6 screens, we also have this tradition in Cambridge of inviting members of the public, in healthier times, to actually come to that theater on campus to sit in on a computer science lecture if that is of genuine interest to them. And we actually did the same here too. We had a separate Zoom room as part of our OpenCourseWare initiative, into which we invited anyone on the internet if they wanted to partake and so those spaces to the left were known to me to be that demographic of students and learners as well. So in terms of the logistics, we were very fortunate, certainly, that we were able to craft the requisite protocols. And Harvard thankfully had a whole machinery in place to figure out, at the time, what the data suggested was safest and most healthy. And what you see here is, for instance, one of our first mock ups of the space. The little blue dot there over in the middle is me by the lectern. And there is maybe four or so green dots that represented colleagues of mine. There were at least these 25 feet away. Wonderfully, they were willing to be there not just in face mask but face shields. All of us were getting tested regularly as well. But this is why we needed, at the time, at least, such a large space to do any of this. And there was also a space backstage that a colleague of mine was able to then use himself, him too, without his mask on, in a separate video feed there. Because what we did want to preserve were some of those earliest visuals of the students coming up on the stage. And we couldn't really do that anymore this year. And so Brian, my colleague, became my proxy of sorts. He is here as our-- leading the class alongside me albeit in a separate space and answering some of the rhetorical questions that I might normally ask of students. But having access now to this stage and to this amazing team of talented artists and carpenters and the like, were we able to reach for all of the various props that they would otherwise be using in shows. There's a warehouse down the road where we were able to go, literally, aisle by aisle looking at past shows' props to see what could we use to bring the subject to light. Here, for instance, is the ghost light from the theater. If unfamiliar, a ghost light is this old school tradition in many theaters where they leave a single light on at night for the ghosts. And also so that you don't trip and fall off the edge of the stage if the theatre is otherwise dark. And so this became our first binary ball, talking about ones and zeros by literally plugging and unplugging that particular light bulb. We also brought to life to the edge of the stage in a very traditional theatrical way where we had 64 light bulbs or binary bulbs, if you will. And it was on this stage that we then introduced students, not just a single bit. But maybe a bytes worth at a time, turning the light bulbs on and off in some pattern to represent integers and later ASCII characters and the like. And so it actually became kind of a running gag too, just for fun, that every lecture every week did we sort of encode a different English message in ASCII sort of as a little brownie point exercise to see who could actually decode the pattern of 8 bytes here along the way. Besides this, one of my, sort of, pedagogical dreams for years has always been to somehow introduce students to the notion of a raise in a language like C and to topics like binary search or linear search, even, using actual doors so you can walk through the motions of literally having to open a door to make clear that a computer can only look at, presumably, one memory location at a time. And so whereas the traditional audience, if you just put a whole bunch of numbers on stage and ask the students to find a number for you, of course we, with this bird's eye view, see everything at once but not so with doors. And so what you see here is a mix of multiple doors from multiple past shows behind which the prop shop amazingly brought to life even the numbers, sort of Sesame Street or Muppet style. So here was me discovering the number 6 behind one of these doors. And each of the other numbers during our linear search and binary search examples looked a little something like this. Not something we could have done in our typical lecture hall, beautiful as that other theater was. When there's a class before us a class after us no prop shop and back and no one except the teaching staff alone. Now in back my colleague Brian was able to have his own visuals so that we could sort of interact and he could play the role of a proxy for students. And here was us playing around with sorting algorithms. A whole bunch of numbers, an array at the top, and just deliberately this metal shelf that we found around backstage so as to paint a picture of something like merge sort, requiring a bit of extra storage. One or more shelves, depending on how you decide to implement it. So here for instance, is Brian beginning to sort and ultimately merge those numbers into what ultimately was sorted order. With him, again, playing the role of what would have been a student in healthier times. When we talk about memory and memory management in this language C, we often of course, talk about things like garbage values and, amazingly, was that team able to bring garbage values to life in the form of these little wooden tiles that they put with some input from us. Oscar the grouch on. And this is a close up now of using a Canvas of memory, where each of the Oscars, or each of those squares represents a byte of memory. This depicts us implementing a main function, a function called swap, and using some of those stack frames of memory to sort bring that to life for students as well. We found a few mailboxes and put those both in front stage and back stage so that Brian and I could talk about pointers and indirection. This is me opening a variable called p, finding inside of it in an address 0x123. Now we cut backstage and there's Brian with a variable that lives at exactly that address 0x123 voila, it was Brian finding the number that we had stored at that location. Here's Brian again, interacting with me with a sort of split screen here. We're in very distinct spaces, separate from one another, talking about variables and how you might swap two variables' values. Of course, if you have two glasses with color liquid you can't really pour one into the other and do a switcheroo. But if you rip out a temporary variable, as Brian did here, could we now bring to life this idea of swapping two variables properly? Much like a student at that point in the semester might have needed a third variable to actually exchange two values when talking about swap and stack frames and the like. Brought in some old buckets. Buckets. And we labeled them with suits of a deck like spades and diamonds and hearts and clubs. And we introduced students to hashing. So this is me holding up an oversized playing card, just talking about how we might bucketize each of those cards based on their suit, and then do one of our earlier sorting algorithms to actually get them from 1 through 13 or Ace through King. Slightly in the back there too, albeit we didn't need a whole prop shop for, this is us talking about stacks that particular week as well. And why I seem to only ever wear black. Well it turns out, according to the story told in class, that's because I store all of my sweaters in a stack and the most colorful ones happen to be at the bottom but of course all the black ones are pictured there at top. And then this one was perhaps one of the biggest ones that we'd long fancied. Bringing to life linked lists in C, where one node somehow points to another. And so the prop shop in back wonderfully built us some wooden boxes. This representing a pointer called list that would eventually point to some malloced or allocated nodes. This is me realizing, sort of too late how big a three foot wooden node actually is and how much it weighs. But this is me mallocing a node containing space for both a number, like one two three, or next a pointer to the next node. This is me grabbing the extension cord that we used from Home Depot, with a big orange arrow, so as to point that variable at the head of or the beginning of that list. This is me regretting mallocing a second node on stage. This is me realizing, "oh my God. Sometimes our memory is not contiguous and the next node is all the way over there." Fortunately, we can just bring a really long extension cord to bear on that problem as well in order to give ourselves a linked list there too. And then, perhaps most appropriate, given that my former professor, my former advisor, my former mentor is here today, one of the things I took away from an operating systems class some 20 years ago was a discussion of database logs and how you can handle issues of concurrency and potentially raise conditions. And the way Margot always described it was imagine that you and maybe a roommate each lived together and you have a refrigerator. And one of you opens the fridge, realizes you're out of milk. And so you leave the dorm room and go off into the Harvard Square to get a new jug of milk. Meanwhile your other roommate comes in, realizes "Oh we're out of milk" and they do the same. Of course dot, dot, dot, you end up with two jugs of milk, which is probably twice as much milk as you want. But not if you lock the refrigerator as we did here. So wonderfully a previous show had needed an old school refrigerator that was still lying around. We brought in a padlock and a chain and we acted this whole thing out. And then, lastly, toward the very end of the semester did we talk about things like callback functions, using some old school phones that happened to be in the prop shop as well. We talked about sessions and state management in the context of HTTP with carts or shopping carts and cookies, if you will. Mostly just an excuse to have a little something for ourselves after. And this was all thanks truly to this, this truly silver lining this past year of having, not only access to, but the bandwidth among all of these talented folks on campus, only a few of whom are pictured here backstage who helped us as a class bring so many of these topics to life. And indeed, if I just flip through some of the ending credits that we put together it really was this whole team for which there was no precedent even for an online class like ours, working with each other and this academic and artistic way in parallel. So in closing I thought I'd offer just a few takeaways, some of which are a little CS50 specific so I'll wave my hands at some of the visuals, but certainly they're all in the slides here. We ask students after each week or at the end of the course what they thought of each of these visuals. We asked them questions about to what extent they helped or hurt their understanding of topics. Here's sort of a ranked listing of all of those demonstrations that I just alluded to there. Margot, I can officially say, 20 years later, yours remains the number 1 favorite demonstration of students. The refrigerator and milk to explain race conditions. Blue means very helpful, that was the best received demonstration of all of them. And this is just the kind of feedback that will now use this coming fall, even with less theatricality to inform exactly how we're bringing some of these things to life. And it's not that we didn't ever do these kinds of demonstrations. It's not that we didn't talk about refrigerators and locks in the past, but we were able to bring them to life on a scale that was not only so much fun but so much more visually engaging. We hoped for students otherwise plopped in their seat all day long that had traditionally been possible. And you might expect the obvious kinds of feedback they were fun from some students, they helped students understand, some students cautioned they were unnecessary, suffice it to say these theatrics took more time than you or I might normally spend or choose to spend on some topic. But the visuals, and then 600 plus other comments were sort of themed around this. And so my own takeaways from this one year in particular was truly this first: practice, practice, practice, not a luxury most of us had at the time. But the fact that I and Margot and others had already been teaching for Exec. Ed. and had been using Zoom and other forms was so enabling, certainly. And that too was a privilege to have had going into this when so much else was going on too. As a sort of small tip on Zoom, just standing up, do I find at least, this helps me feel like and bring to bear sort of the energy that I might have had in a more traditional class. The interfaces that we're all using now, including this tool here, they're clunky. And some of our own frustrations early on with stupid Windows disappearing and having to click on buttons over here and the like. The tools aren't really optimized for us teachers, I dare say yet, but thanks to APIs and the like is that changing. The chat window, funny enough, was game changing. It's simplistic as it is. The fact that it was always right there next to the video feed was an exponential increase for us in the amount of Q&A and student asynchronous or really synchronous participation electronically even though for many years have we tried slack and other tools during live lecture. We tried bringing to life virtual meals to bring back some of that community and intimacy. For us, that didn't work. Students sort of phased out of those pretty quickly. And much like, I think, all of us have experienced just enough cameras were on. And so it was actually kind of a struggle to make sure we were balancing the Q&A and audience participation among as many students as we could who were comfortable participating. And then more playfully, don't make the same mistake I did here, building linked lists out of wood. And the last remark I'd make is again, this evolution of what we've done for the past several years, we've had this longstanding collaboration too with Yale University where we have a few hundred students in New Haven taking this same class, CS50. Where they have their own sections and office hours of the like. But all of the content is created and streamed from one place. And I think that too has really gotten us here and our colleagues in New Haven thinking about how we can all lean on each other all the more, especially in healthy times. So that if we are investing this much time, this much talent, this much resources in classes, perhaps we can sort of amortize that cost over multiple universities, multiple demographics, as opposed to reinventing the wheel each and every term as we too here long have.