[MUSIC PLAYING] SPEAKER 1: You are now graduating from CS50. [APPLAUSE] SPEAKER 1: So this was CS50. This is the start and the end of Week 12. So I have agreed, though I've resisted all term to wear glass this entire lecture, so you can see CS50 through my eyes. This is then the end of what was ultimately meant to be a journey from Week 0 to Week 12. And what I'd like to remind us all is that this line from the very first week of class that what ultimately matters in this course is not so much where you end up relative to your classmates but where are you in this, Week 12, end up relative to yourself in Week 0. Indeed, as you saw from that retrospective, 73% of you just twelve plus weeks ago had no prior programing experience or in computer science, and so I dare say that today, Monday of Week 12, none of you is officially less comfortable anymore. So congratulations to those among you who once were. So as is a tradition, we both begin and end the semester with cake. And so thanks to Professor Margo Seltzer in the Computer Science Department, we spent yesterday, a few of us, preparing some cakes for you. Quite a few marshmallows were used, and what we decided to do is decorate one of these cakes in this way. It started out like this with a bit more effort. It started to take shape when-- about a couple hours into it, started to look like this. And then finally, thanks to our friend, Margo Seltzer, you will be eating this in just a little while downstairs in the pub after CS50. So recall that on Quiz One, there was a recurring theme of numbers that you may have noticed. And in the post mortem for Quiz One a week ago, we asked your classmates if they could identify that sequence of numbers. I'm afraid I can't really tell you now what they are, lest we spoil what might otherwise be fun experience for you if you've not experienced, but allow me to invite up to the stage for the fabulous stress balls that we promised you're following classmates who did email us and let us know what in fact those numbers meant. If Angie, Barrett, Daniel, Elmer, Jarek, Layla, and or Nicholas are here, please come on up to receive your CS50 stress balls. Congratulations. And nicely done, congratulations. So a little bit of an Easter egg in that one there. So a word then on what awaits after CS50. So recall that it was just a few weeks ago that we started life here with Scratch and making Hello World with the simplest of dragging and dropping puzzle pieces and realized that just weeks later, you were all implementing a little something like this. CS50 shuttle driving yourselves virtually around campus. And I would encourage you to keep in mind, especially as you dive into final projects that delta, particularly if you were among those less comfortable or somewhere in between, as you now proceed to dive into your final projects, which is ultimately an opportunity to really take yourself out for a spin, use your new-found knowledge and savvy of computer science, and ultimately impress some 2,000 plus people with this year's CS50 Fair. Even Milo has gotten into the action. So he's been working on his final project already, a website that I'd encourage you to visit here. milobanana.me. So even Milo bought a domain name if that too is of interest to you. And what we always know too at this part of the semester is that we've taken off most all of the training wheels already, but one last one remains, that of the CS50 appliance. Now at the end of day, the appliance is just meant to be a fairly standard Linux server that you've been using all this time. And as such, it's representative of servers that you might use in the future. So realize that it's not necessarily itself a training wheel but representative of environments you'll use in the future. But even then, if you'd rather use your own Mac or your own PC, natively realize that the appliance is just one way you can continue programming. There exists tools, integrated and development environments, or IDEs, known as Code Blocks, Eclipse, NetBeans, and the like. Xcode as well on Mac OS, as well as on Windows, tools like the same including cygwin, Visual Studio, and several others. So we would encourage you with your final projects if you'd like to go beyond what you've done in the appliance, you can absolutely do this on Mac OS, Windows, and even on Linux if you run that yourself. Now, a word on Problem Set Six. You'll recall that Problem Set Six was probably for many of you the most challenging of problem sets. And there was this big board atop which some of you aspire to be. And we'd like to take a moment with another stress ball to acknowledge one of your classmates who bested most of the staff and most of classmates. Here we have Richard atop the list. If Richard is here today? Richard? Richard is indeed here today. Come on up, Richard! [APPLAUSE] SPEAKER 1: Not the awkwardness you're expecting today perhaps, but congratulations on Problem Set Six. So I've just received word-- so we went in and inserted this on the fly-- that it's one of your classmate's birthdays. Though recall that statistically this is likely to happen most any day of the semester as we've seen with the so-called birthday problem. But nonetheless, since his roommates asked, we'd like to take a moment and acknowledge Mike whose birthday is today with the stress ball. If you'd like to come on down, Mike. [APPLAUSE] [SINGING] SPEAKER 1: So you'll recall as well in Problem Set Five, there was a bit of an optional challenge. Once you recovered those 50 photos, you were challenged to find those 50 computer scientists and then take photographs of yourself with them, ideally as non-creepily as possible. That didn't always happen, but we'd like to acknowledge a few of your classmates who did in fact find many of the course's staff. If Chris, Layla, and Raul could come down for their acknowledgement and stress balls as well? Congratulations. Come on up. We meet again. Congratulations on your finding of the staff. And come on up, Layla, as well. Congratulations. All right, but there were a couple of classmates who found quite a few more of the staff. In one case, 47 of the staff, and in one case, all 50. One of your classmates writes us as upon submitting his submission, this is my final submission for the I Saw You Harvard Game. I ended up finding 46 people and one dog. It might not be enough to win, but it was a lot of fun. And that was Daniel, who here is pictured with RJ, with Ben. Curiously, he doesn't seem to want to be in that photo with Ben. But we'd like to acknowledge Daniel. But we also received another note from a student who at 5:23 AM on Monday, November 4, the deadline for these submissions. Dear Heads, I have 54 at the minute. Some more may be added in the coming hours, included are some other staff I found. Then at 11:09 AM on that same day, this fellow too, also named Daniel, writes, I'm pleased to announce that I have found the remaining four computer scientists and have completed the set. So we'd like to acknowledge Daniel as well for finding Milo and Jason and even Tommy MacWilliam, former Head Teaching Fellow who now lives in California but is apparently accessible on Skype. So we would like to honor both Daniels with this prize. Congratulations. And congratulations to you as well. All right, so I'd like to take a moment now to focus not on classmates, but on the course's staff. We have, as you know, a team of some 100 Teaching Fellows, course assistants, producers, in addition to myself and the course's heads. And we'd like to take a moment to recognize in particular our undergraduate Head Teaching Fellows without whom this course, historically, and this year would not have been possible. Joseph and RJ and Lucas, if we could give them a round of applause. [APPLAUSE] SPEAKER 1: Particular thanks as well to someone you know perhaps all too well from having been embedded in your problem sets all semester, [? Zamayla ?] as well. [APPLAUSE] SPEAKER 1: And lastly, on the course's Heads Team, let me acknowledge both Rob, who's Former Head Teaching Fellow and now our preceptor in computer science, as well as Lauren who has served as head of the whole course, and it's no understatement to say, and we're so sad, that she'll be moving on this coming year, that she has been extraordinary in this role, and is not here right now because she is literally cutting cake for us downstairs. So if we could clap for her on camera, we will play this back for her later. [APPLAUSE] SPEAKER 1: Lest I be remiss, let me with a slight wave of the hand thank those other 102 team members who you'll see again in just a moment. In fact, for those of you who don't have class or are skipping classes, if you could come on up for just a moment and wave hello and goodbye up here. Come on up. No, from here. We'll play a video with these guys here on stage, but let me recognize too some folks you rarely see, if ever, on stage because they're always behind the cameras, Kenny and Shelley and Ramon and Dan and Barry and TJ and the whole team and production who makes all of this possible. They're all out there. And we'd like to all say before we move on today, a little thank you and a little teaser for what lies ahead. In particular we would invite you to consider joining us next year. If the staff would like to remain on stage for this here. [VIDEO PLAYBACK] [MUSIC PLAYING] -We couldn't do CS50 without the team we have. 102 undergraduates, graduates, and alumni who really make CS50 what it is. [MUSIC PLAYING] -My favorite thing about CS50 is-- -There's a lot of fun behind the scenes, and you get to take part in the teaching side of things rather than the learning side of things. -For me it was definitely office hours. -Helping students at office hours is always really fun. -I really like the office hours. -The officer hours of P-Set 7 and 8, because those are really crazy and intense, and people were crying. -I really like CS50 tutoring, because I like working with students in small group. -Working with the students and watching them go from printing out hash-tags from [? Mario ?] to making hash tables at the end. -Seeing people grow-- -And be like, this is the same person, and I taught them how to do that. -Seeing when students finish a problem set and how happy they are. -It's just that moment when the student has that, aha, I get it. -You see that they get it at some point. -That aha moment. -It's pretty awesome to be a teacher then. -I like teaching. -I think for me it's the students. -Interacting with the students. -Getting to know my students in section. -As long as the students are genuinely amused by my jokes. [LAUGHTER] -In one word. I don't know, I would have to say-- -All right. -The best. -The staff. -Is that what we said? -I forgot what we said. [INTERPOSING VOICES] -What did you say? Are you serious? OK, that's what I thought. I thought you said David's hot bod. -It's incredible to be here. -Fun. Something better than fun? One word? Epic. Crazy. You can edit this. -Exciting. -Sexy. -Sorry, what? -Marvelous. -Rewarding. I want to say rewarding. -Let me think of a better word. -Candy. -Computers. -Cats. -Milo. -How about world peace? Hyphenated maybe? -I'm Allison from Adams House. -My name is Zuhela Ibrahim from Quincy House. -Ben D House. -I'm William from Adams House. -I'm Keenan from Dunster House, and this was CS50. -CS50, done. -And this was CS50. -This was CS50. [END VIDEO PLAYBACK] [APPLAUSE] SPEAKER 1: So if we can make a graceful exit that way, we will forge ahead. But let me invite those of you out in the audience to consider joining this team at CS50.net/apply. In particular, now that none of you are less comfortable anymore and may very well be all the more comparable, we are looking for these and other roles. So please do take a look. And let me actually rewind a bit. We try not to single out too many individuals, but I'd like to read you a note from a student that I received on May 13, 2011. And he writes, I am Gabriel, a 17-year-old high school student from Victoria, Brazil. And I recently took the CS50 course online through CS50.tv. I really watched and read everything from the CS50 course, and I've done everything from the P-Sets, either hacker edition or not, but I did not do any final project. Now I have an idea for a final project, and that is why I'm writing you. Getting right to the point, I would like to make and teach my own adaptation of CS50 in my school. Unfortunately, most of the students in my school do not speak English, so I would have to translate everything and certainly adapt some of the parts to better fit the situation, a task which I would willingly do, and I could also do gladly if it is of interest. I am actually planning to publish everything on a CS50.net style website. And that there is that website in Brazil. Gabriel also has a tradition, it seems, of filming every one of his lectures. And so the first year he taught this class, he had some 50 classmates of his in high school taking CS50 with him. And then the next year, some 150 classmates of his taking CS50, or CC50 as it's called there, with him, with his dad behind the camera filming absolutely everything that happened. And so what I thought we'd do is share a three-minute clip of CS50's Brazilian version here thanks to Gabriel. [VIDEO PLAYBACK] [MUSIC - THE CALL, "WHEREVER YOU WILL GO"] [END VIDEO PLAYBACK] SPEAKER 1: Some of you know him as Gabriel. Some of you know him as Gabe. And several of you know him as your Teaching Fellow, so thank you and congratulations to Gabe for what he has done here. [APPLAUSE] SPEAKER 1: So a look now ahead before we bring a few of you up on stage. So on the horizon, as you know, is the CS50 Hackathon. So as I mentioned a couple weeks ago, this is not an opportunity so much to start your final project, but to make progress on and or finish your final project. And do realize too, it's not designed to be some eight plus hours of office hours, but really an opportunity to be working independently or with your partner or partners if going that route alongside of classmates and staff, and generally leaning on each other as well as yourself, force powering through many challenges that you've set out for yourself. And I cannot emphasize this enough. If you haven't learned this lesson already from problem sets, it is absolutely a truth in software development that everything takes longer than you expect. So whatever you're thinking of setting aside over the next few weeks, double it. And from there, realize that even then you might not necessarily achieve your better or best aspirations, but certainly we look forward to some good, great, and ideally, best implementations. But this is what awaits. In just a few weeks' time, we literally will have some say CS50 shuttles. We will head over across the river to the so-called HBS Hives, which are above the Innovation Lab, where the CS50 Puzzle Day was held this year. You'll see a beautiful space on the inside, inside of which are a bunch of different rooms called Hives, all of which have collaborative work spaces, not unlike what you've seen at the Innovation Lab perhaps already. And there will be ample food and candy. There will be one such Hive with a bunch of consoles if you'd like to decompress at some point and play some games with classmates. But for the most part, you'll see images like this working on projects and this. But around 9:00 PM, we'll serve quite a bit of pizza. And army of Domino's fellows arrived last year to deliver it. Around 1:00 AM, we'll serve Chinese food. This year we'll provide plates. Here, then, at 5:00 AM, if still standing, you can go back home to sleep, or join us in a bunch of shuttles that will go down the road to Soldier's Field where a much bigger IHOP exists than the one in the Square, and we will serve up some pancakes for as long as you can sustain it. Thereafter, a few days after is the CS50 Fair, to which you're all invited as well as your friends and classmates. Each year, as I mentioned, some 2,000 plus folks from across campus attend this event. And it looks typically a little something like this, complete with CS50 stress balls and popcorn and candy. What's fun in looking through the photos is that this is what caught our eye with this photo. Followed by, if you pan up, that. But it turns out, it's not all that uncommon. Here's a couple of folks in sunglasses no less enjoying some CS50 candy. We're also joined, as we will be this year, by friends from industry. So if you're considering summertime opportunities or full-time jobs, our friends from Amazon and eBay, Facebook, Google, Microsoft, Cora, and others will be tabling at the event and there to chat you up. As well, there will be an opportunity to win some fabulous prizes. One of the ways we try to break the ice every year so that the conversations don't feel forced but are at least motivated either intrinsically or extrinsically is we have a bit of a raffle. So you'll receive a little printed card upon arrival that will ask you for your name and then has a whole bunch of place holders for Smiley face stickers. And for every classmate you or an attendee chats up, you'll receive a little sticker that will go on your raffle card. And the more stickers, the more opportunities to win such fabulous prizes as these here. So it's a fun little add on to what's otherwise an event entirely about you guys. And such images like this and this and this and this awaits you ultimately at the CS50 Fair. But it would not be the last lecture of CS50 without a bit of tradition. If we could have [? Zamalya ?] and RJ, and Rob come on up on stage here. Sit at this table here. And we now need, let's say, six volunteers from the audience to compete in a battle of wits. Let's do from each section here. How about-- come on up. One. How about two, right in the middle? How about three on the end here? Four? And I never go very back. Five in the back row there, sure. And six on the end here. Come on up, all right. So if you'd like to take your places as Team One, Team Two, and Team Three. All of you guys indirectly are participating. As you might recall, that as part of the last problem set, you submitted a whole bunch of quiz review questions. Not all of them, of course, ended up on the quiz itself for reasons that will soon be clear. But we thought we'd excerpt from some of those and have a bit of challenge of wits here for Team One, Team Two, and Team Three. If you guys would each like to say a quick hello while I queue up the board here. LAYLA: Hi, I'm Layla. MIKE: I'm Mike. TABITHA: Tabitha. MARIAM: Hi, I'm Mariam, I'm a freshman [? in Mauer. ?] KEIRAN: Hi, guys, I'm Keiran. BRIAN: Brian. Freshman in Pennypacker. RJ: Hi, I'm RJ. ZAMYLA:Zamyla. ROB: Rob, I'm a freshman in Weld. SPEAKER 1: And today we also have Colton who'll be helping us run the board, if you'd like to say hello as well. COLTON: What's up? SPEAKER 1: All right, so this is Jeopardy using the very questions that you all submitted. We might not have time to clear off the whole board, but we'll at least try to pluck off some of the highlights. In the toss of the coin that didn't actually happen, Team One won control of the board. So in just a moment, we're going to put this on the overhead for all to see here. And Team One, you're in control of category and dollar amount. The categories being Binary and ASCII, Compilers and Libraries, Code, Computers, and Rand. Oh, and for buzzing in-- I've taken this for granted. For buzzing in, we haven't buzzers, but we do have your hand. So the first hand up as adjudicated by Colton and or myself and or grumblings from the audience will determine whose hand went up first. Team One, what category would you like? MIKE: Code 500. SPEAKER 1: Code for 500. [LAUGHTER] SPEAKER 1: So we're going to make up some of the rules as we go. So what dollar amount would you like to wager on code? I know, so pick a number. Anything you want . MIKE: 500. SPEAKER 1: For 500. Code for 500. How is C typed? Anyone whose hand goes up first. From the people at these tables. I think I saw Team Three? ROB: Statically typed? [LAUGHTER] SPEAKER 1: I'm sorry, minus 500 for the staff. Moving on to the next category. Team One is still in control. MIKE: Binay for 500. SPEAKER 1: Binary for 500. What is the answer-- Team Two, I'm told. MARIAM: What is 42? [GROANING] SPEAKER 1: I'm afraid now, would someone else like to do this? Team One. MIKE: One zero one zero. SPEAKER 1: I heard one zero one zero, which is indeed correct. [APPLAUSE] SPEAKER 1: You're actually doing all the work. Team One is still in control and now has positive 500. ROB: Doesn't Team Two lose 500? SPEAKER 1: Sorry? ROB: Should Team Two lose 500? SPEAKER 1: Oh, should Team Two lose 500? Yes, if we're doing it that way. You just lost the crowd though. Team One, you're in control. MIKE: Random for 500. SPEAKER 1: Random for 500. And that question is, what does the fox say? Serious questions submitted by one of your classmates. Team Two? BRIAN: Ding-ding-ding-ding-ding. SPEAKER 1: I think we'll take that though. We'll take that. Team Two is in control. We have time for a few more single Jeopardy questions. KEIRAN: We'll go with Computers for 100. SPEAKER 1: Computers for 100. [LAUGHTER] SPEAKER 1: Team Three. RJ: What is jkl semicolon? SPEAKER 1: But only minus 100. Actual submissions from your classmates. Team Two, still in control. BRIAN: Let's go Computers for 500. SPEAKER 1: Computers for 500. And that question is, merge sort. [LAUGHTER] I see Team Two. BRIAN: What is an n-log n sorting algorithm? SPEAKER 1: Something tells me that's not going to be it. And the answer is-- you want to give it to him? Positive 500. We have time for one more single Jeopardy question. Team Two. BRIAN: Compilers and Libraries for 500. SPEAKER 1: What does #include mean? Rob? ROB: You want the pre-processor to copy the contents of the dot-h file into the file? [AUDIENCE BOOS] SPEAKER 1: That's pretty good. 500. So at the midway point, Team One is at positive 500. Team Two at positive 500. And Team Three somehow still at negative 100. So now we move on to Double Jeopardy. And with Double Jeopardy, the categories will now be Hash Tables, Programming, Internets, HTTP, HTML, and CSS, and Rand. I think Team Two is in control. RJ: Why not us? They just won. They just got the last one. SPEAKER 1: Oh, Team One. You're Team Three. ROB: Rand for 1,000. SPEAKER 1: Rand for 1,000. And that question is, what used to allow you to make free long distance phone calls? Should have watched that lecture, shouldn't you? Team Two. MARIAM: The Captain Crunch whistle, if you blew it into the AT&T thing. SPEAKER 1: Very nicely done. All right, Team Two is forging ahead. We have time for just a couple more questions in Double Jeopardy. Team Two. BRIAN: Let's go for Internets for 600. SPEAKER 1: What does 403 mean? That was on the quiz. Team Three? Team Three. ROB: Forbidden? What is forbidden? SPEAKER 1: Forbidden, correct. Team Three, you're in the positive zone now. What would you like? ROB: Internets for 1,000. SPEAKER 1: Internets for 1,000. Clark's Third Law? From the audience, Daniel? [INAUDIBLE] SPEAKER 1: Would you like to reveal? Daniel for 1,000. We have time for one last question before we enter Final Jeopardy. What category would you like? Hash Tables for 1,000, our last question. What must you remember to do after-- Team Two. MARIAM: F close? No? SPEAKER 1: Before we reveal, what would Team One's answer have been? MIKE: Checking if it's null? SPEAKER 1: Checking if it's null. And what would Team Three's answer have been? [INAUDIBLE] SPEAKER 1: Colton, what is the answer? So Team One. So I guess we'll give it to both of you. 1,000 to each team puts you at 2,500, 1,500, no? There we go. But Team One, I think, gets the null for 1,000. Students you can still lose this by making poor mathematical decisions. We now enter Final Jeopardy. Category is Computer Science. Team One you can wager up to one. That was a bug. What was it, 1,500? 1,500. Team Two can wager up to 1,500. And Team Three can wager up to 600. Please write down your dollar amounts on your piece of paper while we play some background music. Or as we reveal the question. Have you made your wagers? We only show wagers after answering. Write down your dollar amounts, nice and clearly. So the question is, what is CS50? Now we have some background music. So Team One's answer there is, and you wagered 299, which are plus 100 buttons cannot accommodate, but you wagered 299, and your answer was, this is CS50. Meanwhile, Team Two wagered 700. Their answer being a cult. You want to go with this? So you wagered-- They wagered this. And their answer was that CS50 is not this. But the official answer according to your classmate who submitted this question is-- [MUSIC PLAYING] [LAUGHTER] SPEAKER 1: This! So that puts these guys at 899. You guys wagered all of your money. You guys wagered 700, but had what, 1500? Which is 800. So wow, you guys have one by the $99. Team One! A big congratulations. Congrats. We've got one more thing to do. Congrats. We have one last thing to do. There is indeed quite a bit that goes on behind the scenes, and unfortunately, all of it is captured on video, even though you might not see everything on CS50.net. And what our team's done to bring us home here today is to prepare a reel of outtakes, about three minutes' worth, of what CS50 really is behind the scenes. If we could dim the lights one last time here in Fall 2013. [VIDEO PLAYBACK] -Welcome back. This is the end of Week 5. So up until now-- restart. [MUSIC PLAYING] -This is the beginning of the decline. -Ugh. -Virtual set of doors. We'll re-arrange these-- [MUSIC PLAYING] -Hi, I'm Rob. And let's get greedy. It's me, Rob. And when in Rome, let's program as the Romans do. Let's decipher the Visionaire program. I hope you're game for Game of 15. How do we employ a binary search? Let's find out. Wondering how to implement this game? Well, let's break out the staff solution. Let's hope that this solution helps put you on the road to recovery. And I hope you're ready to pick up what I'm dropping off, or putting down, or-- Oh, shoot, good call. Boom. -Are stocks de-shelved by the seashore? [INAUDIBLE] -For those of you who can't see the embarrassing mistake I just made, there it is. -Attribute. Attributes. Attribute. At. -What's going on? What's happening to me? -Sorry, I'm a little loopy. -I can't see your thumb. Yes! [BEEP] -Sorry. There's a camera. [INAUDIBLE] -Things you do for this class. That's all. Programming is hard. -This is CS50. -Winner. [MUSIC PLAYING] -Things called Hash Tables and Linked Lists. Trees and Tries, all tools for one's tool kit with which to solve problems more effectively. We'll take-- [LAUGHTER] We have to use that. [LAUGHTER] How did we not see that coming? We need outtakes now. [END VIDEO PLAYBACK] SPEAKER 1: This was CS50. Cake is now served downstairs. [APPLAUSE] SPEAKER 2: At the next CS50, the Hackathon doesn't go as planned.