1 00:00:00,000 --> 00:00:01,872 2 00:00:01,872 --> 00:00:07,810 SPEAKER: This is CS50, and this is CS50 Explained, Behind the Pedagogy. 3 00:00:07,810 --> 00:00:13,060 So many of you have probably taken CS50 or heard of CS50 in some form already. 4 00:00:13,060 --> 00:00:15,900 And so that then is what of CS50, if you've 5 00:00:15,900 --> 00:00:19,530 actually gone through the courses, lectures, and/or problem sets, that 6 00:00:19,530 --> 00:00:20,800 is programming assignments. 7 00:00:20,800 --> 00:00:23,040 But this session during our educator workshop 8 00:00:23,040 --> 00:00:25,600 is meant to be a glimpse at the why. 9 00:00:25,600 --> 00:00:29,910 Why, for better or for worse, have I, have we, CS50's team, 10 00:00:29,910 --> 00:00:34,090 made some of the pedagogical and curricular decisions that we have. 11 00:00:34,090 --> 00:00:36,760 Ultimately, it's up to you as a teacher in your own classroom, 12 00:00:36,760 --> 00:00:39,630 whether to adopt or adapt or neither of those 13 00:00:39,630 --> 00:00:41,182 when it comes to each of these ideas. 14 00:00:41,182 --> 00:00:43,140 But at least we thought we would share with you 15 00:00:43,140 --> 00:00:46,390 some of the thinking behind our own conscious decisions. 16 00:00:46,390 --> 00:00:51,100 So CS50 itself is a fairly traditional undergraduate class here in person. 17 00:00:51,100 --> 00:00:52,600 It's among Harvard's largest. 18 00:00:52,600 --> 00:00:54,930 So pictured here is beautiful Sanders Theater, 19 00:00:54,930 --> 00:00:57,210 this old building on campus in which we're 20 00:00:57,210 --> 00:00:59,740 fortunate to be able to give our lectures. 21 00:00:59,740 --> 00:01:03,080 But the course is structured with other resources as well. 22 00:01:03,080 --> 00:01:07,630 And everything that we do nowadays, curricularly, technologically 23 00:01:07,630 --> 00:01:10,610 is freely available as open courseware, so to speak. 24 00:01:10,610 --> 00:01:13,660 That is to say it costs teachers nothing to use 25 00:01:13,660 --> 00:01:17,710 any and all of these materials and these tools as well. 26 00:01:17,710 --> 00:01:21,460 CS50x, now in terms of nomenclature, is essentially 27 00:01:21,460 --> 00:01:24,350 what we call the free version of CS50. 28 00:01:24,350 --> 00:01:27,710 So they are one in the same curricularly and technologically. 29 00:01:27,710 --> 00:01:31,870 But whereas we might say a Harvard or Yale student takes CS50 on campus, 30 00:01:31,870 --> 00:01:35,450 anyone online would take CS50x off campus. 31 00:01:35,450 --> 00:01:38,150 But curricularly and technologically they are the same. 32 00:01:38,150 --> 00:01:42,910 And all of the courses materials live at this URL, as well as on other platforms 33 00:01:42,910 --> 00:01:46,660 that you might know, like edX and YouTube, Apple TV, Google 34 00:01:46,660 --> 00:01:50,150 TV, and other platforms over the time as well. 35 00:01:50,150 --> 00:01:52,330 Now, in terms of other nomenclature, there's 36 00:01:52,330 --> 00:01:56,770 an adaptation of the class called CS50 AP, which for those of you in the United 37 00:01:56,770 --> 00:02:01,510 States in particular is an endorsed implementation of the AP Computer 38 00:02:01,510 --> 00:02:04,720 Science Principles curriculum framework, which 39 00:02:04,720 --> 00:02:08,560 is to say that high school students can take CS50 either online 40 00:02:08,560 --> 00:02:11,260 or through their own school for AP credit, 41 00:02:11,260 --> 00:02:15,040 if their school will administer ultimately the exam so that they 42 00:02:15,040 --> 00:02:16,400 can get that credit. 43 00:02:16,400 --> 00:02:20,560 All of those materials are available at this URL on CS50's own website. 44 00:02:20,560 --> 00:02:26,530 And in essence, CS50 AP includes CS50x, plus some additional materials 45 00:02:26,530 --> 00:02:31,330 from a course that we have long called CS50T, an introduction to technology, 46 00:02:31,330 --> 00:02:34,750 more broadly, that has additional material that the AP 47 00:02:34,750 --> 00:02:37,210 test might expect of students. 48 00:02:37,210 --> 00:02:38,980 Pictured here is one of my favorite photos 49 00:02:38,980 --> 00:02:41,140 over the years whereby we gathered in New York 50 00:02:41,140 --> 00:02:43,630 City with a number of public and private schools 51 00:02:43,630 --> 00:02:46,180 years ago with some of our teachers and our network 52 00:02:46,180 --> 00:02:48,910 to have a hackathon for our high school students. 53 00:02:48,910 --> 00:02:53,230 Pictured here just a few weeks back are about 300 teachers from Indonesia 54 00:02:53,230 --> 00:02:55,450 who teach middle school and/or high school 55 00:02:55,450 --> 00:02:58,030 and are going to be teaching now introductory computer 56 00:02:58,030 --> 00:02:59,690 science in their own classrooms. 57 00:02:59,690 --> 00:03:02,080 So some of CS50's team and I flew to Indonesia 58 00:03:02,080 --> 00:03:07,310 to lead a workshop like this one in person for those teachers in Jakarta. 59 00:03:07,310 --> 00:03:10,160 And lastly, pictured here are some of our students in Nicaragua. 60 00:03:10,160 --> 00:03:12,940 So where they have been taking CS50 largely 61 00:03:12,940 --> 00:03:15,010 in Spanish with some of their own teachers 62 00:03:15,010 --> 00:03:17,920 there, as well as working their way through the courses, 63 00:03:17,920 --> 00:03:22,390 problem sets, final projects, ultimately to exhibit their own CS50 certificate 64 00:03:22,390 --> 00:03:23,530 at the end of the course. 65 00:03:23,530 --> 00:03:25,900 And most recently, as CS50 actually begun 66 00:03:25,900 --> 00:03:28,810 giving talks and professional development in companies, 67 00:03:28,810 --> 00:03:31,720 like General Electric and others, whereby 68 00:03:31,720 --> 00:03:34,420 the goal is to really uplift people more broadly when 69 00:03:34,420 --> 00:03:37,480 it comes to understanding, technology, computing, 70 00:03:37,480 --> 00:03:39,410 and programming in particular. 71 00:03:39,410 --> 00:03:45,100 Now, for those of you unfamiliar, besides CS50x, and in turn CS50 AP, 72 00:03:45,100 --> 00:03:48,250 CS50 has a whole curriculum now of courses 73 00:03:48,250 --> 00:03:54,320 that you can take either before CS50 or after CS50 in either of those forms. 74 00:03:54,320 --> 00:03:56,440 So, for instance, just to rattle these off, 75 00:03:56,440 --> 00:04:00,550 we have a course that focuses particularly on programming with Python, 76 00:04:00,550 --> 00:04:04,510 a course that focuses on web programming with Python and Javascript, 77 00:04:04,510 --> 00:04:06,700 a course that focuses on game development, 78 00:04:06,700 --> 00:04:10,570 one that focuses on artificial intelligence with Python, one of which 79 00:04:10,570 --> 00:04:13,270 is an introduction to computer science for lawyers 80 00:04:13,270 --> 00:04:17,320 or for business professionals or for technologists, really consumers, 81 00:04:17,320 --> 00:04:19,010 or citizens more generally. 82 00:04:19,010 --> 00:04:21,970 Hot off the press is a new course on programming 83 00:04:21,970 --> 00:04:24,580 with R, very popular language for data science 84 00:04:24,580 --> 00:04:26,780 that's about to launch in just a few days. 85 00:04:26,780 --> 00:04:30,370 A course on programming with Scratch, particularly for younger students 86 00:04:30,370 --> 00:04:34,540 a course on databases with SQL, a language 87 00:04:34,540 --> 00:04:36,320 via which you can manipulate data. 88 00:04:36,320 --> 00:04:41,090 And then lastly, for now, a course on cyber security specifically. 89 00:04:41,090 --> 00:04:44,020 So even though today and tomorrow we will focus primarily 90 00:04:44,020 --> 00:04:49,960 on CS50x, and in turn CS50 AP, is really the computer science backbone 91 00:04:49,960 --> 00:04:55,490 that these courses, either lead to or extend from after you've taken them, 92 00:04:55,490 --> 00:04:58,180 all of these courses, all of these resources and tools 93 00:04:58,180 --> 00:05:02,820 are similarly available to you for free as indeed open courseware. 94 00:05:02,820 --> 00:05:03,750 But there's a lot. 95 00:05:03,750 --> 00:05:06,060 In those courses in CS50 itself, indeed, you 96 00:05:06,060 --> 00:05:08,640 might recall if you've watched CS50's own lectures, 97 00:05:08,640 --> 00:05:13,770 we display this picture here, which is a fire hydrant connected to a drinking 98 00:05:13,770 --> 00:05:14,530 faucet. 99 00:05:14,530 --> 00:05:16,980 And the idea is, and this is a photograph down 100 00:05:16,980 --> 00:05:21,480 the road from MIT, that taking CS50, like getting an education from MIT, 101 00:05:21,480 --> 00:05:23,290 is like drinking from a fire hose. 102 00:05:23,290 --> 00:05:26,520 It's really going to hit you with a lot of material, a lot of water 103 00:05:26,520 --> 00:05:29,350 that you might not be able to take down all at once. 104 00:05:29,350 --> 00:05:32,130 But that's not really the goal ultimately. 105 00:05:32,130 --> 00:05:34,380 Rather, the goal is that exposure. 106 00:05:34,380 --> 00:05:36,420 And that reality that over time there's going 107 00:05:36,420 --> 00:05:40,650 to be so much more to learn, and among the goals of CS50 is to teach students 108 00:05:40,650 --> 00:05:43,650 and in turn teachers how to teach themselves 109 00:05:43,650 --> 00:05:46,980 this material, which is never going away insofar as it's only 110 00:05:46,980 --> 00:05:48,840 going to continue to change. 111 00:05:48,840 --> 00:05:51,480 Now, as for the language, the programming languages 112 00:05:51,480 --> 00:05:53,460 that we use in CS50, we actually do start 113 00:05:53,460 --> 00:05:57,358 with Scratch, a very student friendly graphical programming language 114 00:05:57,358 --> 00:05:59,400 that many kids around the world nowadays are even 115 00:05:59,400 --> 00:06:02,150 using in middle school, if not younger. 116 00:06:02,150 --> 00:06:05,260 But we use it to talk about programming fundamentals, 117 00:06:05,260 --> 00:06:09,700 like functions and loops and arguments and conditionals 118 00:06:09,700 --> 00:06:13,000 and other programming constructs that are still 119 00:06:13,000 --> 00:06:16,220 going to be present in most every other language we talk about. 120 00:06:16,220 --> 00:06:19,270 But in Scratch, there's no semicolons, there's no parentheses, 121 00:06:19,270 --> 00:06:23,050 there's no sort of syntactic stupidity that just tends to get in the way 122 00:06:23,050 --> 00:06:26,030 and gets very frustrating when students are confused. 123 00:06:26,030 --> 00:06:29,980 So we get rid of that early on, spending just a day, maybe a week 124 00:06:29,980 --> 00:06:33,160 or slightly more on this particular domain. 125 00:06:33,160 --> 00:06:36,490 For those unfamiliar, it's indeed this drag and drop programming interface 126 00:06:36,490 --> 00:06:40,030 that really isn't too young of a platform, 127 00:06:40,030 --> 00:06:41,600 even for the oldest of students. 128 00:06:41,600 --> 00:06:45,140 Indeed, we use this with our own university students here. 129 00:06:45,140 --> 00:06:47,980 It allows us to implement Hello, World as quite simply 130 00:06:47,980 --> 00:06:50,210 as a couple of puzzle pieces like that. 131 00:06:50,210 --> 00:06:52,600 But then we do transition in CS50 fairly quickly 132 00:06:52,600 --> 00:06:54,850 to a more traditional text based language, 133 00:06:54,850 --> 00:06:58,467 an older language called C, which is not very common nowadays. 134 00:06:58,467 --> 00:07:00,050 It looks a little something like this. 135 00:07:00,050 --> 00:07:04,840 Much of the world, I daresay, has moved to use Java, or most recently Python, 136 00:07:04,840 --> 00:07:06,590 perhaps other languages as well. 137 00:07:06,590 --> 00:07:09,880 But the appeal of something like C to us is, one, 138 00:07:09,880 --> 00:07:14,830 we can actually pretty readily make an analogy between Scratch and C, 139 00:07:14,830 --> 00:07:18,070 even by color coding it, as I have done the code here. 140 00:07:18,070 --> 00:07:21,160 Even though there's a lot more syntax going on here, of course 141 00:07:21,160 --> 00:07:25,670 this program is functionally the same and just prints out Hello, World. 142 00:07:25,670 --> 00:07:28,810 And so when we go from Scratch to C, among my favorite things 143 00:07:28,810 --> 00:07:33,190 to do pedagogically is to show students these very user friendly puzzle 144 00:07:33,190 --> 00:07:37,600 pieces in Scratch, and say in C, it just looks a little different, 145 00:07:37,600 --> 00:07:38,930 like this here on the right. 146 00:07:38,930 --> 00:07:40,310 Yes, it looks scarier. 147 00:07:40,310 --> 00:07:43,810 Yes, it's harder to memorize at first with all of this punctuation, 148 00:07:43,810 --> 00:07:46,130 but it's the exact same idea. 149 00:07:46,130 --> 00:07:49,900 And we try to give students early on this mental hook, this mental comfort, 150 00:07:49,900 --> 00:07:53,950 so that even if they're frustrated by or struggling with some of the syntax, 151 00:07:53,950 --> 00:07:58,270 it's the same darn ideas as they were the previous week with respect 152 00:07:58,270 --> 00:08:01,610 to functions and loops and conditionals and so much more. 153 00:08:01,610 --> 00:08:03,760 Indeed, here is a conditional that starts 154 00:08:03,760 --> 00:08:07,900 to look even more cryptic on right, but is the exact same thing as the puzzle 155 00:08:07,900 --> 00:08:09,190 pieces at left. 156 00:08:09,190 --> 00:08:13,960 But C now educationally also allows us to go at a lower level 157 00:08:13,960 --> 00:08:14,960 and pretty quickly. 158 00:08:14,960 --> 00:08:19,390 And in fact, among the most empowering things I hope about CS50 159 00:08:19,390 --> 00:08:23,360 is that we actually don't abstract that much away. 160 00:08:23,360 --> 00:08:26,860 At the end of the day, what's nice about C, I do think pedagogically, 161 00:08:26,860 --> 00:08:28,370 is that there's no magic. 162 00:08:28,370 --> 00:08:31,480 You don't just write one line of code and a whole lot of functionality 163 00:08:31,480 --> 00:08:33,320 happens for free for you. 164 00:08:33,320 --> 00:08:36,669 If you want to have a list of information, 165 00:08:36,669 --> 00:08:39,100 if you want to have a hash table of data, 166 00:08:39,100 --> 00:08:41,197 you have to implement that yourself. 167 00:08:41,197 --> 00:08:43,030 Now, that's not necessarily something you're 168 00:08:43,030 --> 00:08:47,240 going to want to do or even have to do professionally long term. 169 00:08:47,240 --> 00:08:50,470 But the fact that in this course, we give students this bottom up 170 00:08:50,470 --> 00:08:54,340 understanding of what is going on underneath the hood of the computer, 171 00:08:54,340 --> 00:08:57,350 we do think intellectually is incredibly empowering. 172 00:08:57,350 --> 00:09:00,580 So we present students, for instance, this grid of memory, 173 00:09:00,580 --> 00:09:02,870 RAM, so to speak, inside of your computer. 174 00:09:02,870 --> 00:09:06,970 And we propose to them that if we want to maintain some kind of ordering 175 00:09:06,970 --> 00:09:09,320 and association among these data, we can, of course, 176 00:09:09,320 --> 00:09:13,760 implement the scary old linked lists like this using pointers. 177 00:09:13,760 --> 00:09:15,730 But at the end of the day, there's no magic. 178 00:09:15,730 --> 00:09:17,060 This is just numbers. 179 00:09:17,060 --> 00:09:19,910 And those numbers are just bits, zeros and ones. 180 00:09:19,910 --> 00:09:24,010 And because we try in the course to scaffold things from building blocks 181 00:09:24,010 --> 00:09:28,750 to building block to building block, layering ideas on top of one another, 182 00:09:28,750 --> 00:09:32,650 the hope is that when students transition thereafter to a higher level 183 00:09:32,650 --> 00:09:37,420 language like Python, they still understand what is actually going on, 184 00:09:37,420 --> 00:09:40,982 and they appreciate now what tools they've been provided with. 185 00:09:40,982 --> 00:09:43,940 And they're not just kind of mimicking what they've seen on the screen. 186 00:09:43,940 --> 00:09:47,720 They know what Python, they know what their own code is doing. 187 00:09:47,720 --> 00:09:50,150 So one of my favorite exercises, in fact, is this. 188 00:09:50,150 --> 00:09:53,990 This is a bit of a spoiler, if you've not finished CS50x yourself. 189 00:09:53,990 --> 00:09:59,290 But this code here in about a dozen lines of code in Python is essentially 190 00:09:59,290 --> 00:10:03,500 an implementation of problem set 5 in CS50x currently, 191 00:10:03,500 --> 00:10:08,390 which is to implement a spell checker in C and implement your very own hash table 192 00:10:08,390 --> 00:10:13,850 for like 100,000 plus words in English that daresay takes most students 5 193 00:10:13,850 --> 00:10:17,935 hours, 10 hours, 15, 20 hours to implement and get right. 194 00:10:17,935 --> 00:10:21,710 But in Python, and I do this deliberately in class, 60 seconds, type, 195 00:10:21,710 --> 00:10:25,940 type, type, done implementing the same spell checker in Python, 196 00:10:25,940 --> 00:10:28,380 because that entire hash table, of course, 197 00:10:28,380 --> 00:10:31,460 is reduced to that one line of code at the very top 198 00:10:31,460 --> 00:10:34,010 there, where we use a Python set that we could 199 00:10:34,010 --> 00:10:37,190 use even a list or a dictionary or some other structure 200 00:10:37,190 --> 00:10:41,100 to implement that data structure containing all of those words. 201 00:10:41,100 --> 00:10:44,720 And it's that moment where students see and appreciate and sort of shake 202 00:10:44,720 --> 00:10:48,230 their fist metaphorically in class when they realize, oh my God, 203 00:10:48,230 --> 00:10:52,050 why did we just spend 10 to 20 hours implementing it in C. 204 00:10:52,050 --> 00:10:55,040 But the difference is that our students, we do hope, 205 00:10:55,040 --> 00:10:59,840 understand now at a very real level what all of this code 206 00:10:59,840 --> 00:11:02,020 is actually doing for them. 207 00:11:02,020 --> 00:11:05,770 We transition toward the end of the CS50, of course, to web programming. 208 00:11:05,770 --> 00:11:08,580 And this too is motivated by the reality nowadays 209 00:11:08,580 --> 00:11:12,670 that it's just useful to be able to write code for web contexts. 210 00:11:12,670 --> 00:11:14,860 It's not even the actual web necessarily. 211 00:11:14,860 --> 00:11:17,580 Increasingly, do mobile devices, for instance, 212 00:11:17,580 --> 00:11:22,830 have applications written in them using languages like HTML, CSS, and JavaScript 213 00:11:22,830 --> 00:11:27,790 for cross-platform support across Android and iOS in particular. 214 00:11:27,790 --> 00:11:30,150 So we introduced students, of course, to this structure 215 00:11:30,150 --> 00:11:33,430 of HTML, the bones that allow you to structure a page. 216 00:11:33,430 --> 00:11:37,110 But we very quickly transitioned to Flask, which for those unfamiliar 217 00:11:37,110 --> 00:11:39,010 is a micro framework. 218 00:11:39,010 --> 00:11:43,560 It's code that standardizes how you implement a web application, 219 00:11:43,560 --> 00:11:45,190 but it's fairly lightweight. 220 00:11:45,190 --> 00:11:48,360 There's fairly little Flask-specific stuff 221 00:11:48,360 --> 00:11:52,450 that students have to master in order to make their very own web application, 222 00:11:52,450 --> 00:11:55,500 unlike something like Django or other frameworks 223 00:11:55,500 --> 00:11:57,340 that just tend to be heavier weight. 224 00:11:57,340 --> 00:11:59,970 And indeed, this too is a pedagogical decision. 225 00:11:59,970 --> 00:12:03,640 We want students to become familiar with a framework. 226 00:12:03,640 --> 00:12:07,320 We want them to get exposure to some real world web applications. 227 00:12:07,320 --> 00:12:10,350 But we don't want to spend a week, a month, a course teaching 228 00:12:10,350 --> 00:12:14,190 them a specific framework, something like Django or the like, 229 00:12:14,190 --> 00:12:17,710 which might be very useful and very applicable professionally. 230 00:12:17,710 --> 00:12:19,250 But that's not the point, right? 231 00:12:19,250 --> 00:12:21,625 That's the point at which you should be going and reading 232 00:12:21,625 --> 00:12:22,930 the documentation is needed. 233 00:12:22,930 --> 00:12:25,590 What we care about in the context of web programming 234 00:12:25,590 --> 00:12:28,740 is what is the browser doing, what is the server doing, what 235 00:12:28,740 --> 00:12:32,620 is HTTP, what is the framework doing to facilitate all of that. 236 00:12:32,620 --> 00:12:37,110 And how are HTML, CSS, JavaScript and Python all 237 00:12:37,110 --> 00:12:40,200 solving different problems in this case. 238 00:12:40,200 --> 00:12:43,830 Now, ultimately, the software that we have students use in the course 239 00:12:43,830 --> 00:12:45,137 has evolved over time. 240 00:12:45,137 --> 00:12:47,970 And if you've been with us as a teacher in some form over the years, 241 00:12:47,970 --> 00:12:51,210 you'll know that the technology, the platforms we ourselves use 242 00:12:51,210 --> 00:12:52,330 has been evolving. 243 00:12:52,330 --> 00:12:56,190 Most recently, we have students using Visual Studio Code or VS 244 00:12:56,190 --> 00:12:59,070 Code, which is a very popular text editor, 245 00:12:59,070 --> 00:13:02,730 increasingly really an IDE, or integrated development environment, 246 00:13:02,730 --> 00:13:05,130 because with things called extensions or plugins, 247 00:13:05,130 --> 00:13:08,710 you can really add a lot more functionality to the environment. 248 00:13:08,710 --> 00:13:12,180 And so what we ourselves do for students is we can figure this for them 249 00:13:12,180 --> 00:13:16,020 in the cloud using a third party tool called GitHub Codespaces. 250 00:13:16,020 --> 00:13:20,190 What's nice about GitHub Codespaces is that whether you're using it for CS50 251 00:13:20,190 --> 00:13:24,000 or any of your own classes, any verified teacher 252 00:13:24,000 --> 00:13:28,570 can use GitHub Codespaces and related tools completely for free. 253 00:13:28,570 --> 00:13:31,140 So if you're using this through CS50 or on your own, 254 00:13:31,140 --> 00:13:33,310 you can use these tools in the cloud. 255 00:13:33,310 --> 00:13:35,950 And this too is a very pedagogical decision. 256 00:13:35,950 --> 00:13:39,090 All too often in introductory technical courses, 257 00:13:39,090 --> 00:13:41,610 students might have to download some piece of software 258 00:13:41,610 --> 00:13:43,720 or install it and configure it. 259 00:13:43,720 --> 00:13:46,200 Sometimes that works out well, but the reality 260 00:13:46,200 --> 00:13:49,950 is there's so many darn versions of Mac OS and Windows 261 00:13:49,950 --> 00:13:52,050 and even other operating systems that you're 262 00:13:52,050 --> 00:13:54,460 going to run into technical difficulties, 263 00:13:54,460 --> 00:13:58,380 certainly if you have a medium number of students. 264 00:13:58,380 --> 00:14:01,890 If you have just a handful, might not be such a big deal to get everyone up 265 00:14:01,890 --> 00:14:06,240 and running on their own Macs or PCs, especially if they need offline access. 266 00:14:06,240 --> 00:14:09,950 But if you're fortunate to have pretty good internet access in school, 267 00:14:09,950 --> 00:14:14,090 at home or at work, more generally, using something in the cloud 268 00:14:14,090 --> 00:14:16,860 is certainly very turnkey and convenient. 269 00:14:16,860 --> 00:14:20,558 So we use this so we can standardize students' programming environments. 270 00:14:20,558 --> 00:14:23,600 And for those of you who teach not just introductory courses, but perhaps 271 00:14:23,600 --> 00:14:27,510 higher level, more advanced courses as well, we'll talk over the coming days. 272 00:14:27,510 --> 00:14:30,380 And we have documentation online via which you can actually 273 00:14:30,380 --> 00:14:35,480 use Codespaces and customize it yourself for courses even unrelated to CS50 274 00:14:35,480 --> 00:14:36,330 as well. 275 00:14:36,330 --> 00:14:38,360 But within the classroom, and what we really 276 00:14:38,360 --> 00:14:41,360 wanted to share in this first session today 277 00:14:41,360 --> 00:14:45,140 is like what the point is of a lot of the demonstrations, 278 00:14:45,140 --> 00:14:49,890 a lot of the decisions that we make on camera or really in class itself. 279 00:14:49,890 --> 00:14:54,800 And the goal for me as a teacher now has been to create as best I can, 280 00:14:54,800 --> 00:14:59,960 as many as I can of these memorable moments, sort of visual memories 281 00:14:59,960 --> 00:15:04,050 that stick in students' head long after the course itself is over, 282 00:15:04,050 --> 00:15:08,250 so that for the most sophisticated topics, complicated, difficult topics 283 00:15:08,250 --> 00:15:11,010 in the class, they have some kind of mental framework 284 00:15:11,010 --> 00:15:13,650 that they can fall back on that just gives them greater 285 00:15:13,650 --> 00:15:17,400 comfort an understanding of some topic that might otherwise be far too 286 00:15:17,400 --> 00:15:20,080 abstract or complex to recall. 287 00:15:20,080 --> 00:15:22,950 So, for instance, binary search is perhaps one of the first 288 00:15:22,950 --> 00:15:24,160 that we introduced in class. 289 00:15:24,160 --> 00:15:26,400 And you might remember scenes like this here. 290 00:15:26,400 --> 00:15:30,160 It's getting increasingly hard to find these here phone books. 291 00:15:30,160 --> 00:15:34,100 And I think quite soon, we might solicit via the internet 292 00:15:34,100 --> 00:15:36,600 that if you have phone books of your own that you don't need 293 00:15:36,600 --> 00:15:39,280 or colleagues or friends, please do mail them to us. 294 00:15:39,280 --> 00:15:40,780 They're also getting fairly thin. 295 00:15:40,780 --> 00:15:43,750 So it's not all that compelling to tear these things in half. 296 00:15:43,750 --> 00:15:46,350 But what's nice about phone books is that they're 297 00:15:46,350 --> 00:15:48,640 still with us in digital form. 298 00:15:48,640 --> 00:15:50,850 Whether you have an iPhone or Android device, 299 00:15:50,850 --> 00:15:54,930 you have a contacts or address-book app that still has people's names from A 300 00:15:54,930 --> 00:15:57,040 to Z sorted alphabetically. 301 00:15:57,040 --> 00:16:01,240 A phone book, then, is just a physical incarnation of that same idea. 302 00:16:01,240 --> 00:16:02,503 I hope you won't mind. 303 00:16:02,503 --> 00:16:04,420 I don't think I'm going to tear this one today 304 00:16:04,420 --> 00:16:05,810 because I kind of need it in the fall. 305 00:16:05,810 --> 00:16:07,602 So we're going to hang on to this one here. 306 00:16:07,602 --> 00:16:11,570 But you can see a dramatically torn in any of our videos online. 307 00:16:11,570 --> 00:16:13,780 We, of course, talked with students about binary 308 00:16:13,780 --> 00:16:16,090 and indeed try to give them a sense of really 309 00:16:16,090 --> 00:16:18,520 at the end of the day, what is a computer doing, how is it 310 00:16:18,520 --> 00:16:20,147 storing information. 311 00:16:20,147 --> 00:16:23,230 And so even though we function, of course, in the human world with decimal 312 00:16:23,230 --> 00:16:25,810 primarily, among our goals with teaching binary 313 00:16:25,810 --> 00:16:29,690 is also to create one of these memorable moments after that same phone book. 314 00:16:29,690 --> 00:16:32,290 So pictured here, for instance, is some of our students 315 00:16:32,290 --> 00:16:36,040 in a prior year holding up their hand to represent a one 316 00:16:36,040 --> 00:16:39,770 or just standing there with their hand down to represent a zero. 317 00:16:39,770 --> 00:16:41,780 Now, we do this with sheets of paper. 318 00:16:41,780 --> 00:16:45,940 In this case, I print 1 on some of the sheets or 0 on the other sheets 319 00:16:45,940 --> 00:16:49,450 as a sort of visual cue to tell them or the audience what it is they're 320 00:16:49,450 --> 00:16:50,360 representing. 321 00:16:50,360 --> 00:16:51,530 You don't even need that. 322 00:16:51,530 --> 00:16:53,990 Sometimes we use light bulbs that are on or off. 323 00:16:53,990 --> 00:16:58,060 I went on amazon.com one year and found some plastic light up numbers which we 324 00:16:58,060 --> 00:17:02,440 can similarly use as well to ultimately have students represent the ones place, 325 00:17:02,440 --> 00:17:08,960 the twos place, the fours place, eights, 16s, 32, 64 128s place. 326 00:17:08,960 --> 00:17:12,760 The tension, I think, ultimately, is, how many minutes, how much class time 327 00:17:12,760 --> 00:17:14,920 do you actually spend on these demonstrations 328 00:17:14,920 --> 00:17:18,859 when you could have just written it on the board in chalk or marker? 329 00:17:18,859 --> 00:17:21,430 But that's really left to you, to me, the teacher, 330 00:17:21,430 --> 00:17:24,819 to decide to read the room as to what feels 331 00:17:24,819 --> 00:17:27,550 like an appropriate balance of spending good time on these 332 00:17:27,550 --> 00:17:30,490 to create memorable moments versus taking too much time 333 00:17:30,490 --> 00:17:32,830 at the expense of other discussions. 334 00:17:32,830 --> 00:17:36,400 Now, when it comes to debugging too, you might recognize 335 00:17:36,400 --> 00:17:40,577 or might wonder why rubber ducks seem to be everywhere in CS50. 336 00:17:40,577 --> 00:17:42,910 We've actually been giving these little rubber ducks out 337 00:17:42,910 --> 00:17:46,270 to students for quite a bit of time now in class physically, 338 00:17:46,270 --> 00:17:49,310 and they also line the stage in this photograph here. 339 00:17:49,310 --> 00:17:51,400 Here is simply a much bigger version of the same, 340 00:17:51,400 --> 00:17:53,108 because there's this thing in programming 341 00:17:53,108 --> 00:17:56,410 called rubber-duck debugging, whereby if you or a student 342 00:17:56,410 --> 00:17:59,590 are struggling to solve some problem or understand something, 343 00:17:59,590 --> 00:18:04,400 you're encouraged to have a conversation with a rubber duck and sound it out. 344 00:18:04,400 --> 00:18:06,650 Tell the duck what problems you're having. 345 00:18:06,650 --> 00:18:08,240 Ask the duck any questions. 346 00:18:08,240 --> 00:18:09,890 Odds are it won't actually reply. 347 00:18:09,890 --> 00:18:13,150 But through that process of talking through the problem, 348 00:18:13,150 --> 00:18:15,760 the presumption is that light bulb will go off 349 00:18:15,760 --> 00:18:18,820 and you'll realize some illogic in your thinking, 350 00:18:18,820 --> 00:18:22,310 and you will have solved the problem just by verbalizing it. 351 00:18:22,310 --> 00:18:24,200 Well, nowadays we do this digitally. 352 00:18:24,200 --> 00:18:26,560 We've had a chat bot that will quack back at students, 353 00:18:26,560 --> 00:18:30,527 and most recently, one that will speak English or even other human languages 354 00:18:30,527 --> 00:18:31,360 back to the student. 355 00:18:31,360 --> 00:18:34,180 And indeed, more on that over the course of today and tomorrow, 356 00:18:34,180 --> 00:18:38,200 because now underlying these ducks is artificial intelligence. 357 00:18:38,200 --> 00:18:41,350 But at a lower level, of course, we introduce students to data structures, 358 00:18:41,350 --> 00:18:43,010 among the simplest being an array. 359 00:18:43,010 --> 00:18:45,700 We try to remind students that an array is really 360 00:18:45,700 --> 00:18:49,850 just leveraging that same model we discussed in the context of memory. 361 00:18:49,850 --> 00:18:53,650 But technically, a computer can only look at one location at a time, 362 00:18:53,650 --> 00:18:54,380 typically. 363 00:18:54,380 --> 00:18:59,080 And so we liken locations in memory to doors, like lockers in a gym 364 00:18:59,080 --> 00:19:02,680 or in the hallway where students might keep their books in their backpacks. 365 00:19:02,680 --> 00:19:06,570 We have been fortunate to find at a local store 366 00:19:06,570 --> 00:19:10,810 a whole bunch of tiny gym lockers that aren't very convenient to move around. 367 00:19:10,810 --> 00:19:15,090 But we nonetheless set them up on stage and allow students 368 00:19:15,090 --> 00:19:18,840 to then visualize and hear all the more what 369 00:19:18,840 --> 00:19:22,380 we mean when we say a computer can only look at one location at a time 370 00:19:22,380 --> 00:19:25,950 as we go from left to right opening those same doors. 371 00:19:25,950 --> 00:19:27,780 We talk about sorting information. 372 00:19:27,780 --> 00:19:31,170 And here too, a fun opportunity to have students come up on stage 373 00:19:31,170 --> 00:19:32,370 and sort themselves. 374 00:19:32,370 --> 00:19:35,160 Pictured here are some of our students holding plastic light 375 00:19:35,160 --> 00:19:39,040 up numbers that represent a number from 0 to 7 in this case. 376 00:19:39,040 --> 00:19:42,480 And it's a fun exercise to, one, have them just go sort themselves. 377 00:19:42,480 --> 00:19:44,020 And usually it's a little chaotic. 378 00:19:44,020 --> 00:19:46,180 But as smart humans, they figure it out. 379 00:19:46,180 --> 00:19:49,720 But then I ask them, well, what was the algorithm you used. 380 00:19:49,720 --> 00:19:51,900 And really, no one can kind of put their finger 381 00:19:51,900 --> 00:19:54,490 on what just happened chaotically on the stage. 382 00:19:54,490 --> 00:19:59,010 So we try to formalize it with something like selection sort or bubble sort 383 00:19:59,010 --> 00:20:01,320 or more advanced algorithm as well. 384 00:20:01,320 --> 00:20:03,120 When we get two pointers, we try to, again, 385 00:20:03,120 --> 00:20:06,240 to give students these memorable moments and these mental models 386 00:20:06,240 --> 00:20:10,150 by likening it to pointing from one thing to another. 387 00:20:10,150 --> 00:20:12,270 So I picked up from a local hardware store, 388 00:20:12,270 --> 00:20:14,820 called Home Depot here, a couple of mailboxes 389 00:20:14,820 --> 00:20:17,040 physically that you get postal mail in. 390 00:20:17,040 --> 00:20:18,850 But we set them up on stage here. 391 00:20:18,850 --> 00:20:21,930 So Carter and I were playing the roles of actually 392 00:20:21,930 --> 00:20:26,848 accessing the contents of these memory locations represented by mailboxes. 393 00:20:26,848 --> 00:20:28,890 And because we're at a university, we have access 394 00:20:28,890 --> 00:20:30,580 to a lot of those foam fingers. 395 00:20:30,580 --> 00:20:32,700 So I had a Harvard foam finger or a Yale foam 396 00:20:32,700 --> 00:20:35,610 finger that allows me even more visibly and dramatically 397 00:20:35,610 --> 00:20:38,650 to point from one location to another. 398 00:20:38,650 --> 00:20:40,530 But of course, ultimately under the hood, 399 00:20:40,530 --> 00:20:44,860 it's just this grid of memory locations, which we again remind students of. 400 00:20:44,860 --> 00:20:48,380 And even though this kind of story seems to escalate quickly, 401 00:20:48,380 --> 00:20:50,130 because suddenly it gets very complicated, 402 00:20:50,130 --> 00:20:54,550 I'm looking at hexadecimal and grids of memory, it's just the same idea. 403 00:20:54,550 --> 00:20:58,770 And so just like with Scratch and C, with memory and mailboxes, 404 00:20:58,770 --> 00:21:03,500 we try to give students this very comfortable, familiar, memorable moment 405 00:21:03,500 --> 00:21:07,540 and mental model, but use that to allow them to better understand 406 00:21:07,540 --> 00:21:10,450 what's going on underneath the hood so they really 407 00:21:10,450 --> 00:21:14,180 can appreciate and understand these so-called abstractions. 408 00:21:14,180 --> 00:21:15,430 We do this again and again. 409 00:21:15,430 --> 00:21:19,670 With hashing, for instance, it's common to say that you put values into buckets. 410 00:21:19,670 --> 00:21:23,570 So we literally pick up some buckets from, again, the hardware store. 411 00:21:23,570 --> 00:21:27,590 And in this case, we had some jumbo playing cards that we found on Amazon. 412 00:21:27,590 --> 00:21:30,530 But you could make these yourself out of paper and markers. 413 00:21:30,530 --> 00:21:36,130 And we bucketize the values by hashing based on the suit of these here cards. 414 00:21:36,130 --> 00:21:39,220 But it's important to recognize, too, especially since we 415 00:21:39,220 --> 00:21:44,320 are fortunate to teach a class like CS50 in this beautiful theater on campus, 416 00:21:44,320 --> 00:21:49,030 that none of this theatricality, none of this creation of memorable moments 417 00:21:49,030 --> 00:21:52,160 actually requires much in the way of those resources. 418 00:21:52,160 --> 00:21:54,380 And it certainly doesn't require a theater. 419 00:21:54,380 --> 00:21:57,370 Indeed, several of those examples and all of my own 420 00:21:57,370 --> 00:22:01,810 earliest examples didn't have buckets, didn't have plastic numbers 421 00:22:01,810 --> 00:22:02,720 that light up. 422 00:22:02,720 --> 00:22:04,780 They just had sheets of paper that I grabbed 423 00:22:04,780 --> 00:22:08,050 from a printer drawn on with a marker to just make 424 00:22:08,050 --> 00:22:11,110 more real and more visual what it is that we're 425 00:22:11,110 --> 00:22:14,320 trying to present to our students. 426 00:22:14,320 --> 00:22:17,890 So the problem sets are what ultimately is where students 427 00:22:17,890 --> 00:22:19,790 spend most of their time in the class. 428 00:22:19,790 --> 00:22:22,810 It's an opportunity to assess their understanding of the material, 429 00:22:22,810 --> 00:22:27,040 but more importantly, for them to apply the material to actually problems 430 00:22:27,040 --> 00:22:29,930 and actually learn how to master it. 431 00:22:29,930 --> 00:22:34,870 We try to draw inspiration from familiar aspects of culture, pop culture 432 00:22:34,870 --> 00:22:35,680 and technology. 433 00:22:35,680 --> 00:22:38,020 Mario, for instance, has become fairly canonical. 434 00:22:38,020 --> 00:22:42,200 And as you yourself are a teacher, perhaps a new teacher, 435 00:22:42,200 --> 00:22:45,070 I keep a lookout in my own life for things like this 436 00:22:45,070 --> 00:22:49,510 that I could use as a hook, a way of enticing students 437 00:22:49,510 --> 00:22:53,440 into caring about a problem, but reducing it really to something 438 00:22:53,440 --> 00:22:54,410 that we want to teach. 439 00:22:54,410 --> 00:22:58,780 So here is a fairly involved picture from the 1980s of the original Nintendo 440 00:22:58,780 --> 00:23:00,142 and Super Mario Brothers. 441 00:23:00,142 --> 00:23:02,350 But what caught my attention there is, wait a minute, 442 00:23:02,350 --> 00:23:05,620 this pyramid is a fairly standard structure. 443 00:23:05,620 --> 00:23:08,170 There's some kind of loop via which you could create it. 444 00:23:08,170 --> 00:23:09,490 That's a problem set. 445 00:23:09,490 --> 00:23:11,002 How do we make it more complicated? 446 00:23:11,002 --> 00:23:13,710 Well, later in the game, there's two pyramids, slightly different 447 00:23:13,710 --> 00:23:14,770 opposing shapes. 448 00:23:14,770 --> 00:23:17,140 That's a slightly harder homework problem. 449 00:23:17,140 --> 00:23:19,350 So again, we tend to look for these hooks, 450 00:23:19,350 --> 00:23:22,770 be it visually, audibly, experientially, that we 451 00:23:22,770 --> 00:23:26,858 use as motivation for the subsequent problem, which at the end of the day, 452 00:23:26,858 --> 00:23:29,400 especially for those of us who've been programming for years, 453 00:23:29,400 --> 00:23:30,820 might be kind of boring, right? 454 00:23:30,820 --> 00:23:33,870 Like writing a for loop or two is not terribly exciting, 455 00:23:33,870 --> 00:23:38,190 but it can be the first time and it can be if you know how it's applicable 456 00:23:38,190 --> 00:23:40,690 and care why it is. 457 00:23:40,690 --> 00:23:43,740 We talk about cryptography, which at the end of the day 458 00:23:43,740 --> 00:23:46,380 really is just an excuse to-- 459 00:23:46,380 --> 00:23:51,870 really is just rather a context in which to discuss string manipulation 460 00:23:51,870 --> 00:23:54,660 and treating strings as array of characters in C, 461 00:23:54,660 --> 00:23:57,570 and manipulating the underlying characters as though they're 462 00:23:57,570 --> 00:24:00,000 numbers because of that equivalence between chars 463 00:24:00,000 --> 00:24:03,220 and ints in a language like C. So this, of course, 464 00:24:03,220 --> 00:24:07,820 is the plain text that might correspond to the so-called ciphertext here in. 465 00:24:07,820 --> 00:24:10,780 But again, that context, that hook is meant 466 00:24:10,780 --> 00:24:15,670 to get students thinking about and caring about the material at hand. 467 00:24:15,670 --> 00:24:18,830 Photographs and videos nowadays are everywhere. 468 00:24:18,830 --> 00:24:21,220 And so here's a picture of a popular location 469 00:24:21,220 --> 00:24:24,910 here on campus that we apply some Instagram-like filters 470 00:24:24,910 --> 00:24:28,340 to make it black and white or detect all of the edges. 471 00:24:28,340 --> 00:24:30,340 At the end of the day, what we really care about 472 00:24:30,340 --> 00:24:34,240 with this homework assignment, so-called Problem Set 4 in CS50 of late, 473 00:24:34,240 --> 00:24:38,180 is that we want them to understand file input and output. 474 00:24:38,180 --> 00:24:42,760 We want them to understand bitmap files and grids of pixels and structs 475 00:24:42,760 --> 00:24:44,510 via which you represent colors. 476 00:24:44,510 --> 00:24:48,070 But again, we use this hook of Instagram-like filters 477 00:24:48,070 --> 00:24:51,610 to get students caring about and excited about what problem they're 478 00:24:51,610 --> 00:24:52,870 trying to solve. 479 00:24:52,870 --> 00:24:55,750 Here, we introduce them to hexadecimal as a hook 480 00:24:55,750 --> 00:24:58,660 to get rather in the context of data recovery, 481 00:24:58,660 --> 00:25:02,970 to get students interested in actually recovering photos by really just looking 482 00:25:02,970 --> 00:25:06,690 for patterns of bits pictured there into their hexadecimal equivalents. 483 00:25:06,690 --> 00:25:10,410 We introduce students to a bit of biology in the context of DNA 484 00:25:10,410 --> 00:25:13,530 and a sort of mystery with DNA really to get 485 00:25:13,530 --> 00:25:16,800 them thinking about string processing, which at a glance, 486 00:25:16,800 --> 00:25:21,060 is not nearly as exciting until we say, this is Alice's DNA and this is Bob, 487 00:25:21,060 --> 00:25:23,200 and we ask him a question like who done it. 488 00:25:23,200 --> 00:25:25,200 And then toward the end of the course, of course 489 00:25:25,200 --> 00:25:28,470 in the context of web programming, we introduce them 490 00:25:28,470 --> 00:25:32,580 of late to CS50 Finance, a full fledged web application that 491 00:25:32,580 --> 00:25:36,090 talks to a lightweight API, a third party service 492 00:25:36,090 --> 00:25:39,670 to get live data so that students, really, by the end of the course 493 00:25:39,670 --> 00:25:44,310 have built something within the context and support structure of CS50, 494 00:25:44,310 --> 00:25:48,600 but in a way that they can then use as a stepping stone to making 495 00:25:48,600 --> 00:25:54,600 their own final project, if not a web application or mobile app as well. 496 00:25:54,600 --> 00:25:58,830 But now, here on campus and perhaps in your own schools or communities as well, 497 00:25:58,830 --> 00:26:01,730 we focus also on CS50's community. 498 00:26:01,730 --> 00:26:05,530 I dare say we've tried to make it more than just a course, more than just 499 00:26:05,530 --> 00:26:07,840 a set of homework assignments, but really this 500 00:26:07,840 --> 00:26:09,520 shared collective experience. 501 00:26:09,520 --> 00:26:11,950 In part, because it's meant to be fairly intense 502 00:26:11,950 --> 00:26:14,450 and it is indeed rigorous for so many students. 503 00:26:14,450 --> 00:26:17,740 And we want there to be this mix of work and play, 504 00:26:17,740 --> 00:26:20,630 but that ultimately really brings students together in a way 505 00:26:20,630 --> 00:26:21,620 that they care about. 506 00:26:21,620 --> 00:26:24,370 And so we have this sequence of events that start with Puzzle Day. 507 00:26:24,370 --> 00:26:26,162 And you some of you might have participated 508 00:26:26,162 --> 00:26:27,740 in the online version of this. 509 00:26:27,740 --> 00:26:30,790 All the better if you can get your students, your classmates together, 510 00:26:30,790 --> 00:26:34,303 working on challenge problems, logical problems together. 511 00:26:34,303 --> 00:26:36,220 Pictured here is among my favorite photographs 512 00:26:36,220 --> 00:26:39,070 of some of our very smart students gathering together 513 00:26:39,070 --> 00:26:41,140 to delight in what the solutions are. 514 00:26:41,140 --> 00:26:44,740 Pictured here are some of those same students struggling with those problems 515 00:26:44,740 --> 00:26:48,290 collaboratively before the solutions were revealed. 516 00:26:48,290 --> 00:26:51,770 And these puzzles have nothing to do deliberately with computer science. 517 00:26:51,770 --> 00:26:53,530 This is not a hackathon per se. 518 00:26:53,530 --> 00:26:55,990 It has nothing to do with programming or CS, 519 00:26:55,990 --> 00:26:59,650 but about problem solving collaboratively, and especially drawing 520 00:26:59,650 --> 00:27:03,820 in those students less comfortable at the school 521 00:27:03,820 --> 00:27:08,570 so that they might even follow their CS50 friends to this event, 522 00:27:08,570 --> 00:27:10,540 learn a little something about problem solving, 523 00:27:10,540 --> 00:27:13,640 and get interested perhaps in the field itself. 524 00:27:13,640 --> 00:27:16,930 Now, toward the end of the semester, as you might know, here at Harvard, 525 00:27:16,930 --> 00:27:20,240 as well as at Yale, do we-- once students have a programming background, 526 00:27:20,240 --> 00:27:24,580 we do have a proper hackathon, a 12-hour event, in our case, 527 00:27:24,580 --> 00:27:30,160 during which students can work, ideally excitedly, on their final projects, 528 00:27:30,160 --> 00:27:32,050 their capstone experience. 529 00:27:32,050 --> 00:27:35,170 We have a tradition of ending the evening, 530 00:27:35,170 --> 00:27:40,040 which for us starts at 7:00 PM at night and ends at 7:00 AM in the morning. 531 00:27:40,040 --> 00:27:42,520 But any students who are still awake with enough energy, 532 00:27:42,520 --> 00:27:47,530 we invite to a local pancake place, the International House of Pancakes, 533 00:27:47,530 --> 00:27:50,740 where such memories as these await ultimately 534 00:27:50,740 --> 00:27:53,990 after a long night of actual problem solving. 535 00:27:53,990 --> 00:27:57,490 And then, lastly, do we end our semester with the so-called CS50 536 00:27:57,490 --> 00:28:01,240 Fair, which is really inspired by what some of your own schools back in the day 537 00:28:01,240 --> 00:28:04,060 might have held as middle school science fairs, 538 00:28:04,060 --> 00:28:07,810 where you show off the volcano that you built at home demonstrating 539 00:28:07,810 --> 00:28:09,770 some chemical concept from class. 540 00:28:09,770 --> 00:28:11,560 Well, we have students bring their laptops 541 00:28:11,560 --> 00:28:15,550 and we invite friends, alumni, recruiters from industry. 542 00:28:15,550 --> 00:28:18,280 We turn on some music, we serve some popcorn and candy, 543 00:28:18,280 --> 00:28:21,970 and we invite students and faculty and staff across campus 544 00:28:21,970 --> 00:28:26,750 to exhibit and see our students' final projects. 545 00:28:26,750 --> 00:28:29,060 And so scenes like this are not uncommon. 546 00:28:29,060 --> 00:28:33,190 Every CS50 student has their same laptop or phone on which they're 547 00:28:33,190 --> 00:28:35,420 displaying the work that they created. 548 00:28:35,420 --> 00:28:39,010 We use this too, as an opportunity to potentially recruit new students 549 00:28:39,010 --> 00:28:42,160 to get them interested in what their friends have clearly 550 00:28:42,160 --> 00:28:45,310 created over the course of just three months, in our case. 551 00:28:45,310 --> 00:28:50,380 We include typically a raffle, whereby we give all of our CS50 students 552 00:28:50,380 --> 00:28:54,670 a sheet of paper that has some placeholders for stickers, 553 00:28:54,670 --> 00:28:57,620 and we also give our CS50 students some stickers. 554 00:28:57,620 --> 00:29:00,310 And the idea is that for any person who's 555 00:29:00,310 --> 00:29:03,760 attending that asks them about their final project, 556 00:29:03,760 --> 00:29:05,920 the student should give that person a sticker. 557 00:29:05,920 --> 00:29:10,420 And every sticker represents one entry in a raffle with fabulous prizes, 558 00:29:10,420 --> 00:29:11,750 whatever those might be. 559 00:29:11,750 --> 00:29:16,360 And the goal, honestly, of this raffle is just to grease the wheels socially, 560 00:29:16,360 --> 00:29:21,550 break the ice for students and attendees to give them a fun excuse to go up 561 00:29:21,550 --> 00:29:24,010 and ask about this project and this one and this one, 562 00:29:24,010 --> 00:29:27,430 so that students, again, care and take an interest engaging 563 00:29:27,430 --> 00:29:31,450 with their fellow classmates, staff and students. 564 00:29:31,450 --> 00:29:33,850 So this then was an overview, ultimately, 565 00:29:33,850 --> 00:29:37,660 we hope, of the course's curriculum and some of the why behind it, 566 00:29:37,660 --> 00:29:41,020 some of the technical and curricular decisions behind the languages, 567 00:29:41,020 --> 00:29:43,450 behind the problem sets and more, as well as 568 00:29:43,450 --> 00:29:47,260 a look behind the motivation for so many of CS50's events 569 00:29:47,260 --> 00:29:50,270 that we host here in person and/or online. 570 00:29:50,270 --> 00:29:53,230 Ultimately, again, the goal in explaining all of this 571 00:29:53,230 --> 00:29:56,140 is to enable you as a teacher to make your own informed 572 00:29:56,140 --> 00:29:59,710 decision as to whether to adapt or adopt or neither 573 00:29:59,710 --> 00:30:02,150 of all of these various resources. 574 00:30:02,150 --> 00:30:04,920 But allow us to conclude officially here. 575 00:30:04,920 --> 00:30:08,330 I'll take a-- we have a few minutes of break 576 00:30:08,330 --> 00:30:11,610 ahead via which we can now transition to the next session. 577 00:30:11,610 --> 00:30:14,130 So thank you so much for joining us this morning. 578 00:30:14,130 --> 00:30:17,040 We will be back in just five minutes for our next session. 579 00:30:17,040 --> 00:30:20,160 I'm going to hop off camera, but hop into the chat room. 580 00:30:20,160 --> 00:30:24,680 So if you have any questions for me, I will appear momentarily in the chat. 581 00:30:24,680 --> 00:30:26,460 But we'll see you in five. 582 00:30:26,460 --> 00:30:30,340 This was CS50 Explained. 583 00:30:30,340 --> 00:30:32,000