00:00:15,090 --> 00:00:16,340 PATRICK REBESCHINI: All right. This is CS50, and this is Yale University. Welcome to the grand finale. Really, this is the last lecture of the course. And I hope to interpret most of you when I say, wow, already? And indeed, just think where we started off two, three months ago. What we have achieved is simply unbelievable. And typically, it's a good sign. When time flies by, it means that we have been engaged a lot. We have been learning a lot. This is precisely the type of experience that we want to give as part of CS50. So now today's is the last lecture, but the course does not end here, as David will remind all of us in a bit. In particular, the hackathon is coming up. It's a great opportunity to meet friends in Cambridge, I thought, but while potentially working on your final project. And then while you're here in New Haven, the final CS50 [? for ?] a great occasion to showcase what you have achieved in these two, three months, and to present this type of output not just to a friend of yours, but really to the entire Yale community and beyond. So this is CS50. Indeed, today does not end year, but in a way, we should start thinking about life beyond CS50. And well, let me tell you, it does exist. And so we decided to take the opportunity of the last lecture to invite a few friends-- faculty from Yale College-- to present some of the great resources that Yale can offer to those of you who want to dive more deeply into the realm and the wonder of CS as a discipline and related fields. So I'm going to introduce to you a few friends, faculty. I would like to welcome all of them with a big round of applause. So please join me in this. [APPLAUSE] 00:02:15,670 --> 00:02:19,640 And I have the pleasure to introduce Holly Rushmeier from the computer science department. Thank you, Holly. 00:02:26,288 --> 00:02:28,530 HOLLY RUSHMEIER: So, yes, I'm Professor Rushmeier. I am on the computer science faculty. I teach a variety of courses. Right now I'm teaching CPSC 201, Introduction to Computer Science-- a course that I really love, because it has the core ideas of computer science in it. But another area that I really love, and what I do my research in, is computer graphics. And that's what I'll spend my few minutes here on. And basically, what is computer graphics? It's using computers to make and use images for exploration, communication, and expression. So exploration-- how do we understand things? One of the things that we can do is read and write about things to improve our understanding. We also can explore things by drawing, gathering pictures, and manipulating images. We use graphics a lot for communicating ideas. Creating a feature film-- that's communicating ideas. That's telling a story. Advertisements, documentaries-- all these things are using images. And we have a part to play in creating those images. And then some of it is just purely creative expression. These images here are from some of our research work here at Yale, including things like-- we're interested in designing what makes things look like what they look like. And that's a combination of their small-scale geometry-- whether they've got little rings or bumps, or how they're woven-- and their large-scale geometry. We're also interested in abstract visualizations to make things clearer. So these strange little spheres floating and inside the matrix are an illustration of a kind of calculation. And we're interested in systems that help people. So these images are showing a sculpture of the Madonna from the Yale art gallery. This is part of a system that we've created for art conservators to study works of art using data from different imaging modalities. And then on the bottom is another visualization. It's visualizing the results of a perceptual experiment that we did about how things look when they move. So just a little bit of the span of things we consider in computer graphics. A little bit about-- another way of looking at graphics is that we observe problems in the real world. People want to design something new. They want to tell something new. They want to understand something new. And we're going to produce something in the real world. We're going to make pictures. We're going to make objects. But what we do in computer graphics is we get those physical things we observe into the computer, and then we create the data, data structures, algorithms, to work with those objects, to create the solutions that then allows us to make those things in the real world. So in the physical world, we may be simply observing shapes and forms and colors and lights and how people perceive things. Or we may be using instruments to measure shapes and colors. We may be designing new instruments or conceiving of new ways of putting existing instruments together. And we may just be observing how people perceive things, or we may be doing psycho-physical experiments to figure out how people perceive things. So then we bring them into the computer. We think of new ways to represent objects, shapes, colors, their interaction. We've-- how people can interact with those shapes to create new things. What are good interfaces for people to create new things, to express themselves, or to explore an idea? And then we put things out into the physical world. I had sort of a-- images from my oldest work and some of my newest. My oldest work-- that's from like 30 years ago-- was when we were first trying to make images that would be indistinguishable from real scenes. So we were building a real scene-- a real simple scene-- and trying to make a physical image that looked exactly like it and then set up an experiment where the challenge is, well, gee, that's a real physical box. That's a picture of a box. We had to come up with the solution to overcome that. So here at Yale, you have graphics courses. You can take straight-up the standard computer graphics, some special topics-- including a new one that we have in computational issues in design and fabrication. And we have a wide range of projects that people can work on, including-- in particular, in my work-- I'm very interested in digital humanities and analyzing the shape and form, materiality, of things like manuscripts. Cultural heritage-- maybe you want to get out in the cemetery at night and take data and start examining old stones. Or we have more hardcore computer graphics-- new methods for sketching, extracting, and reusing textures and building new scanning systems. So those are some ideas. So thank you very much. 00:07:47,480 --> 00:07:48,730 PATRICK REBESCHINI: Wonderful. Our second guest today is Amin Karbasi, from the computer science and the EE department. So Amin, all yours. 00:08:05,097 --> 00:08:05,930 AMIN KARBASI: Hello. So I thought today that I'm going to talk about sensing data. So basically, my work is about, in the realm of big data, how we can actually reason about-- how we can pick and reason about very uncertain data and get useful information. And in particular, I'm going to talk about three very specific applications. The first one is the video summarization. So what it means is that it would be really cool if instead of listening to the whole CS50 lectures, there would be an algorithm that tells us these parts are the most important part to look at. The second application is going to be about automated teaching. So instead of Patrick and David teaching you, it would be really cool if a machine can teach you new concepts. And the third one is about whether a robot can actually learn and reason about the environment. OK. So the first application that I'm going to talk about is the video summarization. I'm going to show you a very short clip, and the idea here is that we have an algorithm that picks frames of this short clip such that if you look at these frames-- here are four-- you can basically understand what is happening. OK, so we can put these frames together and it tells a story. 00:09:42,460 --> 00:09:48,830 OK, so that is one application, and we had worked on this one. The second application that I'm going to talk to is about automated teaching. So here the idea is that instead of-- so I want to teach you a new concept without telling you how to learn this new concept. I am just going to show you some examples. And so in particular, I made some imaginary insects. I even called them vespula and weevils. You have not seen them before. And I'm going to show you examples. I need you to cooperate. And then you have to tell me whether this is a vespula or weevil. In the beginning, you may not have any idea. But you're smart-- I hope that after a few examples you can actually tell OK. Ready? Good. OK. So that is the first example. Who thinks that's a weevil? Raise your hand. Who thinks that's a vespula? 00:10:40,250 --> 00:10:40,880 OK. So that is a vespula. OK. Good. Now, how about the second one? Who thinks that's a weevil? Who think that's a vespula? OK, that's a weevil. OK. How about the third one? Weevil? Vespula? Very good. OK. And the last one. Weevil? Vespula? Excellent. I didn't tell you how to distinguish between them. Somehow, you actually figured it out, right? So that is the main idea of automated teaching through examples. And then we also-- the question is, among all possible examples that I could show you, I chose them very specifically such that you basically get the concept and then generalize it in your head. And the last example that I'm going to show you is about the work that we did on a real robot. So here the idea is that there is a robot that has to open the door of a microwave. It has a visual sensor, but the sensor is not actually very good. So the robot doesn't know exactly where the door is. It might be a little bit high, low, it might be tilted, rotated-- so the robot has to make sense of the environment. How does it do it? Well, by basically touching different points and reducing the uncertainty. The question is, among all possible positions that the robot can touch, which ones are going to give the robot the most amount of information? So let's look at how a robot does that and how we actually taught the robot to do it. So this is the uncertainty that the robot has. In the beginning, it is very uncertain. It touches one point. Some of the uncertainty collapses. Some remains, so the robot has to make more interactions with the environment. It touches another point. Now there are less uncertainty, more information, but it doesn't exactly know where the button is. And then finally, it's going to touch another point. And now it is very certain where the button of the microwave door is. And now it's going to open it. 00:12:59,670 --> 00:13:00,630 Good. So basically, I talked about three different problems, and in all these problems, the question was, which frame we should pick, which example we should show, which position we have to touch. These are very different applications, but it turns out that they have exactly the same framework. And this is what they work on. So if you want to know more, well, you can come to the CS or EE. [APPLAUSE] 00:13:31,424 --> 00:13:34,080 Our And our next friend is Sahand Negahban from the statistics department. Please, Sahand. 00:13:42,705 --> 00:13:43,830 SAHAND NEGAHBAN: So, hello. I don't have pretty slides, but instead I made a little demo because I really like this example. And so this is about life after CS50 and you guys have learned a lot of nice tools. You've built a web server, I guess, you played around with API. So now you can go on the internet and extract a ton of data. The problem is a lot of times on the internet data is noise and you need to deal with it. And so I really like this example. This is an example a lot of people use in machine learning classes. And it's the example of where you have sort of a couple audio signals, and you want to decouple them. So-- the audio works, right? The audio signal that I have-- play. [AUDIO PLAYBACK] [INTERPOSING VOICES] SAHAND NEGAHBAN: It's basically the combination-- [INTERPOSING VOICES] 00:14:38,594 --> 00:14:39,197 [END PLAYBACK] SAHAND NEGAHBAN: OK. So what that was, if you're not aware, it was two sports announcers, soccer announcers, broadcasting the World Cup, where Argentina was playing England. And so it was a British commentator commenting on Maradona scoring against England, and then an Argentinian commentator commenting on Maradona scoring against England. Now, you guys, your brains could have figured that out. If you could speak Spanish, I'm sure you could have figured out what he was saying. If you speak English-- I think you all do-- you know exactly what the British commentator was saying. But we'd want a computer to be able to do that, too. So using something called independent component analysis, which we taught in the course that I'm teaching with Dan Spielman called Computational Tools in Data Science-- that's CPSC 262-- you can kind of tease apart the two signals and figure out what they were individually. [AUDIO PLAYBACK] - [SPEAKING SPANISH] SAHAND NEGAHBAN: So this is just the Spanish broadcaster. - [SPEAKING SPANISH] 00:15:49,917 --> 00:15:50,500 [END PLAYBACK] SAHAND NEGAHBAN: So he's very happy. The British commentator is-- [AUDIO PLAYBACK] - If we hadn't been able to control the play mid-field, the way that Maradona has been able to do-- [INAUDIBLE] There's no doubt about that one. [END PLAYBACK] SAHAND NEGAHBAN: [INAUDIBLE] the position, because these are two signals that kind of happened at the same time. I mixed them together artificially, but now we wanted an algorithm to sort of understand how to split it up. So another setting that I also like, and I encourage you to maybe take other computational classes also related to statistics is, you might go online now you might want to say, I want to find data that's related to each other. Say you have some crazy new idea for tracking the S&P 500 and you want to use it to trade. And so that's great. You can find a lot of signals to help you predict, but you could run into some problems. And so now I'm going to shamelessly steal somebody else's-- this website called Spurious Correlations, which I personally, I love as an example. The basic idea here, it's going to have signals that look like they're related. You've all heard the whole notion correlation is not causation. If two things are correlated, it doesn't actually mean they're linked together. It doesn't mean that one implies the other. Well, in fact, a lot of times correlation doesn't even mean correlation in a sense. So these are a bit macabre. So warning, I guess. But here's an example. So this is the trend of US spending on science and space and technology versus this suicides by hanging. These shouldn't be related. This is Tyler Vigen's website, Spurious Correlations. I think it's pretty nice. There are a lot of weird ones that he talks about, per capita cheese consumption, this one. 00:17:51,700 --> 00:17:54,080 [LAUGHTER] 00:17:58,244 --> 00:17:59,660 These aren't even just restricted. So Google actually has a really nice thing called Google Correlate. 00:18:05,770 --> 00:18:09,780 So you can actually put trends-- you guys, I'd encourage you to check out the paper that they have associated with it. It's really nice. But you could put something in here and see links. So I could say maybe put weight, and then you'll see trends. Like OK, low calorie, low calorie snacks, weight loss, good diet. That makes sense. But you could put maybe a weirder search like this. 00:18:33,500 --> 00:18:38,740 And you get some things that don't-- Nissan Centra's up there with a 0.95 correlation. 00:18:43,730 --> 00:18:45,980 You just get some interesting things. So the point is I'd encourage you to take your computational tools and play around, and look at the classes in computer science, electrical engineering stats, and dealing with machine learning. Thanks. PATRICK REBESCHINI: Thank you, Sahand. Great. And finally, Mahesh Balakrishnan, from the computer science department. 00:19:17,620 --> 00:19:20,110 MAHESH BALAKRISHNAN: Is this working? OK, so I'm going to talk about systems. So what are systems? Computer science is typically partitioned into a few areas. You have programming languages, AI, graphics. Those are the guys who come up with these very cool ideas, and you saw some of these pretty pictures and so on. In systems, we are the guys who make it work. OK. So when you type in Facebook.com or Google.com, and the page loads instantly. An enormous amount of code goes into that. Actually, I don't know why my slide title isn't showing up, but that's fine. If you go to Google, there are maybe tens of millions of lines of code that go into showing you this web page and ensuring that when you type in google.com, and you hit Enter, that you see this web page within something like 200 milliseconds because that's the amount of time beyond which users can perceive delay. And also ensuring that 99.9999% of the time when you go to this website, it's up and running. And this is an enormous amount of code. And so when somebody has a new search algorithm, or somebody has some kind of a new virtual reality application, you need a pretty big and complex system to make it work. But it turns out that people who work in systems don't really spend their time writing enormous amounts of code. That's not where the intellectual effort is. The intellectual effort is in something called an abstraction. How do you make it easy to build some kind of a computer system that consists of millions of lines of code? And the answer turns out to be that you try to identify these abstractions. To give you an example of what an abstraction is, a file is an abstraction. I'm guessing you guys have all interacted with file systems. You have saved files, loaded files. So a file is something that allows you to save data without having to worry about how many hard discs, or RAM, or SSDs you have on your machine, without worrying about whether your data is local or it's in the cloud. So that's an example of an abstraction. And part of what we do in systems is we come up with these abstractions to make it easy for other people to realize these cool applications that they dream up. And so we focus a lot on building real systems. And we are really interested in end-to-end metrics. You build a real system, and then you access it, and you see how reliable it is, how fast it is. 00:21:56,530 --> 00:22:01,740 If you look at the actual technical content of this, what this involves-- it typically involves coming up the new obstructions and implementing them. And often we are the customers of EE people. So when somebody invents some kind of new hardware-- and this could be virtual reality glasses, it could be some new kind of architecture, a new kind of memory-- we are the ones who build the software layer that knows how to use this kind of hardware. So for example, if you have a new virtual reality app and now you have something like the Oculus Rift coming out that Facebook's selling these goggles, we are the ones who would produce this intermediate level of code that makes it easy for you to build your new application on top of the hardware, without having to understand the nuances and the idiosyncrasies of that hardware. And so a lot of what we do, though, is to enable new applications. So things that augmented reality, virtual reality. 10 years back, social networks were a new application. 15 years back, search engines were a new application, and making these applications ubiquitous involved a tremendous amount of system building. And so the internet of things is another example that's very common right now. I teach a class at Yale. This is a senior level class on building distributed systems, where we kind of walk you through what it takes to build something like Google or Facebook. And I'm going to give you a very quick example of the kind of intellectual problems we deal with. So let's say you come up with an example of a service, and you want to run it online. Well, you can run it on a single machine. This is probably similar to the kinds of applications you've been working on. But your problem now is, if you run it on a single machine, that machine can crash. So you need some kind of disk there so that when the machine reboots, your data is still there. You still have a problem that there's only one machine here. If it crashes and doesn't come back up, Facebook.com is down. So you need to replicate data, and this is the kind of thing that we do all the time. We replicate data so that the service never goes down. You still have a problem, which is that, all of Facebook.com cannot live on three machines. And so we have this thing where we partition data across sets of machines. And finally when you partition data across machines, you have to deal with the fact that these machines are in different places so moving things between them is difficult. This is just a very quick summary of the kinds of things that it's taken engineers at Facebook and Google, say, 10 to 20 years, to solve. And this is sort of the technical content we have in systems. So if you stay in computer science, I hope that you look at computer systems as a friendly, exciting area with a lot of opportunities. We build real stuff and we need people to build these things. Thank you. [APPLAUSE] 00:25:00,569 --> 00:25:02,110 PATRICK REBESCHINI: All right, great. So this is just a snapshot of what life after CS50 might entail. For those of you, again, who want to engage more deeply with the field of CS and related. But now, let's go back to the present and let us finish with style. It is my greatest pleasure and honor, once again, to introduce and to welcome here in New Haven, David Malan and the Harvard team. It has been a great year together, our second year of this joint course. Let me say, the cross-fertilization that came out in both campuses when it comes to improving and pushing the boundaries, terrific. So I couldn't be more happy to welcome him on a stage again. David Malan, please, big round of applause for David. [APPLAUSE] 00:26:17,325 --> 00:26:19,200 DAVID J. MALAN: Thank you so much to Patrick. It's really nice to see everyone again. I know it's been some time, and I know tensions are high going into this weekend. In fact, we just ducked down here and we're heading right back. 00:26:30,390 --> 00:26:32,250 I'm guessing many of you might be joining us up in Cambridge this weekend. But I just wanted to emphasize, really right at the start here, what a special collaboration this has been, both last year and this. Bringing these two campuses together, of all the campuses in the world to bring together, I think has been this really special, really interesting, and really challenging experiment. And thanks to Patrick and Jason and Andi and Summer and Stelios, and the whole team here and in Cambridge, we think it's really been going well and we hope that you'll give us all the feedback you can over the next few weeks so that we can continue to build on this and last year's foundation. And I have a little bit of a confession. I don't normally lift up my shirt when I'm in Cambridge, but I just wanted you to know that underneath-- [APPLAUSE] 00:27:12,830 --> 00:27:16,100 --underneath all those black sweaters, all this time. Why don't we begin on just a sentimental note, thanks to a video that CS50's production team has put together over the past few months, in shooting some footage and stills both here and in Cambridge. This then is a look back at some of the past several weeks. [VIDEO PLAYBACK] [MUSIC - GALANTIS, "GOLD DUST"] 00:27:34,140 --> 00:27:37,016 - (SINGING) You're like gold dust. 00:27:41,140 --> 00:27:45,596 It rains over me. - This is CS50. - A foreign sun, my eyes thought I'd never see. You're like gold dust. 00:28:02,910 --> 00:28:09,760 Keep coming down that street. There's a hollow in this house whenever you go. 00:28:59,255 --> 00:29:00,225 [END PLAYBACK] DAVID J. MALAN: So you'll appreciate perhaps, that this course has been entirely about problem solving. And especially given the timing of this coming weekend, it felt particularly appropriate to look a few years further back, back in 2004, which if unfamiliar, was perhaps one of the best Harvard-Yale pranks in history. At which time we Harvard folks learned, well, that we suck. But I thought I'd play a video. If you're unfamiliar with this-- and even if you are, it's great fun to look back on, again, one of the best pranks at Harvard/Yale's past. Let's take a look. [VIDEO PLAYBACK] - We're headed up to Boston. Checking out the stadium for the prank. A few years ago, I was at a math conference. And I was sitting around the table at dinner with a few other mathematicians. And one of them went to Harvard and started telling the story of this amazing prank that was against Harvard. And at that point, I felt I had to interrupt and said, well, actually I can tell you a lot more about that. OK? DAVID J. MALAN: OK. - The idea was perfected in a dorm room. - We came up with the idea actually to prank them with signs at the football game. We threw some ideas out there as far as what the signs would say. We eventually settled on "we suck." - And my immediate reaction was, no, this will never work However, the problem solver in me started thinking, well, maybe we can make this work. - The problem? They had to infiltrate Harvard stadium without getting caught, sneak in 1,800 placards, distribute them to unsuspecting Harvard fans, and then convince those fans to prank themselves. - That's great. We thought about basically every possible thing that could go wrong and tried to come up with a solution for it. - And then you put two reds on top of it. - They made fake Harvard IDs and fake back stories, fake placard designs, and a 28-member fake pep squad. On November 20, 2004, the fake Harvard students smuggled the placards into the game. - What do you think of Yale, sir? - They suck. 00:31:17,314 --> 00:31:20,786 - It's not going to say something like Yale sucks, is it? - It says, go Harvard. - But then, trouble. - What houses are you guys in? - [INAUDIBLE] - How many extra are there? - [INAUDIBLE] 00:31:38,175 --> 00:31:41,480 - I just showed him the front of this ID, and all of a sudden he just ran away, and he felt so embarrassed. - Having escaped one confrontation, they couldn't risk another. It was time. - This just looks like a total mess. We have absolutely no idea if this is going to work. 00:32:03,880 --> 00:32:08,605 - What was once a prank became a legend. We We [BLEEP] did it! We [BLEEP] did it! - And immediately we started hearing chants from the other side, you suck. - You suck, you suck, you suck. - And I think it was that point in time that we knew we had pulled it off. - One more time! Come on, Harvard! There it goes again. 00:32:33,430 --> 00:32:37,880 - I really think it didn't matter that Harvard won, because of the prank. For a lot of Yale students and alumni, we definitely won that year. 00:32:46,330 --> 00:32:47,207 [END PLAYBACK] DAVID J. MALAN: All right. So if we come back then to the present, I just wanted to remind you of this quote with which we began the semester, because we are here now in week 11, some 12 weeks later. And what ultimately matters in this course is not so much where you end up relative to your classmates, but where you end up now, relative to yourself way back in week 0. And you'll recall perhaps, that in week 0 we looked at computational thinking, we introduced scratch. Your first problem, set 0, was to do exactly that. Build most anything of interest to you. And one of the traditions we have in the class, is to ask of the staff, let me first disclaim, we love all projects equally. We do have a few favorites, and we've plucked out a few that we thought it would be fun just to play here all these weeks later to show just how far we have come. If someone might like to volunteer and play a few scratch-- that was fast. Come on up. OK, what's your name? BILLY: Billy. DAVID J. MALAN: Billy, come on up, Billy. 00:33:42,194 --> 00:33:44,480 You are clearly from Yale. All right. Come on over. So one of our first of many staff favorites was this one here, Bob the Bear, by Mandy Lee YP. And I will go ahead and open this one on my machine here so that we can see the first of 3. So Bob the bear has some instructions with which we're going to begin here. I'll full screen this, and it's perhaps among the most adorable as well. [MUSIC PLAYING] So click Bob. [MUSIC PLAYING] 00:34:29,540 --> 00:34:30,040 Very nice. 00:34:33,571 --> 00:34:35,409 Notice we have two variables up top. One is points, one is timer. You have 32 seconds to get as many points as you can. Think of course, of all the programming constructs underlying this. We've got some loops, for instance, an event listener with the keystrokes. Apparently some animation, which is doing move, move move, move, in some kind of loop. A GIF that makes the bear eventually stop. I'm really just trying to justify playing this game. He's only got 6 seconds left. 00:35:09,502 --> 00:35:10,947 6 points, nice. 00:35:14,360 --> 00:35:16,590 Very well done. That's all they gave us. OK, congratulations. Thank you to Billy. Can we get one other volunteer up here for Cat goes 2 Yale, final, which was their final submission, it seems? Volunteer here, OK, come on up. All right. Joey's coming on up to play JP Bosco's Cat goes 2 Yale. 00:35:42,940 --> 00:35:44,270 All right. This one too felt particularly apt. Let me just get it full screened. 00:35:52,140 --> 00:35:55,250 Uh-oh, spoiler. Stand by. This is how we solve problems. 00:36:01,920 --> 00:36:04,020 Come on. Come on. There we go. All right. Cat goes 2 Yale, final. Press the space bar. So you have to grab those three things, so a book, a medal, and a piano. And apparently avoid sleeping, playing games, or exercise. [MUSIC - TOBY FOX, "IT'S SHOWTIME"] 00:36:37,382 --> 00:36:37,882 Nice. Notice the score goes up and down, plus 1 or minus 1. 00:36:50,228 --> 00:36:53,214 Nice. Nice. 00:37:03,176 --> 00:37:05,680 Only level, 1. No, I think it's an infinite loop forever. There you go, you won. Very nicely done. Nicely done. And can we get one final volunteer? One final volunteer? [INAUDIBLE] Come on up, come on up. All right, so here is Spot the Freshman, Star Wars Edition. And this one is by Justin CS-24. What's your name? JAY: Jay. DAVID J. MALAN: Jay, all right. Nice to see you. Come on up. And once full-screen co-operates, here we go. [MUSIC - STAR WARS, "IMPERIAL MARCH"] 00:38:01,715 --> 00:38:04,685 [MUSIC - STAR WARS, "IMPERIAL MARCH"] 00:38:09,902 --> 00:38:11,182 Click on the student first. 00:38:22,260 --> 00:38:23,140 Nice. Caught one freshman. 00:38:37,989 --> 00:38:38,780 You can click on -- 00:38:41,498 --> 00:38:43,310 [MUSIC - STAR WARS, "IMPERIAL MARCH"] 00:39:00,680 --> 00:39:05,020 Well done nonetheless, nicely done. So you'll recall, we'll post these links all online if you'd like to play as well. So you'll recall too, that in problem set 4, there was a bit of a scavenger hunt at the end. So after recovering a whole bunch of the JPEGs from the recovered image, the forensic image, you were challenged to find as many computer scientists as you clued on campus. And we're very happy to say that Theodore found the most teaching fellow TAs and CAs here on campus. So Theodore will be receiving a fabulous prize for his section and all the students in that section. So stay tuned for a note from Jason on that. Also, in problem set 5 you'll recall we had some misspellings and there was a so-called big board here and a competition across campus with the here TAs here, the TFs at Harvard, all of the CAs, as well as all of the students. And while usually a student does actually top the big board, it's actually CS50's own Shreyas who's the top of this year's big board. So congratulations to him and several other staff that spent quite a while on this problem set. But he too will be receiving a fabulous prize from us as well. You'll recall later in the term we had a CS50 coding contest, which coincided with break. And we had a number of folks both here and in Cambridge participate in this. And it was a number of challenges that all had to be solved in C. And we wanted to acknowledge that the top Yale performer was Julia, a.k.a. @apple_cider, who will similarly be receiving a fabulous prize. So congratulations to Julia as well for ranking atop the list. I wanted to acknowledge now, just a few folks before we take another look back, as well ahead. CS50s production team. So a curious evolutionary treat of this experiment with Yale, has actually been that the course is now pretty much equivalently offered in Cambridge. Whereas last year, we had a lot more live lectures in Cambridge, this year have they been pre-produced, as you know, a few days in advance. So functionally, the students in Cambridge are having pretty much the exact same experience. We might shoot most of the lectures there, but literally in parallel, each week are students looking at the course's videos online, attending sections in person office hours, and the weirdest one is that literally every week at 1:00 PM, we have students sitting down here at SITAR and in Cambridge at Chang-Sho or in other restaurants. Sort of dining in parallel, this sort of strange bizarro world where the exact same thing is going on in two different places at once. But it's testament, I think, to just how accessible what the team's work has now become from the production team. So our many thanks to them for that. And wanted to give you a glimpse and perhaps an explanation of what all of those outros are at the end of the videos. Most any time I sit down at one of our CS50 lunches, the question always comes up, so what's with the videos at the end of the lectures? And if you may have noticed, at the end of every video this year has there been a little vignette, inspired by the film Citizen Kane, if you're familiar. And if you're not, do check that out at some point. And CS50's team in Cambridge over the summer decided to write their own narrative inspired by that. Completely scripted by the team, completely produced and edited, and ultimately acted by the team, and wanted to show you today what will be appended to today's video so that you needn't actually tune in online to what is happening right here today. So this is week 11's, and there's going to be one more part released on Monday. [VIDEO PLAYBACK] [MUSIC PLAYING] 00:42:47,860 --> 00:42:50,050 - Any updates on the mailing case? People are getting desperate for some answers. - No. I mean, I've been all over town and just haven't found anything new. I feel like I might as well just stay here at my desk and stare at the ceiling. - Well, what about your Rosebud lead? Nothing there? - No. Total dead end. 00:43:11,312 --> 00:43:14,630 I feel like we may never know who or what this Rosebud really is. 00:43:20,090 --> 00:43:23,522 - I don't think any word can explain a man's life. Try not to be too hard on yourself. 00:43:27,728 --> 00:43:29,490 Get some sleep. I'm sure you'll come up with something tomorrow. 00:43:43,555 --> 00:43:44,142 [END PLAYBACK] DAVID J. MALAN: That there is CS50's own Lauren Scully, as well as Christian. And fun fact that we like to joke about, Christian was supposed to be wearing a fedora from wardrobe, but that day we could only find a cowboy hat, I believe, which is why he's dressed like that instead. But wanted to acknowledge as well the team here in New Haven-- Patrick and Stelios and Summer and Andi and Jason, without whom, certainly, the course wouldn't be possible. And it's really so much behind the scenes that goes on between the two campuses in Cambridge and New Haven. Thanks to our team back home as well. And we couldn't be more grateful to all of the efforts they put in here. We wanted to take a special moment to call out one fellow in particular. While shopping today, we also picked up a little something, as Patrick is about to become a father as well, So congratulations. 00:44:38,352 --> 00:44:39,276 Here you go. 00:44:43,520 --> 00:44:45,440 Everyone on the internet knows now. 00:44:50,680 --> 00:44:55,052 We also wanted to certainly call a screen full of team members who can just barely fit on the screen, and we hope that many of these faces and names will soon be you indeed. We'll be following up before long about how you too, can get involved as a TA or a CA this coming year and really be part of this. And indeed, this too has been a very special thing. As you may know, two-plus years ago there were no undergraduate learning assistants or TAs on campus, leading their own sections and responsible for their own groups of students. And now, not only is CS50 in its second year of this tradition, now is that same feature possible in CS courses here at Yale more broadly. So being part of that too, is one of the unique opportunities perhaps ahead, and we'll continue to publicize this URL here that you'll see in the days to come. We, in particular, too, wanted to call out to one fellow who used to go by the email address, essentially, pumpkin@cs50.yale.edu. And that was for some time because he used to dress like this when he led his own sections at Harvard. So no joke, this was one year, some five or six years ago, where Jason led his section roughly around Halloween, I believe. In subsequent years, I believe at least one other year, he wore this outfit. But it's very much deflated because I think the pump broke, the air pump. But he continued to wear it, and it became known for us as our pumpkin. And it was really special honestly, because then upon graduating, of course, he came here to Yale and has been here for the past year and a half or so now. And truly, without Jason, would CS50 at Yale not have been possible. It was him and it was Professor Brian Scassellati last year, and last year's team as well that really stood up this whole operation. And so one of the things Jason used to do for us when he was with us in Cambridge is start every staff meeting with a joke. And these jokes over time just got better, and better, and longer, and longer. And literally today did Facebook remind me that one, they care about me and the memories that I share, but two, one of those memories, five years ago today, starred CS50's own Jason Hirschhorn at one of our grading parties for a quiz. And so I thought I would play for you this film, shot before I knew that vertical videos were bad, and a look back at the joke Jason told to us some time ago as our thanks to him. Here. [VIDEO PLAYBACK] - Whoo! [APPLAUSE] 00:47:09,626 --> 00:47:12,680 - I have to say, this is totally unexpected, I didn't prepare anything. Just go with a joke that comes to mind. Some of you might have heard this, but if you have, just bare with me. So, there's this moth. No, I'm just kidding. That's a really good one, though. I usually tell people that. It's funny. It's about a Cheerio. And not just any Cheerio, a really sad and lonely Cheerio. Because every day, this Cheerio goes to school and it sees all the friends, and the friends don't want to hang out with it. In recess, it sits by itself while all its friends are playing handball. I know we all played that game in like fifth grade. So the Cheerio doesn't have any friends, and he's really lonely. And so he goes home one night, and he gets on his knees and he prays to God to not be a Cheerio anymore because you realizes he has any friends because of the Cheerio. 00:48:05,090 --> 00:48:08,550 If we need to stop every couple seconds to talk about a Cheerio then we're not going anywhere. Bear with me. I don't know, whatever. Imagine, use your imagination. So anyway, a trip. So, it wakes up the next morning and it's not a Cheerio anymore. It looks at its side and realizes it's a Honey Nut Cheerio. And it's so happy. It's like, oh my god, this is exactly what I wished for. This is going to be a great day at school. So it goes to school. And it shows up, and everybody gives him some looks as he walks in. He's like, yeah, as he's walking down the hallway. Or he or she. I don't want to be gender-normative. As the Cheerio's walking down the hallway, everybody gives it looks. And it's like, this is so much better. I'm getting so much more attention. But at recess, it realizes that everybody's just making fun of it and they don't actually think it's cooler, they think it's even more lame than before as a Honey Nut Cheerio. So that night it gets home and it gets on its knees again and prays to God, once again, to not be a Honey Nut Cheerio, because life is miserable as a Honey Nut Cheerio. So it wakes up the next day. And it looks at its side, and it realizes, oh my goodness, I have color. And it has now become-- what's the knockoff-- - Froot Loops! - No, what's the knockoff Froot Loops? - [INAUDIBLE], maybe. - Tootie Fruitie. - Tootie Fruitie. He becomes a Tootie Fruitie. And it's like, oh my goodness, I have color now. I have some personality, some flair, some pizzazz. Everybody's going to like me now. - What color was it? - It's purple. Thanks for asking that. It goes to school. And once again, everybody's giving it looks, and he's like, finally, being a purple Tootie Fruitie, everybody's going to like me now. So at recess, once again, everybody's playing handball. He goes up, says, like, hey, can I play handball? And they're like, no. And once again, nobody wants to play with him or hang out with him or hang out with him because nobody likes a purple Tootie Fruitie. Everybody likes Marshmallow Mateys. But anyway, he goes home, gets on his knees once again, and prays to God, please, none of this worked. Please don't let me be a Tootie Fruitie or a Honey Nut Cheerio or a Cheerio again. I don't know what it is, but I can't be one of these. Nobody wants to be my friend at school. So it wakes up the next morning. And it realizes, oh, it's name-brand now. It's an actual Froot Loops. It's like, finally. This must have been what I'm missing. I'm not one of those off-brand crappy things, I'm a name-brand Froot Loop. - As opposed to Cheerios? 00:50:16,790 --> 00:50:19,120 - A name-brand food with color. I have everything I need to be popular at school. But it's Friday, so they had school off and there's a big party that night. And it's like, it's been invited to this party. We'll call it semi-formal is the party. It doesn't have a date, but it's really excited to go. All the other cereals have dates, and they're all really excited. The Marshmallow Mateys look particularly good. But it goes to semi-formal, and it's at the party. And it goes up to the bar and asks for some water. And they're like, sorry, we don't have any water. So he walks down to another bar. And he's like, OK, can I have a Shirley Temple? But he's like, sorry, you got to wait. There's a long line. So it can't get water, can't get a Shirley Temple. And it sees across the way, there's some milk at the table. So it's really excited to go get some milk, but right as somebody gets in right before it-- not to eat itself, I just thought of that. That's weird. So right as the Froot Loop's about to get some milk, somebody gets in front of it and takes the last bit of milk. So there's no milk. There's been long lines for things, they've been out of things. He hasn't been able to get a drink. Finally, at the far end of the table, he sees this giant bowl of punch. And he's really excited because there's no one there. It's a clear shot between him and the punch bowl. So he can finally now get a sip of punch because there's no punch line. [LAUGHTER] That's all. - Wow. [END PLAYBACK] DAVID J. MALAN: All right. All right. I forgot how long that was. 00:51:49,160 --> 00:51:51,822 We're just about out of time, but CS50 ultimately is of course about problem solving. And we did want to leave you with one, particularly high-level message before we dive into one last bit of fun. Which is that we began this semester looking at this. Most any problem set that we did, most any test question or quiz question, really can be reduced to the simple picture, this simple idea, problems are just things that take inputs and your goal is to produce outputs. And of course, the thing in the middle, we claimed, were those things called algorithms. And that's where the sort of interesting thoughts and the problem solving actually comes into play. And so even as you advance to some of the higher level CS courses that you heard about today, or any other courses, or generally realize that at the end of the day, this really is the mental model with which to exit a class like this. Hopefully, we've helped clean up your thought in a bit of a way. Hopefully we've given you a more methodical approach to solving problems. But at the end of the day, even if the material is new and those inputs are new, the fundamental process is ultimately going to be the same. And there's a few ways then to tackle what problems remain in this semester. Of course there's just now the final project. And so coming up soon is the so-called CS50 hackathon, to which you are all cordially invited. This is an opportunity to arrive in Cambridge via buses that we'll provide around 7:00 PM. We'll serve first dinner around 9:00 PM. We'll serve second dinner at around 1:00 AM. And then if you're still awake, on the bus ride home we'll stop at a really big IHOP for breakfast as well. And in between meals will you work on your final projects. So these are just some of the photos with which some of our Yale students arrived last year. Some of them toting pillows and really hunkering down for the evening, as you may recall. Signing in, meeting some of their classmates. And this really is just meant to be one of those few collegiate opportunities that you really we hope remember for some time and certainly get a bit of work done that evening, but bringing the two campuses together as well, is one of the overarching goals. And ultimately, it's a room full of people, and food, and places to solve problems like your final project with one meal, another meal-- Shreyas again. You'll notice that even the TFs last year solved a lot of problems. They built this apparently. There was a lot of candy, and they built this. They spelled that. There's a little something for everyone, this is to say. So you'll see this URL on the course's website as well, but do sign up there to sign up for a shuttle bus ride. And then thereafter, is the climax of the course. Many years ago in Cambridge, we used to end the course with a pretty traditional approach to final projects. Students would submit their final projects, everyone could convene in one last section, and then everyone would present their projects one at a time. And frankly, it's not a particularly enthralling way to see what your classmates have done everyone just kind of there out of obligation. And so we tried to transform that thing on its head a few years ago with the first-ever CS50 fair. And now we're coming up on the ninth CS50 fair that will happen both in Cambridge, as well as here at Yale for all students, faculty, and staff here to attend. And this will be an event in commons that looks a little something like this, with students like you now, presenting your projects on laptops with food, and popcorn, and music, and recruiters from industry, and friends ultimately, delighting hopefully in the kinds of things that you have accomplished, and as well will there be some cotton candy here. Now we need, as we close things up here for fall 2016 for our student volunteers, if I may. One in back. Two in way back. Come on up. Can we get someone from the side, anyone? Anyone? Billy, again? Billy, come on up. OK. Yes, right in the middle. Come on down. Come on down, all four of you, and then back middle as well, I think. Yes. Back middle, come on down. And if you guys want to take the side of the-- that was the opposite of dramatic-- students. If you'll take your four seats here, we have little Easy buttons via which we'll be able to-- EASY BUTTON: That was easy. DAVID J. MALAN: --buzz in. But now we need four staff members, if I may. Oh my god, yes, come on down. Another staff member here, way in back and a fourth. A fourth, yes, come on down. 00:55:49,549 --> 00:55:50,840 We got the microphones as well. OK, so we have our four staff members here. Going to go ahead and give each member of the table this microphone. Be sure to speak in your answer. We'll do our best to adjudicate who has actually buzzed in first, but this is our opportunity for our second annual family feud of students versus staff. And you'll recall, just a few days ago when you submitted problems, did we ask you a few questions just for fun, so that we would have actual answers based on the most popular 100 responses. So CS50's own Colton here is going to help me run the board. We have time for just a couple of rounds of this. And then actually, can we get you to come on up and run the scoreboard up top? We just need math on the board, depending on who has scored best here. So the first question we're going to answer-- and let's see, we'll do this control of the board kind of thing here in the middle. And would everyone first like to introduce him or herself? 00:56:49,720 --> 00:56:50,720 ADAM: Hi, I'm Adam. I'm a TA. 00:56:53,960 --> 00:56:54,710 SAM: Hi, everyone. I'm Sam. I'm an office hours lead, CS major. I don't know if we should say that. ANNIE: I'm Annie, I'm a TA. BRAM: I'm Bram. I'm also an office hours lead with Sam. DAVID J. MALAN: Wonderful. IVY: I'm Ivy, I'm a student DAVID J. MALAN: I think we just need to turn up on our end. It'll record. IVY: I'm Ivy, I'm a student. DAVID J. MALAN: Nice to meet you. CLAY: Clay, Davenport 2020. SHU: Shu, freshman in Pearson. DAVID J. MALAN: Wonderful. And of course. BILLY: Billy, also Davenport 2020. Right there. DAVID J. MALAN: Wonderful. So let's go ahead and give the mic to our innermost team members here. One of you has to buzz in first to take control of the board or pass to the other team. So family feud is going to work as follows. I'm going to ask you a question, and if you think you have the answer, you're going to hit the Easy button first, and then you'll have a chance to answer that question. And if you get answer it correctly on the board, your team will take control. If yours is the top answer or the other team can take control. I'll guide us through this if that's unclear. So I'm about to ask you a question and you're about to hit that button if you have an answer. All right. Colton, name your favorite algorithm. Graham. GRAHAM: Bubble Sort. DAVID J. MALAN: Show us Bubble Sort. That was the number one answer. So staff has control. You'll have up to three strikes to mess up, at which point control goes to the other team. So Annie, name your favorite algorithm. No need to buzz in. ANNIE: Binary search. DAVID J. MALAN: Binary? ANNIE: Search. DAVID J. MALAN: Binary search. Number 2, very popular algorithm. Sam, it's going to get a little harder now. SAM: It's true, it's true. I'm going to go with merge sort. DAVID J. MALAN: Show us merge sort. 00:58:45,980 --> 00:58:47,800 Number 3, Adam. Name your favorite algorithm. ADAM: My personal favorite, selection sort. DAVID J. MALAN: Selection sort. Show us selection sort. 00:58:58,450 --> 00:58:59,240 First strike. Some 100 other people disagreed with you. You have two more chances. Bram, back to you. Name your second favorite algorithm. BRAM: Breadth first search. 00:59:11,035 --> 00:59:12,910 DAVID J. MALAN: Show us breadth first search. 00:59:15,850 --> 00:59:17,540 Second strike. Annie? ANNIE: Linear search? DAVID J. MALAN: Linear search. 00:59:23,990 --> 00:59:28,700 So now students, if you answer this question in such a way that your answer appears on the board, you take all of the points into your category and then we'll proceed to the next round. CLAY: All right, David, we're going to do insertion sort. DAVID J. MALAN: Show us insertion sort. And the students take control. If you want to just jot down all 4 of those numbers and then tally it, that's the student's current score. So 41, 25, 22. Write down 41, 25-- SAM: No, no we have 41. DAVID J. MALAN: No students. No, you lost. No, you lost. 01:00:06,200 --> 01:00:14,470 41, 25, 22, and 11, and we have time now for just one more round. All right. 01:00:17,606 --> 01:00:20,240 SAM: Wait, you can yield and then you get the points you have? DAVID J. MALAN: Yes, because they stole the points from you. You lost. OK. So now, we're going to do one more round here. So if you will have a chance now to buzz in because we have another face off, and with Annie over here as well. The next question, and the last question is going to be actually, let's-- Name your favorite language. Students. CLAY: Python. DAVID J. MALAN: I heard Python. 01:00:52,720 --> 01:00:56,380 66 classmates agree with you. Name your favorite language. IVY: C. DAVID J. MALAN: Show us C. 14, very nice. Billy, what's your favorite language? BILLY: JavaScript. DAVID J. MALAN: JavaScript. On the board with 14. SHU: HTML. DAVID J. MALAN: HTML. Not on the board. Two more chances. 01:01:25,510 --> 01:01:26,510 You're out of languages. 01:01:29,510 --> 01:01:30,410 CLAY: SQL DAVID J. MALAN: SQL. 01:01:33,832 --> 01:01:35,290 Three languages still on the board. These are answers from actual classmates, top 100 answers on the board. IVY: I'm just going to try to scratch, even though-- DAVID J. MALAN: You and everyone else would like to try scratch. OK. No, not on the list of actual answers. Billy, it is on you. We need your favorite language. 01:02:00,570 --> 01:02:03,380 Be ready to steal, staff. Do you want to add those up for us? Yeah. Yeah, let's add these up. They have an unlimited amount of time. BILLY: CSS. DAVID J. MALAN: CSS. 01:02:18,630 --> 01:02:19,780 All right, staff. So let's go ahead and tally what we have here. Those numbers stay, they have those points. No, they keep those points. Add those up. 01:02:31,810 --> 01:02:32,840 99. All right, so, if the staff get any of the three answers on the board, they're going to get 66, plus 14, plus 14, and probably we should give them some multiplier. But no, we'll see what the other answer is. Give us your favorite language to steal. ANNIE: English. 01:02:56,600 --> 01:02:59,600 [CHEERING] 01:03:03,482 --> 01:03:05,440 DAVID J. MALAN: Two students actually did that. Let's see what number 4 would have been. Java, three people said. And lastly, number 6, actual answer, Spanish. One person. Thank you to our participants here. We have time now for some concluding remarks from the whole staff for you. Thank you to both of our teams here. This now, is the final message from the staff who will join us in just a few minutes out back for some cake. So we will finish CS50 where we began. Thank you to these up here, participants. [VIDEO PLAYBACK] - I'm Ana Leah, and this is CS50. [MUSIC PLAYING] 01:03:48,970 --> 01:03:50,850 - Thank you so much to this year's staff, without whom the course really wouldn't be what it ultimately is for students. Indeed, more than just videos and problem sets, and tests, and quizzes. CS50 really is about the interpersonal experience that students have with the course, and the connection that they make the whole teaching staff. - So as a student, I really struggled to learn pointers. But I have a great TF and he was just so inspiring that I really wanted to join the team myself. - When I applied to Yale, I was an English/Sociology prospective double major, and now I'm a computer science major. So if that's a little bit about how much CS50 changed me. - You can come in, take the class, do well, and even know the material so well that you're teaching the next year. - CS50 is one of the best opportunities you're going to have here while you're an undergraduate to teach a course to your peers and to really be a leader amongst your peers. - When you teach something, you are able to gain like 10 times as much knowledge as when you just learn it. - I've become much more comfortable with computer science fundamentals just by teaching them, rather than taking classes on them. - It's really amazing to watch these incredibly bright-eyed, incredibly enthusiastic, just fresh out of high school students, learning about CS and asking these really intense, really detailed questions in section and just getting really excited about the material with me. - It's for that aha moment when you're helping a student in office hours and they've been struggling for hours, and all of a sudden they get it. And it's that moment that I think is really special. - We are super, super excited every year when we have new people apply for CAs, and TFs, and graders, and being on staff is like the most fun part of CS50 and it has been super, super defining of my whole experience at Harvard. - To my students, I'd like to say-- - You're alive. - I love you all. - You guys are great. - And comment your code. 01:05:24,260 --> 01:05:28,780 - You should be a TF for CS50 to be able to empower other people. It's as simple as that. [MUSIC PLAYING] 01:05:48,632 --> 01:05:49,630 [END PLAYBACK] DAVID J. MALAN: This was CS50. Cake is now served. [APPLAUSE] 01:06:04,682 --> 01:06:05,670 [VIDEO PLAYBACK] [MUSIC PLAYING] 01:06:31,380 --> 01:06:33,590 - Any updates on the mailing case? People are getting desperate for some answers. - No. I mean, I've been all over town, and just haven't found anything new. I feel like I might as well just stay here at my desk and stare at the ceiling. - Well, what about your Rosebud lead? Nothing there? - No. Total dead end. I feel like we may never know who or what this Rosebud really is. 01:07:03,610 --> 01:07:06,632 - I don't think any word can explain a man's life. Try not to be too hard on yourself. 01:07:10,795 --> 01:07:12,920 Get some sleep. I'm sure you'll come up with something tomorrow. 01:07:25,820 --> 01:07:27,526 [END PLAYBACK]