1 00:00:00,000 --> 00:00:02,457 2 00:00:02,457 --> 00:00:04,790 DAVID MALAN: So why don't we go ahead and begin our 1:00 3 00:00:04,790 --> 00:00:06,920 PM to 2:00 PM Eastern session-- 4 00:00:06,920 --> 00:00:12,440 an overview of the classes that you can teach before or after CS50AP. 5 00:00:12,440 --> 00:00:17,010 This, like a lot of CS50, will be a bit of a fire hose-- a lot of information. 6 00:00:17,010 --> 00:00:20,210 But it's really just meant to give you a taste of what is available to you 7 00:00:20,210 --> 00:00:21,230 optionally. 8 00:00:21,230 --> 00:00:23,240 Indeed, over the past few years, though we 9 00:00:23,240 --> 00:00:26,210 began with just CS50 the course, which composes 10 00:00:26,210 --> 00:00:28,670 much of our discussion in the past few days, 11 00:00:28,670 --> 00:00:31,520 thanks to Brian and Colton and other colleagues of ours, 12 00:00:31,520 --> 00:00:34,670 have we begun really building out a curriculum of sorts that's 13 00:00:34,670 --> 00:00:38,570 particularly well-suited for high school and/or middle school students, 14 00:00:38,570 --> 00:00:41,660 so that teacher is teaching CS50AP don't just 15 00:00:41,660 --> 00:00:44,400 have one curriculum at their disposal. 16 00:00:44,400 --> 00:00:46,890 But they have more runway for their students. 17 00:00:46,890 --> 00:00:50,240 So students might take one class before CS50AP, 18 00:00:50,240 --> 00:00:53,870 one or more classes after CS50AP, or just CS50AP, 19 00:00:53,870 --> 00:00:55,820 or one of these other classes themselves. 20 00:00:55,820 --> 00:00:58,850 It really is up to you how you might like to assemble 21 00:00:58,850 --> 00:01:00,980 any of these building blocks. 22 00:01:00,980 --> 00:01:05,870 So we thought we'd give you a whirlwind tour of six other courses, one of which 23 00:01:05,870 --> 00:01:10,050 you've seen already, and three of which are related to one another. 24 00:01:10,050 --> 00:01:12,350 So it's not quite as much as it might seem. 25 00:01:12,350 --> 00:01:13,190 Brian, you know. 26 00:01:13,190 --> 00:01:16,220 Allow us to have our colleague Colton say a formal hello, 27 00:01:16,220 --> 00:01:18,522 so you know whom to expect in a few minutes, too. 28 00:01:18,522 --> 00:01:19,230 COLTON OGDEN: Hi. 29 00:01:19,230 --> 00:01:20,355 Nice to see everybody here. 30 00:01:20,355 --> 00:01:22,142 Hope you're all staying safe. 31 00:01:22,142 --> 00:01:24,350 DAVID MALAN: Colton will be introducing in just a bit 32 00:01:24,350 --> 00:01:26,900 our game development class, which is particularly 33 00:01:26,900 --> 00:01:29,840 well-suited for a lot of high school students' interests. 34 00:01:29,840 --> 00:01:32,240 So here on the screen, you should see next to me 35 00:01:32,240 --> 00:01:36,020 the list of six other courses that are currently in our curriculum. 36 00:01:36,020 --> 00:01:41,090 All of them have a single or one or two characters that describe them. 37 00:01:41,090 --> 00:01:44,770 CS50B is a course for computer science for business professionals. 38 00:01:44,770 --> 00:01:47,300 CS50L is CS50 for lawyers. 39 00:01:47,300 --> 00:01:49,850 CS50T is understanding technology. 40 00:01:49,850 --> 00:01:53,150 And then we have three follow-on classes, CS50AI, 41 00:01:53,150 --> 00:01:57,550 which is an introduction to AI with Python; CS50G, taught by Colton, 42 00:01:57,550 --> 00:02:00,410 an introduction to game development; and CS50W, 43 00:02:00,410 --> 00:02:05,600 like CS50AI, taught by Brian, Web Programming with Python and JavaScript. 44 00:02:05,600 --> 00:02:09,229 And I think if of any interest to you in teaching these classes, be it 45 00:02:09,229 --> 00:02:11,777 this coming year or down the road, hands down, 46 00:02:11,777 --> 00:02:13,610 I think the best preparation for doing so is 47 00:02:13,610 --> 00:02:15,498 to simply take the courses themselves. 48 00:02:15,498 --> 00:02:17,290 They're freely available as OpenCourseWare. 49 00:02:17,290 --> 00:02:19,520 We'll provide all of the URLs as we go here. 50 00:02:19,520 --> 00:02:22,970 But they're also centrally located, if you would like, on edx.org, where 51 00:02:22,970 --> 00:02:25,670 you can sign up for free for audit status 52 00:02:25,670 --> 00:02:27,435 and follow along at your own pace, if you 53 00:02:27,435 --> 00:02:29,810 might want to prepare over the summer or some future year 54 00:02:29,810 --> 00:02:31,490 for any of these curricula. 55 00:02:31,490 --> 00:02:34,280 And indeed, that's much like our own teaching fellows 56 00:02:34,280 --> 00:02:38,750 become teaching fellows because they have quite simply taken successfully 57 00:02:38,750 --> 00:02:40,310 any of these classes. 58 00:02:40,310 --> 00:02:43,430 To help give you a mental model for how everything fits together, 59 00:02:43,430 --> 00:02:47,060 if you think of CS50 itself or CS50X, the OpenCourseWare version 60 00:02:47,060 --> 00:02:51,200 of the class, as the backbone or the main class 61 00:02:51,200 --> 00:02:53,390 that students have long taken at Harvard, 62 00:02:53,390 --> 00:02:56,450 these other courses now fit into that pipeline 63 00:02:56,450 --> 00:03:00,770 either as predecessor courses or follow-on courses. 64 00:03:00,770 --> 00:03:05,750 So a possible model would be for a student to take CS50b or L or T, 65 00:03:05,750 --> 00:03:10,820 and then CS50X, and then to take CS50AI or G or W 66 00:03:10,820 --> 00:03:13,340 or even multiple combinations thereof. 67 00:03:13,340 --> 00:03:16,010 The first three courses on the left, B, L, T, 68 00:03:16,010 --> 00:03:18,090 are essentially mutually exclusive. 69 00:03:18,090 --> 00:03:20,090 We'll see that there are differences among them, 70 00:03:20,090 --> 00:03:23,060 so they don't need to be taken one or the other. 71 00:03:23,060 --> 00:03:25,850 The three follow-on courses can be taken in their entirety. 72 00:03:25,850 --> 00:03:28,100 So you could imagine, for instance, at the high school 73 00:03:28,100 --> 00:03:31,790 level, perhaps a student starts out freshman year with CS50T. 74 00:03:31,790 --> 00:03:36,050 Maybe sophomore year, spends time on CS50X or really CS50AP. 75 00:03:36,050 --> 00:03:38,000 And then maybe junior and/or senior year, 76 00:03:38,000 --> 00:03:40,340 has an opportunity to take something like the AI 77 00:03:40,340 --> 00:03:43,280 class, the games class, for the web class. 78 00:03:43,280 --> 00:03:46,010 Of course, two of these we're now well familiar with. 79 00:03:46,010 --> 00:03:52,910 CS50T plus CS50X compose what we've been calling CS50AP. 80 00:03:52,910 --> 00:03:55,830 So please interject at any point if you have any questions. 81 00:03:55,830 --> 00:03:58,190 And if I miss a hand, Brian or Colton, please do just 82 00:03:58,190 --> 00:03:59,842 chime in and call my attention. 83 00:03:59,842 --> 00:04:01,550 But why don't we dive in first, just more 84 00:04:01,550 --> 00:04:03,890 formally, to CS50T, which we've been taking 85 00:04:03,890 --> 00:04:06,740 for granted as just part of CS50AP's curriculum. 86 00:04:06,740 --> 00:04:08,960 But again, factoring that out and maybe having 87 00:04:08,960 --> 00:04:12,380 less comfortable or younger students simply start with that piece, 88 00:04:12,380 --> 00:04:16,920 as opposed to diving into CS50AP itself, is one viable option. 89 00:04:16,920 --> 00:04:18,768 So here comes the whirlwind tour. 90 00:04:18,768 --> 00:04:20,810 The syllabus of this class is essentially divided 91 00:04:20,810 --> 00:04:23,120 into these six large topics. 92 00:04:23,120 --> 00:04:28,490 The goal of this class ultimately is to provide students and of any age 93 00:04:28,490 --> 00:04:30,530 with really an understanding of the technology 94 00:04:30,530 --> 00:04:34,850 that they see and hear about every day, but don't necessarily understand. 95 00:04:34,850 --> 00:04:37,340 And we break the course down into these six components. 96 00:04:37,340 --> 00:04:39,990 And let me give you a quick tour of each of those. 97 00:04:39,990 --> 00:04:43,610 So on the hardware front, we start, not unlike CS50 itself, 98 00:04:43,610 --> 00:04:45,440 with a look at binary, and more generally, 99 00:04:45,440 --> 00:04:47,300 representation of information. 100 00:04:47,300 --> 00:04:50,720 But we focus a bit more on hardware than we do in CS50 itself, 101 00:04:50,720 --> 00:04:54,380 looking more at things like CPUs, the brains of the computer; 102 00:04:54,380 --> 00:04:57,770 hard drives, and how data is actually stored underneath the hood; 103 00:04:57,770 --> 00:05:00,260 and even talking about peripherals and connectors, 104 00:05:00,260 --> 00:05:03,190 the plugs that you see on the back of the computer. 105 00:05:03,190 --> 00:05:05,650 Colton might remember this throwback from a few years ago 106 00:05:05,650 --> 00:05:06,750 when we filmed this. 107 00:05:06,750 --> 00:05:10,420 The course also, albeit on video, has this lab component 108 00:05:10,420 --> 00:05:11,680 where we take things apart. 109 00:05:11,680 --> 00:05:15,320 We show students on camera pieces inside of a computer. 110 00:05:15,320 --> 00:05:17,920 And so what's especially fun about CS50T, 111 00:05:17,920 --> 00:05:21,720 really, in isolation, if it were taken or taught as a course unto itself, 112 00:05:21,720 --> 00:05:25,240 is if you have access to an old computer, a PC or a Mac, 113 00:05:25,240 --> 00:05:27,820 that you can take apart, it's actually a lot of fun 114 00:05:27,820 --> 00:05:31,210 to enable students to play more hands-on with what's inside the computer, 115 00:05:31,210 --> 00:05:36,880 or conversely, to have them build up a computer based on those same parts. 116 00:05:36,880 --> 00:05:39,670 We then focus in CS50T on the internet and what it is. 117 00:05:39,670 --> 00:05:42,520 And we talk about things that many students will take for granted. 118 00:05:42,520 --> 00:05:45,010 If they're fortunate to have internet access at home, 119 00:05:45,010 --> 00:05:49,820 we contextualize what that cable modem is from Comcast or any other provider 120 00:05:49,820 --> 00:05:52,600 and what all of those wires actually do and mean. 121 00:05:52,600 --> 00:05:56,143 We show them on their Mac or PC incarnations of how 122 00:05:56,143 --> 00:05:57,560 they're connected to the internet. 123 00:05:57,560 --> 00:06:02,870 So we talk about IP, IP addresses, and DNS, and DHCP. 124 00:06:02,870 --> 00:06:05,590 And if you yourself aren't familiar with that alphabet soup, 125 00:06:05,590 --> 00:06:07,010 that's totally fine. 126 00:06:07,010 --> 00:06:10,150 Again, taking the course is perhaps the best preparation. 127 00:06:10,150 --> 00:06:12,915 And here is just a similar view on Windows. 128 00:06:12,915 --> 00:06:15,040 And then, again, we keep this in context with which 129 00:06:15,040 --> 00:06:17,650 students are familiar-- talking about home networks that 130 00:06:17,650 --> 00:06:21,820 might have WiFi, that might have wired devices, that might have phones 131 00:06:21,820 --> 00:06:25,120 or laptops or television set-top boxes, and try 132 00:06:25,120 --> 00:06:27,400 to help students understand the technology they see 133 00:06:27,400 --> 00:06:29,200 and/or use every day. 134 00:06:29,200 --> 00:06:32,020 We spend time, too, on multimedia in this class. 135 00:06:32,020 --> 00:06:34,880 And we introduce students to audio, video, 136 00:06:34,880 --> 00:06:36,970 and other forms of multimedia as well. 137 00:06:36,970 --> 00:06:38,980 And we give them a sense of how, for instance, 138 00:06:38,980 --> 00:06:43,030 music might be synthesized, talking about formats like Mitty, which, 139 00:06:43,030 --> 00:06:45,460 if unfamiliar, is a way of encoding music digitally, 140 00:06:45,460 --> 00:06:47,440 so you can interact with it with a computer. 141 00:06:47,440 --> 00:06:49,360 We talk about how images are represented. 142 00:06:49,360 --> 00:06:51,610 Here's a 1-bit image of a smiley face using 143 00:06:51,610 --> 00:06:54,260 just a single bit for black or white. 144 00:06:54,260 --> 00:06:55,840 We talk about image compression. 145 00:06:55,840 --> 00:06:57,910 So given an image like this, let me actually 146 00:06:57,910 --> 00:07:01,450 ask the group, what might the opportunity here be 147 00:07:01,450 --> 00:07:06,610 to compress an image like this if it's stored in a digital file format? 148 00:07:06,610 --> 00:07:11,440 How might you go about compressing this apple that you see on the screen 149 00:07:11,440 --> 00:07:13,780 here against this blue backdrop? 150 00:07:13,780 --> 00:07:17,850 Any ideas or intuition for where the opportunity is? 151 00:07:17,850 --> 00:07:19,420 Brett? 152 00:07:19,420 --> 00:07:25,670 AUDIENCE: Yes, you could condense and consolidate the colors. 153 00:07:25,670 --> 00:07:27,170 DAVID MALAN: Consolidate the colors? 154 00:07:27,170 --> 00:07:28,600 Yeah. 155 00:07:28,600 --> 00:07:32,110 AUDIENCE: So like all the same blue color 156 00:07:32,110 --> 00:07:37,435 could be combined and just repeated. 157 00:07:37,435 --> 00:07:38,560 DAVID MALAN: Yeah, exactly. 158 00:07:38,560 --> 00:07:40,010 There's a lot of redundancy here. 159 00:07:40,010 --> 00:07:42,460 There seems to be some common red, some common blue. 160 00:07:42,460 --> 00:07:44,620 So you could effectively store that same image 161 00:07:44,620 --> 00:07:46,600 by factoring out a lot of the common blue. 162 00:07:46,600 --> 00:07:50,020 And instead of saying the digital equivalent of blue, blue, blue, blue, 163 00:07:50,020 --> 00:07:52,900 blue, blue, blue, blue, blue, blue, blue, blue, and so forth, 164 00:07:52,900 --> 00:07:56,120 you could just say blue 10 times, blue 10 times. 165 00:07:56,120 --> 00:08:00,430 And just like it sounds faster, it would similarly take less space in memory. 166 00:08:00,430 --> 00:08:03,190 Here's a clip from, for instance, a video. 167 00:08:03,190 --> 00:08:06,400 And you have a bumblebee on top of some flowers. 168 00:08:06,400 --> 00:08:09,490 And you can see that the flowers are not moving, but the bumblebee is. 169 00:08:09,490 --> 00:08:11,240 And so here might be an opportunity to get 170 00:08:11,240 --> 00:08:13,570 students thinking about how you can save space 171 00:08:13,570 --> 00:08:15,220 by not repeating yourself as much. 172 00:08:15,220 --> 00:08:19,190 And maybe you could in a video file format do something similar in spirit, 173 00:08:19,190 --> 00:08:21,160 but only track the movements of the bumblebee. 174 00:08:21,160 --> 00:08:24,310 And don't worry about redundantly storing those flowers because, again, 175 00:08:24,310 --> 00:08:27,310 they appear again and again stationary. 176 00:08:27,310 --> 00:08:29,530 Of course, it's quite common in TV and movies 177 00:08:29,530 --> 00:08:31,010 to see ridiculous scenes like this. 178 00:08:31,010 --> 00:08:33,470 This is taken from like CSI something or other. 179 00:08:33,470 --> 00:08:35,289 And of course, the police or investigators 180 00:08:35,289 --> 00:08:37,780 are able to zoom in on that glint in the person's eye 181 00:08:37,780 --> 00:08:39,520 and figure out who the suspect is. 182 00:08:39,520 --> 00:08:41,380 We point out to students that they're just 183 00:08:41,380 --> 00:08:43,429 going to see generally a blurry mess. 184 00:08:43,429 --> 00:08:46,280 And if you can see this on my screen, albeit a bit small, 185 00:08:46,280 --> 00:08:50,050 there is really little identifying information of who the bad guy is, 186 00:08:50,050 --> 00:08:51,910 at least from that frame in the show. 187 00:08:51,910 --> 00:08:54,700 So we talk, too, in this class about security and passwords. 188 00:08:54,700 --> 00:08:58,180 If you see any of your own passwords on this list, you're part of the lecture 189 00:08:58,180 --> 00:09:02,500 now because these are the top 10 most common passwords as of a year 190 00:09:02,500 --> 00:09:03,847 or so ago. 191 00:09:03,847 --> 00:09:05,180 They're not particularly secure. 192 00:09:05,180 --> 00:09:07,472 And so we talk to students about why they're not secure 193 00:09:07,472 --> 00:09:10,030 and how they might use things like two-factor authentication 194 00:09:10,030 --> 00:09:13,420 or other techniques to keep them secure, whether it's with their accounts, 195 00:09:13,420 --> 00:09:14,670 or whether it's in WiFi. 196 00:09:14,670 --> 00:09:18,040 And we also talk about issues of privacy, for instance, 197 00:09:18,040 --> 00:09:19,003 by way of cookies. 198 00:09:19,003 --> 00:09:20,920 You've probably heard that cookies somehow can 199 00:09:20,920 --> 00:09:22,930 be used to track you on the internet. 200 00:09:22,930 --> 00:09:25,660 We help students understand technically what that means 201 00:09:25,660 --> 00:09:29,830 and why they're not all bad and actually do solve technical problems. 202 00:09:29,830 --> 00:09:32,470 And then, toward the end of the semester in CS50T, 203 00:09:32,470 --> 00:09:35,380 we introduce students to a little bit of web development. 204 00:09:35,380 --> 00:09:39,730 And we start with HTTP, the protocol that moves the data back and forth. 205 00:09:39,730 --> 00:09:43,630 But we also introduce them hands-on to HTML and CSS. 206 00:09:43,630 --> 00:09:46,900 And we help them understand, too, really as a stepping stone to something 207 00:09:46,900 --> 00:09:50,770 more like CS50 itself, that there's ways of representing 208 00:09:50,770 --> 00:09:52,570 this information in different ways. 209 00:09:52,570 --> 00:09:55,840 Just like you have a family tree where you might have these nodes, 210 00:09:55,840 --> 00:09:59,680 and a graph with edges and circles or squares or the like, 211 00:09:59,680 --> 00:10:02,260 we can see something like HTML code and start 212 00:10:02,260 --> 00:10:04,180 to think about it in different ways, setting 213 00:10:04,180 --> 00:10:07,660 the stage for more sophisticated discussions in a higher-level class. 214 00:10:07,660 --> 00:10:10,368 And then lastly, we focus on programming with the students. 215 00:10:10,368 --> 00:10:13,660 And we introduce them to pseudocode and searching the phone book, for instance, 216 00:10:13,660 --> 00:10:14,610 algorithmically. 217 00:10:14,610 --> 00:10:16,600 But we spend a good amount of time on Scratch. 218 00:10:16,600 --> 00:10:19,900 And that is their only language in this course with which they experiment. 219 00:10:19,900 --> 00:10:23,210 But they have an opportunity to apply those same ideas. 220 00:10:23,210 --> 00:10:24,220 So if you're curious-- 221 00:10:24,220 --> 00:10:26,230 and again, these slides are on the website-- 222 00:10:26,230 --> 00:10:29,830 you're welcome to go to this URL if you'd like to see a sample assessment. 223 00:10:29,830 --> 00:10:32,560 I'll go ahead and paste this into the chat window. 224 00:10:32,560 --> 00:10:35,590 Actually, let me add the HTTP. 225 00:10:35,590 --> 00:10:39,340 That's a sample assessment, but there are other assignments week to week 226 00:10:39,340 --> 00:10:42,460 throughout the course, not just this end-of-course assessment. 227 00:10:42,460 --> 00:10:45,340 But that'll give you a sense of the summative questions 228 00:10:45,340 --> 00:10:46,960 that we tend to ask of students. 229 00:10:46,960 --> 00:10:50,380 And they're similar in spirit to CS50's own in that they're 230 00:10:50,380 --> 00:10:53,410 meant to be short answers or the like. 231 00:10:53,410 --> 00:10:57,000 Before I give you a whirlwind tour of CS50B, 232 00:10:57,000 --> 00:10:58,780 [? Hani, ?] any questions or comments? 233 00:10:58,780 --> 00:11:01,067 234 00:11:01,067 --> 00:11:01,900 AUDIENCE: I'm sorry. 235 00:11:01,900 --> 00:11:04,403 This was back to the image compression. 236 00:11:04,403 --> 00:11:05,320 DAVID MALAN: Oh, sure. 237 00:11:05,320 --> 00:11:08,650 AUDIENCE: Of course, if you save the difference 238 00:11:08,650 --> 00:11:14,148 between the pixels instead of the pixels themselves then you can save a lot. 239 00:11:14,148 --> 00:11:15,190 DAVID MALAN: Yes, indeed. 240 00:11:15,190 --> 00:11:17,898 So opportunities to talk about different forms of representation, 241 00:11:17,898 --> 00:11:19,900 too, of the format itself. 242 00:11:19,900 --> 00:11:22,310 So CS50B, for business. 243 00:11:22,310 --> 00:11:25,420 So this course has a lot of overlap with the course's content, 244 00:11:25,420 --> 00:11:27,262 but the target audience is a bit different, 245 00:11:27,262 --> 00:11:28,720 and the mindset is a bit different. 246 00:11:28,720 --> 00:11:31,510 So generally speaking, this course is taught to older students, 247 00:11:31,510 --> 00:11:34,000 be they adults or students at Harvard's Business School. 248 00:11:34,000 --> 00:11:37,150 But the goal there is not to just understand technologies that we see 249 00:11:37,150 --> 00:11:41,380 and use every day in a consumer sense, but to understand technologies 250 00:11:41,380 --> 00:11:44,682 on the basis of which you might make this decision. 251 00:11:44,682 --> 00:11:46,390 So if you happen to be running a company, 252 00:11:46,390 --> 00:11:49,990 or you're the CTO or the CEO or a manager or someone that 253 00:11:49,990 --> 00:11:54,010 works with technical people, but isn't necessarily as technical themselves, 254 00:11:54,010 --> 00:11:56,260 what do you need to know about technology in order 255 00:11:56,260 --> 00:11:59,710 to just get real work done and hold your own in conversations 256 00:11:59,710 --> 00:12:00,850 with more technical people? 257 00:12:00,850 --> 00:12:04,700 So as such, it can be applied to younger audiences, certainly, as well. 258 00:12:04,700 --> 00:12:07,390 So the six categories into which this course is structured 259 00:12:07,390 --> 00:12:10,240 are a little similar in spirit, but these six here. 260 00:12:10,240 --> 00:12:12,400 And let me give you a quick tour of those. 261 00:12:12,400 --> 00:12:15,790 So we begin with computational thinking, not unlike CS50 itself. 262 00:12:15,790 --> 00:12:18,490 And we help students think about how you take inputs, 263 00:12:18,490 --> 00:12:21,100 and your goal is to get outputs, and in between there 264 00:12:21,100 --> 00:12:22,732 are these things called algorithms. 265 00:12:22,732 --> 00:12:24,440 But in the business version of the class, 266 00:12:24,440 --> 00:12:27,970 we spend a bit more time on sophistication 267 00:12:27,970 --> 00:12:32,140 of concepts like this-- so running time, and how 268 00:12:32,140 --> 00:12:34,540 you think about not just whether or not an algorithm will 269 00:12:34,540 --> 00:12:38,370 find Mike Smith in a phone book or solve some problem correctly, but does 270 00:12:38,370 --> 00:12:39,400 it do it well? 271 00:12:39,400 --> 00:12:41,310 Does it do it quickly and efficiently? 272 00:12:41,310 --> 00:12:45,010 So you can start to think, as a business person might, in terms of cost, 273 00:12:45,010 --> 00:12:48,160 in terms of time or money or the like, thereby 274 00:12:48,160 --> 00:12:51,100 having all the more building blocks at your disposal for discussions 275 00:12:51,100 --> 00:12:52,180 of trade-offs. 276 00:12:52,180 --> 00:12:54,170 We talk about programming languages. 277 00:12:54,170 --> 00:12:57,215 So here, we give students a sense of what's out there. 278 00:12:57,215 --> 00:12:59,590 We don't teach them any of these languages in any detail. 279 00:12:59,590 --> 00:13:01,810 We show them simple snippets, just so they 280 00:13:01,810 --> 00:13:04,630 can understand what features exist in programming languages. 281 00:13:04,630 --> 00:13:06,760 But as with the technology class, we use Scratch 282 00:13:06,760 --> 00:13:09,970 because it allows us to explore a procedural language, as well 283 00:13:09,970 --> 00:13:13,160 as a number of topics that they'll encounter in the real world. 284 00:13:13,160 --> 00:13:15,160 Scratch, of course, supports things like events. 285 00:13:15,160 --> 00:13:17,680 And anytime you and I use our phones these days, 286 00:13:17,680 --> 00:13:21,170 anytime you touch your tap or swipe, those are all events. 287 00:13:21,170 --> 00:13:24,940 And so we help students understand how these paradigms of programming 288 00:13:24,940 --> 00:13:27,940 map to actual technologies they use. 289 00:13:27,940 --> 00:13:30,560 We talk again, as in T, about the internet. 290 00:13:30,560 --> 00:13:33,940 But we go into a little more detail into the alphabet soup 291 00:13:33,940 --> 00:13:36,020 so that they understand the kinds of jargon that 292 00:13:36,020 --> 00:13:38,530 might get thrown around by their own engineers, 293 00:13:38,530 --> 00:13:40,840 whether they're a startup or a larger company that 294 00:13:40,840 --> 00:13:43,900 just uses IT Infrastructure. 295 00:13:43,900 --> 00:13:45,490 We introduce them to web development. 296 00:13:45,490 --> 00:13:47,830 The goal is not to turn them into web designers, 297 00:13:47,830 --> 00:13:52,840 but just so that they know what this HTML and CSS and other such tools are. 298 00:13:52,840 --> 00:13:55,510 So we show them and allow them a hands-on opportunity 299 00:13:55,510 --> 00:13:57,070 to play with HTML again. 300 00:13:57,070 --> 00:14:00,280 But we also spend a bit more time translating Scratch to something 301 00:14:00,280 --> 00:14:02,410 like JavaScript, a language that's commonly 302 00:14:02,410 --> 00:14:04,570 used in the context of web programming. 303 00:14:04,570 --> 00:14:08,110 So there, too, the students of CS50B have a mental model 304 00:14:08,110 --> 00:14:10,270 of how more pieces of the puzzle-- 305 00:14:10,270 --> 00:14:12,670 no pun intended-- interconnect. 306 00:14:12,670 --> 00:14:16,510 And then, quite different from CS50T, we talk about so-called technology 307 00:14:16,510 --> 00:14:17,050 stacks-- 308 00:14:17,050 --> 00:14:21,760 like how all of the various technologies and acronyms and languages 309 00:14:21,760 --> 00:14:24,430 and protocols somehow fit together. 310 00:14:24,430 --> 00:14:28,780 And we break things down into front end, so to speak-- the part of the interface 311 00:14:28,780 --> 00:14:29,920 that humans see. 312 00:14:29,920 --> 00:14:32,230 And we rattle off, and we give them just some sense 313 00:14:32,230 --> 00:14:34,690 of what's out there and in vogue these days in terms 314 00:14:34,690 --> 00:14:38,110 of libraries and frameworks for front end technologies. 315 00:14:38,110 --> 00:14:40,330 We do the same for back end, giving them a sense 316 00:14:40,330 --> 00:14:44,170 of what languages are in vogue, what frameworks are in vogue-- not so 317 00:14:44,170 --> 00:14:46,150 that they know themselves how to use them, 318 00:14:46,150 --> 00:14:48,530 but just so that they know that, one, they're out there. 319 00:14:48,530 --> 00:14:50,305 And two, if there's another one tomorrow, 320 00:14:50,305 --> 00:14:52,180 it's not really that big of a deal because it 321 00:14:52,180 --> 00:14:57,130 fits into a paradigm with which they've already had some comfort. 322 00:14:57,130 --> 00:14:58,630 We talk, too, about databases. 323 00:14:58,630 --> 00:15:00,962 And so middle tier architectures or, depending 324 00:15:00,962 --> 00:15:02,920 on how you might want to think about the tiers. 325 00:15:02,920 --> 00:15:07,240 And, again, some big-name products that they might know of in Oracle, 326 00:15:07,240 --> 00:15:10,340 in MySQL, in others as well, just so that, 327 00:15:10,340 --> 00:15:13,120 again, they've been exposed to these things. 328 00:15:13,120 --> 00:15:14,590 Then we talk about mobile, too. 329 00:15:14,590 --> 00:15:16,465 Especially in the context of businesses, it's 330 00:15:16,465 --> 00:15:19,700 often a decision whether to have a website or a mobile website, 331 00:15:19,700 --> 00:15:20,575 a mobile application. 332 00:15:20,575 --> 00:15:24,050 Should it be Android or iOS or both, and the like? 333 00:15:24,050 --> 00:15:26,560 And we help them think about the non-trivial costs-- 334 00:15:26,560 --> 00:15:30,430 again, in terms of finances or time or humans-- 335 00:15:30,430 --> 00:15:35,080 in developing solutions to all of those various platforms. 336 00:15:35,080 --> 00:15:39,250 And we talk, too, about data itself and how you go about structuring data. 337 00:15:39,250 --> 00:15:42,500 For instance, a spreadsheet, with which most business types might be familiar, 338 00:15:42,500 --> 00:15:46,000 but we introduced them to SQL, which we don't do in the technology class. 339 00:15:46,000 --> 00:15:49,510 And we introduced them to NoSQL, again, at a high level, 340 00:15:49,510 --> 00:15:51,890 but so that they understand that it allows you to store, 341 00:15:51,890 --> 00:15:55,570 for instance, in this case more structured data, and not just flat 342 00:15:55,570 --> 00:15:58,990 row-by-row based data instead. 343 00:15:58,990 --> 00:16:01,607 Cloud computing-- a topic, too, that's distinct to this class. 344 00:16:01,607 --> 00:16:03,940 And we talk about some of the biggest players out there. 345 00:16:03,940 --> 00:16:07,960 What can Amazon, Google, Microsoft, and others do for you and your business? 346 00:16:07,960 --> 00:16:12,490 And we talk about some of the technologies and principles 347 00:16:12,490 --> 00:16:16,220 that underlie cloud computing that someone has to understand. 348 00:16:16,220 --> 00:16:19,540 And so we talk about scaling and replication and containerization 349 00:16:19,540 --> 00:16:22,660 and virtualization-- a lot of the alphabet soup here-- 350 00:16:22,660 --> 00:16:26,500 so that, again, when it comes to asking questions of their engineers 351 00:16:26,500 --> 00:16:28,900 or trusting in the correctness of their decisions, 352 00:16:28,900 --> 00:16:33,000 they at least understand how their own servers or applications or products 353 00:16:33,000 --> 00:16:33,680 work. 354 00:16:33,680 --> 00:16:35,980 Even if it's at this level of abstraction, 355 00:16:35,980 --> 00:16:41,180 they're not completely dependent on the technical savvy only of others. 356 00:16:41,180 --> 00:16:43,730 So I'm a little worried this URL is not going to work either. 357 00:16:43,730 --> 00:16:45,390 But allow me to-- 358 00:16:45,390 --> 00:16:46,870 oh, this one does work. 359 00:16:46,870 --> 00:16:50,560 So this one is a sample assessment from the end 360 00:16:50,560 --> 00:16:53,740 of this business-oriented class, if you'd like to take a look. 361 00:16:53,740 --> 00:16:56,350 Again, I'll open up the other one in just a bit. 362 00:16:56,350 --> 00:17:00,020 But again, the goals of the class are a bit different. 363 00:17:00,020 --> 00:17:05,079 To recap, T is more about technology for everyone from more of a consumer angle. 364 00:17:05,079 --> 00:17:10,780 B is more about business-type mindsets and how you might use technology 365 00:17:10,780 --> 00:17:13,450 to make better decisions. 366 00:17:13,450 --> 00:17:17,230 But the audiences can certainly be one and the same. 367 00:17:17,230 --> 00:17:22,300 Before I forge ahead to a third and final precursor to CS50 itself, 368 00:17:22,300 --> 00:17:28,640 any questions or comments here that I can answer? 369 00:17:28,640 --> 00:17:29,480 No? 370 00:17:29,480 --> 00:17:34,310 All right, seeing none, allow me to give you the third and final short-form 371 00:17:34,310 --> 00:17:36,060 course that might proceed CS50-- 372 00:17:36,060 --> 00:17:38,060 CS50 for lawyers, so to speak. 373 00:17:38,060 --> 00:17:41,270 So this course of the three we've now discussed 374 00:17:41,270 --> 00:17:44,420 is a bit longer than the others with more detail 375 00:17:44,420 --> 00:17:50,490 and goes into more discussion of topics that intersect technology with society. 376 00:17:50,490 --> 00:17:53,690 The original target audience was, indeed, law students or lawyers. 377 00:17:53,690 --> 00:17:55,735 But here, too, there are wonderful opportunities 378 00:17:55,735 --> 00:17:57,860 I think for high school or even middle school level 379 00:17:57,860 --> 00:18:00,530 to focus on some of those exact intersections. 380 00:18:00,530 --> 00:18:02,802 And I'll give you a few examples of those. 381 00:18:02,802 --> 00:18:04,760 In terms of the syllabus, it's a little longer, 382 00:18:04,760 --> 00:18:07,610 and it's structured along the lines of these topics here. 383 00:18:07,610 --> 00:18:10,640 But as with the business class, we begin with some commonalities. 384 00:18:10,640 --> 00:18:13,940 We introduce students first to computational thinking, as before. 385 00:18:13,940 --> 00:18:17,000 But we get them thinking more about representation of not just 386 00:18:17,000 --> 00:18:21,880 ASCII or English, which had its start with just seven bits. 387 00:18:21,880 --> 00:18:24,920 But we get them thinking about Unicode and larger character sets 388 00:18:24,920 --> 00:18:28,010 and the implications for internationalization and representation 389 00:18:28,010 --> 00:18:29,660 of other languages as well. 390 00:18:29,660 --> 00:18:32,540 We talk about algorithms, but we also spend a bit more time 391 00:18:32,540 --> 00:18:35,480 helping them think about some of the primitives that might 392 00:18:35,480 --> 00:18:37,550 underlie how you implement algorithms. 393 00:18:37,550 --> 00:18:40,460 For instance, we spend more time talking about abstraction. 394 00:18:40,460 --> 00:18:42,755 On the screen here is, of course, what? 395 00:18:42,755 --> 00:18:46,370 What does anyone see, if you'd like to shout it out or raise your hand? 396 00:18:46,370 --> 00:18:46,870 Anyone? 397 00:18:46,870 --> 00:18:48,272 Not a trick question. 398 00:18:48,272 --> 00:18:48,980 AUDIENCE: A cube. 399 00:18:48,980 --> 00:18:50,270 DAVID MALAN: A cube, I heard. 400 00:18:50,270 --> 00:18:51,830 So it's indeed a cube. 401 00:18:51,830 --> 00:18:56,400 And really, you know that, you say that, because we all have in our minds 402 00:18:56,400 --> 00:18:58,820 the definition of some abstraction of what a cube is. 403 00:18:58,820 --> 00:19:02,840 But frankly, what I am seeing is maybe three diamonds 404 00:19:02,840 --> 00:19:04,670 that are all touching each other. 405 00:19:04,670 --> 00:19:08,930 Or what I'm seeing is a diagonal line and another diagonal line 406 00:19:08,930 --> 00:19:11,690 and two more diagonal lines that connect with each other. 407 00:19:11,690 --> 00:19:15,200 And you can imagine really getting into the weeds of describing what you see. 408 00:19:15,200 --> 00:19:18,500 But thankfully, as [? Momadu ?] notes, we have an abstraction known as a cube. 409 00:19:18,500 --> 00:19:22,340 And so we get students thinking about the utility of these abstractions 410 00:19:22,340 --> 00:19:26,030 versus the price you pay by not getting into the weeds of what 411 00:19:26,030 --> 00:19:29,030 it is you're trying to say, and appreciating what computers can do 412 00:19:29,030 --> 00:19:32,150 and can't do when it comes to following commands. 413 00:19:32,150 --> 00:19:34,340 We talk about programming languages as before, 414 00:19:34,340 --> 00:19:37,940 but we go into a little more detail in the context of the law class, 415 00:19:37,940 --> 00:19:40,910 looking first at a higher-level language like C, 416 00:19:40,910 --> 00:19:43,610 looking at a lower-level language like assembly language, 417 00:19:43,610 --> 00:19:46,410 and looking at the lowest of languages, like machine code, 418 00:19:46,410 --> 00:19:47,900 which is just 0's and 1's. 419 00:19:47,900 --> 00:19:51,290 And we do this so that aspiring attorneys down the road 420 00:19:51,290 --> 00:19:54,560 actually have a better understanding of intellectual property, what 421 00:19:54,560 --> 00:19:58,430 it might mean for someone's code to be similar to another, what it might mean 422 00:19:58,430 --> 00:20:01,110 for someone's algorithm to be identical to another, 423 00:20:01,110 --> 00:20:04,400 just to that they have this bottom-up understanding of those principles. 424 00:20:04,400 --> 00:20:06,380 And they don't have to just take for granted 425 00:20:06,380 --> 00:20:10,190 that, oh, an algorithm is step-by-step instructions for solving some problem. 426 00:20:10,190 --> 00:20:12,350 But what does that really mean when computers 427 00:20:12,350 --> 00:20:16,040 and companies and owners and intellectual property gets involved? 428 00:20:16,040 --> 00:20:18,380 We talk about the limitations of computers. 429 00:20:18,380 --> 00:20:22,100 1999 was a problematic year, a.k.a. 430 00:20:22,100 --> 00:20:25,310 Y2K, because so many companies and so many products 431 00:20:25,310 --> 00:20:28,460 were using just two digits to store years instead of four. 432 00:20:28,460 --> 00:20:31,670 And so bad things might have very well happened on scale. 433 00:20:31,670 --> 00:20:34,040 We talk about floating point values-- 434 00:20:34,040 --> 00:20:36,320 numbers that have decimal points in them-- 435 00:20:36,320 --> 00:20:39,950 and give real-world examples where failure to appreciate 436 00:20:39,950 --> 00:20:44,330 or failure to protect against these realities of computing 437 00:20:44,330 --> 00:20:46,550 can lead to potentially catastrophic failures. 438 00:20:46,550 --> 00:20:53,810 Here's a Boeing 737, I believe, that essentially would turn off 439 00:20:53,810 --> 00:20:59,930 after 248 days in the sky because a 32-bit counter, a variable in memory, 440 00:20:59,930 --> 00:21:01,310 would overflow potentially. 441 00:21:01,310 --> 00:21:02,750 And bad things would happen. 442 00:21:02,750 --> 00:21:04,700 And the solution in the short-term from Boeing 443 00:21:04,700 --> 00:21:08,810 was literally reboot your planes every 247 days. 444 00:21:08,810 --> 00:21:12,770 So we get students thinking about how software decisions and hardware 445 00:21:12,770 --> 00:21:16,800 limitations might have very significant real-world ramifications. 446 00:21:16,800 --> 00:21:19,550 We talk in a bit more depth about algorithms and data structures-- 447 00:21:19,550 --> 00:21:24,470 more similar, if you will, to CS50 itself and CS50AP. 448 00:21:24,470 --> 00:21:28,460 We go into things like bubble sort, for instance, or selection sort, 449 00:21:28,460 --> 00:21:30,900 for instance, or really sorting in general. 450 00:21:30,900 --> 00:21:34,310 We talk about data structures as they are incarnated in languages, 451 00:21:34,310 --> 00:21:38,060 like Python having dictionaries and lists and other such things. 452 00:21:38,060 --> 00:21:40,450 And then we go into more detail on cryptography. 453 00:21:40,450 --> 00:21:42,200 We, of course, spend a bit of time on this 454 00:21:42,200 --> 00:21:47,360 in CS50 itself with Caesar or Vigenere or few such problem sets as well. 455 00:21:47,360 --> 00:21:49,885 But we spend a bit more formality on this, 456 00:21:49,885 --> 00:21:52,760 getting students thinking about what it means to encrypt information, 457 00:21:52,760 --> 00:21:55,670 whether it's with substitution ciphers, whether it's 458 00:21:55,670 --> 00:21:58,940 an attack on the same using so-called "frequency analysis." 459 00:21:58,940 --> 00:22:02,840 And we get students thinking a little more adversarily about some 460 00:22:02,840 --> 00:22:05,350 of the technology that they might build in CS50, 461 00:22:05,350 --> 00:22:09,740 but might not necessarily think twice about at that point in the course. 462 00:22:09,740 --> 00:22:12,560 We talk about what it means to hash passwords. 463 00:22:12,560 --> 00:22:15,660 Not just encrypting data, but hashing them in one direction, 464 00:22:15,660 --> 00:22:19,880 and what it might mean if a company's database is hacked or compromised, 465 00:22:19,880 --> 00:22:23,270 and what the threats to a customer's privacy might be. 466 00:22:23,270 --> 00:22:26,360 We talk about encryption a bit more mathematically, a bit more formally, 467 00:22:26,360 --> 00:22:29,700 in the context of, say, public-key cryptography, if you're familiar. 468 00:22:29,700 --> 00:22:31,500 And we talk about digital signatures, which 469 00:22:31,500 --> 00:22:34,530 is sort of an opposite application of the same technology, 470 00:22:34,530 --> 00:22:39,330 in order to prove mathematically that I am who I claim to be. 471 00:22:39,330 --> 00:22:42,210 We intersect with more modern technologies like Blockchain 472 00:22:42,210 --> 00:22:46,140 and cryptocurrencies like Bitcoin and the like and help students 473 00:22:46,140 --> 00:22:49,380 understand what is interesting about those technologically 474 00:22:49,380 --> 00:22:52,200 and what kinds of problems they can actually solve. 475 00:22:52,200 --> 00:22:54,870 And we talk about cybersecurity in much more detail, 476 00:22:54,870 --> 00:22:58,470 too, when we talk about how hardware itself-- 477 00:22:58,470 --> 00:23:01,050 what various hardware components inside of a computer do, 478 00:23:01,050 --> 00:23:05,230 and which of those are potential threats to one's privacy if, for instance, 479 00:23:05,230 --> 00:23:08,520 someone has physical access to the memory or some other device. 480 00:23:08,520 --> 00:23:11,790 We talk about deleting files, be it on Mac OS or Windows. 481 00:23:11,790 --> 00:23:13,830 And just emptying the recycle bin or trash can 482 00:23:13,830 --> 00:23:16,492 is not really the best way to cover your tracks 483 00:23:16,492 --> 00:23:17,950 or to remove sensitive information. 484 00:23:17,950 --> 00:23:20,010 And we help students understand why. 485 00:23:20,010 --> 00:23:22,650 We talk about how you might intercept network traffic-- 486 00:23:22,650 --> 00:23:26,170 everyone uses WiFi or mobile networks these days-- 487 00:23:26,170 --> 00:23:29,870 and what it might mean to use things like HTTPS for encryption. 488 00:23:29,870 --> 00:23:32,130 And then we spend a bit more time intercepting things 489 00:23:32,130 --> 00:23:35,640 like the primitives that underlie internet technologies as they 490 00:23:35,640 --> 00:23:38,620 relate to bigger-picture uses of cloud computing. 491 00:23:38,620 --> 00:23:41,910 And we talk quite simply about how you get data from point A to point B. 492 00:23:41,910 --> 00:23:45,300 But then we start talking about how you get a lot of data from point A 493 00:23:45,300 --> 00:23:47,610 to point B, maybe with one server initially, 494 00:23:47,610 --> 00:23:50,040 or a bigger server as load scales. 495 00:23:50,040 --> 00:23:53,850 And we talk about horizontal scalability, vertical scalability, 496 00:23:53,850 --> 00:23:57,732 and the kinds of approaches you can take to solving some problem, even 497 00:23:57,732 --> 00:23:59,190 if you're not an engineer yourself. 498 00:23:59,190 --> 00:24:01,140 Maybe you're just the one with the checkbook. 499 00:24:01,140 --> 00:24:04,860 But you need to decide, are you going to get a lot of really cheap machines? 500 00:24:04,860 --> 00:24:07,590 Are you going to get a few really beefed-up machines? 501 00:24:07,590 --> 00:24:11,410 And what are the trade-offs, being the operative word, going to be? 502 00:24:11,410 --> 00:24:14,820 And then, again, we talk in a bit more detail about very modern technologies 503 00:24:14,820 --> 00:24:17,890 like virtualization and containerization-- which, as an aside, 504 00:24:17,890 --> 00:24:20,310 if unfamiliar, you've been using for some time. 505 00:24:20,310 --> 00:24:24,120 Whether you use CS50 IDE or any other tools, they're out there. 506 00:24:24,120 --> 00:24:27,840 And we help students understand those building blocks. 507 00:24:27,840 --> 00:24:30,960 And then lastly, at the tail-end of CS50 for lawyers, 508 00:24:30,960 --> 00:24:34,800 do we introduce students-- as often we do-- to a bit of web development 509 00:24:34,800 --> 00:24:36,770 and helping them understand HTML. 510 00:24:36,770 --> 00:24:39,960 We spend a bit more time on JavaScript and that event-based model 511 00:24:39,960 --> 00:24:43,770 I alluded to before, clicking and dragging and changing things 512 00:24:43,770 --> 00:24:46,680 on the screen, and how you write code to interact with humans. 513 00:24:46,680 --> 00:24:48,970 We talk a bit more about database design-- 514 00:24:48,970 --> 00:24:52,410 so not just using SQL, but using it efficiently, 515 00:24:52,410 --> 00:24:57,090 designing and choosing the types of your language more aptly, 516 00:24:57,090 --> 00:25:00,750 and even more sophisticated techniques like transactions and locks. 517 00:25:00,750 --> 00:25:03,250 How do you assure the integrity of your data, 518 00:25:03,250 --> 00:25:05,220 especially when you have a lot of it coming in, 519 00:25:05,220 --> 00:25:07,412 especially for popular websites and tools? 520 00:25:07,412 --> 00:25:09,120 And then at the very end of the semester, 521 00:25:09,120 --> 00:25:11,520 do we revisit and reconnect some of the topics, 522 00:25:11,520 --> 00:25:15,690 talking about things like denial of service attacks on scale on the cloud, 523 00:25:15,690 --> 00:25:19,950 talking about defenses or potential weaknesses like SSL or TLS, 524 00:25:19,950 --> 00:25:25,320 talking about more precise attacks using code-- cross-site scripting attacks, 525 00:25:25,320 --> 00:25:28,830 where someone tricks you into executing code in your users' browsers 526 00:25:28,830 --> 00:25:30,660 that they provided to you. 527 00:25:30,660 --> 00:25:32,910 Or something like a cross-site request forgery, 528 00:25:32,910 --> 00:25:37,590 where you trick a user into sending a request to a website 529 00:25:37,590 --> 00:25:40,110 that they might not have even intended. 530 00:25:40,110 --> 00:25:44,310 And we talk, of course, about databases as well, and hashing those passwords, 531 00:25:44,310 --> 00:25:45,660 and what that really means. 532 00:25:45,660 --> 00:25:48,730 We talk about SQL injection attacks, threats against the same. 533 00:25:48,730 --> 00:25:50,490 We talk about Man in the Middle attacks. 534 00:25:50,490 --> 00:25:54,930 We talk about phishing and really a whole lot of technologies 535 00:25:54,930 --> 00:25:56,110 intersecting with society. 536 00:25:56,110 --> 00:25:58,110 And indeed, what we do at the end of the course, 537 00:25:58,110 --> 00:26:00,540 particularly by way of a colleague of ours, Doug, 538 00:26:00,540 --> 00:26:03,780 we start talking about really the real-world ethical issues 539 00:26:03,780 --> 00:26:07,020 and the legal issues that result from these intersections. 540 00:26:07,020 --> 00:26:11,700 And so we consider implications of open-source software and the licensing 541 00:26:11,700 --> 00:26:13,560 thereof and what you need to be mindful of, 542 00:26:13,560 --> 00:26:15,900 and what the trade-offs are of open-source software 543 00:26:15,900 --> 00:26:20,430 that everyone can see, or closed-source software that no one can see. 544 00:26:20,430 --> 00:26:23,160 Talking about disruptive technologies and things 545 00:26:23,160 --> 00:26:25,740 that the law hasn't even caught up to yet. 546 00:26:25,740 --> 00:26:29,730 For instance, being able to 3D-print guns that aren't even metallic 547 00:26:29,730 --> 00:26:33,330 and can't be detected anymore-- what are the implications for society when 548 00:26:33,330 --> 00:26:35,940 now, anyone on the internet can download something like that 549 00:26:35,940 --> 00:26:39,540 and, resources permitting, just create their own threats? 550 00:26:39,540 --> 00:26:42,200 Digital privacy and tracking certainly in the news, 551 00:26:42,200 --> 00:26:45,090 and ever more so today when it comes to social networking 552 00:26:45,090 --> 00:26:47,070 sites and the implications for humans. 553 00:26:47,070 --> 00:26:50,010 AI and robotics are very much on the horizon. 554 00:26:50,010 --> 00:26:52,830 And indeed, Brian, will soon introduce a course on the same 555 00:26:52,830 --> 00:26:55,980 and what the implications are for users in society. 556 00:26:55,980 --> 00:27:00,270 GDPR and data privacy laws here and abroad are germane as well. 557 00:27:00,270 --> 00:27:02,700 And then Net Neutrality, which keeps coming up 558 00:27:02,700 --> 00:27:04,800 from time to time, particularly within the US, 559 00:27:04,800 --> 00:27:08,847 and what that means technologically, and what that means for users. 560 00:27:08,847 --> 00:27:10,680 And here, too, I'm going to cross my fingers 561 00:27:10,680 --> 00:27:14,100 and see if I gave the right permissions for this one. 562 00:27:14,100 --> 00:27:15,560 This one, too, is successful. 563 00:27:15,560 --> 00:27:17,160 So I got two out of three. 564 00:27:17,160 --> 00:27:19,253 Let me give you this sample assignments as well. 565 00:27:19,253 --> 00:27:20,670 And you'll notice the overlapping. 566 00:27:20,670 --> 00:27:24,180 So, in fact, allow me in closing, before I turn the reins over to Colton, 567 00:27:24,180 --> 00:27:27,770 just to give you a sense now of the similarities and differences here. 568 00:27:27,770 --> 00:27:32,180 We've looked at CS50B and L and T here in succession. 569 00:27:32,180 --> 00:27:36,440 And here is the same syllabi from each course, this time laid out 570 00:27:36,440 --> 00:27:39,500 from left to right in the order in which we saw it. 571 00:27:39,500 --> 00:27:41,600 And I did my best to color-code this to show 572 00:27:41,600 --> 00:27:43,532 you the similarities and differences. 573 00:27:43,532 --> 00:27:45,740 I realize the colors won't necessarily stand out well 574 00:27:45,740 --> 00:27:47,040 for your eyes or your screen. 575 00:27:47,040 --> 00:27:49,680 So we'll document this in another form, too. 576 00:27:49,680 --> 00:27:53,390 But essentially, I used the same colors in each course 577 00:27:53,390 --> 00:27:57,450 to indicate that there is significant overlap in those topics. 578 00:27:57,450 --> 00:28:01,400 So both B and L, for instance, in pink, spend a good amount of time 579 00:28:01,400 --> 00:28:05,330 on computational thinking, as they do on programming languages, 580 00:28:05,330 --> 00:28:06,680 as well as programming. 581 00:28:06,680 --> 00:28:10,070 So sometimes, the titles might differ, but the concepts are the same. 582 00:28:10,070 --> 00:28:12,380 And so ultimately, each of these three courses 583 00:28:12,380 --> 00:28:15,740 is available to be taught as OpenCourseWare, either as maybe 584 00:28:15,740 --> 00:28:19,070 a freshman class, a middle school class that introduces students 585 00:28:19,070 --> 00:28:21,530 to the world of computing and computer science, 586 00:28:21,530 --> 00:28:25,310 or, as with any of the classes, you can pick and choose things off the shelf 587 00:28:25,310 --> 00:28:30,150 and integrate them into your own class, be it CS50AP or something else. 588 00:28:30,150 --> 00:28:34,580 But generally speaking, these are more conceptually-oriented classes, 589 00:28:34,580 --> 00:28:38,510 more societally-oriented classes, and more introductory than something 590 00:28:38,510 --> 00:28:43,910 like CS50X or, really, CS50AP itself. 591 00:28:43,910 --> 00:28:47,900 Any questions or comments before we turn our attention 592 00:28:47,900 --> 00:28:54,970 to what students and teachers can do after these on ramps? 593 00:28:54,970 --> 00:29:00,340 AUDIENCE: I was just thinking that if there is a CS50 course for medicine, 594 00:29:00,340 --> 00:29:02,630 my students would love it. 595 00:29:02,630 --> 00:29:04,678 DAVID MALAN: So the one course we don't have, OK. 596 00:29:04,678 --> 00:29:07,720 But we've actually been thinking about that, if only because Harvard does 597 00:29:07,720 --> 00:29:08,670 have a Medical School. 598 00:29:08,670 --> 00:29:10,410 But it does not, I'm afraid, exist yet. 599 00:29:10,410 --> 00:29:13,300 600 00:29:13,300 --> 00:29:14,560 Other questions or comments? 601 00:29:14,560 --> 00:29:17,200 602 00:29:17,200 --> 00:29:17,850 No? 603 00:29:17,850 --> 00:29:20,290 Colton, would you like to take the floor? 604 00:29:20,290 --> 00:29:21,880 COLTON OGDEN: Sure thing, awesome. 605 00:29:21,880 --> 00:29:24,680 So thanks, David, for the introduction. 606 00:29:24,680 --> 00:29:28,150 I'm going to talk about CS50G, or GD50, as I like to call it-- 607 00:29:28,150 --> 00:29:29,247 Game Development 50. 608 00:29:29,247 --> 00:29:31,080 I'm going to switch my screen over here just 609 00:29:31,080 --> 00:29:34,330 to have a slightly better view of the slides, here. 610 00:29:34,330 --> 00:29:37,980 So GD50 is a continuation after CS50. 611 00:29:37,980 --> 00:29:40,900 So the expectation by this point will be that students 612 00:29:40,900 --> 00:29:43,360 do have some programming experience, be that through CS50 613 00:29:43,360 --> 00:29:45,460 or through other equivalent courses. 614 00:29:45,460 --> 00:29:50,440 And GD50 or CS50's Intro to Game Development is all about 2D 615 00:29:50,440 --> 00:29:51,877 and 3D games. 616 00:29:51,877 --> 00:29:53,710 So we spend a good chunk of the course going 617 00:29:53,710 --> 00:29:55,480 through a lot of really famous titles that you probably 618 00:29:55,480 --> 00:29:58,630 see around the screen like Super Mario Brothers, Legend of Zelda, 619 00:29:58,630 --> 00:29:59,607 Angry Birds, Pokemon. 620 00:29:59,607 --> 00:30:01,690 But we also do a little bit of 3D game development 621 00:30:01,690 --> 00:30:04,330 at the very end in Unity Game Engine-- 622 00:30:04,330 --> 00:30:09,400 Dreadhalls, Portal, and a helicopter game in 3D being examples thereof. 623 00:30:09,400 --> 00:30:12,535 And this course uses a couple of different programming languages. 624 00:30:12,535 --> 00:30:14,410 And I think this is actually pretty important 625 00:30:14,410 --> 00:30:17,050 because in real-world industry, it's pretty common 626 00:30:17,050 --> 00:30:20,080 that between companies and even within the same project, 627 00:30:20,080 --> 00:30:22,927 you'll be expected to use-- and even within the same game project, 628 00:30:22,927 --> 00:30:24,760 for the sake of this course at least, you'll 629 00:30:24,760 --> 00:30:28,120 be expected to use not just one language, but multiple languages. 630 00:30:28,120 --> 00:30:30,070 So here, we have Lua and Love 2D. 631 00:30:30,070 --> 00:30:32,410 That's what that symbol is there on the left-hand side 632 00:30:32,410 --> 00:30:34,810 to represent the 2D section of the course. 633 00:30:34,810 --> 00:30:37,780 And on the right-hand side, we have C # and Unity, 634 00:30:37,780 --> 00:30:40,910 which represent the 3D side of the course. 635 00:30:40,910 --> 00:30:42,370 So we start things off with Pong. 636 00:30:42,370 --> 00:30:44,740 And this is a very quintessential, classic game. 637 00:30:44,740 --> 00:30:47,860 But this really is students'-- we can presume many, for them, 638 00:30:47,860 --> 00:30:50,620 their first dive into something as graphical as this. 639 00:30:50,620 --> 00:30:52,810 And it made sense to take things in a progression 640 00:30:52,810 --> 00:30:55,590 from really, really simple to more complicated. 641 00:30:55,590 --> 00:30:57,520 And pong is a very suitable first example 642 00:30:57,520 --> 00:31:02,650 as well because it's the grandfather progenitor of the video game industry. 643 00:31:02,650 --> 00:31:07,570 So the sake of this example, really, is to showcase very basic things 644 00:31:07,570 --> 00:31:09,520 like getting something visual on the screen 645 00:31:09,520 --> 00:31:12,370 to begin with, where students may only have thus far done 646 00:31:12,370 --> 00:31:14,547 textual CLI-based programming. 647 00:31:14,547 --> 00:31:17,380 We have text being rendered on the screen, but not through a command 648 00:31:17,380 --> 00:31:18,040 prompt. 649 00:31:18,040 --> 00:31:21,127 And we have various things like game state, so managing what we're doing, 650 00:31:21,127 --> 00:31:23,210 whether it's the beginning or the end of the game. 651 00:31:23,210 --> 00:31:25,730 And this is a very common theme in programming. 652 00:31:25,730 --> 00:31:27,940 And this is-- effectively, state machines 653 00:31:27,940 --> 00:31:31,450 are an important concept in computer science, generally speaking. 654 00:31:31,450 --> 00:31:34,450 We transition from that to something a little more visually interesting. 655 00:31:34,450 --> 00:31:37,960 So this is where we can start to have students actually use their own art 656 00:31:37,960 --> 00:31:39,790 or at least get a sense of how to do that 657 00:31:39,790 --> 00:31:41,748 and have it actually move around on the screen. 658 00:31:41,748 --> 00:31:43,870 So we cover things like delta time, which 659 00:31:43,870 --> 00:31:47,170 just means the difference between two frames in milliseconds, which 660 00:31:47,170 --> 00:31:49,940 allows us to then calculate things like gravity, 661 00:31:49,940 --> 00:31:52,690 which is a frame by frame calculation. 662 00:31:52,690 --> 00:31:57,880 After that, we go to breakout, which is a continuation of one and two-- 663 00:31:57,880 --> 00:31:59,170 rather, lectures 0 and 1-- 664 00:31:59,170 --> 00:32:03,610 Pong and Flappy Bird, where we've taken the basic idea of Pong, 665 00:32:03,610 --> 00:32:05,740 and we've taken the idea of adding in sprites. 666 00:32:05,740 --> 00:32:08,500 But we've also made the game a lot more complicated. 667 00:32:08,500 --> 00:32:12,490 And this I like to use is an example of what's called procedural generation. 668 00:32:12,490 --> 00:32:14,793 So we're doing things, not just necessarily putting 669 00:32:14,793 --> 00:32:16,960 graphics on the screen, but talking about algorithms 670 00:32:16,960 --> 00:32:21,640 that let us generate data or information to make games playable, 671 00:32:21,640 --> 00:32:24,978 one iteration after another, which I thought was an interesting thing. 672 00:32:24,978 --> 00:32:26,770 It's something that I'm personally attached 673 00:32:26,770 --> 00:32:28,300 to with games and with programming. 674 00:32:28,300 --> 00:32:31,690 And it makes things a little bit more, I think, rigorous. 675 00:32:31,690 --> 00:32:34,887 And ties it to something that's not, strictly speaking, necessary to games 676 00:32:34,887 --> 00:32:36,970 because you can do the same thing with a database. 677 00:32:36,970 --> 00:32:38,970 You could generate your own database information 678 00:32:38,970 --> 00:32:42,280 if you were testing something on the web, for example. 679 00:32:42,280 --> 00:32:47,500 We go into match 3, which is a discrete style-- 680 00:32:47,500 --> 00:32:51,220 not really a board game, but it's a discrete style game where 681 00:32:51,220 --> 00:32:53,170 you swap tiles and try to get matches. 682 00:32:53,170 --> 00:32:55,510 And this illustrates a different kind of programming, 683 00:32:55,510 --> 00:32:57,910 where you're looking at a finite space and trying 684 00:32:57,910 --> 00:33:01,210 to calculate whether a particular rule or condition is met, 685 00:33:01,210 --> 00:33:04,510 and then changing the game board, one iteration after another. 686 00:33:04,510 --> 00:33:05,620 So it's just kind of-- 687 00:33:05,620 --> 00:33:09,880 at least with this example, I liked it because it was a popular thing. 688 00:33:09,880 --> 00:33:13,240 Again, the whole idea or philosophy of the course 689 00:33:13,240 --> 00:33:16,440 is that it should be a case study approach 690 00:33:16,440 --> 00:33:20,080 to the course, where we have a full corpus of source code 691 00:33:20,080 --> 00:33:20,960 that you dive into. 692 00:33:20,960 --> 00:33:23,800 But it's also varied so that the students aren't necessarily 693 00:33:23,800 --> 00:33:26,323 getting the same type of game throughout the whole course. 694 00:33:26,323 --> 00:33:28,240 They're getting to sample the landscape, which 695 00:33:28,240 --> 00:33:31,360 was a major design philosophy of GD50. 696 00:33:31,360 --> 00:33:35,680 DAVID MALAN: Angela asked earlier, how many girls play these games? 697 00:33:35,680 --> 00:33:41,170 And does the course cover the work issues that face game designers? 698 00:33:41,170 --> 00:33:42,310 COLTON OGDEN: I imagine-- 699 00:33:42,310 --> 00:33:46,510 I haven't done the research to know the gender distribution. 700 00:33:46,510 --> 00:33:49,810 I believe I read stats on mobile games-- in particular, 701 00:33:49,810 --> 00:33:54,160 things like Candy Crush and many other types of games on mobile were very-- 702 00:33:54,160 --> 00:33:57,160 actually, I think more women played those than men, if I 703 00:33:57,160 --> 00:33:59,423 remember reading a study about that. 704 00:33:59,423 --> 00:34:00,340 I'm not entirely sure. 705 00:34:00,340 --> 00:34:04,010 I don't want to say anything incorrect as regards that. 706 00:34:04,010 --> 00:34:08,520 I feel like the games industry is a little bit more male-skewed. 707 00:34:08,520 --> 00:34:11,409 Although I think within the last five to 10 years, 708 00:34:11,409 --> 00:34:14,199 it seems like it has gotten a little bit more balanced. 709 00:34:14,199 --> 00:34:18,250 But there's still a bit of a discrepancy for sure. 710 00:34:18,250 --> 00:34:21,909 In terms of the workplace considerations, 711 00:34:21,909 --> 00:34:24,628 we don't really cover that as much. 712 00:34:24,628 --> 00:34:27,670 It's an interesting thing that would be maybe worth adding to the course, 713 00:34:27,670 --> 00:34:28,170 actually. 714 00:34:28,170 --> 00:34:31,810 But currently, no, we do not talk about that-- at least not in detail, 715 00:34:31,810 --> 00:34:34,790 as far as I recall during lecture, unless it was asked as a question. 716 00:34:34,790 --> 00:34:35,290 Sure. 717 00:34:35,290 --> 00:34:37,082 DAVID MALAN: And Colton, [? Amira ?] asked, 718 00:34:37,082 --> 00:34:40,731 is this course considered to be advanced? 719 00:34:40,731 --> 00:34:45,810 COLTON OGDEN: I would say it'd probably be intermediate level. 720 00:34:45,810 --> 00:34:49,489 It's hard for me to put a specific label on it. 721 00:34:49,489 --> 00:34:51,322 Certainly, it's more advanced than-- well, I 722 00:34:51,322 --> 00:34:54,489 didn't want to say it's more advanced than CS50 is because CS50's relatively 723 00:34:54,489 --> 00:34:56,179 advanced for an entry-level course. 724 00:34:56,179 --> 00:34:58,370 I would say it approaches the level of difficulty 725 00:34:58,370 --> 00:35:01,520 maybe as the later stages of CS50. 726 00:35:01,520 --> 00:35:05,510 In some regards, maybe slightly more difficult because we're dealing 727 00:35:05,510 --> 00:35:07,160 with larger code bases on average. 728 00:35:07,160 --> 00:35:09,470 Actually, most of the code bases in GD50 are 729 00:35:09,470 --> 00:35:12,590 upwards of 1,000 lines-- maybe 2,000 lines of code. 730 00:35:12,590 --> 00:35:17,300 And this was deliberately the case, because at least with the design 731 00:35:17,300 --> 00:35:20,602 philosophy that I had going in, I did not want-- 732 00:35:20,602 --> 00:35:22,310 or as I was learning game development, it 733 00:35:22,310 --> 00:35:24,890 was very hard for me to find large code bases 734 00:35:24,890 --> 00:35:26,705 like the complete picture of what a game is 735 00:35:26,705 --> 00:35:28,330 and how all the pieces worked together. 736 00:35:28,330 --> 00:35:31,100 I could very easily find tutorials online 737 00:35:31,100 --> 00:35:34,280 that would illustrate one concept, like how to move something on the screen 738 00:35:34,280 --> 00:35:37,518 or how to transition between two different scenes, maybe. 739 00:35:37,518 --> 00:35:39,560 But very rarely would I actually have a full code 740 00:35:39,560 --> 00:35:42,710 base that was representative of what an entire game might look like, 741 00:35:42,710 --> 00:35:46,880 or at least a proof of concept there that was relatively fleshed out. 742 00:35:46,880 --> 00:35:50,750 And you could easily add more content to it to make a proper, full game. 743 00:35:50,750 --> 00:35:55,680 So yeah, in that sense, students will be expected to navigate large code bases. 744 00:35:55,680 --> 00:35:59,675 And the assignments therefore are a little bit smaller than obviously 745 00:35:59,675 --> 00:36:01,050 implementing an entire code base. 746 00:36:01,050 --> 00:36:02,675 They're usually adding a small feature. 747 00:36:02,675 --> 00:36:05,300 For example, in Pong, the objective for the student 748 00:36:05,300 --> 00:36:07,537 is to just simply add an AI to the paddle 749 00:36:07,537 --> 00:36:09,620 on the right-hand side that lets it track the ball 750 00:36:09,620 --> 00:36:12,380 or have some behavior that the student wishes, whether it's 751 00:36:12,380 --> 00:36:16,310 to make it behave somewhat like a human or to be infallible, 752 00:36:16,310 --> 00:36:18,240 which is often the case. 753 00:36:18,240 --> 00:36:19,880 But, yeah, generally, that's the case-- 754 00:36:19,880 --> 00:36:24,620 large code bases to navigate, which might be a difference from CS50. 755 00:36:24,620 --> 00:36:26,450 But the assignment rigor in and of itself 756 00:36:26,450 --> 00:36:30,342 is probably comparable to mid to late CS50 in difficulty. 757 00:36:30,342 --> 00:36:33,050 DAVID MALAN: And Steve, to your point about it being too advanced 758 00:36:33,050 --> 00:36:35,660 for middle schoolers, it does assume, to be clear, 759 00:36:35,660 --> 00:36:37,790 as will Brian's classes, that students have taken 760 00:36:37,790 --> 00:36:40,340 CS50 itself or some equivalent. 761 00:36:40,340 --> 00:36:43,520 So it assumes that degree of comfort and sophistication out of the gate, 762 00:36:43,520 --> 00:36:44,185 to be clear. 763 00:36:44,185 --> 00:36:45,060 COLTON OGDEN: Indeed. 764 00:36:45,060 --> 00:36:45,680 DAVID MALAN: Colton, back to you. 765 00:36:45,680 --> 00:36:46,563 I think we caught up. 766 00:36:46,563 --> 00:36:47,480 COLTON OGDEN: Awesome. 767 00:36:47,480 --> 00:36:48,767 Thank you so much. 768 00:36:48,767 --> 00:36:50,600 So I was talking about Super Mario Brothers, 769 00:36:50,600 --> 00:36:53,660 which was the influence of the course from the very beginning. 770 00:36:53,660 --> 00:36:56,310 I probably mentioned all of that stuff. 771 00:36:56,310 --> 00:36:58,490 But the big thing that I wanted to hammer home 772 00:36:58,490 --> 00:37:01,070 was the idea of illusions-- how games in and of themselves 773 00:37:01,070 --> 00:37:03,650 usually are meant to trick us into thinking 774 00:37:03,650 --> 00:37:06,590 that we are in a particular place or doing a particular thing 775 00:37:06,590 --> 00:37:08,750 as a particular entity. 776 00:37:08,750 --> 00:37:12,390 In the case of Super Mario Brothers, in this case, 777 00:37:12,390 --> 00:37:15,410 at least we are typically rendering the entire thing at once. 778 00:37:15,410 --> 00:37:18,380 But typically with games, outside of the camera bounds, 779 00:37:18,380 --> 00:37:21,350 you will not have tiles being rendered to save on memory 780 00:37:21,350 --> 00:37:26,000 and to save on rendering-- for the GPU you to not have to render more texture 781 00:37:26,000 --> 00:37:27,830 or bits of textures. 782 00:37:27,830 --> 00:37:30,380 In the case of Flappy Bird, if you were to zoom way out 783 00:37:30,380 --> 00:37:34,130 of the example of Flappy Bird, you would see these long weird pipes, 784 00:37:34,130 --> 00:37:37,730 and then just a simple image that was infinitely scrolling to make us 785 00:37:37,730 --> 00:37:40,940 feel like we're actually moving through space. 786 00:37:40,940 --> 00:37:42,020 But in fact, we're not. 787 00:37:42,020 --> 00:37:45,830 And actually, the pipes are getting generated and shifted back and forth 788 00:37:45,830 --> 00:37:50,503 around the screen as needed to get the effect that we're looking for. 789 00:37:50,503 --> 00:37:52,170 So that was it for Super Mario Brothers. 790 00:37:52,170 --> 00:37:54,020 Now, let's go over to Legend of Zelda. 791 00:37:54,020 --> 00:37:59,180 So Zelda is a another game of that era where it was released for the NES. 792 00:37:59,180 --> 00:38:01,670 And it has a similar almost aesthetic of the era. 793 00:38:01,670 --> 00:38:03,500 But this gives you really a top down games. 794 00:38:03,500 --> 00:38:08,645 And the real purpose of this lecture, amongst a couple of little minor things 795 00:38:08,645 --> 00:38:10,520 that we talked about graphically, was that we 796 00:38:10,520 --> 00:38:13,932 wanted to discuss how we could model things like creatures as data. 797 00:38:13,932 --> 00:38:16,640 So we could have these things like these ghosts and these spiders 798 00:38:16,640 --> 00:38:21,350 and these slimes actually modeled in a config file, more or less. 799 00:38:21,350 --> 00:38:23,660 And we would just dynamically load them in, rather than 800 00:38:23,660 --> 00:38:26,330 have to write a lot of different logic or repeated logic 801 00:38:26,330 --> 00:38:33,440 or use a particular inheritance in the object-oriented sense, an inherited 802 00:38:33,440 --> 00:38:36,300 class, to model all of these individual creatures. 803 00:38:36,300 --> 00:38:40,850 So data-driven design is a big aspect of this lecture. 804 00:38:40,850 --> 00:38:44,480 And I want to believe that that applies to a lot of domains, 805 00:38:44,480 --> 00:38:46,940 just like a lot of these other concepts do, 806 00:38:46,940 --> 00:38:51,598 beyond the world of game development, like in web development, for example. 807 00:38:51,598 --> 00:38:53,640 We transition completely in a different direction 808 00:38:53,640 --> 00:38:58,680 here to Angry Birds or an Angry Birds style game using physics, 2D physics. 809 00:38:58,680 --> 00:38:59,940 Box 2D would be the name. 810 00:38:59,940 --> 00:39:04,260 And this was more to give students a taste of a different outlying genre 811 00:39:04,260 --> 00:39:07,650 and a different way of building games because building games with physics 812 00:39:07,650 --> 00:39:10,440 objects is very different than a lot of what 813 00:39:10,440 --> 00:39:11,920 we've covered earlier in the class. 814 00:39:11,920 --> 00:39:14,170 So this is, again, part of the idea of giving students 815 00:39:14,170 --> 00:39:19,260 just a wide taste of the landscape as befits game development. 816 00:39:19,260 --> 00:39:22,477 And here, they learn things like how to model different types of shapes 817 00:39:22,477 --> 00:39:24,060 and how they interact with each other. 818 00:39:24,060 --> 00:39:26,400 In this case, we have this little barricade here, 819 00:39:26,400 --> 00:39:29,318 represented by these wooden boxes. 820 00:39:29,318 --> 00:39:31,110 And then we have the characters themselves, 821 00:39:31,110 --> 00:39:36,240 with a model trajectory here, in which case they'll collide with that. 822 00:39:36,240 --> 00:39:40,980 Following that is our last 2D game, which is Pokemon, or a version thereof. 823 00:39:40,980 --> 00:39:45,955 Again, everything with this course is all public domain sprites by design 824 00:39:45,955 --> 00:39:48,330 because we don't want to infringe on anybody's copyright. 825 00:39:48,330 --> 00:39:51,210 But here, this is very similarly modeling 826 00:39:51,210 --> 00:39:54,272 off of Pokemon, which was a very famous game in the late '90s, 827 00:39:54,272 --> 00:39:55,980 where you capture these little creatures. 828 00:39:55,980 --> 00:39:57,760 And you can fight them back and forth. 829 00:39:57,760 --> 00:40:01,830 And this was to help with a few different things, particularly events 830 00:40:01,830 --> 00:40:06,120 and callback functions, which is a big aspect of asynchronous programming. 831 00:40:06,120 --> 00:40:09,280 And also higher order or functional programming, 832 00:40:09,280 --> 00:40:12,630 which was a different paradigm that students might not 833 00:40:12,630 --> 00:40:16,322 be super-subjected to until they've maybe taken CS50, 834 00:40:16,322 --> 00:40:18,780 because I believe with CS50, and at least JavaScript, there 835 00:40:18,780 --> 00:40:19,960 is a bit of that. 836 00:40:19,960 --> 00:40:24,280 But here, Lua, because it's a dynamic scripting language, 837 00:40:24,280 --> 00:40:27,030 it does have these features actually very similar in a lot of ways 838 00:40:27,030 --> 00:40:27,990 to JavaScript. 839 00:40:27,990 --> 00:40:29,430 So Lua gives us the option. 840 00:40:29,430 --> 00:40:32,290 We can both test not only turn-based combat systems 841 00:40:32,290 --> 00:40:35,220 and the idea of two entities taking turns and making decisions 842 00:40:35,220 --> 00:40:39,480 back and forth, but also a different way of thinking about programming, which 843 00:40:39,480 --> 00:40:42,870 I thought was important to illustrate. 844 00:40:42,870 --> 00:40:46,620 And then following that, we actually transition to Unity 3D. 845 00:40:46,620 --> 00:40:50,760 And this was by design because it was a nice way 846 00:40:50,760 --> 00:40:54,090 to get students to use a real-world toolkit. 847 00:40:54,090 --> 00:40:57,180 Not that Love 2D isn't real-world, but Unity in particular 848 00:40:57,180 --> 00:41:01,320 is not only a game engine, but also one of the most widely used game 849 00:41:01,320 --> 00:41:05,700 engines in the modern game development ecosystem. 850 00:41:05,700 --> 00:41:08,070 And by doing that, we let students actually 851 00:41:08,070 --> 00:41:12,780 use the tool that's highly in vogue and get real-world skills, 852 00:41:12,780 --> 00:41:15,540 not only just use things that are in a model or mock environment. 853 00:41:15,540 --> 00:41:18,150 And that's also, again, by design throughout the entire course 854 00:41:18,150 --> 00:41:20,848 to give them a larger code basis to work with. 855 00:41:20,848 --> 00:41:23,140 So here, we are creating just a simple helicopter game. 856 00:41:23,140 --> 00:41:25,707 It's actually almost like a 2D game in and of itself. 857 00:41:25,707 --> 00:41:28,290 But we have helicopters and planes and the like moving around. 858 00:41:28,290 --> 00:41:29,460 So we're using models. 859 00:41:29,460 --> 00:41:33,300 We're doing basically just a tutorial on how to use Unity for the most part 860 00:41:33,300 --> 00:41:35,910 and get our minds thinking in 3D and using models 861 00:41:35,910 --> 00:41:39,530 rather than using 2D and sprites. 862 00:41:39,530 --> 00:41:42,350 Following that, we do a first-person horror game. 863 00:41:42,350 --> 00:41:45,380 So this is Dreadhalls, which we actually played in the office 864 00:41:45,380 --> 00:41:47,660 on a VR headset, which was a great time. 865 00:41:47,660 --> 00:41:49,550 And here, we talk about first-person games. 866 00:41:49,550 --> 00:41:51,760 And this is very different, obviously, from anything 867 00:41:51,760 --> 00:41:53,010 that we've done in the course. 868 00:41:53,010 --> 00:41:55,218 Now we're actually doing or beginning to do something 869 00:41:55,218 --> 00:41:57,250 that's unique to the realm of 3D games. 870 00:41:57,250 --> 00:42:01,310 It's something that we couldn't-- unless we used faux 3D-- 871 00:42:01,310 --> 00:42:04,310 2D-style implementations, something that we could not 872 00:42:04,310 --> 00:42:07,730 do in 2D that we can now do using Unity and 3D-- 873 00:42:07,730 --> 00:42:11,060 that idea of navigating a world, an actual world, and feeling like we're 874 00:42:11,060 --> 00:42:13,830 an actor or an agent in that space. 875 00:42:13,830 --> 00:42:17,780 And here, it's really just a horror game, and then to model that idea. 876 00:42:17,780 --> 00:42:18,690 But it's a big step. 877 00:42:18,690 --> 00:42:20,607 And we can talk about things like how to model 878 00:42:20,607 --> 00:42:22,940 a character moving around and interacting with things 879 00:42:22,940 --> 00:42:24,350 and colliding with things. 880 00:42:24,350 --> 00:42:27,440 And this is applicable to all kinds of different things. 881 00:42:27,440 --> 00:42:29,660 I even taught a seminar on-- 882 00:42:29,660 --> 00:42:31,850 a workshop on how to use a lot of these same ideas 883 00:42:31,850 --> 00:42:36,050 just to create a museum navigational tool, which 884 00:42:36,050 --> 00:42:38,007 illustrates just how powerful Unity is, even 885 00:42:38,007 --> 00:42:39,590 outside the world of game development. 886 00:42:39,590 --> 00:42:41,882 So if students want to maybe learn the principles here, 887 00:42:41,882 --> 00:42:44,690 they could take this idea and apply it to all sorts of domains. 888 00:42:44,690 --> 00:42:47,360 This doesn't have to necessarily strictly be creating games. 889 00:42:47,360 --> 00:42:50,160 It could be any type of multimedia. 890 00:42:50,160 --> 00:42:53,863 And then the final lecture of the course is a evolution 891 00:42:53,863 --> 00:42:56,780 of that last process, where we're actually implementing a first-person 892 00:42:56,780 --> 00:42:59,700 shooter, but not in the traditional sense of the term, 893 00:42:59,700 --> 00:43:04,580 but rather a clone of the game Portal, which involves a portal gun, which 894 00:43:04,580 --> 00:43:07,020 shoots just these portals on flat surfaces 895 00:43:07,020 --> 00:43:09,890 that you can then walk through and then jump out the other side. 896 00:43:09,890 --> 00:43:12,710 This was meant to involve the player in a little bit more 897 00:43:12,710 --> 00:43:16,580 of the technical aspects of using Unity-- things like rendering textures, 898 00:43:16,580 --> 00:43:19,045 casting rays from the point of view of the camera, 899 00:43:19,045 --> 00:43:21,920 and then finding what the nearest collidable surface is-- things that 900 00:43:21,920 --> 00:43:25,410 would allow students to not just simply create a thing to walk around, 901 00:43:25,410 --> 00:43:27,800 but that can actually interact in dynamic ways 902 00:43:27,800 --> 00:43:30,020 with the surfaces in their game world. 903 00:43:30,020 --> 00:43:33,770 And that's basically it in terms of the curriculum for the games course. 904 00:43:33,770 --> 00:43:35,870 Again, it's meant to be a case study approach, 905 00:43:35,870 --> 00:43:43,410 where the concepts and the ideas and the curriculum or the subjects 906 00:43:43,410 --> 00:43:47,570 therein are introduced in an organic way to make it feel like they're navigating 907 00:43:47,570 --> 00:43:49,400 the process of becoming a game developer, 908 00:43:49,400 --> 00:43:53,360 less so than they are maybe learning it in a traditional, more 909 00:43:53,360 --> 00:43:54,620 austere sense of the term. 910 00:43:54,620 --> 00:43:57,050 It was a philosophy that I personally wish 911 00:43:57,050 --> 00:43:59,310 existed when I was learning how to game program. 912 00:43:59,310 --> 00:44:02,480 And so I figured it would be a nice thing to try out. 913 00:44:02,480 --> 00:44:05,540 So yeah, that was it for the game syllabus. 914 00:44:05,540 --> 00:44:07,730 And I think Brian is next, but I'm happy to take 915 00:44:07,730 --> 00:44:10,330 any questions if anybody has any. 916 00:44:10,330 --> 00:44:13,250 SPEAKER: Some questions that came up in the chat, Colton-- 917 00:44:13,250 --> 00:44:15,920 Peter asks, "What development environments 918 00:44:15,920 --> 00:44:20,120 are used for the courses on CS50 IDE?" 919 00:44:20,120 --> 00:44:22,640 COLTON OGDEN: So currently, no, it's not in CS50 IDE. 920 00:44:22,640 --> 00:44:25,190 We expect the student, at least for the Love 2D section, 921 00:44:25,190 --> 00:44:29,430 and even for the C # and Unity section, to use a tool called VS Code, 922 00:44:29,430 --> 00:44:32,720 which is a very popular text editor which has actually integration with 923 00:44:32,720 --> 00:44:35,923 Love 2D, where you can just press Alt L or Command L, 924 00:44:35,923 --> 00:44:38,840 depending on whether you're using a Mac, to actually fire up Love with 925 00:44:38,840 --> 00:44:40,507 your current project loaded immediately. 926 00:44:40,507 --> 00:44:44,690 So you just very quickly test back and forth whether your code is working 927 00:44:44,690 --> 00:44:47,810 or not, which I personally really enjoy. 928 00:44:47,810 --> 00:44:49,370 And I use that almost exclusively. 929 00:44:49,370 --> 00:44:53,827 And Unity has its own built-in IDE, more or less, with at least all 930 00:44:53,827 --> 00:44:55,910 of the visual aspects of things, although it still 931 00:44:55,910 --> 00:44:58,747 defers ultimately to a text editor for you to write your code. 932 00:44:58,747 --> 00:45:00,830 But you can set it up to use anything you want to, 933 00:45:00,830 --> 00:45:03,980 whether that's VS Code or Sublime Text or the like-- even Text Edit, 934 00:45:03,980 --> 00:45:06,010 if you are so inclined. 935 00:45:06,010 --> 00:45:09,865 SPEAKER: And prior to that, also from Peter, "Love 2D has been updated. 936 00:45:09,865 --> 00:45:11,990 The distro in the course, this is an older version. 937 00:45:11,990 --> 00:45:13,820 [INAUDIBLE] update with the course plan? 938 00:45:13,820 --> 00:45:15,070 COLTON OGDEN: That is correct. 939 00:45:15,070 --> 00:45:18,188 Yeah, the current distro that we are using is for 0.10.2, 940 00:45:18,188 --> 00:45:19,730 which is mentioned in the assignment. 941 00:45:19,730 --> 00:45:22,580 Although we will be making an update to the upcoming semester 942 00:45:22,580 --> 00:45:25,430 that makes it compatible with 11.3, which 943 00:45:25,430 --> 00:45:29,900 is just a series of essentially copy and paste across all of the source code. 944 00:45:29,900 --> 00:45:33,245 SPEAKER: And Ty asked, "Are you planning to teach programming in Minecraft?" 945 00:45:33,245 --> 00:45:34,870 COLTON OGDEN: Programming in Minecraft? 946 00:45:34,870 --> 00:45:36,827 You know, that would be fun. 947 00:45:36,827 --> 00:45:39,410 I am personally a fan of Minecraft and all of the crazy things 948 00:45:39,410 --> 00:45:41,150 you can do in Minecraft. 949 00:45:41,150 --> 00:45:43,380 You can use-- you can do it the crazy way, 950 00:45:43,380 --> 00:45:45,172 which is where you actually build computers 951 00:45:45,172 --> 00:45:48,790 using redstone or using electricity or electrically modeled blocks. 952 00:45:48,790 --> 00:45:50,990 And that will take you a tremendously long time. 953 00:45:50,990 --> 00:45:54,702 Or you can do it through something like ComputerCraft or CC-- 954 00:45:54,702 --> 00:45:56,510 I forget what it's named these days. 955 00:45:56,510 --> 00:45:59,450 But it's essentially-- it actually does run, if I remember correctly, 956 00:45:59,450 --> 00:46:02,213 a Lua interpreter in one of the blocks in Minecraft 957 00:46:02,213 --> 00:46:03,380 that is actually a computer. 958 00:46:03,380 --> 00:46:05,450 That lets you interact with things in the game. 959 00:46:05,450 --> 00:46:06,980 So it actually is an excellent way, I think, 960 00:46:06,980 --> 00:46:09,397 if you have the right environment and the right exercises, 961 00:46:09,397 --> 00:46:10,640 for a student to learn. 962 00:46:10,640 --> 00:46:12,460 Haven't thought about using it for CS50, but maybe it's 963 00:46:12,460 --> 00:46:13,520 something to think about. 964 00:46:13,520 --> 00:46:14,990 DAVID MALAN: And Joanna, in answer to your question 965 00:46:14,990 --> 00:46:17,220 about using Scratch for games, it's not something 966 00:46:17,220 --> 00:46:19,080 that we use in the games class. 967 00:46:19,080 --> 00:46:21,830 It's something that can certainly be used in the technology class, 968 00:46:21,830 --> 00:46:24,270 for instance, or CS50 itself. 969 00:46:24,270 --> 00:46:26,440 And then Angela, your question, "Is there 970 00:46:26,440 --> 00:46:29,498 a discussion about the violence and illustration of women in games?" 971 00:46:29,498 --> 00:46:31,790 Not something that's covered in this class, which takes 972 00:46:31,790 --> 00:46:33,350 a purely technical approach to it. 973 00:46:33,350 --> 00:46:35,058 But those would be the kinds of materials 974 00:46:35,058 --> 00:46:38,240 that we're working toward building out for more discussion-oriented classes, 975 00:46:38,240 --> 00:46:41,948 as teachers might use it in high schools or college classrooms. 976 00:46:41,948 --> 00:46:43,240 COLTON OGDEN: Yeah, good point. 977 00:46:43,240 --> 00:46:46,120 And yeah, the course does not have any of those topics. 978 00:46:46,120 --> 00:46:50,080 Also, I included all the games that are very family-friendly. 979 00:46:50,080 --> 00:46:53,610 DAVID MALAN: All right, Brian, should we turn the reins over to you? 980 00:46:53,610 --> 00:46:55,910 BRIAN YU: All right, thanks, Colton. 981 00:46:55,910 --> 00:47:00,000 So the final two classes that we'll be talking about-- 982 00:47:00,000 --> 00:47:02,990 one is about web programming, and one is about artificial intelligence. 983 00:47:02,990 --> 00:47:07,220 Both of these classes are designed to be taken after students 984 00:47:07,220 --> 00:47:10,340 already have the prior experience from CS50 itself. 985 00:47:10,340 --> 00:47:13,968 These classes build on top of CS50 and explore a little bit 986 00:47:13,968 --> 00:47:16,010 further what you can do with programming and what 987 00:47:16,010 --> 00:47:17,970 you can do with computer science. 988 00:47:17,970 --> 00:47:19,828 So just a whirlwind tour of these classes. 989 00:47:19,828 --> 00:47:21,620 First up-- and it looks like we'll probably 990 00:47:21,620 --> 00:47:24,530 go a couple minutes past 2 o'clock Eastern, if that's all right. 991 00:47:24,530 --> 00:47:27,800 But we'll try not to go too far over that time. 992 00:47:27,800 --> 00:47:30,020 But as for the web programming class, the topics 993 00:47:30,020 --> 00:47:35,150 that we cover, we start by introducing HTML and CSS in much the same way that 994 00:47:35,150 --> 00:47:37,970 CS50 itself does, but also introducing some 995 00:47:37,970 --> 00:47:42,410 of the more recent features of HTML with regards to video 996 00:47:42,410 --> 00:47:44,570 and with regards to handling large amounts of data, 997 00:47:44,570 --> 00:47:48,380 just to make the process of building websites a little bit easier. 998 00:47:48,380 --> 00:47:50,737 After that, we turn our attention to Git, 999 00:47:50,737 --> 00:47:53,570 which we've mentioned a couple of times now throughout the workshop. 1000 00:47:53,570 --> 00:47:56,930 Just a version control tool popular across all of programming, 1001 00:47:56,930 --> 00:48:00,170 but web programming especially, just for keeping track of changes 1002 00:48:00,170 --> 00:48:02,540 you might make to a web application over time-- 1003 00:48:02,540 --> 00:48:05,900 how to do that effectively and how to be able to manage different parts 1004 00:48:05,900 --> 00:48:08,600 of the program at the same time. 1005 00:48:08,600 --> 00:48:11,720 After that, we introduce students to Python in particular, 1006 00:48:11,720 --> 00:48:14,090 taking a look at the Python data structures 1007 00:48:14,090 --> 00:48:17,300 that you can use in order to represent information in programming, 1008 00:48:17,300 --> 00:48:20,780 taking a look at things like lists and dictionaries and sets 1009 00:48:20,780 --> 00:48:24,230 and how you can write functions to manipulate these data structures. 1010 00:48:24,230 --> 00:48:26,570 And then, in particular, in the next part of the class, 1011 00:48:26,570 --> 00:48:29,690 we introduce a programming framework called django. 1012 00:48:29,690 --> 00:48:32,750 So if you've taken CS50, you might be familiar with Flask, 1013 00:48:32,750 --> 00:48:34,100 which is a web framework. 1014 00:48:34,100 --> 00:48:37,070 Django is a very similar framework, but has-- 1015 00:48:37,070 --> 00:48:40,170 it's a little more full-fledged, has more features to it, 1016 00:48:40,170 --> 00:48:42,940 especially when it comes to building web applications 1017 00:48:42,940 --> 00:48:46,175 that deal with storing large amounts of data. 1018 00:48:46,175 --> 00:48:48,050 So when you're dealing with applications that 1019 00:48:48,050 --> 00:48:51,140 have lots of users that have accounts, where those accounts 1020 00:48:51,140 --> 00:48:53,810 are storing information, django makes it very easy 1021 00:48:53,810 --> 00:48:56,030 just to set up a web application so that you 1022 00:48:56,030 --> 00:48:58,730 can focus on the interesting parts of building the web 1023 00:48:58,730 --> 00:49:03,740 application without worrying too much about the underlying details 1024 00:49:03,740 --> 00:49:05,360 and implementations there. 1025 00:49:05,360 --> 00:49:09,320 No relation to the movie in the name of this framework. 1026 00:49:09,320 --> 00:49:11,810 After that, we take a look in particular at SQL 1027 00:49:11,810 --> 00:49:14,750 and how you can use SQL to be able to build a database that 1028 00:49:14,750 --> 00:49:16,525 works with your web application. 1029 00:49:16,525 --> 00:49:18,650 And here, we talk about the various different parts 1030 00:49:18,650 --> 00:49:22,430 that a web application might have-- the front end that the user sees, 1031 00:49:22,430 --> 00:49:26,240 some of the more controller code that operates how the web application really 1032 00:49:26,240 --> 00:49:30,110 works, and then a database that web application might be connected to. 1033 00:49:30,110 --> 00:49:32,240 And we explore some of the tools and ways 1034 00:49:32,240 --> 00:49:37,050 that you can have web applications that interact with those databases. 1035 00:49:37,050 --> 00:49:40,050 Following that, we introduce the second of the programming languages 1036 00:49:40,050 --> 00:49:41,383 that are covered in the course-- 1037 00:49:41,383 --> 00:49:42,060 JavaScript. 1038 00:49:42,060 --> 00:49:44,370 In particular, using JavaScript to build user 1039 00:49:44,370 --> 00:49:47,830 interfaces-- so using JavaScript on the client side. 1040 00:49:47,830 --> 00:49:50,650 In other words, running inside the user's browser, 1041 00:49:50,650 --> 00:49:53,070 whether that's Chrome or Safari or Firefox, 1042 00:49:53,070 --> 00:49:56,130 to be able to make web applications a little bit more interactive so that 1043 00:49:56,130 --> 00:49:58,320 things happen when a user clicks somewhere. 1044 00:49:58,320 --> 00:50:01,180 So that when a user gets a new message, for example, 1045 00:50:01,180 --> 00:50:04,640 they might see a notification window pop up, talking about some animations. 1046 00:50:04,640 --> 00:50:07,890 Things like infinite scroll-- if you're scrolling through Twitter or your news 1047 00:50:07,890 --> 00:50:11,670 feed, you'll often see new data appear as you continue to scroll. 1048 00:50:11,670 --> 00:50:13,980 We talk about some of those implementation details 1049 00:50:13,980 --> 00:50:16,720 and how some of the modern web works. 1050 00:50:16,720 --> 00:50:18,930 And then after that, we go into some best practices 1051 00:50:18,930 --> 00:50:23,460 for building web applications-- things like testing and CICD, 1052 00:50:23,460 --> 00:50:25,710 Continuous Integration and Continuous Delivery, 1053 00:50:25,710 --> 00:50:29,610 which are ways of allowing it such that when you're building your website 1054 00:50:29,610 --> 00:50:33,030 piece by piece, your web application doesn't need to just update 1055 00:50:33,030 --> 00:50:34,980 once a month or once a year. 1056 00:50:34,980 --> 00:50:38,280 But you can continually update your web application so that every time you 1057 00:50:38,280 --> 00:50:40,950 make small, little changes, your web application 1058 00:50:40,950 --> 00:50:43,648 can update for all of your users as well. 1059 00:50:43,648 --> 00:50:45,690 And then finally, we talk about what might happen 1060 00:50:45,690 --> 00:50:47,710 as your web application starts to grow. 1061 00:50:47,710 --> 00:50:50,580 Talking about issues of scalability and security, 1062 00:50:50,580 --> 00:50:54,060 thinking about when your web application gets too big for just one web 1063 00:50:54,060 --> 00:50:56,250 server to be able to handle all the users. 1064 00:50:56,250 --> 00:50:58,800 How might you scale that up to have multiple servers 1065 00:50:58,800 --> 00:51:00,420 and balance between those? 1066 00:51:00,420 --> 00:51:02,700 And what are the security implications of doing 1067 00:51:02,700 --> 00:51:06,660 that sort of thing and security ideas that you have to be mindful of? 1068 00:51:06,660 --> 00:51:08,525 This is a very project-driven class. 1069 00:51:08,525 --> 00:51:11,400 So throughout the class, there are various different web applications 1070 00:51:11,400 --> 00:51:12,990 that students create. 1071 00:51:12,990 --> 00:51:15,490 So they start by re-implementing something like Google-- 1072 00:51:15,490 --> 00:51:18,540 just a search engine where people can type in something 1073 00:51:18,540 --> 00:51:20,400 and see a whole bunch of search results. 1074 00:51:20,400 --> 00:51:22,770 And each of the course projects in this class 1075 00:51:22,770 --> 00:51:25,320 is modeled after a popular web application 1076 00:51:25,320 --> 00:51:27,970 that students might have seen or interacted with before 1077 00:51:27,970 --> 00:51:30,690 so that they get an opportunity to try and better understand 1078 00:51:30,690 --> 00:51:33,850 how the web applications they interact with really work. 1079 00:51:33,850 --> 00:51:36,330 So next up, they build a wiki, sort of like Wikipedia, 1080 00:51:36,330 --> 00:51:39,450 where users can edit new pages, create new pages, 1081 00:51:39,450 --> 00:51:43,920 and search for various different wiki pages that might be on the internet. 1082 00:51:43,920 --> 00:51:46,200 After that, they build an e-commerce website, 1083 00:51:46,200 --> 00:51:49,710 sort of like an Amazon or an eBay, where students 1084 00:51:49,710 --> 00:51:54,120 can build a website where users can log in, put up items for auction, 1085 00:51:54,120 --> 00:51:55,630 and bid on those listings. 1086 00:51:55,630 --> 00:51:58,950 And then the highest bidder wins at the end of the auction period. 1087 00:51:58,950 --> 00:52:01,710 Then they implement a variant of Gmail, where they effectively 1088 00:52:01,710 --> 00:52:05,820 build a mail client where you can have an inbox of all your email messages. 1089 00:52:05,820 --> 00:52:09,210 And then you can send emails and receive emails as well, 1090 00:52:09,210 --> 00:52:12,630 before finally building a social network, effectively like Twitter 1091 00:52:12,630 --> 00:52:15,870 or Facebook or something like that, where users can make posts 1092 00:52:15,870 --> 00:52:18,420 and comment on those posts and heart other posts, 1093 00:52:18,420 --> 00:52:21,900 for example, just to get a sense for the various different types of web 1094 00:52:21,900 --> 00:52:25,020 applications that are out there and the types of things 1095 00:52:25,020 --> 00:52:26,910 that you can do with those web applications. 1096 00:52:26,910 --> 00:52:28,740 And then at the end of the course, we have 1097 00:52:28,740 --> 00:52:31,680 students build a final project of their own choosing, where they just 1098 00:52:31,680 --> 00:52:34,407 pick some web application they would like to create. 1099 00:52:34,407 --> 00:52:36,240 And we give them the tools and the resources 1100 00:52:36,240 --> 00:52:40,320 to go and create that application, at a database to it, add a front end to it, 1101 00:52:40,320 --> 00:52:44,090 and try to make it a little bit more interactive. 1102 00:52:44,090 --> 00:52:48,800 So that, then, is a brief tour of the web application course. 1103 00:52:48,800 --> 00:52:52,070 The question is, how long is each of the courses? 1104 00:52:52,070 --> 00:52:54,800 Generally speaking, the courses are designed at Harvard to take 1105 00:52:54,800 --> 00:52:58,200 a semester-- so something like 12 weeks' worth of time. 1106 00:52:58,200 --> 00:53:01,130 But certainly, they can be adapted to work at other paces. 1107 00:53:01,130 --> 00:53:05,450 So often, even though CS50 and the web programming class and the AI class 1108 00:53:05,450 --> 00:53:07,820 are all designed to take a semester here at Harvard, 1109 00:53:07,820 --> 00:53:10,550 I know that oftentimes for CS50 in particular, 1110 00:53:10,550 --> 00:53:14,940 you might stretch that out to cover one year or even two years, potentially. 1111 00:53:14,940 --> 00:53:17,780 And so that can make things a little bit more manageable-- 1112 00:53:17,780 --> 00:53:20,810 the pacing is a little more easily. 1113 00:53:20,810 --> 00:53:22,820 Are tools like submit50 used in these courses? 1114 00:53:22,820 --> 00:53:25,280 Yes, you can use submit50 with these courses 1115 00:53:25,280 --> 00:53:29,090 as well for submitting work and collecting that work. 1116 00:53:29,090 --> 00:53:32,000 Where are the databases and the website hosted? 1117 00:53:32,000 --> 00:53:34,040 Ultimately, there are multiple possibilities, 1118 00:53:34,040 --> 00:53:36,320 though the popular one that we recommend is 1119 00:53:36,320 --> 00:53:39,050 a service called Heroku, which just happens to be 1120 00:53:39,050 --> 00:53:40,940 one of the easier services to set up. 1121 00:53:40,940 --> 00:53:44,570 You can set it up for free, just to take a web application and a database 1122 00:53:44,570 --> 00:53:45,868 and put that online. 1123 00:53:45,868 --> 00:53:48,410 But there are other options available, and we talk about some 1124 00:53:48,410 --> 00:53:52,190 of those in the web programming class, too. 1125 00:53:52,190 --> 00:53:56,452 We don't talk about Firebase, though we do talk about other libraries. 1126 00:53:56,452 --> 00:53:58,910 In particular, this version of the class talks a little bit 1127 00:53:58,910 --> 00:54:03,020 about React for front-end development and for designing interactive user 1128 00:54:03,020 --> 00:54:04,150 interfaces as well. 1129 00:54:04,150 --> 00:54:07,212 1130 00:54:07,212 --> 00:54:08,920 All right, and with the last few minutes, 1131 00:54:08,920 --> 00:54:12,750 I'll just go ahead and talk about CS50's Artificial Intelligence 1132 00:54:12,750 --> 00:54:18,042 with Python, CS50AI, another course that's designed to be taken after CS50. 1133 00:54:18,042 --> 00:54:20,250 And the important thing that I'd like to mention here 1134 00:54:20,250 --> 00:54:23,310 is that while most artificial intelligence courses, if you find them 1135 00:54:23,310 --> 00:54:26,850 online, require a fair amount of mathematical sophistication 1136 00:54:26,850 --> 00:54:29,430 and background-- require knowledge of calculus, 1137 00:54:29,430 --> 00:54:31,860 require knowledge of linear algebra, which is involved 1138 00:54:31,860 --> 00:54:33,960 in a lot of artificial intelligence. 1139 00:54:33,960 --> 00:54:36,150 We made the intentional decision in this class 1140 00:54:36,150 --> 00:54:40,170 to create an introductory artificial intelligence class that doesn't 1141 00:54:40,170 --> 00:54:41,850 require that mathematical background. 1142 00:54:41,850 --> 00:54:44,910 So there's no need to know calculus or linear algebra 1143 00:54:44,910 --> 00:54:47,160 to be able to go through the curriculum in this class. 1144 00:54:47,160 --> 00:54:50,070 The prerequisite really is prior experience programming 1145 00:54:50,070 --> 00:54:52,020 in Python, which is assumed for the class. 1146 00:54:52,020 --> 00:54:54,150 But we introduce the mathematical details. 1147 00:54:54,150 --> 00:54:55,590 There is some math we talk about. 1148 00:54:55,590 --> 00:54:57,720 We talk a little bit about formal logic. 1149 00:54:57,720 --> 00:55:00,420 We talk a little bit about probability and statistics. 1150 00:55:00,420 --> 00:55:02,550 But we introduce those ideas in the class, 1151 00:55:02,550 --> 00:55:07,350 and we don't assume any higher level math that other artificial intelligence 1152 00:55:07,350 --> 00:55:09,270 classes you might see do. 1153 00:55:09,270 --> 00:55:13,440 So the topics we talk about are, first, how to search for answers to problems. 1154 00:55:13,440 --> 00:55:14,590 How does AI do that? 1155 00:55:14,590 --> 00:55:17,140 How does it look for how to win in a game, 1156 00:55:17,140 --> 00:55:20,360 for example, considering all the possibilities in that game? 1157 00:55:20,360 --> 00:55:22,110 Then we turn our attention to the question 1158 00:55:22,110 --> 00:55:25,410 of how it is that artificial intelligence can represent knowledge. 1159 00:55:25,410 --> 00:55:27,540 How can AI store information? 1160 00:55:27,540 --> 00:55:30,330 And how can artificial intelligence use that information 1161 00:55:30,330 --> 00:55:32,020 to draw new conclusions? 1162 00:55:32,020 --> 00:55:34,740 So we talk about things that AI can be certain about. 1163 00:55:34,740 --> 00:55:37,660 But we also talk about things that AI can be uncertain about. 1164 00:55:37,660 --> 00:55:41,670 If artificial intelligence might know something with some probability, 1165 00:55:41,670 --> 00:55:44,940 but not be entirely sure, how does it deal with uncertain events 1166 00:55:44,940 --> 00:55:46,950 and trying to deal with that? 1167 00:55:46,950 --> 00:55:49,110 We then turn our attention to optimization. 1168 00:55:49,110 --> 00:55:51,850 So if there are many possible ways to solve a problem, 1169 00:55:51,850 --> 00:55:53,690 how can our AI find the best solution? 1170 00:55:53,690 --> 00:55:55,732 If there are many possible ways to-- 1171 00:55:55,732 --> 00:55:58,690 this is useful for things like if you're planning a city, for example-- 1172 00:55:58,690 --> 00:56:00,780 trying to plan where the hospitals should be. 1173 00:56:00,780 --> 00:56:03,620 How do you optimally place the hospitals, 1174 00:56:03,620 --> 00:56:05,940 so they're in a useful and practical location? 1175 00:56:05,940 --> 00:56:08,523 These are the sorts of problems that we try to take a look at. 1176 00:56:08,523 --> 00:56:10,232 And then in the latter half of the class, 1177 00:56:10,232 --> 00:56:12,040 we turn our attention to machine learning. 1178 00:56:12,040 --> 00:56:14,100 So we talk about machine learning, what it is. 1179 00:56:14,100 --> 00:56:16,142 What are the different types of machine learning, 1180 00:56:16,142 --> 00:56:19,360 the different types of problems you can solve using machine learning? 1181 00:56:19,360 --> 00:56:22,110 And in particular, talking about the sorts of tools that are often 1182 00:56:22,110 --> 00:56:24,960 used in machine learning, in particular focusing on things 1183 00:56:24,960 --> 00:56:27,690 like neural networks, a very popular model in machine 1184 00:56:27,690 --> 00:56:31,410 learning where you try and design an AI system that's modeled on the way 1185 00:56:31,410 --> 00:56:33,300 the human brain works, with these neurons 1186 00:56:33,300 --> 00:56:35,850 that are interconnected and connect to each other in order 1187 00:56:35,850 --> 00:56:37,980 to try to draw conclusions. 1188 00:56:37,980 --> 00:56:41,490 And then finally in the class, we turn our attention to natural language, 1189 00:56:41,490 --> 00:56:44,400 thinking about how do we get artificial intelligence 1190 00:56:44,400 --> 00:56:45,870 to speak the language of humans? 1191 00:56:45,870 --> 00:56:47,640 To be able to understand our language? 1192 00:56:47,640 --> 00:56:49,950 To be able to respond to our questions? 1193 00:56:49,950 --> 00:56:54,360 And how things like Siri and Alexa and other voice assistants on your phone 1194 00:56:54,360 --> 00:56:56,340 or on your computers might work. 1195 00:56:56,340 --> 00:56:59,040 In the process, we introduce students to a number of tools. 1196 00:56:59,040 --> 00:57:01,207 Of course, the Python programming language, which we 1197 00:57:01,207 --> 00:57:03,000 use for the entirety of the course. 1198 00:57:03,000 --> 00:57:05,550 But also, introduce them to some common Python 1199 00:57:05,550 --> 00:57:08,350 libraries that are used for things like machine learning, 1200 00:57:08,350 --> 00:57:12,120 such as scikit-learn, a popular Python library for machine learning, 1201 00:57:12,120 --> 00:57:15,650 as well as TensorFlow, a popular library for building neural networks. 1202 00:57:15,650 --> 00:57:17,400 And the advantage of this is that students 1203 00:57:17,400 --> 00:57:19,890 get an opportunity to build their own neural networks 1204 00:57:19,890 --> 00:57:23,300 without needing to implement all of the math behind the neural network. 1205 00:57:23,300 --> 00:57:25,050 That normally, to build a neural network, 1206 00:57:25,050 --> 00:57:28,880 there is a lot of linear algebra and optimization involved. 1207 00:57:28,880 --> 00:57:31,350 And here, students can really just focus on the problem 1208 00:57:31,350 --> 00:57:33,240 that they're trying to solve, without having 1209 00:57:33,240 --> 00:57:37,260 to get too deep into the mathematical details that are underlying it. 1210 00:57:37,260 --> 00:57:41,010 So just to give a taste for some of the projects that students complete, 1211 00:57:41,010 --> 00:57:42,810 they start by building a game engine. 1212 00:57:42,810 --> 00:57:45,450 We have them build a tic-tac-toe player so that they can 1213 00:57:45,450 --> 00:57:47,012 play against the tic-tac-toe player. 1214 00:57:47,012 --> 00:57:48,720 And ideally, they should be able to build 1215 00:57:48,720 --> 00:57:50,640 a tic-tac-toe program that never loses. 1216 00:57:50,640 --> 00:57:52,950 It should either win, or it should be a draw. 1217 00:57:52,950 --> 00:57:55,530 But the tic-tac-toe player should never lose. 1218 00:57:55,530 --> 00:57:58,200 We then introduce some logic-based thinking, 1219 00:57:58,200 --> 00:58:01,320 trying to build an AI that can play a game like Minesweeper 1220 00:58:01,320 --> 00:58:04,110 to try and logic their way through where the mines might be 1221 00:58:04,110 --> 00:58:07,560 and which cells might be safe, if you're familiar with that game. 1222 00:58:07,560 --> 00:58:10,410 Then we have the AI do some things that are more creative-- 1223 00:58:10,410 --> 00:58:14,010 have students build AIs that write a crossword puzzle, for example, 1224 00:58:14,010 --> 00:58:16,560 to be able to fill in words into the appropriate places 1225 00:58:16,560 --> 00:58:18,328 and to try to do so effectively. 1226 00:58:18,328 --> 00:58:20,370 And then when we turn things to machine learning, 1227 00:58:20,370 --> 00:58:22,020 things get even more interesting. 1228 00:58:22,020 --> 00:58:25,050 And we have students think about self-driving cars and the implications 1229 00:58:25,050 --> 00:58:26,700 of those and what might go wrong. 1230 00:58:26,700 --> 00:58:30,330 In particular, asking students to build just a small part of self-driving car 1231 00:58:30,330 --> 00:58:33,480 software-- building software that can look at a street sign 1232 00:58:33,480 --> 00:58:36,450 and identify what kind of sign it is based on the street sign. 1233 00:58:36,450 --> 00:58:39,990 So learning to look at an image and try and learn from that image 1234 00:58:39,990 --> 00:58:43,150 to figure out what that image might be. 1235 00:58:43,150 --> 00:58:45,870 So that was just a whirlwind tour of what's 1236 00:58:45,870 --> 00:58:48,472 covered in the artificial intelligence curriculum. 1237 00:58:48,472 --> 00:58:51,180 But in short, we use Python throughout the entirety of the course 1238 00:58:51,180 --> 00:58:54,230 to try and build these artificial intelligence systems. 1239 00:58:54,230 --> 00:58:55,980 With all of the projects, we give students 1240 00:58:55,980 --> 00:58:57,630 a fair amount of distribution code. 1241 00:58:57,630 --> 00:58:59,550 So they're not building the entirety of the project 1242 00:58:59,550 --> 00:59:01,258 from scratch, which might be quite a lot. 1243 00:59:01,258 --> 00:59:03,770 But usually, we give them the framework and the structure, 1244 00:59:03,770 --> 00:59:06,870 where students are then adding in the functionality and the capabilities 1245 00:59:06,870 --> 00:59:12,200 into the program to make the program a little bit more intelligent. 1246 00:59:12,200 --> 00:59:15,230 So I'll pause now, if there are any questions about the web programming 1247 00:59:15,230 --> 00:59:19,010 class, the artificial intelligence class, or really, any of the classes, 1248 00:59:19,010 --> 00:59:21,947 now, as we get ready to wrap up this session. 1249 00:59:21,947 --> 00:59:23,780 DAVID MALAN: Brian, Bret asks, "I understand 1250 00:59:23,780 --> 00:59:26,687 the AI program is intended to occur after CS50X, 1251 00:59:26,687 --> 00:59:29,270 but would it be possible for students to go through the topics 1252 00:59:29,270 --> 00:59:31,115 without that background?" 1253 00:59:31,115 --> 00:59:32,240 BRIAN YU: Potentially, yes. 1254 00:59:32,240 --> 00:59:34,760 So the projects all require Python and will 1255 00:59:34,760 --> 00:59:37,310 expect that students are writing programs in Python 1256 00:59:37,310 --> 00:59:40,160 but the lecture is material is all designed such 1257 00:59:40,160 --> 00:59:42,320 that you don't necessarily even need to know 1258 00:59:42,320 --> 00:59:44,450 how to program to be able to watch the lectures 1259 00:59:44,450 --> 00:59:47,425 and just get an understanding for how it is that this AI works. 1260 00:59:47,425 --> 00:59:49,550 So I could see multiple different approaches, here. 1261 00:59:49,550 --> 00:59:51,950 You could use the curriculum as just a way 1262 00:59:51,950 --> 00:59:54,720 of introducing the principles of artificial intelligence-- 1263 00:59:54,720 --> 00:59:58,478 what machine learning is, how some of these artificial intelligence 1264 00:59:58,478 --> 01:00:00,770 things that you encounter in the real world might work, 1265 01:00:00,770 --> 01:00:03,590 without having students actually get into implementing 1266 01:00:03,590 --> 01:00:04,720 the AI for themselves. 1267 01:00:04,720 --> 01:00:06,470 But for students who are a little bit more 1268 01:00:06,470 --> 01:00:09,050 advanced, who might have a bit more programming experience, 1269 01:00:09,050 --> 01:00:12,680 we do have these projects available just to allow students the opportunity 1270 01:00:12,680 --> 01:00:16,613 to create AI of their own, if they would like to. 1271 01:00:16,613 --> 01:00:17,780 DAVID MALAN: And Glen, ask-- 1272 01:00:17,780 --> 01:00:19,020 he has a similar question. 1273 01:00:19,020 --> 01:00:22,370 "Is it possible to run one of those classes-- 1274 01:00:22,370 --> 01:00:25,460 web AI, game dev-- as a quick intro, and then 1275 01:00:25,460 --> 01:00:29,330 maybe cover fewer projects to make up the difference?" 1276 01:00:29,330 --> 01:00:31,350 BRIAN YU: Yeah, absolutely for both-- 1277 01:00:31,350 --> 01:00:33,470 for, actually, all of the follow-on courses, 1278 01:00:33,470 --> 01:00:36,770 really, they're very much divided into different topics, such 1279 01:00:36,770 --> 01:00:39,770 that it is possible to pick and choose certain topics that you'd 1280 01:00:39,770 --> 01:00:43,098 like to talk about without using the entirety of the curriculum. 1281 01:00:43,098 --> 01:00:45,890 So certainly, all of the curriculum is available as OpenCourseWare. 1282 01:00:45,890 --> 01:00:48,170 But you can pick and choose what you like and adapt 1283 01:00:48,170 --> 01:00:51,650 the course in the curriculum for your own liking as well. 1284 01:00:51,650 --> 01:00:53,922 DAVID MALAN: And John asks, "Any words about CS50M?" 1285 01:00:53,922 --> 01:00:56,630 which is a mobile app development course that a colleague of ours 1286 01:00:56,630 --> 01:00:58,040 taught a couple of years back. 1287 01:00:58,040 --> 01:01:00,740 We're probably not planning to bring that back too soon. 1288 01:01:00,740 --> 01:01:02,780 That material, more so than any of the classes, 1289 01:01:02,780 --> 01:01:06,530 has drifted out of date the fastest by nature of the tech industry evolving 1290 01:01:06,530 --> 01:01:07,670 so quickly. 1291 01:01:07,670 --> 01:01:09,920 There's also more challenging issues of access 1292 01:01:09,920 --> 01:01:15,380 to hardware for that class for students, or requiring that certain software be 1293 01:01:15,380 --> 01:01:19,520 installed, which is not necessarily within the grasp of teachers 1294 01:01:19,520 --> 01:01:21,500 with system administrators and schools. 1295 01:01:21,500 --> 01:01:24,080 So it's probably not coming back too soon. 1296 01:01:24,080 --> 01:01:27,150 But we have not ruled it out entirely. 1297 01:01:27,150 --> 01:01:29,942 1298 01:01:29,942 --> 01:01:32,400 Gloria asks, "Are there any promotional materials that show 1299 01:01:32,400 --> 01:01:34,890 sequences and course descriptions?" 1300 01:01:34,890 --> 01:01:37,740 We do have introductory videos for each of the classes. 1301 01:01:37,740 --> 01:01:40,090 We will share those out via email, if we may. 1302 01:01:40,090 --> 01:01:42,090 They're also on all of the OpenCourseWare sites. 1303 01:01:42,090 --> 01:01:46,115 So I'll probably send over those URLs as well. 1304 01:01:46,115 --> 01:01:48,490 All right, well, I think we're indeed running a bit late. 1305 01:01:48,490 --> 01:01:49,370 My apologies. 1306 01:01:49,370 --> 01:01:52,820 But coming up next in just under an hour will be our final session 1307 01:01:52,820 --> 01:01:53,720 all together-- 1308 01:01:53,720 --> 01:01:57,860 Teachers Teaching CS50, with Margaret, with Jenny, 1309 01:01:57,860 --> 01:02:00,800 and Douglas, all teachers themselves, moderated by Jason. 1310 01:02:00,800 --> 01:02:05,540 And we'll use that time for Q&A as well for some final connections and closure. 1311 01:02:05,540 --> 01:02:08,312 And then we'll be sure to stay in touch in the days to come. 1312 01:02:08,312 --> 01:02:10,520 So why don't we go ahead and officially adjourn here? 1313 01:02:10,520 --> 01:02:11,750 Please feel free to stick around. 1314 01:02:11,750 --> 01:02:13,670 We'll turn on some music if you'd like to ask 1315 01:02:13,670 --> 01:02:15,240 us questions or chat with each other. 1316 01:02:15,240 --> 01:02:17,480 But we'll resume at 3:00 PM Eastern. 1317 01:02:17,480 --> 01:02:19,870 Thank you to Colton and Brian. 1318 01:02:19,870 --> 01:02:21,000