1 00:00:00,000 --> 00:00:00,860 2 00:00:00,860 --> 00:00:03,270 DAVID MALAN: All right, well, hello world. 3 00:00:03,270 --> 00:00:05,160 These are CS50's office hours. 4 00:00:05,160 --> 00:00:09,150 If this is your first time here, office hours are an opportunity on campus 5 00:00:09,150 --> 00:00:12,240 at Harvard for students to visit professors' offices 6 00:00:12,240 --> 00:00:15,540 and ask questions about courses they're taking, about computer science 7 00:00:15,540 --> 00:00:18,400 more generally, and life after taking a class. 8 00:00:18,400 --> 00:00:20,430 And so what Brian, and I, and CS50's team 9 00:00:20,430 --> 00:00:23,040 thought we would do today, as we've done in recent weeks, 10 00:00:23,040 --> 00:00:26,220 is offer students around the world online an opportunity 11 00:00:26,220 --> 00:00:30,090 to chat with each other, to ask questions of me and Brian online much 12 00:00:30,090 --> 00:00:33,540 like we could do if we were all here together at Harvard. 13 00:00:33,540 --> 00:00:37,320 Before we begin, just a few explanatory details-- 14 00:00:37,320 --> 00:00:40,800 to ask questions today, we're not going to use the chat window per se. 15 00:00:40,800 --> 00:00:43,530 But you're welcome to chat with classmates 16 00:00:43,530 --> 00:00:47,417 via the chat window and share links, as Brian and I will as well. 17 00:00:47,417 --> 00:00:49,500 And we're not going to use the raise hand feature. 18 00:00:49,500 --> 00:00:52,830 Instead, we're going to use a Google form to solicit any questions 19 00:00:52,830 --> 00:00:56,850 that people in the audience might have just so that CS50's team can help us 20 00:00:56,850 --> 00:00:59,440 go through the questions in real time. 21 00:00:59,440 --> 00:01:02,970 So if you would like to ask some question that's on your mind, 22 00:01:02,970 --> 00:01:07,000 go to this URL here that Brian has kindly put on the screen, 23 00:01:07,000 --> 00:01:11,100 which is cs50.ly/ask. 24 00:01:11,100 --> 00:01:14,250 And I'll go ahead and paste that into the chat window as well. 25 00:01:14,250 --> 00:01:20,250 That URL is cs50.ly/ask. 26 00:01:20,250 --> 00:01:23,520 And if you visit that URL, you'll see a Google form 27 00:01:23,520 --> 00:01:25,820 asking you to submit your question. 28 00:01:25,820 --> 00:01:27,570 And you'll see on that form too, if you do 29 00:01:27,570 --> 00:01:29,940 want to ask a question during office hours, 30 00:01:29,940 --> 00:01:33,000 please do have your video on so that we can actually see 31 00:01:33,000 --> 00:01:35,010 and eventually hear you. 32 00:01:35,010 --> 00:01:36,960 So a few other explanatory details-- 33 00:01:36,960 --> 00:01:38,990 by default, you'll see that everyone is muted. 34 00:01:38,990 --> 00:01:41,850 That's so that there's not a whole lot of background noise going on 35 00:01:41,850 --> 00:01:43,130 behind the scenes. 36 00:01:43,130 --> 00:01:46,770 Brian or I will unmute you when it's time to ask a question. 37 00:01:46,770 --> 00:01:49,320 In advance, please do forgive if we can't quite 38 00:01:49,320 --> 00:01:50,850 answer everyone's questions. 39 00:01:50,850 --> 00:01:53,730 There's always so many more people and so many more questions 40 00:01:53,730 --> 00:01:54,820 than we have time for. 41 00:01:54,820 --> 00:01:56,160 But we will do our best. 42 00:01:56,160 --> 00:01:59,680 And we will hold other ones of these online in the coming weeks. 43 00:01:59,680 --> 00:02:02,100 And we'll send you an email, if you registered today, 44 00:02:02,100 --> 00:02:05,190 to let you know when the next one will be. 45 00:02:05,190 --> 00:02:07,290 And one final request, just so we can get 46 00:02:07,290 --> 00:02:12,600 a sense of where everyone is from and so that you know where everyone is from-- 47 00:02:12,600 --> 00:02:16,200 along the bottom of your screen are a few buttons in Zoom. 48 00:02:16,200 --> 00:02:19,680 And most likely, one of those buttons is called participants. 49 00:02:19,680 --> 00:02:23,100 If you wouldn't mind clicking on the participants icon, 50 00:02:23,100 --> 00:02:27,370 you should see your name as well as the name of lots of classmates. 51 00:02:27,370 --> 00:02:30,180 And if you hover over your name, you should 52 00:02:30,180 --> 00:02:34,770 see a more button, some button that allows you to access a menu. 53 00:02:34,770 --> 00:02:36,930 And go ahead and choose rename. 54 00:02:36,930 --> 00:02:42,990 And change your name, if you wouldn't mind, to the your name, comma, 55 00:02:42,990 --> 00:02:44,700 and the country that you're from. 56 00:02:44,700 --> 00:02:47,850 So for instance, if you look at my name in the participants list, 57 00:02:47,850 --> 00:02:52,380 you should see, now, that it says David J. Malan, comma, USA. 58 00:02:52,380 --> 00:02:55,710 And if you're comfortable sharing what country you're currently in, do change 59 00:02:55,710 --> 00:03:00,000 your name in Zoom by going to participants, clicking the more menu, 60 00:03:00,000 --> 00:03:02,580 or whatever it's called in your language, and choose 61 00:03:02,580 --> 00:03:06,870 rename so that you can change your name to include the name of your country. 62 00:03:06,870 --> 00:03:10,085 Lastly, if you haven't clicked it already, there's a chat button. 63 00:03:10,085 --> 00:03:12,210 Click on the chat button at the bottom of the Zoom, 64 00:03:12,210 --> 00:03:16,210 and that'll be a way to chat, not with Brian and me directly, 65 00:03:16,210 --> 00:03:18,810 but with other classmates as well. 66 00:03:18,810 --> 00:03:22,980 Allow me to reintroduce CS50's own Brian Yu to say hello. 67 00:03:22,980 --> 00:03:25,912 And we'll have a special guest in just a moment too. 68 00:03:25,912 --> 00:03:26,870 BRIAN YU: Hi, everyone. 69 00:03:26,870 --> 00:03:29,383 It's Brian, also calling in from Cambridge. 70 00:03:29,383 --> 00:03:31,550 So good to see all of you today, and looking forward 71 00:03:31,550 --> 00:03:35,070 to getting another opportunity to talk with you all and answer some questions. 72 00:03:35,070 --> 00:03:38,360 I really enjoy getting to spend these office hours with all of you 73 00:03:38,360 --> 00:03:39,962 from all around the world. 74 00:03:39,962 --> 00:03:40,920 DAVID MALAN: Wonderful. 75 00:03:40,920 --> 00:03:45,720 Well, you may know this name from online, from CS50 IDE, 76 00:03:45,720 --> 00:03:47,640 from Reddit, from Facebook, and the like. 77 00:03:47,640 --> 00:03:49,800 And allow us to introduce our special guest 78 00:03:49,800 --> 00:03:52,830 for today, with whom we thought we'd chat for just a couple of minutes 79 00:03:52,830 --> 00:03:56,935 before we start answering questions, CS50's own Kareem Zidan. 80 00:03:56,935 --> 00:03:58,060 KAREEM ZIDAN: Hi, everyone. 81 00:03:58,060 --> 00:03:59,130 My name is Kareem. 82 00:03:59,130 --> 00:04:04,070 I'm a software engineer working with the CS50 team here. 83 00:04:04,070 --> 00:04:07,800 Like David mentioned, you may recognize me from Facebook, 84 00:04:07,800 --> 00:04:10,480 from other online communities. 85 00:04:10,480 --> 00:04:14,452 And I'm really looking forward to this office hours today. 86 00:04:14,452 --> 00:04:15,410 DAVID MALAN: Wonderful. 87 00:04:15,410 --> 00:04:17,360 Well, so glad you're with us here today, Kareem. 88 00:04:17,360 --> 00:04:19,235 We thought we'd ask you a couple of questions 89 00:04:19,235 --> 00:04:22,970 yourself before we start taking questions from the audience. 90 00:04:22,970 --> 00:04:26,300 You say you're in USA now according to your name in Zoom, 91 00:04:26,300 --> 00:04:28,070 but that's not where we met you. 92 00:04:28,070 --> 00:04:30,123 Would you mind sharing with folks how we met you 93 00:04:30,123 --> 00:04:32,040 and how you made your way to Harvard and CS50? 94 00:04:32,040 --> 00:04:33,580 Us 95 00:04:33,580 --> 00:04:37,690 KAREEM ZIDAN: Absolutely, so I took CS50x, the EdX version of the class, 96 00:04:37,690 --> 00:04:40,930 in 2014, I think. 97 00:04:40,930 --> 00:04:45,010 And then after that, I stayed active on the online communities 98 00:04:45,010 --> 00:04:49,840 for a while trying to answer people's questions, which was so much fun, 99 00:04:49,840 --> 00:04:52,840 but also was so much beneficial for me. 100 00:04:52,840 --> 00:04:57,212 Because I ended up learning a lot about topics 101 00:04:57,212 --> 00:04:59,170 that were not necessarily covered in the class, 102 00:04:59,170 --> 00:05:01,810 either because they were too advanced or because they were 103 00:05:01,810 --> 00:05:04,900 just a different subject altogether. 104 00:05:04,900 --> 00:05:07,750 Then I think you, David, reached out to me at some point 105 00:05:07,750 --> 00:05:13,480 to host some local office hours in Cairo, which we did a few times. 106 00:05:13,480 --> 00:05:15,160 We had quite a few students joining. 107 00:05:15,160 --> 00:05:17,300 That was so much fun. 108 00:05:17,300 --> 00:05:22,550 I was kind more interested in the software development side of things, 109 00:05:22,550 --> 00:05:27,250 so I started trying to contribute to some of our projects, some of the CS50 110 00:05:27,250 --> 00:05:30,040 projects back then. 111 00:05:30,040 --> 00:05:34,450 And then you guys were very welcoming to me, 112 00:05:34,450 --> 00:05:37,750 started maybe giving me more problems to tackle. 113 00:05:37,750 --> 00:05:42,060 And that was so much fun to go through. 114 00:05:42,060 --> 00:05:47,770 Eventually-- yeah, eventually, I got an offer, and I joined you in Cambridge. 115 00:05:47,770 --> 00:05:51,010 DAVID MALAN: And indeed, Kareem has taken over CS50's software development 116 00:05:51,010 --> 00:05:54,550 initiatives, especially CS50 IDE, the tool that many of you 117 00:05:54,550 --> 00:05:57,920 might be using right now to work on your problem sets and the like. 118 00:05:57,920 --> 00:06:01,180 So Kareem, is this to say that you studied computer science formally 119 00:06:01,180 --> 00:06:03,630 in high school or in university? 120 00:06:03,630 --> 00:06:04,630 KAREEM ZIDAN: Not quite. 121 00:06:04,630 --> 00:06:08,170 I've been into computers-- not necessarily computer science 122 00:06:08,170 --> 00:06:09,400 or programming-- 123 00:06:09,400 --> 00:06:10,520 for a very long time. 124 00:06:10,520 --> 00:06:15,580 I got my first computer when, I think, was 11 years old or something. 125 00:06:15,580 --> 00:06:20,570 And so I would always explore things, try 126 00:06:20,570 --> 00:06:24,530 to make a static website I think, at some point, using Microsoft FrontPage, 127 00:06:24,530 --> 00:06:26,680 if you ever used that before. 128 00:06:26,680 --> 00:06:29,900 DAVID MALAN: Wow, haven't heard of that in a long time. 129 00:06:29,900 --> 00:06:31,970 KAREEM ZIDAN: Yeah, I remember actually-- 130 00:06:31,970 --> 00:06:34,090 like I mentioned, like 11 years old. 131 00:06:34,090 --> 00:06:36,810 And I did not know how to save in FrontPage. 132 00:06:36,810 --> 00:06:38,770 And I kept my computer running all the time, 133 00:06:38,770 --> 00:06:41,380 because I was afraid I would lose my work. 134 00:06:41,380 --> 00:06:44,062 So that's something fun that I remember. 135 00:06:44,062 --> 00:06:47,020 DAVID MALAN: Well, and to this day, the IDE runs on your laptop, right? 136 00:06:47,020 --> 00:06:51,325 So long as your laptop's online, the IDE is online? 137 00:06:51,325 --> 00:06:52,450 KAREEM ZIDAN: Kind of, yes. 138 00:06:52,450 --> 00:06:55,910 139 00:06:55,910 --> 00:07:00,010 Yeah, so I then started learning a little bit 140 00:07:00,010 --> 00:07:04,405 about some graphic design tools like Adobe Photoshop, Illustrator, 141 00:07:04,405 --> 00:07:05,530 and Design, all that stuff. 142 00:07:05,530 --> 00:07:07,065 And I actually-- 143 00:07:07,065 --> 00:07:11,427 I wasn't professional, so to speak. 144 00:07:11,427 --> 00:07:13,010 I was just curious about these things. 145 00:07:13,010 --> 00:07:15,220 And I knew how to do a couple things. 146 00:07:15,220 --> 00:07:18,000 And I made a [AUDIO OUT] things that made sense to me. 147 00:07:18,000 --> 00:07:21,780 And I ended up getting a job in a company 148 00:07:21,780 --> 00:07:23,890 as a software designer for some time. 149 00:07:23,890 --> 00:07:26,400 But then I realized that's not really-- 150 00:07:26,400 --> 00:07:30,080 like, I can't go so much more forward with this. 151 00:07:30,080 --> 00:07:32,890 I'm actually more interested in other stuff. 152 00:07:32,890 --> 00:07:35,010 So I started exploring more. 153 00:07:35,010 --> 00:07:40,360 And that's when I found some programming classes, including CS50 on EdX. 154 00:07:40,360 --> 00:07:41,860 And then I started taking the class. 155 00:07:41,860 --> 00:07:44,485 And it literally changed my life. 156 00:07:44,485 --> 00:07:46,610 DAVID MALAN: Well, you've done an extraordinary job 157 00:07:46,610 --> 00:07:48,860 since joining CS50's team formally. 158 00:07:48,860 --> 00:07:51,680 And indeed, it really all started by Kareem 159 00:07:51,680 --> 00:07:55,380 popping up and answering questions in CS50's Facebook group years ago. 160 00:07:55,380 --> 00:07:57,560 So thank you, certainly, for everything you've done 161 00:07:57,560 --> 00:07:58,943 and continue to do for CS50. 162 00:07:58,943 --> 00:08:01,610 KAREEM ZIDAN: Absolutely, yeah, thank you so much for the chance 163 00:08:01,610 --> 00:08:04,382 and for the amazing communities that we have. 164 00:08:04,382 --> 00:08:06,090 DAVID MALAN: Indeed, so glad to have you. 165 00:08:06,090 --> 00:08:08,810 And so glad to have so many of you as well here today. 166 00:08:08,810 --> 00:08:12,470 And let's turn to Brian to queue things up. 167 00:08:12,470 --> 00:08:15,710 BRIAN YU: All right, let's first hear from Rachel Fang from the United 168 00:08:15,710 --> 00:08:16,210 States. 169 00:08:16,210 --> 00:08:19,768 170 00:08:19,768 --> 00:08:23,060 DAVID MALAN: We'll go ahead unmute you, Rachel, if you'd then like to say hello 171 00:08:23,060 --> 00:08:25,158 and where you're from before your question. 172 00:08:25,158 --> 00:08:25,700 AUDIENCE: Hi. 173 00:08:25,700 --> 00:08:27,050 Oh, hi, OK. 174 00:08:27,050 --> 00:08:31,070 So my name is Rachel Fang, and I live in the United States in Washington State. 175 00:08:31,070 --> 00:08:35,460 And so I'm taking the introduction to CS50 course, and I'm also done with it. 176 00:08:35,460 --> 00:08:38,850 And so in this course, we've been introduced to multiple languages. 177 00:08:38,850 --> 00:08:41,960 And so I was wondering, after I finished the course, how 178 00:08:41,960 --> 00:08:46,310 would I decide which language specifically to pursue in the future 179 00:08:46,310 --> 00:08:48,477 and what factors I should consider in that decision? 180 00:08:48,477 --> 00:08:50,060 DAVID MALAN: Oh, really good question. 181 00:08:50,060 --> 00:08:51,852 Brian, you've gone through this many times. 182 00:08:51,852 --> 00:08:53,625 Do you want to take this one first? 183 00:08:53,625 --> 00:08:54,500 BRIAN YU: Yeah, sure. 184 00:08:54,500 --> 00:08:56,630 So in short, you can do a lot of similar things 185 00:08:56,630 --> 00:08:58,570 with a lot of different programming languages. 186 00:08:58,570 --> 00:09:02,270 You probably saw that, in CS50, when we first introduce you to Python, 187 00:09:02,270 --> 00:09:05,360 one of the first things you do is reimplement some of the programs 188 00:09:05,360 --> 00:09:09,020 that you wrote in C just to demonstrate that though the syntax of the language 189 00:09:09,020 --> 00:09:12,290 is a little bit different, a lot of the ideas behind different programming 190 00:09:12,290 --> 00:09:14,150 languages are very similar. 191 00:09:14,150 --> 00:09:16,550 Ultimately, which language is most applicable 192 00:09:16,550 --> 00:09:20,420 or that you should presume probably depends in part on what kind of problem 193 00:09:20,420 --> 00:09:22,400 you're looking to solve or what kind of project 194 00:09:22,400 --> 00:09:23,870 you're interested in working on. 195 00:09:23,870 --> 00:09:28,920 If, for example, you're interested in working on creating a web application, 196 00:09:28,920 --> 00:09:32,600 for example, languages like Python and JavaScript are pretty popular nowadays 197 00:09:32,600 --> 00:09:35,930 for building web applications, whereas for things like building 198 00:09:35,930 --> 00:09:37,590 a mobile application, for example-- 199 00:09:37,590 --> 00:09:41,570 if you wanted to write an application for your phone or for a tablet-- 200 00:09:41,570 --> 00:09:43,745 then you might be looking at languages like Swift, 201 00:09:43,745 --> 00:09:46,760 a language developed by Apple specifically for iPhone 202 00:09:46,760 --> 00:09:52,670 and iPad, or also a language like Java, which is quite popular for developing 203 00:09:52,670 --> 00:09:54,150 Android applications as well. 204 00:09:54,150 --> 00:09:57,410 So depending on the type of project you'd be interested in, 205 00:09:57,410 --> 00:09:59,480 the language you might use might end up varying. 206 00:09:59,480 --> 00:10:02,112 But sometimes you'll have a choice among multiple. 207 00:10:02,112 --> 00:10:04,820 DAVID MALAN: Indeed, and after taking one or two classes formally 208 00:10:04,820 --> 00:10:08,090 in programming or computer science, I do think the best way to really learn 209 00:10:08,090 --> 00:10:10,340 something new is find some project that's 210 00:10:10,340 --> 00:10:14,002 of interest, and as Brian says, use the tools appropriate for that project. 211 00:10:14,002 --> 00:10:16,460 And odds are you'll learn even more that way than by taking 212 00:10:16,460 --> 00:10:18,782 a class on a particular language. 213 00:10:18,782 --> 00:10:20,990 All right, well, thank you, Rachel, for the question. 214 00:10:20,990 --> 00:10:23,240 Let's turn next to Christian from Mexico, 215 00:10:23,240 --> 00:10:25,490 if you'd like to say hello and your question. 216 00:10:25,490 --> 00:10:28,144 AUDIENCE: Hello, I'm Christian from Tequila, Mexico. 217 00:10:28,144 --> 00:10:35,110 And well, I actually went to one of your classes in person, to Cambridge. 218 00:10:35,110 --> 00:10:36,890 And it was great meeting you guys. 219 00:10:36,890 --> 00:10:38,450 And it was very inspiring. 220 00:10:38,450 --> 00:10:43,530 But since then, I haven't been able to really progress in the computer science 221 00:10:43,530 --> 00:10:44,030 learning. 222 00:10:44,030 --> 00:10:49,020 Because there's so many paths, like web development, machine learning, 223 00:10:49,020 --> 00:10:50,730 app development, software engineering. 224 00:10:50,730 --> 00:10:53,930 So there's a lot of paths to take. 225 00:10:53,930 --> 00:10:56,720 And so I think my question is, what advice would you 226 00:10:56,720 --> 00:10:59,690 give someone who not only doesn't know which path to take, 227 00:10:59,690 --> 00:11:04,940 but hasn't actually taken any steps towards any of those places? 228 00:11:04,940 --> 00:11:08,000 Because I don't really know which path to take. 229 00:11:08,000 --> 00:11:10,022 So yeah, I guess that's my question. 230 00:11:10,022 --> 00:11:11,480 DAVID MALAN: Yeah, it's a good one. 231 00:11:11,480 --> 00:11:13,370 And honestly, I feel that way quite a bit 232 00:11:13,370 --> 00:11:16,577 these days too, when I've got a list of things I want to do this long, 233 00:11:16,577 --> 00:11:18,410 and I just don't really know where to begin. 234 00:11:18,410 --> 00:11:21,000 Or a lot of them might require that I learn something new. 235 00:11:21,000 --> 00:11:23,040 And that feels like a very daunting task. 236 00:11:23,040 --> 00:11:26,930 I mean, much like we teach in CS50, I would take very incremental baby steps, 237 00:11:26,930 --> 00:11:27,530 so to speak. 238 00:11:27,530 --> 00:11:30,200 Like if CS50, for instance, is still of interest, 239 00:11:30,200 --> 00:11:33,200 and maybe you only did Scratch early on, I mean literally, 240 00:11:33,200 --> 00:11:35,480 there's a pathway from pset 0 to pset 1. 241 00:11:35,480 --> 00:11:39,230 And I would sit down and teach yourself, or learn a little bit more about, 242 00:11:39,230 --> 00:11:40,940 C by way of that problem set. 243 00:11:40,940 --> 00:11:43,190 Or if you hit a wall, maybe move on to the next one, 244 00:11:43,190 --> 00:11:44,530 and then come back to something. 245 00:11:44,530 --> 00:11:48,440 But I wouldn't look at things in terms of the whole pathway at first. 246 00:11:48,440 --> 00:11:50,277 I would consider individual steps. 247 00:11:50,277 --> 00:11:53,360 Because I think once you've taken enough steps, for instance, this problem 248 00:11:53,360 --> 00:11:56,810 set or this one, or this programming challenge or this other one, 249 00:11:56,810 --> 00:11:59,120 I think you'll get a sense of what you actually like. 250 00:11:59,120 --> 00:12:01,040 And then you'll perhaps start picking things 251 00:12:01,040 --> 00:12:04,730 based on what you want to do as opposed to what you think you should next 252 00:12:04,730 --> 00:12:07,280 do as a path, if that helps. 253 00:12:07,280 --> 00:12:12,840 How far along did you get, Christian, with CS50 the first time around? 254 00:12:12,840 --> 00:12:15,790 AUDIENCE: I went until, I think lecture 3 255 00:12:15,790 --> 00:12:21,300 and then went to a Udemy course, web development course. 256 00:12:21,300 --> 00:12:23,440 And then that's what I'm taking at the moment, yes. 257 00:12:23,440 --> 00:12:25,190 DAVID MALAN: Yeah, I mean, maybe if you're 258 00:12:25,190 --> 00:12:29,520 feeling a little less comfortable, I would try to go in and fill those gaps. 259 00:12:29,520 --> 00:12:31,860 There's a reason that we had weeks 4, and 5, 260 00:12:31,860 --> 00:12:33,840 and 6 before we got to web programming. 261 00:12:33,840 --> 00:12:35,760 And I think it'll empower you all the more. 262 00:12:35,760 --> 00:12:38,760 Or if for some reason, week 3 just wasn't working for you, 263 00:12:38,760 --> 00:12:41,850 there's certainly other resources and other courses out there. 264 00:12:41,850 --> 00:12:44,190 Consider maybe trying those next and coming back 265 00:12:44,190 --> 00:12:45,850 if that feels like a good fit too. 266 00:12:45,850 --> 00:12:47,630 AUDIENCE: Thank you so much. 267 00:12:47,630 --> 00:12:49,797 DAVID MALAN: Sure, well, thank you for the question. 268 00:12:49,797 --> 00:12:52,680 Can we go next to Waseem Ahmed, if you'd like to say hello, 269 00:12:52,680 --> 00:12:55,807 and where you're from, and your question? 270 00:12:55,807 --> 00:12:57,140 AUDIENCE: Hi, my name is Waseem. 271 00:12:57,140 --> 00:12:59,590 [? I'm ?] from India. 272 00:12:59,590 --> 00:13:04,800 And my question is, when you start coding, 273 00:13:04,800 --> 00:13:08,840 maybe try to solve the whole problem in one time or something. 274 00:13:08,840 --> 00:13:10,160 And that burns you out. 275 00:13:10,160 --> 00:13:13,320 You can't-- you're not efficient when you're trying to solve everything 276 00:13:13,320 --> 00:13:14,520 together. 277 00:13:14,520 --> 00:13:17,265 What would you do when you want to be efficient 278 00:13:17,265 --> 00:13:19,140 and you want to keep your learning speed high 279 00:13:19,140 --> 00:13:23,090 when you're learning something new? 280 00:13:23,090 --> 00:13:24,308 That's my question. 281 00:13:24,308 --> 00:13:25,600 DAVID MALAN: That's a good one. 282 00:13:25,600 --> 00:13:27,625 Brian, do you want to take that one? 283 00:13:27,625 --> 00:13:28,500 BRIAN YU: Yeah, sure. 284 00:13:28,500 --> 00:13:30,930 So in general, when you're learning something new, 285 00:13:30,930 --> 00:13:33,510 definitely, my experience with learning computer science 286 00:13:33,510 --> 00:13:37,590 was that it was helpful for me to force myself, like, if I'm 287 00:13:37,590 --> 00:13:42,360 sitting and watching a two-hour lecture video to allow myself to pause 288 00:13:42,360 --> 00:13:46,500 the video and make sure that I can check myself for understanding to make sure 289 00:13:46,500 --> 00:13:48,960 that I've understood the material so far. 290 00:13:48,960 --> 00:13:53,150 I distinctly remember, in an algorithms class that I took in college, 291 00:13:53,150 --> 00:13:54,930 the professor spent about an hour talking 292 00:13:54,930 --> 00:13:56,617 through the entirety of the algorithm. 293 00:13:56,617 --> 00:13:58,950 But I was confused in, like, the first 10 minutes of it, 294 00:13:58,950 --> 00:14:00,092 with a particular step. 295 00:14:00,092 --> 00:14:01,550 And I didn't quite understand that. 296 00:14:01,550 --> 00:14:04,660 And as a result, I didn't really understand any of the rest of it. 297 00:14:04,660 --> 00:14:07,388 So taking the opportunity to pause to make sure 298 00:14:07,388 --> 00:14:09,930 that I've understood what's happened so far before moving on, 299 00:14:09,930 --> 00:14:11,285 I think is quite helpful. 300 00:14:11,285 --> 00:14:14,310 And especially with programming and learning programming, 301 00:14:14,310 --> 00:14:18,420 I think one of the best things to do is to try putting the ideas into practice. 302 00:14:18,420 --> 00:14:23,550 Rather than just watch the entirety of a video online, for example, 303 00:14:23,550 --> 00:14:25,620 and assume that you know that material, it's 304 00:14:25,620 --> 00:14:27,780 a very different thing actually writing the code 305 00:14:27,780 --> 00:14:31,350 to be able to implement an algorithm or to try to solve a problem 306 00:14:31,350 --> 00:14:33,880 rather than just to watch someone else do that. 307 00:14:33,880 --> 00:14:38,490 So I think that having an opportunity to try to put what you know to the test 308 00:14:38,490 --> 00:14:41,640 by actually writing some code, by actually putting things into practice 309 00:14:41,640 --> 00:14:45,120 can be quite helpful to making sure that you're able to learn efficiently 310 00:14:45,120 --> 00:14:45,892 and effectively. 311 00:14:45,892 --> 00:14:48,600 DAVID MALAN: Yeah, and similar in spirit to Christian's question, 312 00:14:48,600 --> 00:14:52,110 I can't emphasize enough the value of breaking big problems down 313 00:14:52,110 --> 00:14:53,158 into smaller ones. 314 00:14:53,158 --> 00:14:55,950 One of the biggest, most common mistakes we see students at Harvard 315 00:14:55,950 --> 00:14:58,530 make when they're at office hours, for instance, 316 00:14:58,530 --> 00:15:01,500 or in class working on some problem set is they've written, 317 00:15:01,500 --> 00:15:06,807 like, this much code all at once, none of which works, none of which compiles. 318 00:15:06,807 --> 00:15:07,890 And it's just a nightmare. 319 00:15:07,890 --> 00:15:11,190 It's an overwhelming nightmare for them, for the teaching fellows, or for me, 320 00:15:11,190 --> 00:15:13,920 or Brian trying to help them find a problem when 321 00:15:13,920 --> 00:15:17,070 they written in this much code, none of which even compiles yet. 322 00:15:17,070 --> 00:15:19,590 So to this day, anytime I'm writing a program that I 323 00:15:19,590 --> 00:15:21,510 know is going to end up being pretty big, 324 00:15:21,510 --> 00:15:23,880 I still only write a few lines at a time. 325 00:15:23,880 --> 00:15:26,130 And then I try compiling or running it. 326 00:15:26,130 --> 00:15:29,250 And then I break down the list of features that I need 327 00:15:29,250 --> 00:15:31,740 to implement into, literally, a list-- 328 00:15:31,740 --> 00:15:35,250 1, 2, 3, 4-- and then bite them off one at a time. 329 00:15:35,250 --> 00:15:39,420 And I never, to this day, try implementing an entire program 330 00:15:39,420 --> 00:15:40,940 or an entire website at once. 331 00:15:40,940 --> 00:15:42,690 So if you're feeling overwhelmed, odds are 332 00:15:42,690 --> 00:15:45,150 it's because you're trying to do too much at once. 333 00:15:45,150 --> 00:15:48,540 And just start to figure out for yourself, even with a piece of paper, 334 00:15:48,540 --> 00:15:53,828 pencil, what steps you should take to start making incremental progress. 335 00:15:53,828 --> 00:15:55,620 Well, thank you, Haseem, for your question. 336 00:15:55,620 --> 00:16:00,040 Can we go next to Tom from Argentina? 337 00:16:00,040 --> 00:16:01,780 AUDIENCE: Hey, how are you? 338 00:16:01,780 --> 00:16:03,280 DAVID MALAN: Good, nice to meet you. 339 00:16:03,280 --> 00:16:05,830 Would you like to ask your question of the group? 340 00:16:05,830 --> 00:16:08,230 AUDIENCE: Yeah, so I'm from Argentina, Buenos Aires. 341 00:16:08,230 --> 00:16:11,080 And I study architecture. 342 00:16:11,080 --> 00:16:14,830 It doesn't have a lot to do with computer science. 343 00:16:14,830 --> 00:16:19,720 But I wanted to know if you know something or someone who mixes computer 344 00:16:19,720 --> 00:16:23,240 science and architecture together. 345 00:16:23,240 --> 00:16:27,370 And what things can they create? 346 00:16:27,370 --> 00:16:31,360 So that's the relation between architecture and computer science, 347 00:16:31,360 --> 00:16:32,360 because it's my goal. 348 00:16:32,360 --> 00:16:33,790 I want to mix both. 349 00:16:33,790 --> 00:16:34,840 DAVID MALAN: Sure. 350 00:16:34,840 --> 00:16:37,910 Yeah, I can say, in CS50, in Cambridge here, 351 00:16:37,910 --> 00:16:41,440 we very often have students from Harvard's Graduate School of Design, 352 00:16:41,440 --> 00:16:44,500 which is essentially Harvard's graduate school in architecture. 353 00:16:44,500 --> 00:16:48,040 And every semester, we probably have 10 or more students 354 00:16:48,040 --> 00:16:50,980 from that school who are themselves graduate students. 355 00:16:50,980 --> 00:16:53,380 They're not trying to become computer scientists per se, 356 00:16:53,380 --> 00:16:57,040 but they've realized there is, indeed, this intersection between architecture, 357 00:16:57,040 --> 00:16:59,620 or design more generally, and computer science. 358 00:16:59,620 --> 00:17:02,020 So very often, the motivation for those students 359 00:17:02,020 --> 00:17:04,390 is to learn a little bit of programming. 360 00:17:04,390 --> 00:17:07,210 In our case, we teach them a bit of C, a bit of Python. 361 00:17:07,210 --> 00:17:10,460 But in general, they exit a class like CS50 362 00:17:10,460 --> 00:17:13,839 knowing how to program in general, no matter the language. 363 00:17:13,839 --> 00:17:16,720 And I wish I could recall the software programs that some 364 00:17:16,720 --> 00:17:18,310 of our design students have mentioned. 365 00:17:18,310 --> 00:17:22,150 It might be AutoCAD, if you're familiar, or a few other pieces 366 00:17:22,150 --> 00:17:23,770 of architectural software. 367 00:17:23,770 --> 00:17:27,369 Besides having menus and buttons that you can click and drag on, 368 00:17:27,369 --> 00:17:31,750 a lot of those tools allow you to write code in one language or another 369 00:17:31,750 --> 00:17:34,390 so that you can refine things, so that you can automatically 370 00:17:34,390 --> 00:17:36,460 generate parts of the diagrams. 371 00:17:36,460 --> 00:17:40,330 And so just knowing how to program seems to be very appealing to architecture 372 00:17:40,330 --> 00:17:42,970 students so that they can do more on their own 373 00:17:42,970 --> 00:17:45,850 without having to rely only on buttons and menus 374 00:17:45,850 --> 00:17:50,220 that commercial software provides them with. 375 00:17:50,220 --> 00:17:52,470 All right, well, thank you for that question too, Tom. 376 00:17:52,470 --> 00:17:55,680 Can we go next to Zachary from the US, if you'd 377 00:17:55,680 --> 00:17:59,830 like to say what state you're from perhaps and your question? 378 00:17:59,830 --> 00:18:01,990 AUDIENCE: Hi, yeah, so I'm from New York. 379 00:18:01,990 --> 00:18:04,708 I'm a mechanical engineer. 380 00:18:04,708 --> 00:18:06,750 So I did a lot of computer science in high school 381 00:18:06,750 --> 00:18:10,708 and just the relevant programming in college, but not 382 00:18:10,708 --> 00:18:12,000 too deep into computer science. 383 00:18:12,000 --> 00:18:16,602 And so it's been a very nice refresher to take CS50 and build-- and get back 384 00:18:16,602 --> 00:18:18,310 into that skill set, but also develop it. 385 00:18:18,310 --> 00:18:21,540 And so my question is, once I complete CS50, 386 00:18:21,540 --> 00:18:26,970 what would you recommend as either a next level course or more materials 387 00:18:26,970 --> 00:18:30,165 to, I guess, grow further, do more advanced stuff? 388 00:18:30,165 --> 00:18:32,790 DAVID MALAN: Yeah, let us ask you one follow-up question first. 389 00:18:32,790 --> 00:18:36,330 Of the several weeks of CS50, has certain types of material 390 00:18:36,330 --> 00:18:37,830 appealed to you most, would you say? 391 00:18:37,830 --> 00:18:42,510 392 00:18:42,510 --> 00:18:46,020 AUDIENCE: You know, I think I'm probably in week 4 or 5 at this point. 393 00:18:46,020 --> 00:18:48,940 I haven't gotten to where you can do more [INAUDIBLE] application. 394 00:18:48,940 --> 00:18:53,230 But the idea of getting to a point where I can apply it seems attractive to me, 395 00:18:53,230 --> 00:18:54,940 but I haven't gotten there yet. 396 00:18:54,940 --> 00:18:58,180 DAVID MALAN: OK, well Brian, you've very consciously taught 397 00:18:58,180 --> 00:19:00,220 a couple of follow-on classes to CS50. 398 00:19:00,220 --> 00:19:03,185 So why those topics, should someone consider? 399 00:19:03,185 --> 00:19:04,060 BRIAN YU: Yeah, sure. 400 00:19:04,060 --> 00:19:06,550 So the two follow-on to CS50 that I teach, 401 00:19:06,550 --> 00:19:10,048 which are accessible on our page, website on EdX, 402 00:19:10,048 --> 00:19:13,090 which are just pasted into the chat if you'd like to take a look at that, 403 00:19:13,090 --> 00:19:16,180 are I teach one class on web programming and another class 404 00:19:16,180 --> 00:19:18,520 on artificial intelligence, both of which 405 00:19:18,520 --> 00:19:22,570 I think are natural follow-ups to CS50 that are quite applicable in terms 406 00:19:22,570 --> 00:19:26,290 of the types of problems that you can solve with that baseline of knowledge-- 407 00:19:26,290 --> 00:19:29,260 so web programming in particular, because so many applications 408 00:19:29,260 --> 00:19:30,400 now are running on the web. 409 00:19:30,400 --> 00:19:34,300 Because the web is used on computers, and mobile devices, and other devices 410 00:19:34,300 --> 00:19:35,050 too. 411 00:19:35,050 --> 00:19:38,320 It's quite practical to be able to design a web application 412 00:19:38,320 --> 00:19:42,520 that people all across the internet can use and get some value out of. 413 00:19:42,520 --> 00:19:45,880 And then with artificial intelligence, this has perhaps more recently 414 00:19:45,880 --> 00:19:48,700 been a very fast-growing area in computer science 415 00:19:48,700 --> 00:19:52,870 where, increasingly, problems that we thought were difficult for computers 416 00:19:52,870 --> 00:19:55,360 to solve, we are actually able to solve now 417 00:19:55,360 --> 00:20:00,610 by use of some algorithmic techniques, and some artificial intelligence, 418 00:20:00,610 --> 00:20:02,260 and machine learning strategies. 419 00:20:02,260 --> 00:20:05,500 And so one of the things that the artificial intelligence class tries 420 00:20:05,500 --> 00:20:08,170 to focus on is producing those algorithms 421 00:20:08,170 --> 00:20:10,390 and introducing those ideas to enable you 422 00:20:10,390 --> 00:20:14,380 to be able to build artificially intelligent systems of your very own. 423 00:20:14,380 --> 00:20:16,630 So I think web programming and artificial intelligence 424 00:20:16,630 --> 00:20:21,940 are both very natural directions that you can continue to explore after CS50. 425 00:20:21,940 --> 00:20:24,680 But what you should find is that after finishing the class, 426 00:20:24,680 --> 00:20:27,010 you'll have the background in programming, 427 00:20:27,010 --> 00:20:31,110 the background in some basic web, or mobile, or game development such 428 00:20:31,110 --> 00:20:33,610 that you'll then be able to build some projects of your own. 429 00:20:33,610 --> 00:20:37,270 And I think one of the best things to do next after completing the class is just 430 00:20:37,270 --> 00:20:43,270 to think of projects that interest you and to try to pursue those as well. 431 00:20:43,270 --> 00:20:45,270 DAVID MALAN: Well, thank you to Zachary as well. 432 00:20:45,270 --> 00:20:48,240 Can we go next to Ramon Rodriguez, if you'd like to say hello, 433 00:20:48,240 --> 00:20:50,827 where you're from, and your question? 434 00:20:50,827 --> 00:20:51,910 AUDIENCE: Can you hear me? 435 00:20:51,910 --> 00:20:53,003 DAVID MALAN: Yes, we can. 436 00:20:53,003 --> 00:20:53,910 AUDIENCE: OK. 437 00:20:53,910 --> 00:20:54,810 I'm from Brazil. 438 00:20:54,810 --> 00:21:00,360 And I'm going to read the question from the forum, because it's quite long. 439 00:21:00,360 --> 00:21:05,930 So for the last two years, CS50 has gone through some important changes. 440 00:21:05,930 --> 00:21:10,620 It has transitioned from using PHP as-- 441 00:21:10,620 --> 00:21:17,760 it has conditions from using PHP to using Python as the back end language. 442 00:21:17,760 --> 00:21:20,710 Some videos from the shorts don't feature anymore 443 00:21:20,710 --> 00:21:23,910 in the list of recommended videos to watch. 444 00:21:23,910 --> 00:21:29,190 The web-development-focused content has been moved from the regular course 445 00:21:29,190 --> 00:21:36,030 syllabus to being an individual track determined with games, Android, and iOS 446 00:21:36,030 --> 00:21:37,140 tracks. 447 00:21:37,140 --> 00:21:41,220 And new courses like web development with Python and JavaScript 448 00:21:41,220 --> 00:21:44,150 have been created and released for free on EdX. 449 00:21:44,150 --> 00:21:47,800 So many changes have happened in the last few years. 450 00:21:47,800 --> 00:21:52,505 So my question is, what other changes and new stuff 451 00:21:52,505 --> 00:21:56,820 do you visualize happening in the next five or 10 years? 452 00:21:56,820 --> 00:22:03,608 And what kind of path do you see CS50 taking in the near future? 453 00:22:03,608 --> 00:22:05,400 DAVID MALAN: That's a really good question. 454 00:22:05,400 --> 00:22:08,460 And frankly, I would love to know the answer to your question. 455 00:22:08,460 --> 00:22:10,470 But a couple of thoughts do come to mind. 456 00:22:10,470 --> 00:22:13,710 I do think you've highlighted a number of the evolutionary changes 457 00:22:13,710 --> 00:22:17,280 that we've made over the past few years, from languages 458 00:22:17,280 --> 00:22:19,470 to structures of the class. 459 00:22:19,470 --> 00:22:21,660 For context, any of the changes we've made year 460 00:22:21,660 --> 00:22:25,350 after year are usually in response to changing trends, 461 00:22:25,350 --> 00:22:28,590 either in industry, or in education, or just 462 00:22:28,590 --> 00:22:32,730 because it's becoming easier to introduce students 463 00:22:32,730 --> 00:22:36,690 to more powerful techniques thanks to new and popular languages, 464 00:22:36,690 --> 00:22:38,590 and frameworks, and the like. 465 00:22:38,590 --> 00:22:44,010 So for instance, the PHP to Python change was a very conscious decision. 466 00:22:44,010 --> 00:22:46,320 We thought about it probably for two or three years. 467 00:22:46,320 --> 00:22:50,640 And at some point, we felt there was an inflection point where Python was just 468 00:22:50,640 --> 00:22:52,170 becoming so popular-- 469 00:22:52,170 --> 00:22:54,840 and it was useful not only for web programming, 470 00:22:54,840 --> 00:22:58,320 but for command line programs, but for data science applications 471 00:22:58,320 --> 00:22:59,070 and the like-- 472 00:22:59,070 --> 00:23:01,170 that it was just a very well-rounded language 473 00:23:01,170 --> 00:23:05,520 and therefore might serve students better during, and also after, CS50. 474 00:23:05,520 --> 00:23:08,340 And so finally, that tipped us over the edge. 475 00:23:08,340 --> 00:23:11,040 I think, moving forward in the future, honestly, 476 00:23:11,040 --> 00:23:14,590 if we knew what we might do differently in five or 10 years, 477 00:23:14,590 --> 00:23:17,790 we would probably just do it right now if we could. 478 00:23:17,790 --> 00:23:23,940 But I do hope that we will be able to do all the more real-world examples, 479 00:23:23,940 --> 00:23:26,400 real-world integrations with students that use, 480 00:23:26,400 --> 00:23:30,030 for instance, web-based APIs, third-party data 481 00:23:30,030 --> 00:23:31,500 services, and the like. 482 00:23:31,500 --> 00:23:35,430 Because one of the constraints right now, not so much on campus 483 00:23:35,430 --> 00:23:37,590 where you have the luxury of very good internet, 484 00:23:37,590 --> 00:23:40,950 and everyone has access to a computer-- but globally, not everyone 485 00:23:40,950 --> 00:23:45,790 has great internet access or very fast or very inexpensive internet, 486 00:23:45,790 --> 00:23:48,100 let alone an actual computer. 487 00:23:48,100 --> 00:23:52,140 And so I think once we are five or 10 more years down the road, 488 00:23:52,140 --> 00:23:54,660 and bandwidth is better, and people have better, more 489 00:23:54,660 --> 00:23:57,690 powerful phones, and laptops, and desktops, 490 00:23:57,690 --> 00:24:00,630 I think we'll be able to do more with those resources. 491 00:24:00,630 --> 00:24:05,760 And students will be able to learn and also produce even more amazing projects 492 00:24:05,760 --> 00:24:08,880 by building on the libraries and the frameworks that 493 00:24:08,880 --> 00:24:10,350 are then very much in vogue. 494 00:24:10,350 --> 00:24:13,710 So if I had to guess, I think there'll be more integration 495 00:24:13,710 --> 00:24:15,600 with internet connectivity if possible. 496 00:24:15,600 --> 00:24:19,340 Because right now, we tend to avoid dependencies on the internet. 497 00:24:19,340 --> 00:24:22,380 And the only counterexample to this really, 498 00:24:22,380 --> 00:24:25,530 annually, is CS50 finance, where we actually pull real-time stock 499 00:24:25,530 --> 00:24:27,570 data from a third-party site. 500 00:24:27,570 --> 00:24:30,850 That's an example of a project that works great for a lot of students, 501 00:24:30,850 --> 00:24:33,828 but not for all students if you need that constant connectivity. 502 00:24:33,828 --> 00:24:36,120 And so in fact, one of the projects Kareem and the team 503 00:24:36,120 --> 00:24:40,620 have also been working on are tools like an offline CS50 IDE 504 00:24:40,620 --> 00:24:43,830 so that if you don't have great internet access, or if you're in a plane, 505 00:24:43,830 --> 00:24:47,910 or on a train, you can still learn and still create. 506 00:24:47,910 --> 00:24:53,040 So we're hoping those things are easier too in the years to come. 507 00:24:53,040 --> 00:24:55,750 Oops, sorry, still muted. 508 00:24:55,750 --> 00:24:57,652 AUDIENCE: Can I ask a follow-up question? 509 00:24:57,652 --> 00:24:59,110 DAVID MALAN: Sure, maybe a little-- 510 00:24:59,110 --> 00:25:00,430 a briefer one if you would. 511 00:25:00,430 --> 00:25:01,330 AUDIENCE: Yeah, sure. 512 00:25:01,330 --> 00:25:04,810 So I have first watched-- 513 00:25:04,810 --> 00:25:13,090 I have first watched CS50 lecture from the 2015 version. 514 00:25:13,090 --> 00:25:16,030 And not much has changed. 515 00:25:16,030 --> 00:25:21,400 Only the web development content has moved to an isolated track. 516 00:25:21,400 --> 00:25:26,710 My question is, do you see the core content changing in the next few years? 517 00:25:26,710 --> 00:25:34,210 Or do you plan to keep it the same with the Scratch, the C language, pointers, 518 00:25:34,210 --> 00:25:35,125 data structures? 519 00:25:35,125 --> 00:25:36,250 DAVID MALAN: Good question. 520 00:25:36,250 --> 00:25:38,360 I think the short answer is don't know yet. 521 00:25:38,360 --> 00:25:41,950 I do think there is this common backbone that CS50 has had for not even 522 00:25:41,950 --> 00:25:45,500 the past five years, but the past 10, even 20 years. 523 00:25:45,500 --> 00:25:49,360 In fact, even when I took the course, I learned many of the same ideas. 524 00:25:49,360 --> 00:25:51,320 And that was some 20 years ago. 525 00:25:51,320 --> 00:25:54,340 But what's changing, I think, is how we can present the material, 526 00:25:54,340 --> 00:26:00,560 the examples we can use, the libraries and demonstrations that we can do. 527 00:26:00,560 --> 00:26:02,620 But I think, as an introductory course, there 528 00:26:02,620 --> 00:26:06,820 will long be a common backbone even as some of the implementation details 529 00:26:06,820 --> 00:26:07,510 do change. 530 00:26:07,510 --> 00:26:11,720 But ask again in five years, and I we can answer that better. 531 00:26:11,720 --> 00:26:13,750 Thank you for that question, Ramon. 532 00:26:13,750 --> 00:26:17,590 Can we go next to Francis Tang, please, if you'd like to say where you're from 533 00:26:17,590 --> 00:26:19,057 and your question? 534 00:26:19,057 --> 00:26:20,140 AUDIENCE: Hello, everyone. 535 00:26:20,140 --> 00:26:22,390 I'm from Brisbane in Australia. 536 00:26:22,390 --> 00:26:25,000 I think par of my question has already been answered by Brian. 537 00:26:25,000 --> 00:26:30,010 But basically, what I wanted to find out was what's a pathway offered by the uni 538 00:26:30,010 --> 00:26:31,570 beyond this CS50 course? 539 00:26:31,570 --> 00:26:37,100 And can this be done online or through distance learning? 540 00:26:37,100 --> 00:26:41,390 And where would that lead us in the future? 541 00:26:41,390 --> 00:26:43,390 DAVID MALAN: Sure, Brian, do you want to pick up 542 00:26:43,390 --> 00:26:46,115 from where you left off on that? 543 00:26:46,115 --> 00:26:46,990 BRIAN YU: Yeah, sure. 544 00:26:46,990 --> 00:26:50,740 So if you're asking about courses that Harvard University specifically 545 00:26:50,740 --> 00:26:55,840 offers that students take after CS50, there are quite a number of them. 546 00:26:55,840 --> 00:26:58,240 Unfortunately, not all of them are available online, 547 00:26:58,240 --> 00:27:01,260 though there are many other universities that also offer courses 548 00:27:01,260 --> 00:27:04,900 through EdX or through Coursera that are follow-up classes that you 549 00:27:04,900 --> 00:27:08,830 can take after having some fundamental programming experience. 550 00:27:08,830 --> 00:27:11,170 So one that David and I like to recommend is-- 551 00:27:11,170 --> 00:27:14,680 Princeton University, for example, offers an algorithms class 552 00:27:14,680 --> 00:27:16,900 that they teach, also available on Coursera. 553 00:27:16,900 --> 00:27:18,790 So I've pasted the link for that there. 554 00:27:18,790 --> 00:27:22,510 I think algorithms is a logical place to go next after CS50 555 00:27:22,510 --> 00:27:26,020 potentially such that after you've had some exposure to data structures 556 00:27:26,020 --> 00:27:28,310 and algorithms, that class in particular goes 557 00:27:28,310 --> 00:27:31,510 into more depth into the design of algorithms and thinking 558 00:27:31,510 --> 00:27:34,750 about how you can make them efficient, not only in terms of how long 559 00:27:34,750 --> 00:27:37,420 they take to run, but also how much memory they require 560 00:27:37,420 --> 00:27:39,380 to be able to run those algorithms. 561 00:27:39,380 --> 00:27:41,892 So that's definitely an area, potentially, of interest. 562 00:27:41,892 --> 00:27:44,350 But aside from that, I think the courses that are available 563 00:27:44,350 --> 00:27:46,170 will depend upon what interests you. 564 00:27:46,170 --> 00:27:48,460 So if you're interested in more of the hardware 565 00:27:48,460 --> 00:27:52,010 and the circuitry of computers, there are courses available on that. 566 00:27:52,010 --> 00:27:54,280 MIT, for example, has a three-part course 567 00:27:54,280 --> 00:27:57,170 on EdX about computer architecture. 568 00:27:57,170 --> 00:27:59,960 And so I've pasted the first link to that in the chart 569 00:27:59,960 --> 00:28:02,530 if that's something that you'd be interested in as well. 570 00:28:02,530 --> 00:28:06,460 And then I mentioned before that I teach a class on artificial intelligence. 571 00:28:06,460 --> 00:28:09,280 And certainly, if that's an area you'd like to pursue, 572 00:28:09,280 --> 00:28:11,793 we teach a class on that as a follow-on to CS50. 573 00:28:11,793 --> 00:28:13,960 And their are other courses available there as well. 574 00:28:13,960 --> 00:28:16,270 So I know that Stanford has quite a well-known class 575 00:28:16,270 --> 00:28:18,415 on Coursera about machine learning. 576 00:28:18,415 --> 00:28:20,480 And so that might be one worth exploring as well. 577 00:28:20,480 --> 00:28:23,188 But even beyond the couple that I've pasted links to in the chat, 578 00:28:23,188 --> 00:28:25,510 there are many other courses available online. 579 00:28:25,510 --> 00:28:28,760 If you just do a little bit of searching as to topics that might interest you, 580 00:28:28,760 --> 00:28:31,508 I'm sure you'll be able to find options. 581 00:28:31,508 --> 00:28:33,550 DAVID MALAN: Thank you for the question, Francis. 582 00:28:33,550 --> 00:28:37,520 Can we go next to Aaron Chan, if you'd like to say hello, where you're from, 583 00:28:37,520 --> 00:28:38,270 and your question? 584 00:28:38,270 --> 00:28:39,228 AUDIENCE: Hi, everyone. 585 00:28:39,228 --> 00:28:40,240 Can you hear me? 586 00:28:40,240 --> 00:28:41,170 DAVID MALAN: Yes. 587 00:28:41,170 --> 00:28:44,990 AUDIENCE: Awesome, yeah, so I'm from Vancouver and working in Hong Kong 588 00:28:44,990 --> 00:28:46,030 currently. 589 00:28:46,030 --> 00:28:51,670 So I've taken this course for just about two to three weeks, halfway 590 00:28:51,670 --> 00:28:53,170 through the introductory. 591 00:28:53,170 --> 00:28:58,180 And I've taken around halfway through the web development with Brian. 592 00:28:58,180 --> 00:29:00,800 And I'm just blown away by the material, first of all. 593 00:29:00,800 --> 00:29:03,800 So it's-- thank you for that. 594 00:29:03,800 --> 00:29:05,682 So I think my question has to do with-- 595 00:29:05,682 --> 00:29:08,140 I've been looking at online courses for the last few years. 596 00:29:08,140 --> 00:29:11,890 And it's-- I always hear people say, like, 597 00:29:11,890 --> 00:29:16,840 it's all up to your own determination and discipline to learn online. 598 00:29:16,840 --> 00:29:19,690 But I always thought it's like kind of half true, half false. 599 00:29:19,690 --> 00:29:24,130 Because the material is always questionable. 600 00:29:24,130 --> 00:29:28,690 So obviously, with your course, I think you've proven some of that to be false. 601 00:29:28,690 --> 00:29:31,790 Because it is up to yourself to learn. 602 00:29:31,790 --> 00:29:34,750 But I just want to hear, from your opinion, 603 00:29:34,750 --> 00:29:36,490 what is still the next stepping stone? 604 00:29:36,490 --> 00:29:40,060 Or what's the main difference between, even for this course, 605 00:29:40,060 --> 00:29:44,315 learning online versus someone sitting in the classroom at Harvard? 606 00:29:44,315 --> 00:29:46,190 What is the main difference, in your opinion? 607 00:29:46,190 --> 00:29:47,292 And what's the next step? 608 00:29:47,292 --> 00:29:49,250 DAVID MALAN: Yeah, it's a really good question. 609 00:29:49,250 --> 00:29:50,333 We think about that a lot. 610 00:29:50,333 --> 00:29:53,738 Because besides the freely OpenCourseWare version 611 00:29:53,738 --> 00:29:56,530 of the class that many of you might have engaged with, we of course 612 00:29:56,530 --> 00:30:00,220 offer the same class here in Cambridge on campus for some 800 613 00:30:00,220 --> 00:30:04,580 undergraduate students each fall. 614 00:30:04,580 --> 00:30:08,200 I think the biggest difference with the on-campus class versus the online, 615 00:30:08,200 --> 00:30:09,700 honestly, is the support structure. 616 00:30:09,700 --> 00:30:12,617 Those students who are officially registered in the class on a smaller 617 00:30:12,617 --> 00:30:16,690 scale are able to benefit from a lot more human interactions, from what we 618 00:30:16,690 --> 00:30:19,810 call teaching fellows, or TFs, as well as our course assistants, 619 00:30:19,810 --> 00:30:24,100 or CAs, most of whom themselves are former students of CS50 who've 620 00:30:24,100 --> 00:30:27,990 taken the class, done well, and are now teaching the class to their peers. 621 00:30:27,990 --> 00:30:29,740 And that, I think, makes a big difference. 622 00:30:29,740 --> 00:30:31,660 Because you have this community of students 623 00:30:31,660 --> 00:30:34,000 who, one, have gone through it before, and therefore 624 00:30:34,000 --> 00:30:37,250 have empathy as well as understand the material. 625 00:30:37,250 --> 00:30:40,660 But two, you have people to whom you can turn in person 626 00:30:40,660 --> 00:30:42,400 when you're struggling with some problem. 627 00:30:42,400 --> 00:30:45,040 Now you can approximate that same support structure online, 628 00:30:45,040 --> 00:30:48,040 and we do through Harvard's Extension School, or continuing education 629 00:30:48,040 --> 00:30:48,850 program. 630 00:30:48,850 --> 00:30:52,540 For some 13 years, we've had students taking the course online as well. 631 00:30:52,540 --> 00:30:55,960 And we use Zoom and other technologies to hold office hours, 632 00:30:55,960 --> 00:31:00,330 and hold sections, and other such teaching resources. 633 00:31:00,330 --> 00:31:02,920 But I think it's never quite the same, right? 634 00:31:02,920 --> 00:31:06,890 Even we are all-- all 500 of us are currently on Zoom. 635 00:31:06,890 --> 00:31:08,690 And it's pretty good. 636 00:31:08,690 --> 00:31:10,790 It's certainly better than nothing, we would hope. 637 00:31:10,790 --> 00:31:14,088 But it's not quite the same as all sitting around in a large room, 638 00:31:14,088 --> 00:31:15,880 and being able to look at each other, being 639 00:31:15,880 --> 00:31:18,910 able to really see each other's facial expressions without video 640 00:31:18,910 --> 00:31:20,470 cutting in and out. 641 00:31:20,470 --> 00:31:23,920 So I think there's an intimacy to taking any class in person 642 00:31:23,920 --> 00:31:26,620 or on campus that also helps keep people focused. 643 00:31:26,620 --> 00:31:29,530 So for instance, for many years, we worked closely 644 00:31:29,530 --> 00:31:32,020 with a good friend of ours named Sadie Coltham, who 645 00:31:32,020 --> 00:31:36,910 was a faculty member at Miami Dade College in Florida in the US. 646 00:31:36,910 --> 00:31:40,540 And he had a number of students taking CS50 essentially 647 00:31:40,540 --> 00:31:44,170 online by way of the videos, and online problem sets, and the like. 648 00:31:44,170 --> 00:31:47,740 But even though his students could just be watching the lecture videos 649 00:31:47,740 --> 00:31:52,810 online every week, he instead invited them to come to campus at Miami Dade. 650 00:31:52,810 --> 00:31:57,190 He reserved a classroom and literally would hit play on the lecture videos 651 00:31:57,190 --> 00:31:59,980 that I had given some weeks prior in Harvard. 652 00:31:59,980 --> 00:32:03,460 And it was an opportunity, one, for people to just interact, two, 653 00:32:03,460 --> 00:32:06,160 for people to ask questions of each other, three, 654 00:32:06,160 --> 00:32:10,030 to have some support structure so that you have a day, and a time, 655 00:32:10,030 --> 00:32:11,860 and a place to do something. 656 00:32:11,860 --> 00:32:13,750 Because as many of you probably know, it's 657 00:32:13,750 --> 00:32:17,320 very easy to start procrastinating, or fall behind, 658 00:32:17,320 --> 00:32:21,340 or you sort of disengage unless you're really on top of your work. 659 00:32:21,340 --> 00:32:25,210 So I think with on campus learning, you have all the more of a support 660 00:32:25,210 --> 00:32:28,600 structure and a pressure, a good social pressure, 661 00:32:28,600 --> 00:32:30,510 to keep up, perhaps, with classmates. 662 00:32:30,510 --> 00:32:32,260 And so that's why we've spent so much time 663 00:32:32,260 --> 00:32:36,550 trying to help stand up communities, whether it's in the US or abroad, 664 00:32:36,550 --> 00:32:40,180 of just small groups of students, whether officially organized 665 00:32:40,180 --> 00:32:43,090 or unofficially, just so that people have communities 666 00:32:43,090 --> 00:32:44,410 of people to help them along. 667 00:32:44,410 --> 00:32:47,050 So I think online education is good. 668 00:32:47,050 --> 00:32:50,680 And it's absolutely better than having no access at all. 669 00:32:50,680 --> 00:32:53,710 And to Ramon's question earlier, I think when internet access 670 00:32:53,710 --> 00:32:57,580 gets better, and better, and better, will the online experience get even 671 00:32:57,580 --> 00:32:59,293 more powerful than it currently is. 672 00:32:59,293 --> 00:33:01,210 But there's always something a little missing, 673 00:33:01,210 --> 00:33:03,070 something that makes people want to convene. 674 00:33:03,070 --> 00:33:07,180 So the more you can do that, for instance, in your own communities, 675 00:33:07,180 --> 00:33:12,490 in Vancouver, or back home, I think the more successful students can be. 676 00:33:12,490 --> 00:33:13,450 Thank you for that one. 677 00:33:13,450 --> 00:33:15,520 Hope that wasn't too long of an answer. 678 00:33:15,520 --> 00:33:18,320 But we think about that one a lot. 679 00:33:18,320 --> 00:33:22,000 All right, can we go next to Efiani from Nigeria? 680 00:33:22,000 --> 00:33:24,340 Sorry if I'm mispronouncing. 681 00:33:24,340 --> 00:33:28,865 AUDIENCE: Yeah, yeah, good evening. 682 00:33:28,865 --> 00:33:31,090 Can you hear me, everybody? 683 00:33:31,090 --> 00:33:33,300 DAVID MALAN: Nice to meet you. 684 00:33:33,300 --> 00:33:36,010 AUDIENCE: Yes, thank you, [INAUDIBLE]. 685 00:33:36,010 --> 00:33:38,800 My name is Efiani, from Nigeria. 686 00:33:38,800 --> 00:33:39,430 Hello? 687 00:33:39,430 --> 00:33:42,280 DAVID MALAN: Yes, we can hear you. 688 00:33:42,280 --> 00:33:44,304 AUDIENCE: [INAUDIBLE]. 689 00:33:44,304 --> 00:33:50,250 And I want to know how [INAUDIBLE] comfortable coming in 690 00:33:50,250 --> 00:33:52,390 through mechanical engineering. 691 00:33:52,390 --> 00:33:53,720 DAVID MALAN: OK. 692 00:33:53,720 --> 00:33:55,540 AUDIENCE: It's something I think about. 693 00:33:55,540 --> 00:33:57,730 And I usually find-- 694 00:33:57,730 --> 00:34:03,990 I don't find enough [INAUDIBLE] help to-- 695 00:34:03,990 --> 00:34:08,230 that help to bring this together. 696 00:34:08,230 --> 00:34:13,495 For example-- I'm sorry if the question is too long. 697 00:34:13,495 --> 00:34:14,620 DAVID MALAN: No, that's OK. 698 00:34:14,620 --> 00:34:15,912 It's a little hard to hear you. 699 00:34:15,912 --> 00:34:19,111 It sounds like there are small children nearby. 700 00:34:19,111 --> 00:34:20,442 AUDIENCE: I'm sorry. 701 00:34:20,442 --> 00:34:21,400 DAVID MALAN: That's OK. 702 00:34:21,400 --> 00:34:28,110 AUDIENCE: OK, so basically, I am interested in data science, yes? 703 00:34:28,110 --> 00:34:31,690 And I want to see how I can integrate data 704 00:34:31,690 --> 00:34:34,300 science into mechanical engineering. 705 00:34:34,300 --> 00:34:36,020 Because I believe-- 706 00:34:36,020 --> 00:34:43,540 I think quite analytical than practical. 707 00:34:43,540 --> 00:34:47,530 So that is my question, basically. 708 00:34:47,530 --> 00:34:50,020 DAVID MALAN: Let me lean on Brian a little bit. 709 00:34:50,020 --> 00:34:52,800 I have very little experience with mechanical engineering. 710 00:34:52,800 --> 00:34:56,492 But I think Brian might have some more strengths on the data side. 711 00:34:56,492 --> 00:34:58,700 BRIAN YU: Yeah, I also don't have a lot of experience 712 00:34:58,700 --> 00:35:02,340 in mechanical engineering myself, although I do know that, 713 00:35:02,340 --> 00:35:06,050 as I think David mentioned a little while earlier today, Computer Aided 714 00:35:06,050 --> 00:35:10,460 Design, or CAD, is a quite popular and growing field where we're 715 00:35:10,460 --> 00:35:14,540 using computational tools and technologies to be 716 00:35:14,540 --> 00:35:18,660 able to facilitate the process of the designing of the mechanical systems. 717 00:35:18,660 --> 00:35:21,550 And so that's definitely one place in which these fields interact. 718 00:35:21,550 --> 00:35:25,370 And more generally, computer science is a incredibly powerful tool 719 00:35:25,370 --> 00:35:27,980 now for doing modeling and simulation-- so 720 00:35:27,980 --> 00:35:30,830 being able to try to simulate an environment 721 00:35:30,830 --> 00:35:33,380 and see what happens in a test situation. 722 00:35:33,380 --> 00:35:37,113 And with computers becoming increasingly faster and more powerful, 723 00:35:37,113 --> 00:35:39,530 you're able to create better and better simulations, which 724 00:35:39,530 --> 00:35:42,800 can be quite helpful if you're going about designing a mechanical system 725 00:35:42,800 --> 00:35:45,480 or trying to solve other types of problems. 726 00:35:45,480 --> 00:35:49,040 So that's definitely one area where I see those fields intersecting. 727 00:35:49,040 --> 00:35:52,300 The other one that's quite of interest to me is the field of robotics. 728 00:35:52,300 --> 00:35:57,170 And especially as you start to see more autonomous robots, 729 00:35:57,170 --> 00:35:59,300 as you think about things like-- self-driving cars 730 00:35:59,300 --> 00:36:03,410 are a big focus of research of a lot of technology companies nowadays. 731 00:36:03,410 --> 00:36:07,370 This is yet another area where you need not only very good design 732 00:36:07,370 --> 00:36:10,580 from the mechanical and physical side, but also some thought 733 00:36:10,580 --> 00:36:12,830 into integrating that with the software side of things 734 00:36:12,830 --> 00:36:15,617 and writing the code in order to make these systems work. 735 00:36:15,617 --> 00:36:17,450 And so I think there, there's a lot of value 736 00:36:17,450 --> 00:36:21,380 in having someone that does span across multiple disciplines, 737 00:36:21,380 --> 00:36:25,220 being able to connect computer science to mechanical engineering or something 738 00:36:25,220 --> 00:36:26,300 else more generally. 739 00:36:26,300 --> 00:36:29,330 And that's something that we try to do in CS50 740 00:36:29,330 --> 00:36:31,970 is try to connect computer science to other fields 741 00:36:31,970 --> 00:36:35,840 to demonstrate how the same simple set of tools and primitives 742 00:36:35,840 --> 00:36:38,690 that you learn in computer science have a lot of applicability 743 00:36:38,690 --> 00:36:42,550 towards solving other problems in other domains and other disciplines 744 00:36:42,550 --> 00:36:45,050 regardless of what it is that you might be trying to achieve 745 00:36:45,050 --> 00:36:46,747 or trying to solve. 746 00:36:46,747 --> 00:36:48,580 DAVID MALAN: Both are very promising fields. 747 00:36:48,580 --> 00:36:50,620 So the intersection would be even more powerful. 748 00:36:50,620 --> 00:36:52,900 So thank you for the question. 749 00:36:52,900 --> 00:36:57,370 Can we go next to Steph, if you'd like to say hello, and where you're from, 750 00:36:57,370 --> 00:36:59,090 and your question? 751 00:36:59,090 --> 00:37:02,950 AUDIENCE: Hi, I'm from Canada, but I'm living in the UK. 752 00:37:02,950 --> 00:37:09,100 So I just started looking into front end development a couple of weeks ago. 753 00:37:09,100 --> 00:37:12,140 And I just kind of dove right in, and did a bunch of HTML and CSS, 754 00:37:12,140 --> 00:37:14,740 and built a little web page, and thought that was enough, 755 00:37:14,740 --> 00:37:16,810 and then just started learning JavaScript. 756 00:37:16,810 --> 00:37:20,590 But I'm kind of trying to rewind, and just focus in, 757 00:37:20,590 --> 00:37:23,600 and master one thing before I move on. 758 00:37:23,600 --> 00:37:27,070 So I was wondering if you had any suggestions of what sorts of projects 759 00:37:27,070 --> 00:37:30,910 are a good idea to make just using HTML and CSS, 760 00:37:30,910 --> 00:37:36,940 just to focus in and master that before moving on to JavaScript? 761 00:37:36,940 --> 00:37:41,470 DAVID MALAN: Sure, more personally, I can say that a good exercise for me 762 00:37:41,470 --> 00:37:44,350 two weeks ago was to redo my own personal home 763 00:37:44,350 --> 00:37:46,303 page on Harvard's website. 764 00:37:46,303 --> 00:37:48,970 It was noted to me by one of our teaching fellows that, I think, 765 00:37:48,970 --> 00:37:51,090 I hadn't touched it in, like, 10 years. 766 00:37:51,090 --> 00:37:52,180 It looked very dated. 767 00:37:52,180 --> 00:37:53,410 It did not work on mobile. 768 00:37:53,410 --> 00:37:55,510 There was no mobile when I made it. 769 00:37:55,510 --> 00:37:58,450 And so it was a really fun opportunity to start from scratch, 770 00:37:58,450 --> 00:38:01,270 and try to recreate the layout that I wanted, 771 00:38:01,270 --> 00:38:05,140 and have the aesthetic that I wanted, and learn 772 00:38:05,140 --> 00:38:06,790 a bit more HTML along the way. 773 00:38:06,790 --> 00:38:10,000 Because a lot of that has changed even from when I first made the site. 774 00:38:10,000 --> 00:38:14,140 And then I also made heavy use of Bootstrap, the free CSS 775 00:38:14,140 --> 00:38:17,170 and JavaScript library that we introduce in CS50, which was useful. 776 00:38:17,170 --> 00:38:19,750 And there's a lot of tinkering there and a lot of frustration 777 00:38:19,750 --> 00:38:21,520 trying to get things to work. 778 00:38:21,520 --> 00:38:24,790 If it's not too tacky, I'll paste the URL of my home page 779 00:38:24,790 --> 00:38:27,510 into the chat window if you'd like to see what I came up with. 780 00:38:27,510 --> 00:38:28,927 And it's still a work in progress. 781 00:38:28,927 --> 00:38:31,880 I have, now, a list of to-dos that I want to keep adding to it. 782 00:38:31,880 --> 00:38:34,930 But I think just finding some project that's of personal interest 783 00:38:34,930 --> 00:38:38,710 is the best way to get your hands dirty and learn all the more. 784 00:38:38,710 --> 00:38:42,400 Because what you'll find, when you have a very specific personal goal in mind, 785 00:38:42,400 --> 00:38:44,920 you want to do something and achieve something specific. 786 00:38:44,920 --> 00:38:49,270 And darn it, if you can't figure it out, how to do it in HTML or CSS-- 787 00:38:49,270 --> 00:38:50,740 so there'll be a lot of googling. 788 00:38:50,740 --> 00:38:52,180 There'll be some Stack Overflow. 789 00:38:52,180 --> 00:38:55,330 And that's the best way, I think, to get more comfortable. 790 00:38:55,330 --> 00:38:59,920 Now more academically, in the follow-on class, Web50, to CS50, Brian, I think, 791 00:38:59,920 --> 00:39:02,710 does an amazing job at connecting the creation of a home page 792 00:39:02,710 --> 00:39:03,940 to the real world. 793 00:39:03,940 --> 00:39:09,480 If, Brian, you want to speak to how you might deploy a personal home page? 794 00:39:09,480 --> 00:39:12,040 BRIAN YU: Yeah, so there are a couple strategies 795 00:39:12,040 --> 00:39:14,680 you can use if you want to take the HTML and CSS you've 796 00:39:14,680 --> 00:39:18,760 written for a personal home page and make it available on the internet. 797 00:39:18,760 --> 00:39:21,490 One of the easiest ways to do so is using 798 00:39:21,490 --> 00:39:25,840 a service called GitHub pages built into GitHub, which CS50 uses 799 00:39:25,840 --> 00:39:28,030 for submitting your own problem sets. 800 00:39:28,030 --> 00:39:32,010 So if you started to take CS50, you probably already have a GitHub account. 801 00:39:32,010 --> 00:39:35,830 And with a free GitHub account, you can freely put your own personal website 802 00:39:35,830 --> 00:39:36,690 on the internet. 803 00:39:36,690 --> 00:39:39,580 And so I'll paste the URL for GitHub pages into the chat. 804 00:39:39,580 --> 00:39:42,340 So if you'd like to build a website of your own for yourself, 805 00:39:42,340 --> 00:39:44,410 you can use GitHub pages in order to do so. 806 00:39:44,410 --> 00:39:47,700 That's what I personally use for hosting my own personal website. 807 00:39:47,700 --> 00:39:51,070 And I know that it's quite popular for other people as well. 808 00:39:51,070 --> 00:39:54,300 DAVID MALAN: And in fact, what's nice about Brian's follow-on class, the web 809 00:39:54,300 --> 00:39:57,480 class, is, if you go to this URL here that I'll also 810 00:39:57,480 --> 00:40:00,780 paste into the chat window, he goes into more detail 811 00:40:00,780 --> 00:40:04,140 on various features of HTML, and CSS, and layouts. 812 00:40:04,140 --> 00:40:06,480 We really just do the basics in CS50. 813 00:40:06,480 --> 00:40:08,730 That might be a fun way to get a bit of a crash course 814 00:40:08,730 --> 00:40:13,050 on other things you can do and then try applying it to a real problem. 815 00:40:13,050 --> 00:40:14,220 Well, thank you, to Steph. 816 00:40:14,220 --> 00:40:19,000 Can we go next to Andrea, or "An-dray-a," from Hong Kong, 817 00:40:19,000 --> 00:40:20,125 if you'd like to say hello? 818 00:40:20,125 --> 00:40:21,510 Is it Andrea? 819 00:40:21,510 --> 00:40:22,638 AUDIENCE: Yes, hi. 820 00:40:22,638 --> 00:40:23,430 DAVID MALAN: Hello. 821 00:40:23,430 --> 00:40:28,050 AUDIENCE: I'm originally from Colombia, but I'm living in Hong Kong. 822 00:40:28,050 --> 00:40:29,300 DAVID MALAN: Nice to meet you. 823 00:40:29,300 --> 00:40:32,020 What question's on your mind? 824 00:40:32,020 --> 00:40:36,660 AUDIENCE: So I started to do the course for business professionals. 825 00:40:36,660 --> 00:40:39,940 And I previously studied industry 4.0. 826 00:40:39,940 --> 00:40:43,410 So I I'm interested into data and blockchain. 827 00:40:43,410 --> 00:40:47,970 And I wonder if you have some recommendation in some work 828 00:40:47,970 --> 00:40:50,325 that you have done regarding this. 829 00:40:50,325 --> 00:40:51,450 DAVID MALAN: Good question. 830 00:40:51,450 --> 00:40:55,890 It's a topic that's not currently in the business class. 831 00:40:55,890 --> 00:40:59,097 We did integrate it more recently into some of CS50's newer materials. 832 00:40:59,097 --> 00:41:00,930 And Brian, do you want to go ahead and maybe 833 00:41:00,930 --> 00:41:05,610 paste your favorite tutorial on Blockchain technologies, the YouTube 834 00:41:05,610 --> 00:41:08,420 video that we've started using in assignments? 835 00:41:08,420 --> 00:41:12,636 BRIAN YU: Yes, let me grab that one. 836 00:41:12,636 --> 00:41:13,940 One moment. 837 00:41:13,940 --> 00:41:19,120 Yeah, so I have just pasted into the chat a video 838 00:41:19,120 --> 00:41:24,400 that I quite like as an introduction to bitcoin, and block chicken, 839 00:41:24,400 --> 00:41:26,210 and how those technologies work. 840 00:41:26,210 --> 00:41:30,210 It's by Grant Sanderson, who makes the YouTube channel 3Blue1Brown. 841 00:41:30,210 --> 00:41:32,980 And I think, in this video, he does an absolutely wonderful job 842 00:41:32,980 --> 00:41:36,070 of starting from first principles and building from ground up 843 00:41:36,070 --> 00:41:38,500 how it is that you would imagine designing 844 00:41:38,500 --> 00:41:42,760 a decentralized system for exchanging money, 845 00:41:42,760 --> 00:41:46,110 for example, and then building that up to how it is that blockchain actually 846 00:41:46,110 --> 00:41:46,610 works. 847 00:41:46,610 --> 00:41:48,640 So I'd highly recommend that video if that's 848 00:41:48,640 --> 00:41:50,920 something that is of interest to you if you're 849 00:41:50,920 --> 00:41:54,410 interested in learning more about how these technologies actually work. 850 00:41:54,410 --> 00:41:57,327 DAVID MALAN: And at some point, we'll likely update the business class 851 00:41:57,327 --> 00:42:00,040 too, Andrea, to integrate some of these newer topics 852 00:42:00,040 --> 00:42:02,690 that have become very applicable to the business world too. 853 00:42:02,690 --> 00:42:05,763 So no plans just yet, but odds are, on the horizon. 854 00:42:05,763 --> 00:42:07,180 Well, thank you for that question. 855 00:42:07,180 --> 00:42:11,423 Can we go to Neban Najib for your question if you'd like to say hello, 856 00:42:11,423 --> 00:42:12,340 and where you're from? 857 00:42:12,340 --> 00:42:15,860 And how do you pronounce your name? 858 00:42:15,860 --> 00:42:16,910 AUDIENCE: I'm from Oman. 859 00:42:16,910 --> 00:42:19,340 So I'm actually a high school student. 860 00:42:19,340 --> 00:42:21,770 And I'm a humanities student. 861 00:42:21,770 --> 00:42:27,120 So I wanted to ask, how can a humanities student benefit from CS50? 862 00:42:27,120 --> 00:42:28,620 DAVID MALAN: That's a good question. 863 00:42:28,620 --> 00:42:32,090 So as of two years ago, Brian, and I, and our colleague 864 00:42:32,090 --> 00:42:36,260 Doug started collaborating with our friends at Yale University on a class 865 00:42:36,260 --> 00:42:39,450 that a colleague of ours there, Benedict Brown, had created, 866 00:42:39,450 --> 00:42:43,010 which was an intersection of computer science and the humanities, 867 00:42:43,010 --> 00:42:45,680 often called the digital humanities. 868 00:42:45,680 --> 00:42:50,060 This, for instance, is a class where, at Harvard, we would introduce students 869 00:42:50,060 --> 00:42:51,830 to a number of new technologies. 870 00:42:51,830 --> 00:42:55,910 For instance, we used Node.js, we used View, we used React. 871 00:42:55,910 --> 00:42:59,330 And in the context of those technologies, 872 00:42:59,330 --> 00:43:02,330 we asked students to apply those technologies to problems 873 00:43:02,330 --> 00:43:05,300 specifically in the arts and humanities. 874 00:43:05,300 --> 00:43:07,997 Early on, we introduced some of those projects ourselves. 875 00:43:07,997 --> 00:43:09,830 But at the end of the semester were students 876 00:43:09,830 --> 00:43:14,030 asked to solve some problem of their own in the world of arts and humanities, 877 00:43:14,030 --> 00:43:16,550 perhaps some other class they were taking and the like. 878 00:43:16,550 --> 00:43:19,970 And Brian, do you want to give folks a sense of the kinds of projects 879 00:43:19,970 --> 00:43:23,950 that students might tackle in the humanities? 880 00:43:23,950 --> 00:43:26,500 BRIAN YU: Yeah, so there are quite a number of applications 881 00:43:26,500 --> 00:43:31,780 in the world of the digital humanities in terms of where computer science can 882 00:43:31,780 --> 00:43:32,290 be useful. 883 00:43:32,290 --> 00:43:35,590 And often it comes with using computer science 884 00:43:35,590 --> 00:43:38,770 to be able to process large data sets that would otherwise 885 00:43:38,770 --> 00:43:41,220 be infeasible to process by hand, for example. 886 00:43:41,220 --> 00:43:47,680 So if you have large curated collections of photos of artwork, for example, 887 00:43:47,680 --> 00:43:50,810 or large curated collections of literature, for instance, 888 00:43:50,810 --> 00:43:54,520 it might be helpful to be able to use computational tools 889 00:43:54,520 --> 00:43:58,447 and algorithms to be able to analyze those very large data sets. 890 00:43:58,447 --> 00:44:01,030 And so here, there's an intersection between computer science, 891 00:44:01,030 --> 00:44:04,210 and some fields in the humanities, and data science, 892 00:44:04,210 --> 00:44:07,330 for instance, where there's a lot of potential applications there. 893 00:44:07,330 --> 00:44:09,640 My own undergraduate research when I was in college 894 00:44:09,640 --> 00:44:14,230 was about applying computer science to the problem of analyzing literature, 895 00:44:14,230 --> 00:44:16,210 and being able to look at a bunch of documents 896 00:44:16,210 --> 00:44:18,085 where you might not know who the authors are, 897 00:44:18,085 --> 00:44:20,410 and to be able to do some analysis of that literature. 898 00:44:20,410 --> 00:44:24,040 And so I have been working at the intersection of computer science 899 00:44:24,040 --> 00:44:26,430 and trying to solve problems in the humanities. 900 00:44:26,430 --> 00:44:29,470 And there are definitely other domains within the digital humanities 901 00:44:29,470 --> 00:44:31,690 where people are also using computers to be 902 00:44:31,690 --> 00:44:34,044 able to solve these sorts of problems. 903 00:44:34,044 --> 00:44:34,908 DAVID MALAN: Indeed. 904 00:44:34,908 --> 00:44:37,160 Well, thank you for that question as well. 905 00:44:37,160 --> 00:44:40,580 Can we go next to Megan if you'd like to say hello, where you're from, 906 00:44:40,580 --> 00:44:41,940 and your question? 907 00:44:41,940 --> 00:44:43,220 AUDIENCE: OK, can you hear me? 908 00:44:43,220 --> 00:44:44,470 DAVID MALAN: We can, yes. 909 00:44:44,470 --> 00:44:49,550 AUDIENCE: OK, so I'm just starting the intro to computer programming, 910 00:44:49,550 --> 00:44:51,560 but I'm kind of a overthinker. 911 00:44:51,560 --> 00:44:56,630 So I already know, in the future, that I do want to get into cybersecurity, 912 00:44:56,630 --> 00:45:00,195 whether it's network security or pen testing. 913 00:45:00,195 --> 00:45:02,945 I just want to know what steps or courses I should be considering, 914 00:45:02,945 --> 00:45:08,218 or that you recommend I take, to lead me in that direction. 915 00:45:08,218 --> 00:45:10,260 DAVID MALAN: Yeah, that's a really good question. 916 00:45:10,260 --> 00:45:14,090 Let me defer to Brian in a moment to see if he has any course recommendations. 917 00:45:14,090 --> 00:45:18,980 But my first reaction is that reading a lot, honestly, and keeping 918 00:45:18,980 --> 00:45:22,250 an eye on certain blogs is honestly the best way to acclimate yourself 919 00:45:22,250 --> 00:45:23,660 to the security world. 920 00:45:23,660 --> 00:45:25,400 It's kind of an unfortunate thing, but it 921 00:45:25,400 --> 00:45:27,980 feels like every week, every day almost, you 922 00:45:27,980 --> 00:45:30,950 read about something bad that has happened in the world 923 00:45:30,950 --> 00:45:33,290 as it relates to computer security. 924 00:45:33,290 --> 00:45:35,360 Most of us probably are familiar with all 925 00:45:35,360 --> 00:45:39,170 of the articles that have been written about Zoom, for instance, 926 00:45:39,170 --> 00:45:39,977 in recent weeks. 927 00:45:39,977 --> 00:45:41,810 Thankfully they've addressed a lot of those. 928 00:45:41,810 --> 00:45:44,660 But they made a number of poor design decisions early on. 929 00:45:44,660 --> 00:45:46,970 And I think that the value of reading lots 930 00:45:46,970 --> 00:45:50,390 of blogs and articles about security is that you start 931 00:45:50,390 --> 00:45:52,510 to notice patterns in humans' behavior. 932 00:45:52,510 --> 00:45:54,770 So you know what to keep an eye out for so as 933 00:45:54,770 --> 00:45:56,990 to avoid those problems in the future. 934 00:45:56,990 --> 00:46:00,560 And two, you just start to understand how 935 00:46:00,560 --> 00:46:04,700 to go about looking for and detecting these threats proactively. 936 00:46:04,700 --> 00:46:06,980 So I can paste a couple of resources, for instance. 937 00:46:06,980 --> 00:46:11,120 There's a very famous gentleman by the name of Bruce Schneier, whose website I 938 00:46:11,120 --> 00:46:12,680 just pasted into the chat window. 939 00:46:12,680 --> 00:46:14,840 He has a blog and a lot of other resources there. 940 00:46:14,840 --> 00:46:18,260 He actually spends time lately at Harvard as well, at the law school. 941 00:46:18,260 --> 00:46:23,190 And he is a security researcher, speaks commonly on the subject. 942 00:46:23,190 --> 00:46:26,090 And so following people like him might be of interest. 943 00:46:26,090 --> 00:46:29,250 Another popular blog is Krebs on Security. 944 00:46:29,250 --> 00:46:31,700 Let me go ahead and paste another URL there. 945 00:46:31,700 --> 00:46:34,640 You might want to keep an eye on that blog and that website. 946 00:46:34,640 --> 00:46:38,390 For instance, I've pasted the specific link to just one article about Zoom 947 00:46:38,390 --> 00:46:41,420 so that you can better understand those issues as well. 948 00:46:41,420 --> 00:46:44,390 And then really, you can look almost anywhere in the tech 949 00:46:44,390 --> 00:46:46,510 world for security-related stuff. 950 00:46:46,510 --> 00:46:51,980 For instance, Tech Crunch, or Slashdot, or even just 951 00:46:51,980 --> 00:46:56,600 keeping an eye on Google News is a good place for public-facing information. 952 00:46:56,600 --> 00:46:59,537 Brian, on the academic side, do you have any thoughts? 953 00:46:59,537 --> 00:47:01,370 BRIAN YU: On the academic side, I don't know 954 00:47:01,370 --> 00:47:05,420 of any classes that are specifically oriented for cybersecurity. 955 00:47:05,420 --> 00:47:07,130 But there are definitely a lot of classes 956 00:47:07,130 --> 00:47:11,150 I know of that are about cryptography, which is very related in spirit, 957 00:47:11,150 --> 00:47:12,800 about how to-- 958 00:47:12,800 --> 00:47:14,990 what sort of algorithms you can use in order 959 00:47:14,990 --> 00:47:18,950 to make sure that information is secure, especially as you're transmitting it 960 00:47:18,950 --> 00:47:20,630 over the internet, for example. 961 00:47:20,630 --> 00:47:24,680 And so here, for example, is one class on cryptography offered by Stanford 962 00:47:24,680 --> 00:47:28,610 through Coursera which might be of interest there as a potential more 963 00:47:28,610 --> 00:47:31,160 mathematical and more formal look at how some 964 00:47:31,160 --> 00:47:35,210 of the algorithmic side of cryptography works. 965 00:47:35,210 --> 00:47:37,880 DAVID MALAN: And Megan, I can paste one other URL into the chat 966 00:47:37,880 --> 00:47:39,830 window for what's called USENIX. 967 00:47:39,830 --> 00:47:43,520 This is an association that holds annual security conferences that, years ago, 968 00:47:43,520 --> 00:47:46,850 when I was in graduate school, I actually participated in regularly. 969 00:47:46,850 --> 00:47:49,670 It looks like their next conference is coming up later this summer. 970 00:47:49,670 --> 00:47:51,590 It says Boston, but I'm guessing it's not 971 00:47:51,590 --> 00:47:53,300 going to happen in person most likely. 972 00:47:53,300 --> 00:47:55,520 So maybe, all the better, it will be online. 973 00:47:55,520 --> 00:47:58,430 But that's a community too, if you're a university student now, 974 00:47:58,430 --> 00:48:02,060 you might be able to, in the future, travel to conferences like those, 975 00:48:02,060 --> 00:48:04,490 or at least read the papers that are published there. 976 00:48:04,490 --> 00:48:06,890 And that too is a great way of getting acclimated. 977 00:48:06,890 --> 00:48:10,310 And if you google around for security "tutorials," 978 00:48:10,310 --> 00:48:12,800 when it comes to pen testing, or penetration testing, 979 00:48:12,800 --> 00:48:15,440 as you alluded to earlier, there's a lot of cool stuff 980 00:48:15,440 --> 00:48:17,180 you can do with technology these days. 981 00:48:17,180 --> 00:48:21,780 And I'm sure there are online resources like, you download a virtual machine 982 00:48:21,780 --> 00:48:24,500 that some security instructor has configured to have 983 00:48:24,500 --> 00:48:26,090 a whole bunch of vulnerabilities. 984 00:48:26,090 --> 00:48:30,050 And you can use it to actually hack into the virtual machine 985 00:48:30,050 --> 00:48:32,150 and learn something about the process. 986 00:48:32,150 --> 00:48:34,910 And then what's also popular these days-- 987 00:48:34,910 --> 00:48:39,560 and let me see if I can find a link for this final resource. 988 00:48:39,560 --> 00:48:43,170 It's very-- here's just one. 989 00:48:43,170 --> 00:48:45,020 I've not participated in this myself. 990 00:48:45,020 --> 00:48:47,060 And it looks like this is the past one. 991 00:48:47,060 --> 00:48:53,120 But contests called capture the flag, or CTF, are very popular these days. 992 00:48:53,120 --> 00:48:57,200 And these are opportunities to compete, either by yourself or on a small team, 993 00:48:57,200 --> 00:48:59,510 to try to hack into things and figure things 994 00:48:59,510 --> 00:49:01,410 out before another team figures things out. 995 00:49:01,410 --> 00:49:05,940 So that's another really fun way to learn more about this world, CTF, 996 00:49:05,940 --> 00:49:07,158 or capture the flag. 997 00:49:07,158 --> 00:49:08,950 Well, thank you to Megan for your question. 998 00:49:08,950 --> 00:49:12,370 Can we go next to Ronaldo, if I'm pronouncing it correctly, 999 00:49:12,370 --> 00:49:14,780 if you'd like to say hello and where you're from? 1000 00:49:14,780 --> 00:49:17,210 AUDIENCE: Hello. 1001 00:49:17,210 --> 00:49:19,430 I'm originally from Venezuela. 1002 00:49:19,430 --> 00:49:23,150 But now I'm a refugee in Colombia. 1003 00:49:23,150 --> 00:49:26,285 DAVID MALAN: Nice to meet you. 1004 00:49:26,285 --> 00:49:26,910 AUDIENCE: Yeah. 1005 00:49:26,910 --> 00:49:31,510 Well, I have various questions, so I don't know which one to pick. 1006 00:49:31,510 --> 00:49:34,730 But the one in interested in at the moment 1007 00:49:34,730 --> 00:49:42,070 is I'm really struggling sometimes when I tackle a really big project. 1008 00:49:42,070 --> 00:49:43,160 And I get stuck. 1009 00:49:43,160 --> 00:49:47,380 And I get this feeling like I don't want to code anymore. 1010 00:49:47,380 --> 00:49:53,120 Because I feel like I'm not prepared, that this is not what 1011 00:49:53,120 --> 00:49:54,765 I should be doing. 1012 00:49:54,765 --> 00:50:01,310 And I get very anxious, like maybe I'm picking the wrong career. 1013 00:50:01,310 --> 00:50:02,840 Because I love programming. 1014 00:50:02,840 --> 00:50:07,940 But sometimes I get flustered and overwhelmed. 1015 00:50:07,940 --> 00:50:10,010 DAVID MALAN: I know the feeling, honestly. 1016 00:50:10,010 --> 00:50:12,950 So I think the best answer we can give you is empathy. 1017 00:50:12,950 --> 00:50:16,730 Even something relatively simple, like my personal home page 1018 00:50:16,730 --> 00:50:20,710 that I mentioned earlier, mushroomed into such a big project. 1019 00:50:20,710 --> 00:50:23,720 Like, I thought I was going to sit down one evening and kind of whip 1020 00:50:23,720 --> 00:50:26,110 up a new and improved mobile-friendly website. 1021 00:50:26,110 --> 00:50:27,360 Because I had all the content. 1022 00:50:27,360 --> 00:50:31,220 I just needed to write new HTML, new CSS, and so forth. 1023 00:50:31,220 --> 00:50:34,190 But no, that project ended up taking multiple weekends, 1024 00:50:34,190 --> 00:50:36,020 much longer than I had intended. 1025 00:50:36,020 --> 00:50:39,260 And like I said earlier, I still have a list of issues, 1026 00:50:39,260 --> 00:50:41,630 or to-dos, that I still want to get to. 1027 00:50:41,630 --> 00:50:44,610 They may be less important than some of the things I already finished. 1028 00:50:44,610 --> 00:50:47,150 But I think this speaks to the fact that a lot of projects 1029 00:50:47,150 --> 00:50:48,410 are just never complete. 1030 00:50:48,410 --> 00:50:52,550 Or even I am never happy, 100%, with how they've turned out. 1031 00:50:52,550 --> 00:50:55,940 So here too, not to be a broken record, but I think the best advice really 1032 00:50:55,940 --> 00:51:00,020 is to break these bigger programming projects down into smaller pieces. 1033 00:51:00,020 --> 00:51:04,370 And be happy if, each day, you've just crossed one thing off that list, 1034 00:51:04,370 --> 00:51:06,800 or maybe on a good day, two or three. 1035 00:51:06,800 --> 00:51:10,700 But describe your to-dos, and describe your features 1036 00:51:10,700 --> 00:51:14,150 or your goals as precisely as possible so 1037 00:51:14,150 --> 00:51:18,103 that you can literally work top to bottom and make incremental progress. 1038 00:51:18,103 --> 00:51:21,020 At least if you're like me, you'll start to feel a lot better about it 1039 00:51:21,020 --> 00:51:21,937 at the end of the day. 1040 00:51:21,937 --> 00:51:24,770 Like, at least he can go to sleep knowing you got something done. 1041 00:51:24,770 --> 00:51:27,200 But if you're trying to tackle big projects 1042 00:51:27,200 --> 00:51:31,970 and you, like me, expect that you'll get everything done at once, I do think you 1043 00:51:31,970 --> 00:51:34,400 and I are just setting ourselves up for disappointment. 1044 00:51:34,400 --> 00:51:37,950 Because even after, what, 20 years of my programming, 1045 00:51:37,950 --> 00:51:43,880 I still am shocked how consistently, any time I try to do a programming project, 1046 00:51:43,880 --> 00:51:47,960 it takes at least twice as much time as I expected. 1047 00:51:47,960 --> 00:51:50,000 And that's on a low estimate. 1048 00:51:50,000 --> 00:51:53,540 It probably takes me three times or four times as long. 1049 00:51:53,540 --> 00:51:54,800 So this is not uncommon. 1050 00:51:54,800 --> 00:51:58,280 So if you love this, I would just change your habits 1051 00:51:58,280 --> 00:51:59,615 if you can, not your passions. 1052 00:51:59,615 --> 00:52:02,920 1053 00:52:02,920 --> 00:52:05,560 Well, thank you for that question, Ronaldo. 1054 00:52:05,560 --> 00:52:07,960 Let's go next to Anmal. 1055 00:52:07,960 --> 00:52:09,970 And if we can put Kareem on deck-- 1056 00:52:09,970 --> 00:52:13,034 Kareem, are you still there with us? 1057 00:52:13,034 --> 00:52:14,400 KAREEM ZIDAN: I am, yes. 1058 00:52:14,400 --> 00:52:17,308 DAVID MALAN: All right, we have a question for you from Anmal. 1059 00:52:17,308 --> 00:52:20,100 So let's go ahead and spotlight Anmal, if I'm pronouncing it right, 1060 00:52:20,100 --> 00:52:23,093 if you'd like to say hello, and where you're from, and your question. 1061 00:52:23,093 --> 00:52:23,760 AUDIENCE: Hello. 1062 00:52:23,760 --> 00:52:26,260 Yeah, am I audible? 1063 00:52:26,260 --> 00:52:27,550 DAVID MALAN: Yes. 1064 00:52:27,550 --> 00:52:29,880 AUDIENCE: Yeah, hi, so I'm from India. 1065 00:52:29,880 --> 00:52:34,100 And the question that I wanted to ask is, for example, just yesterday, 1066 00:52:34,100 --> 00:52:36,850 I was doing week 3, PostgreSQL. 1067 00:52:36,850 --> 00:52:41,200 And it took me like three or four hours just to set it up properly. 1068 00:52:41,200 --> 00:52:44,230 And when I told this problem to a senior of mine, 1069 00:52:44,230 --> 00:52:47,350 what he told me is that you should go for a Dockerized environment. 1070 00:52:47,350 --> 00:52:50,090 You should containerize your app so that you 1071 00:52:50,090 --> 00:52:54,548 are able to eliminate the first step you have to do to set up environment 1072 00:52:54,548 --> 00:52:55,840 variables and things like that. 1073 00:52:55,840 --> 00:52:57,580 So is Docker the way forward? 1074 00:52:57,580 --> 00:53:01,875 And are we going to see it in CS50 course in the future? 1075 00:53:01,875 --> 00:53:03,000 DAVID MALAN: Good question. 1076 00:53:03,000 --> 00:53:05,315 Kareem, do you want to take the first part? 1077 00:53:05,315 --> 00:53:06,690 KAREEM ZIDAN: Yeah, sounds great. 1078 00:53:06,690 --> 00:53:11,370 So Docker is obviously one of the most popular tools or technologies that have 1079 00:53:11,370 --> 00:53:15,460 become very useful in recent years. 1080 00:53:15,460 --> 00:53:17,310 In fact, pretty much all of our-- 1081 00:53:17,310 --> 00:53:19,500 CS50's web applications are backed by Docker. 1082 00:53:19,500 --> 00:53:23,400 And the CS50 IDE itself is backed by Docker. 1083 00:53:23,400 --> 00:53:29,550 And it definitely makes a lot about the process of developing an application 1084 00:53:29,550 --> 00:53:34,830 or distributing an application easier in that it allows you to, what they call, 1085 00:53:34,830 --> 00:53:37,605 containerize your application, or package it 1086 00:53:37,605 --> 00:53:39,480 with all its dependencies and all the version 1087 00:53:39,480 --> 00:53:43,380 that you need so you don't have to worry about, would it work on this system? 1088 00:53:43,380 --> 00:53:44,730 Would it work on this machine? 1089 00:53:44,730 --> 00:53:45,870 What's installed here? 1090 00:53:45,870 --> 00:53:49,920 Are they conflicting versions of packages that are maybe 1091 00:53:49,920 --> 00:53:51,540 required by other applications? 1092 00:53:51,540 --> 00:53:53,880 All of that stuff goes away. 1093 00:53:53,880 --> 00:53:57,720 That, of course, in addition to what your friend alluded to, 1094 00:53:57,720 --> 00:54:01,860 that Docker Hub, or the repository registry of Docker images 1095 00:54:01,860 --> 00:54:07,380 that exist online from which you can pull any number of premade Docker 1096 00:54:07,380 --> 00:54:08,910 images for you-- 1097 00:54:08,910 --> 00:54:13,530 among them is obviously Postgres, MySQL, different Python 1098 00:54:13,530 --> 00:54:17,640 versions, different versions of other tools and packages. 1099 00:54:17,640 --> 00:54:18,980 I personally use that. 1100 00:54:18,980 --> 00:54:22,040 I think it's definitely worth it to learn more about Docker 1101 00:54:22,040 --> 00:54:23,250 and start using it. 1102 00:54:23,250 --> 00:54:27,240 I think Brian, in his web class, if I recall correctly, 1103 00:54:27,240 --> 00:54:31,812 had one of the lectures that introduced Docker and Docker Compose. 1104 00:54:31,812 --> 00:54:33,020 BRIAN YU: We did [INAUDIBLE]. 1105 00:54:33,020 --> 00:54:34,101 [INAUDIBLE] Docker. 1106 00:54:34,101 --> 00:54:37,260 1107 00:54:37,260 --> 00:54:39,270 DAVID MALAN: Sorry, Brian? 1108 00:54:39,270 --> 00:54:42,270 BRIAN YU: Yes, we do introduce a little bit of Docker and Docker Compose 1109 00:54:42,270 --> 00:54:43,478 in the web programming class. 1110 00:54:43,478 --> 00:54:45,282 1111 00:54:45,282 --> 00:54:46,990 KAREEM ZIDAN: Yeah, so I would definitely 1112 00:54:46,990 --> 00:54:50,096 take a look at that for a start. 1113 00:54:50,096 --> 00:54:53,830 Docker also-- I think the documentation, the official documentation, is great. 1114 00:54:53,830 --> 00:54:57,250 And I'm sure that there is a numerous number of online tutorials 1115 00:54:57,250 --> 00:55:01,090 that you can look at and sort of get a sense of how Docker works 1116 00:55:01,090 --> 00:55:04,158 or how to get started using it. 1117 00:55:04,158 --> 00:55:07,450 DAVID MALAN: Indeed, and Anmal, if you'd like to make it easier to get started, 1118 00:55:07,450 --> 00:55:12,010 I've just pasted into the chat window a tool that we use here in CS50's team 1119 00:55:12,010 --> 00:55:15,160 called CLI50 for Command Line Interface 50. 1120 00:55:15,160 --> 00:55:18,730 This essentially gives you what's called a headless environment-- so no GUI. 1121 00:55:18,730 --> 00:55:21,040 It's just the black and white terminal window 1122 00:55:21,040 --> 00:55:23,893 that connects to your own Mac or PC so that you can run tools 1123 00:55:23,893 --> 00:55:25,810 like you're trying to when you're on Mac or PC 1124 00:55:25,810 --> 00:55:29,260 without setting everything up manually yourself, like SQLite. 1125 00:55:29,260 --> 00:55:32,560 And this is actually a subset of what CS50 IDE is. 1126 00:55:32,560 --> 00:55:36,460 So Kareem has built a Docker image on top of this command line interface 1127 00:55:36,460 --> 00:55:40,790 image that adds more GUI features and other IDE-specific software. 1128 00:55:40,790 --> 00:55:43,960 So as Kareem notes, we use Docker for everything. 1129 00:55:43,960 --> 00:55:47,830 Whether it makes it into CS50, I think, itself will depend on just 1130 00:55:47,830 --> 00:55:49,390 how user friendly it gets. 1131 00:55:49,390 --> 00:55:52,390 I think the reality is that Docker is pretty easy to get up 1132 00:55:52,390 --> 00:55:55,150 and running on Macs, at least newer Macs nowadays. 1133 00:55:55,150 --> 00:55:58,180 It's a little more of a headache on certain PCs. 1134 00:55:58,180 --> 00:56:00,413 And so that's not ideal, I think, for some students 1135 00:56:00,413 --> 00:56:03,580 to set up their own machines if they run into technical support difficulties 1136 00:56:03,580 --> 00:56:04,900 at the beginning of the class. 1137 00:56:04,900 --> 00:56:06,010 But it's on our radar. 1138 00:56:06,010 --> 00:56:10,345 And I would hope to answer one of our earlier questions too at the same time, 1139 00:56:10,345 --> 00:56:12,220 that this is one of the kinds of technologies 1140 00:56:12,220 --> 00:56:14,140 that will get better and better over time 1141 00:56:14,140 --> 00:56:19,240 and make it even easier for students to use on their own machine. 1142 00:56:19,240 --> 00:56:22,158 Well, Brian, any final words before we wrap up? 1143 00:56:22,158 --> 00:56:24,700 BRIAN YU: Just wanted to say, really enjoyed getting a chance 1144 00:56:24,700 --> 00:56:26,380 to talk to you all today. 1145 00:56:26,380 --> 00:56:29,158 Hopefully we'll have an opportunity to do this again soon. 1146 00:56:29,158 --> 00:56:31,450 But thank you so much for all your wonderful questions. 1147 00:56:31,450 --> 00:56:33,790 Sorry we didn't have a chance to make it to all of them. 1148 00:56:33,790 --> 00:56:36,040 But hopefully next time, we'll be able to get to more. 1149 00:56:36,040 --> 00:56:37,810 DAVID MALAN: Indeed, thanks so much for our special guest Kareem 1150 00:56:37,810 --> 00:56:40,747 and to all of CS50's team who's behind the scenes helping us out. 1151 00:56:40,747 --> 00:56:43,330 And indeed, we'd love to answer even more questions next time. 1152 00:56:43,330 --> 00:56:45,830 We will send you an email if you registered for today 1153 00:56:45,830 --> 00:56:47,500 to let you know when the next one is. 1154 00:56:47,500 --> 00:56:51,070 All our best to you, and your family, and friends, and colleagues back home. 1155 00:56:51,070 --> 00:56:53,220 Have a wonderful day. 1156 00:56:53,220 --> 00:56:54,000