1 00:00:00,000 --> 00:00:02,120 2 00:00:02,120 --> 00:00:03,330 DAVID MALAN: Hello, everyone. 3 00:00:03,330 --> 00:00:06,200 This is David in Cambridge, Massachusetts. 4 00:00:06,200 --> 00:00:08,320 Can everyone hear us OK? 5 00:00:08,320 --> 00:00:10,800 Well, it's so nice to see everyone. 6 00:00:10,800 --> 00:00:12,680 These are CS50's office hours. 7 00:00:12,680 --> 00:00:14,900 For those unfamiliar, this is an opportunity 8 00:00:14,900 --> 00:00:19,550 typically on campus for students at Harvard to come by professors' offices 9 00:00:19,550 --> 00:00:23,720 literally and ask questions about courses, about life after a course, 10 00:00:23,720 --> 00:00:25,820 and about computer science more generally. 11 00:00:25,820 --> 00:00:28,520 I'm joined today by CS50's own Brian Yu. 12 00:00:28,520 --> 00:00:31,834 Let me turn the floor over to him. 13 00:00:31,834 --> 00:00:32,890 BRIAN YU: Hi, everyone. 14 00:00:32,890 --> 00:00:35,080 I'm Brian, also calling in from Cambridge. 15 00:00:35,080 --> 00:00:38,225 Good to see everyone today, and looking forward to hearing your questions. 16 00:00:38,225 --> 00:00:40,350 DAVID MALAN: And for those less familiar with Zoom, 17 00:00:40,350 --> 00:00:42,390 allow me just to highlight a few features. 18 00:00:42,390 --> 00:00:45,010 Probably along the bottom of your screen, 19 00:00:45,010 --> 00:00:48,040 you'll see a participant's icon, which if you click on that, 20 00:00:48,040 --> 00:00:51,060 you'll see everyone else who's in the chat room today. 21 00:00:51,060 --> 00:00:52,742 You should also see a Chat button. 22 00:00:52,742 --> 00:00:54,450 And if you click on that, it will open up 23 00:00:54,450 --> 00:00:57,748 something else that will allow you to chat with other people in the room. 24 00:00:57,748 --> 00:01:00,540 Please feel free during these office hours to chat with each other, 25 00:01:00,540 --> 00:01:02,880 to share links, to answer questions. 26 00:01:02,880 --> 00:01:05,400 But if you have questions of me or Brian, 27 00:01:05,400 --> 00:01:11,850 please instead go to see cs50.ly/ask, which I've gone ahead and pasted 28 00:01:11,850 --> 00:01:14,190 into the chat window myself. 29 00:01:14,190 --> 00:01:16,650 So keep that open if you'd like to ask questions. 30 00:01:16,650 --> 00:01:20,550 Otherwise, the chat flies by so quickly that we really can't keep an eye on it. 31 00:01:20,550 --> 00:01:23,010 But CS50's whole team behind the scenes is helping 32 00:01:23,010 --> 00:01:25,870 us keep an eye on that form submission. 33 00:01:25,870 --> 00:01:28,350 So we'll keep everyone muted by default. And if we're 34 00:01:28,350 --> 00:01:32,190 able to field your question, we'll call on you by name explicitly. 35 00:01:32,190 --> 00:01:34,380 And please feel free to say hello and where 36 00:01:34,380 --> 00:01:37,260 you're from before asking your question on video. 37 00:01:37,260 --> 00:01:39,270 And indeed, if you do want to ask a question, 38 00:01:39,270 --> 00:01:42,330 do make sure to have your microphone and video on so that we can all 39 00:01:42,330 --> 00:01:43,870 see and hear you. 40 00:01:43,870 --> 00:01:46,620 Now, as you might have seen when we publicized these office hours, 41 00:01:46,620 --> 00:01:50,730 we're joined by a special guest who you might not have seen for some time, 42 00:01:50,730 --> 00:01:53,550 unless you've been taking CS50's games course. 43 00:01:53,550 --> 00:01:57,300 Indeed, if you go into this URL, which I'll paste now 44 00:01:57,300 --> 00:02:03,060 into the chat window, which is that of GD50, or Game Development 50, 45 00:02:03,060 --> 00:02:05,070 otherwise known as CS50G. 46 00:02:05,070 --> 00:02:08,370 This is a course taught by CS50's own Colton Ogden. 47 00:02:08,370 --> 00:02:12,630 And I'm so excited along with Brian to welcome back Colton 48 00:02:12,630 --> 00:02:13,870 to today's office hours. 49 00:02:13,870 --> 00:02:14,370 Colton? 50 00:02:14,370 --> 00:02:18,640 51 00:02:18,640 --> 00:02:22,720 But we can't hear him just yet, but he'll be unmuted momentarily. 52 00:02:22,720 --> 00:02:26,813 Allow me to reintroduce CS50's own Colton Ogden. 53 00:02:26,813 --> 00:02:27,980 COLTON OGDEN: Hi, everybody. 54 00:02:27,980 --> 00:02:29,250 Sorry about that. 55 00:02:29,250 --> 00:02:30,500 Hope everybody's staying safe. 56 00:02:30,500 --> 00:02:32,420 It's my pleasure to join the team here again. 57 00:02:32,420 --> 00:02:33,700 It's been a while. 58 00:02:33,700 --> 00:02:35,740 Hello from Las Vegas. 59 00:02:35,740 --> 00:02:39,400 But yeah, this is awesome, seeing a lot of interaction in the chat-- 60 00:02:39,400 --> 00:02:41,990 some cute code formatted hellos. 61 00:02:41,990 --> 00:02:44,632 So, excited to see where the questions take us today. 62 00:02:44,632 --> 00:02:45,590 DAVID MALAN: Wonderful. 63 00:02:45,590 --> 00:02:48,380 And to give folks a chance to fill out the form, Colton, 64 00:02:48,380 --> 00:02:53,690 we thought we, Brian and I, would ask you a couple of questions, if I may. 65 00:02:53,690 --> 00:02:55,425 So this games course-- 66 00:02:55,425 --> 00:02:57,050 to which I, of course, know the answer. 67 00:02:57,050 --> 00:03:01,250 But others might not know the origin story of CS50's Game Development class. 68 00:03:01,250 --> 00:03:04,760 How did this class itself come about a few years back? 69 00:03:04,760 --> 00:03:08,660 COLTON OGDEN: So I think the early germs for the course were-- 70 00:03:08,660 --> 00:03:12,170 you and I obviously like some classic games, Mario and Zelda. 71 00:03:12,170 --> 00:03:13,940 And we've talked about them. 72 00:03:13,940 --> 00:03:18,320 But we were doing a little bit of a tour in the UK, where we had some workshops. 73 00:03:18,320 --> 00:03:21,350 And I remember you proposing based on the fact 74 00:03:21,350 --> 00:03:23,510 that you know that I was into coding games 75 00:03:23,510 --> 00:03:26,640 that we have a few different seminars on some other topics, 76 00:03:26,640 --> 00:03:28,348 but we don't have anything game-centered. 77 00:03:28,348 --> 00:03:30,848 So you said, hey, you want to put together a little seminar? 78 00:03:30,848 --> 00:03:31,790 So I said sure. 79 00:03:31,790 --> 00:03:33,530 That ended up going well, in my opinion. 80 00:03:33,530 --> 00:03:35,280 It was fun to create as well. 81 00:03:35,280 --> 00:03:38,690 So we did another thing back in Cambridge, Massachusetts following 82 00:03:38,690 --> 00:03:42,200 that to test-drive the ideas a little further. 83 00:03:42,200 --> 00:03:45,290 And then after that, we said, hey, let's turn this into a full course, 84 00:03:45,290 --> 00:03:45,920 and we did. 85 00:03:45,920 --> 00:03:47,960 And yeah, that was a couple of years ago now. 86 00:03:47,960 --> 00:03:49,120 And it's been going for-- 87 00:03:49,120 --> 00:03:50,370 it's been going pretty strong. 88 00:03:50,370 --> 00:03:51,120 DAVID MALAN: Nice. 89 00:03:51,120 --> 00:03:52,330 Yeah, and it has. 90 00:03:52,330 --> 00:03:55,100 And it occurred to me in thinking about today's office hours 91 00:03:55,100 --> 00:04:00,500 that whereas most of CS50's classes, like CS50 itself and Brian's web class 92 00:04:00,500 --> 00:04:03,200 and new AI class, are structured each week 93 00:04:03,200 --> 00:04:05,918 around different topics from the field. 94 00:04:05,918 --> 00:04:08,210 The games class is a little differently structured such 95 00:04:08,210 --> 00:04:10,670 that you made the conscious choice to structure each week 96 00:04:10,670 --> 00:04:12,440 around a specific game. 97 00:04:12,440 --> 00:04:15,100 And we were curious to ask how you thought about designing 98 00:04:15,100 --> 00:04:17,550 a course with that kind of structure. 99 00:04:17,550 --> 00:04:22,370 COLTON OGDEN: So for that, I think I was inspired by CS50 certainly 100 00:04:22,370 --> 00:04:25,150 to an extent, being that I was in that environment a lot. 101 00:04:25,150 --> 00:04:28,850 Because CS50 operates very much in the same way, where each week, 102 00:04:28,850 --> 00:04:31,520 there is obviously a lot of topical conversation. 103 00:04:31,520 --> 00:04:36,110 But every week, there is one big project that people are working 104 00:04:36,110 --> 00:04:39,490 on that is pretty real-world feeling. 105 00:04:39,490 --> 00:04:41,990 And especially when I was learning game programming, 106 00:04:41,990 --> 00:04:44,540 it seemed to me that it was pretty rare that you 107 00:04:44,540 --> 00:04:47,668 would learn through the lens of something complete like a code base. 108 00:04:47,668 --> 00:04:50,210 And you would really actually take the more standard approach 109 00:04:50,210 --> 00:04:51,680 of learning topics. 110 00:04:51,680 --> 00:04:55,670 And while it's good, and there's, I think, pros and cons to both sides, 111 00:04:55,670 --> 00:04:58,867 I think personally, I was more attached to the more case-study style 112 00:04:58,867 --> 00:05:01,700 of learning a whole game and getting to interact with that code base 113 00:05:01,700 --> 00:05:05,310 and seeing how you take that week by week and expand on it. 114 00:05:05,310 --> 00:05:08,360 And those early, early ideas are universally 115 00:05:08,360 --> 00:05:10,550 applicable towards the later, more bulkier games. 116 00:05:10,550 --> 00:05:11,390 So I don't know. 117 00:05:11,390 --> 00:05:14,390 I think that was partly unconscious, but I 118 00:05:14,390 --> 00:05:17,698 think those were the more nonconscious factors that played into it. 119 00:05:17,698 --> 00:05:18,740 DAVID MALAN: Interesting. 120 00:05:18,740 --> 00:05:22,970 And perhaps just one other question before we go to the whole group. 121 00:05:22,970 --> 00:05:26,420 The games class uses primarily a language called Lua. 122 00:05:26,420 --> 00:05:31,310 And we were curious to ask why Lua and not something like Java or JavaScript? 123 00:05:31,310 --> 00:05:35,278 And does Lua have usefulness outside of the world of games? 124 00:05:35,278 --> 00:05:36,070 COLTON OGDEN: Sure. 125 00:05:36,070 --> 00:05:40,968 So Lua is, I believe, empirically probably the most-used scripting 126 00:05:40,968 --> 00:05:42,260 language in the world of games. 127 00:05:42,260 --> 00:05:47,240 It's been very frequently used as a scripting layer since at least the late 128 00:05:47,240 --> 00:05:52,130 '90s, probably earlier than that, typically with C++-based code bases. 129 00:05:52,130 --> 00:05:55,760 So if you're modding a game or looking at a lot of games 130 00:05:55,760 --> 00:05:59,150 that have more open code bases, you'll see Lua all over the place. 131 00:05:59,150 --> 00:06:03,080 But additionally, it's just a really nice, simple language to learn, 132 00:06:03,080 --> 00:06:04,280 just like C is. 133 00:06:04,280 --> 00:06:06,270 You can learn it in really a matter of hours 134 00:06:06,270 --> 00:06:08,720 because it's very simple, very small set of features. 135 00:06:08,720 --> 00:06:09,890 Though it's still robust. 136 00:06:09,890 --> 00:06:12,260 It still gives you things like first-class functions 137 00:06:12,260 --> 00:06:14,777 which allow you to program in a JavaScript style, 138 00:06:14,777 --> 00:06:17,360 which can be really cool for a lot of asynchronous programming 139 00:06:17,360 --> 00:06:19,490 which, in games, is very commonly used. 140 00:06:19,490 --> 00:06:22,490 We do some of that in, for example, the Pokemon piece 141 00:06:22,490 --> 00:06:25,380 that I believe uses a lot of that. 142 00:06:25,380 --> 00:06:28,610 But additionally, it was also coupled with the fact-- 143 00:06:28,610 --> 00:06:30,260 that would've been good on its own-- 144 00:06:30,260 --> 00:06:32,260 but coupled with the fact that Love existed. 145 00:06:32,260 --> 00:06:35,150 And in my mind, especially from a pedagogical standpoint, 146 00:06:35,150 --> 00:06:37,820 Love seemed like the best framework to use 147 00:06:37,820 --> 00:06:42,920 that wasn't so opinionated that you had to learn things a specific way. 148 00:06:42,920 --> 00:06:44,533 But it also gave you a lot of power. 149 00:06:44,533 --> 00:06:46,700 And it's a very performant framework for what it is. 150 00:06:46,700 --> 00:06:47,367 So I don't know. 151 00:06:47,367 --> 00:06:49,460 I felt like a lot of things came together 152 00:06:49,460 --> 00:06:53,500 to make the perfect sort of hybrid for teaching and for practicality. 153 00:06:53,500 --> 00:06:54,250 DAVID MALAN: Nice. 154 00:06:54,250 --> 00:06:55,220 Well, it makes sense. 155 00:06:55,220 --> 00:06:57,050 Well, again, for those less familiar, I've 156 00:06:57,050 --> 00:07:00,830 just pasted again into the chat window the URL of Colton's class 157 00:07:00,830 --> 00:07:05,510 on edX if you'd like to take a look firsthand and re-implement something 158 00:07:05,510 --> 00:07:10,100 like Mario the way it was meant to be, not just with ASCII art, as we 159 00:07:10,100 --> 00:07:12,260 do in CS50 itself. 160 00:07:12,260 --> 00:07:13,980 So let's start to take some questions. 161 00:07:13,980 --> 00:07:16,700 Again, if you would like to ask a question yourself, 162 00:07:16,700 --> 00:07:21,980 do go to cs50.ly/ask and submit the question there. 163 00:07:21,980 --> 00:07:24,800 We won't be using the blue hands or the built-in chat window. 164 00:07:24,800 --> 00:07:28,220 This way, take a look through the questions and know what to expect. 165 00:07:28,220 --> 00:07:30,590 Our friend Ramon on CS50's team is kindly 166 00:07:30,590 --> 00:07:32,720 going to help us pass the microphone around. 167 00:07:32,720 --> 00:07:35,960 And we'd like to first call on Mohammed Shamek, 168 00:07:35,960 --> 00:07:40,550 if you'd like to ask your question on video. 169 00:07:40,550 --> 00:07:41,632 Mohammed? 170 00:07:41,632 --> 00:07:43,430 AUDIENCE: Hey, everyone. 171 00:07:43,430 --> 00:07:44,415 Am I audible? 172 00:07:44,415 --> 00:07:45,290 DAVID MALAN: You are. 173 00:07:45,290 --> 00:07:47,440 Where are you from, and what's your question? 174 00:07:47,440 --> 00:07:48,710 AUDIENCE: I'm from Egypt. 175 00:07:48,710 --> 00:07:49,880 So my name is Mohammed. 176 00:07:49,880 --> 00:07:53,700 I'm 18 years old, and I am from Egypt. 177 00:07:53,700 --> 00:07:58,280 And this question, it's-- 178 00:07:58,280 --> 00:08:02,400 well, it was kind of interesting to know the answer for. 179 00:08:02,400 --> 00:08:11,240 So in week six, we start learning Python in the CS50 course. 180 00:08:11,240 --> 00:08:16,670 And then what happened is I knew some Python before. 181 00:08:16,670 --> 00:08:20,690 And apparently for computers, the beginning of time 182 00:08:20,690 --> 00:08:24,290 is considered to be like Jan 1, 1970. 183 00:08:24,290 --> 00:08:28,350 And so I wanted to ask why specifically? 184 00:08:28,350 --> 00:08:29,983 DAVID MALAN: Yes. 185 00:08:29,983 --> 00:08:31,150 It's a really good question. 186 00:08:31,150 --> 00:08:34,960 The world has been around a lot longer, but so far as computers are concerned, 187 00:08:34,960 --> 00:08:38,350 most computers do indeed think of the beginning of time, 188 00:08:38,350 --> 00:08:41,799 as you say, as being January 1, 1970. 189 00:08:41,799 --> 00:08:44,860 Brian, do you want to take us down memory lane? 190 00:08:44,860 --> 00:08:45,985 BRIAN YU: Yeah, absolutely. 191 00:08:45,985 --> 00:08:48,410 We can have a bit of a history lesson. 192 00:08:48,410 --> 00:08:51,460 So this really goes back not just to Python, but even earlier 193 00:08:51,460 --> 00:08:55,120 to the development of Unix, which was one of the first popular operating 194 00:08:55,120 --> 00:09:00,070 systems and serves as the basis now for operating systems like Linux or Mac OS, 195 00:09:00,070 --> 00:09:01,410 if you use them. 196 00:09:01,410 --> 00:09:02,890 And at the time, when Unix-- 197 00:09:02,890 --> 00:09:07,020 Unix, the operating system, was first released in 1971. 198 00:09:07,020 --> 00:09:10,233 So at the time, they just needed some way of representing time. 199 00:09:10,233 --> 00:09:12,400 And they figured they just needed some number it was 200 00:09:12,400 --> 00:09:14,070 going to count, second after second. 201 00:09:14,070 --> 00:09:18,610 And they just sort of arbitrarily chose January 1, 1970 202 00:09:18,610 --> 00:09:20,350 as the date that would be like time zero. 203 00:09:20,350 --> 00:09:23,510 And you can count the number of seconds from that time. 204 00:09:23,510 --> 00:09:26,110 And if you wanted to represent a time earlier than 1970, 205 00:09:26,110 --> 00:09:27,470 you could do that, too. 206 00:09:27,470 --> 00:09:30,390 They just said, all right, we'll use a negative number instead. 207 00:09:30,390 --> 00:09:32,180 The interesting conversation now, though, 208 00:09:32,180 --> 00:09:35,500 is the fact that when they made that decision at the time, 209 00:09:35,500 --> 00:09:37,360 they were storing integers-- numbers-- 210 00:09:37,360 --> 00:09:41,140 in 32-bit integers, something you might be familiar with in CS50 211 00:09:41,140 --> 00:09:42,950 in week 0 or week 1. 212 00:09:42,950 --> 00:09:45,910 And if you remember from CS50, with a 32-bit integer, 213 00:09:45,910 --> 00:09:49,000 you can count all the way from negative 2 billion all the way up 214 00:09:49,000 --> 00:09:50,830 to positive 2 billion. 215 00:09:50,830 --> 00:09:52,630 But anywhere beyond that, you start to run 216 00:09:52,630 --> 00:09:56,340 into problems of integer overflow, which we talk about in week 1. 217 00:09:56,340 --> 00:09:59,470 So you might ask the question of, all right, what is 2 billion seconds 218 00:09:59,470 --> 00:10:01,990 from January 1, 1970? 219 00:10:01,990 --> 00:10:05,110 And it turns out that will take you to the year 2038. 220 00:10:05,110 --> 00:10:07,270 So our computers are OK up until 2038. 221 00:10:07,270 --> 00:10:09,370 But after that point, we'll need to start 222 00:10:09,370 --> 00:10:12,400 to switch to some bigger way of representing numbers, 223 00:10:12,400 --> 00:10:15,790 like a 64-bit number, for example, which a lot of computers 224 00:10:15,790 --> 00:10:16,938 are using nowadays here. 225 00:10:16,938 --> 00:10:19,480 So, a very good question, and one that could become a problem 226 00:10:19,480 --> 00:10:22,690 in just a couple of years if we're not too careful with our computers. 227 00:10:22,690 --> 00:10:23,440 DAVID MALAN: Yeah. 228 00:10:23,440 --> 00:10:26,590 Some of you might recall the so-called Y2K problem 229 00:10:26,590 --> 00:10:29,350 around the turn of the Millennium. 230 00:10:29,350 --> 00:10:32,290 And that, too, was the result of humans having 231 00:10:32,290 --> 00:10:35,830 decided to use only a finite amount of memory that was not going 232 00:10:35,830 --> 00:10:38,110 to be enough once the year got too big. 233 00:10:38,110 --> 00:10:41,080 So thank you, Mohammed, for that question-- a really interesting one 234 00:10:41,080 --> 00:10:42,310 at that. 235 00:10:42,310 --> 00:10:46,273 Let's go next, Ramon, to Arman, if you'd like to say hello. 236 00:10:46,273 --> 00:10:47,065 AUDIENCE: Oh, yeah. 237 00:10:47,065 --> 00:10:48,520 Hi, there. 238 00:10:48,520 --> 00:10:51,400 My name is Arman, and I'm from Armenia. 239 00:10:51,400 --> 00:10:54,160 First of all, let me thank you for what you are doing. 240 00:10:54,160 --> 00:10:56,950 Providing this level of education is really something 241 00:10:56,950 --> 00:10:59,140 that you can't be thanked enough. 242 00:10:59,140 --> 00:11:01,060 My question is about languages. 243 00:11:01,060 --> 00:11:02,360 You know, I come-- 244 00:11:02,360 --> 00:11:05,740 I'm somebody who had some experience with Java 245 00:11:05,740 --> 00:11:09,450 before I started the CS50 course. 246 00:11:09,450 --> 00:11:13,190 And now, I am on week 4, I guess. 247 00:11:13,190 --> 00:11:15,850 I'm currently working through the problem set. 248 00:11:15,850 --> 00:11:21,220 My question is as somebody who had some experience with different languages, 249 00:11:21,220 --> 00:11:26,710 but now, I'm trying to learn some of the more fundamental low-level stuff like 250 00:11:26,710 --> 00:11:30,460 things like working with memory or the C language or C++-- 251 00:11:30,460 --> 00:11:34,400 things that are used in graphics, you know? 252 00:11:34,400 --> 00:11:36,750 Colton, I think, will agree that graphics 253 00:11:36,750 --> 00:11:41,200 use a lot of those low-level things. 254 00:11:41,200 --> 00:11:45,795 What would you recommend to me to deepen my knowledge of C 255 00:11:45,795 --> 00:11:50,160 and working with memory, but also juggling between other languages that 256 00:11:50,160 --> 00:11:51,483 are not that low-level? 257 00:11:51,483 --> 00:11:54,400 DAVID MALAN: Yeah, that sounds like a really good question for Colton, 258 00:11:54,400 --> 00:11:57,430 who I think has tendency to like to do exactly what you're 259 00:11:57,430 --> 00:11:58,750 describing with languages. 260 00:11:58,750 --> 00:11:59,518 Colton? 261 00:11:59,518 --> 00:12:00,310 COLTON OGDEN: Sure. 262 00:12:00,310 --> 00:12:02,770 So yeah, it's an interesting perspective. 263 00:12:02,770 --> 00:12:05,620 Going from higher-level languages to lower-level languages 264 00:12:05,620 --> 00:12:09,970 is something I feel like I've been seeing more people doing these days. 265 00:12:09,970 --> 00:12:13,042 I came more from the other side, where I learned C++ and C, 266 00:12:13,042 --> 00:12:14,500 and then went to dynamic languages. 267 00:12:14,500 --> 00:12:17,350 So my perspective on this may be a little different. 268 00:12:17,350 --> 00:12:21,490 But I would say, I mean, the base rule, obviously, 269 00:12:21,490 --> 00:12:23,075 is just do a lot of exercises. 270 00:12:23,075 --> 00:12:24,700 Make a lot of stuff in those languages. 271 00:12:24,700 --> 00:12:26,350 And you just kind of learn through absorption. 272 00:12:26,350 --> 00:12:29,475 You learn if you're rigorously learning something, if you're reading books. 273 00:12:29,475 --> 00:12:32,890 As it pertains to graphics, it's a little bit different 274 00:12:32,890 --> 00:12:36,730 these days just because graphics, a lot of the time, is bundled to the GPU. 275 00:12:36,730 --> 00:12:41,620 And things are done at the low level usually using shaders a lot 276 00:12:41,620 --> 00:12:43,810 for a lot of the more fancy graphical stuff. 277 00:12:43,810 --> 00:12:45,190 And that's a very-- 278 00:12:45,190 --> 00:12:47,260 it's its own universe on its own. 279 00:12:47,260 --> 00:12:52,450 And it looks and reads a lot like C, but kind of an arcane version of C. 280 00:12:52,450 --> 00:12:55,378 And in Unity, for example, it's also kind of C-like, 281 00:12:55,378 --> 00:12:58,420 but even a completely different set from like if you were doing something 282 00:12:58,420 --> 00:13:00,520 in C++. 283 00:13:00,520 --> 00:13:04,270 But yeah, I would say get your mind wrapped around pointers and memory 284 00:13:04,270 --> 00:13:05,990 blocks and using-- 285 00:13:05,990 --> 00:13:07,990 in C, we do a lot with malloc and free. 286 00:13:07,990 --> 00:13:12,670 Those are the base functions in C. And you can use them in C++ as well, 287 00:13:12,670 --> 00:13:15,190 but C++ has a different sort of model. 288 00:13:15,190 --> 00:13:17,560 But yeah, just, honestly, do a lot of exercises. 289 00:13:17,560 --> 00:13:20,410 And if you're interested in graphics, probably look at OpenGL, 290 00:13:20,410 --> 00:13:24,370 which is a higher-level API, where you're still doing a little bit 291 00:13:24,370 --> 00:13:28,620 of memory stuff, but it's not quite as low-level as maybe you might-- 292 00:13:28,620 --> 00:13:31,130 at the malloc and free level. 293 00:13:31,130 --> 00:13:33,990 It's a little bit different in that sense, I would say. 294 00:13:33,990 --> 00:13:36,350 DAVID MALAN: Well, thank you, Arman, for your question. 295 00:13:36,350 --> 00:13:40,340 Let's go next to Nicole, if you'd like to say hello and where you're from. 296 00:13:40,340 --> 00:13:44,890 297 00:13:44,890 --> 00:13:45,760 Yes. 298 00:13:45,760 --> 00:13:47,530 Now we can hear you. 299 00:13:47,530 --> 00:13:52,600 AUDIENCE: I am from Seattle, and my name is Nicole. 300 00:13:52,600 --> 00:14:00,250 So my question is I wanted to know what are some of the common traits or skills 301 00:14:00,250 --> 00:14:05,950 that you notice in those programmers who are considered to be top programmers 302 00:14:05,950 --> 00:14:07,630 or very skilled and advanced. 303 00:14:07,630 --> 00:14:12,330 What's something that you see as a commonality they all maybe have 304 00:14:12,330 --> 00:14:16,090 that you've noticed that may be something I can look 305 00:14:16,090 --> 00:14:18,860 to see if I can incorporate for myself? 306 00:14:18,860 --> 00:14:20,258 DAVID MALAN: Yeah, absolutely. 307 00:14:20,258 --> 00:14:21,800 A couple of thoughts come to my mind. 308 00:14:21,800 --> 00:14:24,310 Let me go to Brian first, though, for his, especially 309 00:14:24,310 --> 00:14:27,262 since he's been teaching multiple classes this past semester. 310 00:14:27,262 --> 00:14:28,970 BRIAN YU: Yeah, this is a great question. 311 00:14:28,970 --> 00:14:31,408 I think with really skilled program records 312 00:14:31,408 --> 00:14:33,700 and I've had the chance to interact with and work with, 313 00:14:33,700 --> 00:14:36,080 I think some qualities they have are-- 314 00:14:36,080 --> 00:14:39,313 one is they're always trying to find the best way to solve a problem. 315 00:14:39,313 --> 00:14:41,980 But oftentimes, when you're dealing with a computational problem 316 00:14:41,980 --> 00:14:44,627 where there are lots of options you have for how to solve it, 317 00:14:44,627 --> 00:14:46,960 I often find that I really admire people that are always 318 00:14:46,960 --> 00:14:50,260 looking for the fastest to the most memory-efficient or just the most 319 00:14:50,260 --> 00:14:52,680 elegant way to try to solve a problem. 320 00:14:52,680 --> 00:14:54,760 And I also know that really skilled programmers 321 00:14:54,760 --> 00:14:57,128 are good at anticipating possible edge cases. 322 00:14:57,128 --> 00:14:59,170 Like when you're writing code, you have one sense 323 00:14:59,170 --> 00:15:01,080 for what you expect the code to do. 324 00:15:01,080 --> 00:15:02,890 But very skilled programmers will often be 325 00:15:02,890 --> 00:15:05,590 able to think about what could possibly go wrong 326 00:15:05,590 --> 00:15:08,200 and to try to be able to handle those situations. 327 00:15:08,200 --> 00:15:12,350 Because otherwise, bugs may arise in your programs later on down the line. 328 00:15:12,350 --> 00:15:13,100 DAVID MALAN: Yeah. 329 00:15:13,100 --> 00:15:17,550 And the first thought that came to my mind was a good tendency, 330 00:15:17,550 --> 00:15:19,790 I think, for a good programmer to have is a desire 331 00:15:19,790 --> 00:15:23,490 to want to understand everything that's going on in their code, 332 00:15:23,490 --> 00:15:25,830 even if they're using third-party libraries. 333 00:15:25,830 --> 00:15:28,610 So case in point, one of CS50's own web applications 334 00:15:28,610 --> 00:15:32,870 broke the other day when none of us had actually touched the code recently. 335 00:15:32,870 --> 00:15:34,250 So it seemed a little strange. 336 00:15:34,250 --> 00:15:37,820 So we thought maybe that one of the APIs we were using changed, 337 00:15:37,820 --> 00:15:40,310 or one of the libraries ultimately changed. 338 00:15:40,310 --> 00:15:42,680 And through trial and error, I realized that if I 339 00:15:42,680 --> 00:15:45,710 downgraded one of the libraries we were using, 340 00:15:45,710 --> 00:15:47,660 everything started working again. 341 00:15:47,660 --> 00:15:48,470 And that was great. 342 00:15:48,470 --> 00:15:51,050 And I could have just saved the code, pushed it to GitHub, 343 00:15:51,050 --> 00:15:52,520 and called it a day. 344 00:15:52,520 --> 00:15:57,530 But I was so determined to want to understand this that I dug in deeper. 345 00:15:57,530 --> 00:16:00,140 I asked Brian for his second opinion. 346 00:16:00,140 --> 00:16:04,190 And indeed, Brian chased down the issue to being a very small change 347 00:16:04,190 --> 00:16:05,660 in this other library. 348 00:16:05,660 --> 00:16:09,150 But it was so gratifying and, I think, enlightening for both of us, 349 00:16:09,150 --> 00:16:12,710 certainly for me, to realize, oh, that's what happened. 350 00:16:12,710 --> 00:16:14,450 And that's why the code broke. 351 00:16:14,450 --> 00:16:16,760 And I think the opposite of that is a bad trait. 352 00:16:16,760 --> 00:16:20,150 I think it's always disheartening when we see in some of our students 353 00:16:20,150 --> 00:16:23,540 or even some of our teaching fellows a sort of attitude of like, 354 00:16:23,540 --> 00:16:24,920 oh, I changed this line of code. 355 00:16:24,920 --> 00:16:28,820 And I don't know how I fixed it, but it works now, and being content with that. 356 00:16:28,820 --> 00:16:32,030 And I don't think you should be content with not understanding 357 00:16:32,030 --> 00:16:35,780 lines of code that you wrote or even any of the dependencies 358 00:16:35,780 --> 00:16:37,020 that you might be using. 359 00:16:37,020 --> 00:16:39,710 So it's so frustrating, and it's so time-consuming 360 00:16:39,710 --> 00:16:42,440 to go down these rabbit holes of understanding. 361 00:16:42,440 --> 00:16:47,650 But I think it really will make you a better programmer, ultimately. 362 00:16:47,650 --> 00:16:49,090 Well, thank you for that question. 363 00:16:49,090 --> 00:16:54,825 Let's go next to Darren, if you'd like to say hello and where you're from. 364 00:16:54,825 --> 00:16:56,200 AUDIENCE: Hello, can you hear me? 365 00:16:56,200 --> 00:16:57,160 DAVID MALAN: We can. 366 00:16:57,160 --> 00:16:57,640 AUDIENCE: Thank you. 367 00:16:57,640 --> 00:16:58,307 Thanks for this. 368 00:16:58,307 --> 00:17:01,978 Yeah, my name's Darren from just outside London in the UK. 369 00:17:01,978 --> 00:17:05,020 I'm 45 years old, and that's probably the basis of my question, actually. 370 00:17:05,020 --> 00:17:08,109 And this is going to be more focused to Colton. 371 00:17:08,109 --> 00:17:12,520 I enjoy playing games since the age of gaming, my VIC-20 and Commodore 372 00:17:12,520 --> 00:17:14,000 64 days. 373 00:17:14,000 --> 00:17:16,940 I used to do some VB programming on the back of it. 374 00:17:16,940 --> 00:17:21,400 But I started learning C through David and, of course, CS50 course. 375 00:17:21,400 --> 00:17:24,640 But my question is, at the age of 45, we have two-- 376 00:17:24,640 --> 00:17:28,180 almost three kids, because the next one's due next week. 377 00:17:28,180 --> 00:17:29,140 DAVID MALAN: Congrats. 378 00:17:29,140 --> 00:17:32,460 AUDIENCE: Learning C, as you said, Colton, can be learned in hours. 379 00:17:32,460 --> 00:17:33,460 I'm not sure about that. 380 00:17:33,460 --> 00:17:37,510 But I hear it's not the hardest thing to learn. 381 00:17:37,510 --> 00:17:42,370 But from the game-design point of view, from learning, say, coding in Unity, 382 00:17:42,370 --> 00:17:46,450 do you think a commitment of eight to 10, maybe up to 15 hours a week, 383 00:17:46,450 --> 00:17:50,470 is enough to be able to create your own games and get into the game design? 384 00:17:50,470 --> 00:17:53,555 Or is that too much of a high expectation? 385 00:17:53,555 --> 00:17:55,180 COLTON OGDEN: So I should clarify that. 386 00:17:55,180 --> 00:17:59,680 The 30 minutes specifically was maybe if you knew several languages already. 387 00:17:59,680 --> 00:18:02,980 But yeah, no, obviously, C from the very beginning, it's-- 388 00:18:02,980 --> 00:18:06,790 the hardest part, I think, is going from very little to no programming knowledge 389 00:18:06,790 --> 00:18:10,428 to having the ability to solve problems in code. 390 00:18:10,428 --> 00:18:12,970 That's language-agnostic, and that's just a fundamental thing 391 00:18:12,970 --> 00:18:15,550 you have to learn as a new developer. 392 00:18:15,550 --> 00:18:20,920 In terms of is it worth it or is it viable-- 393 00:18:20,920 --> 00:18:24,560 it's a combo question, I think, if I'm not mistaken. 394 00:18:24,560 --> 00:18:28,870 So is it sustainable 10, 15 hours-ish a week to get into game design? 395 00:18:28,870 --> 00:18:31,180 And I would say it depends on what you-- 396 00:18:31,180 --> 00:18:33,190 the games industry is very segmented. 397 00:18:33,190 --> 00:18:34,695 It's a very diverse field. 398 00:18:34,695 --> 00:18:35,820 There are a lot of avenues. 399 00:18:35,820 --> 00:18:39,670 You can go into the realm of cutting-edge triple-A, like very 400 00:18:39,670 --> 00:18:42,170 high graphics, high-capacity stuff. 401 00:18:42,170 --> 00:18:44,890 I mean, at that point, you're usually using in-house engines. 402 00:18:44,890 --> 00:18:48,738 But even things like Unity Engine or Unreal Engine 403 00:18:48,738 --> 00:18:50,030 can take you in that direction. 404 00:18:50,030 --> 00:18:52,755 Unity is really good these days as well. 405 00:18:52,755 --> 00:18:54,880 But that takes a lot more commitment because you're 406 00:18:54,880 --> 00:18:59,978 getting into a lot more detail as concerns things like shaders 407 00:18:59,978 --> 00:19:02,020 and much more advanced systems if you're modeling 408 00:19:02,020 --> 00:19:07,570 human interactions and kinematics and physics and all sorts of things, right? 409 00:19:07,570 --> 00:19:10,720 But if you're doing something more indi-focused, where maybe your goal is 410 00:19:10,720 --> 00:19:13,750 to make a 2D-game or a simpler game, or just exploring 411 00:19:13,750 --> 00:19:17,680 new ideas that maybe aren't as crazy on the graphics or the physics, 412 00:19:17,680 --> 00:19:22,090 then yeah, absolutely, you could certainly do that. 413 00:19:22,090 --> 00:19:24,202 As concerns whether it's worth it, I would 414 00:19:24,202 --> 00:19:25,660 say that that's a subjective thing. 415 00:19:25,660 --> 00:19:27,780 It's a value measurement on your part. 416 00:19:27,780 --> 00:19:30,280 If you're passionate about games, and you really like games, 417 00:19:30,280 --> 00:19:32,905 and you want to spend the time, then absolutely, it's worth it. 418 00:19:32,905 --> 00:19:35,150 But if you're looking at this strictly from 419 00:19:35,150 --> 00:19:39,520 "I want to get into the games industry to make money," 420 00:19:39,520 --> 00:19:41,650 there's many other realms of programming where 421 00:19:41,650 --> 00:19:44,590 you can make a lot more money with probably a little bit less 422 00:19:44,590 --> 00:19:48,075 strain or, I'd say, a shorter learning period, certainly. 423 00:19:48,075 --> 00:19:49,450 But yeah, no, if you love games-- 424 00:19:49,450 --> 00:19:52,930 I mean, games are extremely rewarding, in my opinion, in terms of development. 425 00:19:52,930 --> 00:19:56,905 So I would say definitely pursue it if you love the process of doing it. 426 00:19:56,905 --> 00:19:58,780 But yeah, it's not going to happen overnight. 427 00:19:58,780 --> 00:20:00,488 It's not going to be maybe even a year. 428 00:20:00,488 --> 00:20:02,530 It could take you a couple of years before you're 429 00:20:02,530 --> 00:20:04,180 making games you're happy with. 430 00:20:04,180 --> 00:20:06,650 But chase it if you love it. 431 00:20:06,650 --> 00:20:09,610 But yeah, I would say just have realistic expectations 432 00:20:09,610 --> 00:20:13,090 of the scope of the games that you might be able achieve as one person. 433 00:20:13,090 --> 00:20:15,700 You could certainly lead a team in the future who can 434 00:20:15,700 --> 00:20:18,760 let you accomplish those larger games. 435 00:20:18,760 --> 00:20:21,400 But as a single developer, it's going to be a little bit-- 436 00:20:21,400 --> 00:20:25,000 you're going to be limited in terms of what you can actually accomplish. 437 00:20:25,000 --> 00:20:25,750 DAVID MALAN: Nice. 438 00:20:25,750 --> 00:20:27,542 Well, thank you, Darren, for that question. 439 00:20:27,542 --> 00:20:30,400 And congratulations next week, especially. 440 00:20:30,400 --> 00:20:33,233 Let's go next to Vicky, if you'd like to say hello to the world 441 00:20:33,233 --> 00:20:34,150 and where you're from. 442 00:20:34,150 --> 00:20:36,870 443 00:20:36,870 --> 00:20:38,320 The floor is yours, Vicky. 444 00:20:38,320 --> 00:20:39,750 AUDIENCE: Hello? 445 00:20:39,750 --> 00:20:40,980 DAVID MALAN: Yes, we see you. 446 00:20:40,980 --> 00:20:42,100 AUDIENCE: Hi. 447 00:20:42,100 --> 00:20:43,170 My name is Vicky. 448 00:20:43,170 --> 00:20:45,810 I'm from Canada. 449 00:20:45,810 --> 00:20:47,777 I think I got a little overeager. 450 00:20:47,777 --> 00:20:50,860 I asked two questions, and now I'm not sure which one you're referring to. 451 00:20:50,860 --> 00:20:52,830 DAVID MALAN: I think you had a math question. 452 00:20:52,830 --> 00:20:54,090 AUDIENCE: OK, yes. 453 00:20:54,090 --> 00:20:57,870 So my question was a little desperately worded, but it was, 454 00:20:57,870 --> 00:21:02,130 can you please promise me that all of these linear algebra and discrete math 455 00:21:02,130 --> 00:21:05,272 and calculus classes will come in handy in my future career? 456 00:21:05,272 --> 00:21:06,855 DAVID MALAN: Yeah, a common sentiment. 457 00:21:06,855 --> 00:21:10,390 And for the group, this was asked essentially in all capital letters, 458 00:21:10,390 --> 00:21:10,890 too. 459 00:21:10,890 --> 00:21:16,140 So let me turn to Brian, who's studied these topics most recently 460 00:21:16,140 --> 00:21:21,915 and also, I think, can speak to just how applicable they can be in some domains. 461 00:21:21,915 --> 00:21:22,540 BRIAN YU: Sure. 462 00:21:22,540 --> 00:21:24,257 Well, thank you for that question. 463 00:21:24,257 --> 00:21:27,340 I definitely felt the same way when I was taking some of my linear algebra 464 00:21:27,340 --> 00:21:28,902 and calculus classes. 465 00:21:28,902 --> 00:21:30,610 I think ultimately whether or not it will 466 00:21:30,610 --> 00:21:33,760 come in handy will depend in part on what your career path is. 467 00:21:33,760 --> 00:21:36,340 But there are definitely areas within computer science 468 00:21:36,340 --> 00:21:39,250 where calculus, linear algebra, discrete math-- where all of that 469 00:21:39,250 --> 00:21:43,105 becomes relevant, especially in the world of artificial intelligence 470 00:21:43,105 --> 00:21:44,355 and machine learning nowadays. 471 00:21:44,355 --> 00:21:47,380 So as you think about using calculus, you're 472 00:21:47,380 --> 00:21:49,720 doing it very abstractly to do things like how 473 00:21:49,720 --> 00:21:51,743 do you find the maximum point of a function? 474 00:21:51,743 --> 00:21:54,160 But you could translate that in a machine-learning setting 475 00:21:54,160 --> 00:21:57,580 to how do you maximize the accuracy of your machine-learning system? 476 00:21:57,580 --> 00:22:01,330 So a lot of the ideas that are taken from calculus and linear algebra 477 00:22:01,330 --> 00:22:03,490 have a lot of application nowadays in terms 478 00:22:03,490 --> 00:22:06,167 of modern machine-learning research. 479 00:22:06,167 --> 00:22:08,625 Linear algebra in particular also has a lot of applications 480 00:22:08,625 --> 00:22:11,667 to graphics-- so some of the stuff that Colton's just been talking about, 481 00:22:11,667 --> 00:22:13,690 about games and game development. 482 00:22:13,690 --> 00:22:16,960 A lot of graphics right now was ultimately based on linear algebra. 483 00:22:16,960 --> 00:22:20,190 And a lot of what graphical processing units are doing 484 00:22:20,190 --> 00:22:21,970 are just like pieces of hardware that are 485 00:22:21,970 --> 00:22:26,630 designed to do these linear algebra operations very, very quickly. 486 00:22:26,630 --> 00:22:28,630 So definitely, a lot of applications, depending 487 00:22:28,630 --> 00:22:32,560 on where within computer science or other domains you're interested in, 488 00:22:32,560 --> 00:22:35,347 but they do become important at some point. 489 00:22:35,347 --> 00:22:37,180 DAVID MALAN: And I can say, too, I felt some 490 00:22:37,180 --> 00:22:39,640 of the same frustrations taking math classes in college 491 00:22:39,640 --> 00:22:41,060 and also in high school. 492 00:22:41,060 --> 00:22:44,740 And I think it's in part because of how the classes I took were taught. 493 00:22:44,740 --> 00:22:47,650 Many of the math classes I took were just so mechanical. 494 00:22:47,650 --> 00:22:50,650 Like, it was just problem after problem after problem. 495 00:22:50,650 --> 00:22:52,930 And I worry that a lot of classes lose sight 496 00:22:52,930 --> 00:22:55,100 of the forest for the trees, so to speak, 497 00:22:55,100 --> 00:22:58,300 which is they focus on a lot of the lower-level details 498 00:22:58,300 --> 00:23:00,940 without appreciating that what's really important 499 00:23:00,940 --> 00:23:03,700 is the higher-level concepts, like what a derivative is 500 00:23:03,700 --> 00:23:06,310 or what an integral is in the world of calculus. 501 00:23:06,310 --> 00:23:09,940 And frankly, in retrospect-- and I can say this with some confidence 20-plus 502 00:23:09,940 --> 00:23:10,720 years later-- 503 00:23:10,720 --> 00:23:14,680 I really didn't need to know 12 different ways to take a derivative 504 00:23:14,680 --> 00:23:17,950 or do an integral, especially now, when we have computers that 505 00:23:17,950 --> 00:23:19,690 can help with some of those processes. 506 00:23:19,690 --> 00:23:22,270 Hands-down, important to understand the applicability 507 00:23:22,270 --> 00:23:24,658 of finding the min or the max and what problems 508 00:23:24,658 --> 00:23:26,950 you can solve with those kinds of techniques, let alone 509 00:23:26,950 --> 00:23:29,890 matrices and the like in the world of linear algebra. 510 00:23:29,890 --> 00:23:33,370 But take some comfort in knowing that even though courses you're taking now 511 00:23:33,370 --> 00:23:37,090 in math might be belaboring the point again and again, 512 00:23:37,090 --> 00:23:41,410 the ideas are useful, even if you start to forget some of the mechanics 513 00:23:41,410 --> 00:23:46,237 and don't get all of the answers right when trying to do things by hand. 514 00:23:46,237 --> 00:23:47,570 Well, thank you for that, Vicky. 515 00:23:47,570 --> 00:23:51,440 Hopefully that helps with future math studies for others as well. 516 00:23:51,440 --> 00:23:53,308 Let's go to Ledor next. 517 00:23:53,308 --> 00:23:54,850 Am I pronouncing your name correctly? 518 00:23:54,850 --> 00:23:57,100 If you'd like to say hello and where you're from, too. 519 00:23:57,100 --> 00:23:58,390 AUDIENCE: Yeah, sort of. 520 00:23:58,390 --> 00:23:59,230 My name is Ledor. 521 00:23:59,230 --> 00:23:59,830 I'm 21. 522 00:23:59,830 --> 00:24:00,860 I'm from Israel. 523 00:24:00,860 --> 00:24:06,430 And my question is I would love to know some more 524 00:24:06,430 --> 00:24:11,110 information about how your walkthrough videos for various problems sets 525 00:24:11,110 --> 00:24:12,640 are written. 526 00:24:12,640 --> 00:24:14,680 Right now, I'm on problem set five. 527 00:24:14,680 --> 00:24:19,630 And I'm kind of not sure about most of the questions there. 528 00:24:19,630 --> 00:24:22,600 And I'm sure the walkthrough videos helped me 529 00:24:22,600 --> 00:24:31,510 a lot to understand some of those basics and ideas of the code. 530 00:24:31,510 --> 00:24:36,070 So generally, what are your considerations and/or inspirations 531 00:24:36,070 --> 00:24:37,750 when making one of those videos? 532 00:24:37,750 --> 00:24:43,528 And how do you decide what to include in them or what not to include? 533 00:24:43,528 --> 00:24:45,320 DAVID MALAN: That's a really good question. 534 00:24:45,320 --> 00:24:47,200 I can speak perhaps to some of the history, 535 00:24:47,200 --> 00:24:51,277 and then have Brian elaborate on his particular approach to them. 536 00:24:51,277 --> 00:24:53,110 So we've been doing these walkthrough videos 537 00:24:53,110 --> 00:24:56,170 for CS50, which are these short YouTube videos that 538 00:24:56,170 --> 00:24:58,800 are embedded into the homework assignments for CS50 itself, 539 00:24:58,800 --> 00:25:03,440 for those unfamiliar, for probably 10-plus years now. 540 00:25:03,440 --> 00:25:07,150 And different teaching fellows, or TFs, have led them over the years. 541 00:25:07,150 --> 00:25:10,140 Marta Bralic was the first, some 10-plus years ago. 542 00:25:10,140 --> 00:25:14,290 Tommy MacWilliam, after that, who you might remember from other CS50 videos. 543 00:25:14,290 --> 00:25:17,350 And then Zamyla Chan, who held the title for probably 544 00:25:17,350 --> 00:25:21,680 eight or so years while she was an undergraduate as well as a PhD student 545 00:25:21,680 --> 00:25:22,180 at Harvard. 546 00:25:22,180 --> 00:25:25,340 And she only just recently moved out into the real world. 547 00:25:25,340 --> 00:25:28,060 In fact, as an aside, before I forget, if those of you 548 00:25:28,060 --> 00:25:32,560 who know Zamyla from past years of CS50, I've just pasted into the chat window 549 00:25:32,560 --> 00:25:37,750 a URL of her graduation speech that she gave upon receiving her PhD. 550 00:25:37,750 --> 00:25:40,300 But the motivation for the walkthroughs early on 551 00:25:40,300 --> 00:25:44,620 was really to start to answer a frequently asked question, or FAQ, 552 00:25:44,620 --> 00:25:47,360 which was quite simply, where do I begin? 553 00:25:47,360 --> 00:25:52,090 I'd hope we have fairly detailed specifications in the problem sets, 554 00:25:52,090 --> 00:25:54,760 telling students what they ultimately need to do. 555 00:25:54,760 --> 00:25:58,480 But they deliberately don't really tell the students how to do that. 556 00:25:58,480 --> 00:26:00,760 And frankly, we have found through trial and error 557 00:26:00,760 --> 00:26:03,430 that the longer, the longer, the longer the problem 558 00:26:03,430 --> 00:26:08,050 sets' English language gets, the less, the less, the less the students 559 00:26:08,050 --> 00:26:10,570 actually read it, even the native English speakers. 560 00:26:10,570 --> 00:26:15,130 And so we wanted to use another media format to convey ideas and hints 561 00:26:15,130 --> 00:26:16,930 for those students who might want the. 562 00:26:16,930 --> 00:26:18,910 Additional guidance. 563 00:26:18,910 --> 00:26:21,430 Early on, these walkthroughs were only in person. 564 00:26:21,430 --> 00:26:24,010 We would hold them in a lecture hall on campus. 565 00:26:24,010 --> 00:26:27,130 And students would come and attend these classes for help 566 00:26:27,130 --> 00:26:28,810 with the current week's problem set. 567 00:26:28,810 --> 00:26:31,180 And then over the years, we began to film those. 568 00:26:31,180 --> 00:26:34,510 And then over the years further, we then got rid of the audience, 569 00:26:34,510 --> 00:26:38,460 and we started to pre-produce the videos in a studio or in an office, 570 00:26:38,460 --> 00:26:40,210 just so that we could get them just right. 571 00:26:40,210 --> 00:26:44,890 We could alternate between text and code and the human speaking onscreen, 572 00:26:44,890 --> 00:26:48,050 and then literally integrate them into the problem sets themselves. 573 00:26:48,050 --> 00:26:50,740 In fact, it's a very deliberate, if subtle, design decision 574 00:26:50,740 --> 00:26:53,620 that when Brian leads them and Zamyla leads them, 575 00:26:53,620 --> 00:26:56,080 they're against this white backdrop because we really 576 00:26:56,080 --> 00:27:01,030 want the human element to blend into the homework assignment itself. 577 00:27:01,030 --> 00:27:04,270 And indeed, what was wonderful about Zamyla especially, 578 00:27:04,270 --> 00:27:07,510 who really became the face of these walkthroughs for so many years, 579 00:27:07,510 --> 00:27:10,990 students really began to identify with her-- really want to meet her, 580 00:27:10,990 --> 00:27:13,030 really want to be her-- 581 00:27:13,030 --> 00:27:16,960 because she was literally the person there for them in their time of need 582 00:27:16,960 --> 00:27:19,473 when they were struggling with homework assignments. 583 00:27:19,473 --> 00:27:20,890 And so that's some of the history. 584 00:27:20,890 --> 00:27:24,250 And Brian has now taken up the baton himself. 585 00:27:24,250 --> 00:27:27,237 And Brian, do you want to elaborate on your approach? 586 00:27:27,237 --> 00:27:28,320 BRIAN YU: Yeah, certainly. 587 00:27:28,320 --> 00:27:31,590 I mean, I took a lot of inspiration from Zamyla's walkthrough videos 588 00:27:31,590 --> 00:27:33,910 and watching the way that she did them as well. 589 00:27:33,910 --> 00:27:36,000 But my general approach with the walkthroughs 590 00:27:36,000 --> 00:27:39,977 is to first and foremost convey any background knowledge needed 591 00:27:39,977 --> 00:27:42,060 to solve the problems-- that a lot of our problems 592 00:27:42,060 --> 00:27:44,460 connect computer science to other domains. 593 00:27:44,460 --> 00:27:47,100 So with the election problems, like from problem set three, 594 00:27:47,100 --> 00:27:49,050 for example, I'll start the walkthrough just 595 00:27:49,050 --> 00:27:51,470 by talking through how these elections work 596 00:27:51,470 --> 00:27:54,450 so that you understand what the election even is before you 597 00:27:54,450 --> 00:27:56,370 start worrying about the code. 598 00:27:56,370 --> 00:27:58,500 Or likewise, with speller, trying to talk through 599 00:27:58,500 --> 00:28:01,470 like how a hash table works to get an understanding of that 600 00:28:01,470 --> 00:28:03,360 before you start writing the code. 601 00:28:03,360 --> 00:28:05,390 And then the next step in the walkthrough videos 602 00:28:05,390 --> 00:28:10,350 is I try to provide some ideas for how to start thinking about the problem 603 00:28:10,350 --> 00:28:11,857 a little bit more methodically. 604 00:28:11,857 --> 00:28:14,190 With a lot of these problems, I've been helping students 605 00:28:14,190 --> 00:28:16,943 with them for five or so years now. 606 00:28:16,943 --> 00:28:19,110 And I've started to see the way that some people try 607 00:28:19,110 --> 00:28:20,820 to start to think about the problem. 608 00:28:20,820 --> 00:28:23,070 And so part of the goal of the walkthroughs in my mind 609 00:28:23,070 --> 00:28:25,770 is to provide some guidance and some hints 610 00:28:25,770 --> 00:28:29,610 as to where to start your thinking in terms of how you can then translate 611 00:28:29,610 --> 00:28:33,270 that into code, while still leaving the core of the problem up to you to solve. 612 00:28:33,270 --> 00:28:36,270 Because we don't want to give the problem away in the walkthrough video, 613 00:28:36,270 --> 00:28:39,030 but we do want to just give you that little first nudge 614 00:28:39,030 --> 00:28:42,930 so that you have an idea of how you can begin writing up your own solution 615 00:28:42,930 --> 00:28:45,330 and thinking about how you would go about solving any 616 00:28:45,330 --> 00:28:47,900 of the problems in the problem sets. 617 00:28:47,900 --> 00:28:48,650 DAVID MALAN: Nice. 618 00:28:48,650 --> 00:28:50,983 Well, thanks for the question, and hope the walkthroughs 619 00:28:50,983 --> 00:28:54,410 are indeed helpful for those taking CS50X online. 620 00:28:54,410 --> 00:28:58,158 Next question-- can we go to Ivan, if you'd like to say hello 621 00:28:58,158 --> 00:28:59,075 and where you're from? 622 00:28:59,075 --> 00:29:02,820 623 00:29:02,820 --> 00:29:03,535 AUDIENCE: Hello? 624 00:29:03,535 --> 00:29:04,535 DAVID MALAN: Yes, hello. 625 00:29:04,535 --> 00:29:13,810 AUDIENCE: [INAUDIBLE] the techniques used to detect bugs. 626 00:29:13,810 --> 00:29:19,950 Well, in one of the first weeks from CS50 course, 627 00:29:19,950 --> 00:29:27,460 David told us some of the techniques that can help us to detect bugs, 628 00:29:27,460 --> 00:29:33,810 like the rubber duck describing thing. 629 00:29:33,810 --> 00:29:40,320 Well, before I started to take the CS50 course, I knew some C++. 630 00:29:40,320 --> 00:29:47,430 But when I started with C, I had some problems detecting bugs in my programs. 631 00:29:47,430 --> 00:29:53,995 And I was wondering, how do you think that you can change 632 00:29:53,995 --> 00:29:59,060 this type of thinking about your codes? 633 00:29:59,060 --> 00:30:01,280 DAVID MALAN: So how do your debugging techniques 634 00:30:01,280 --> 00:30:05,840 change based on the language you're trying to debug, it sounds? 635 00:30:05,840 --> 00:30:08,580 Yeah, so I can say there's a few techniques that work, 636 00:30:08,580 --> 00:30:10,800 no matter what language you're working with. 637 00:30:10,800 --> 00:30:15,900 And simply using print or console.log or the equivalent of just a function that 638 00:30:15,900 --> 00:30:18,450 displays information on the screen is probably 639 00:30:18,450 --> 00:30:20,760 one of the oldest debugging techniques because it 640 00:30:20,760 --> 00:30:24,540 allows us humans to see what's going on inside of the computer 641 00:30:24,540 --> 00:30:29,160 by printing out text or variables whose values we might want to know. 642 00:30:29,160 --> 00:30:31,020 Rubber duck debugging, for those unfamiliar, 643 00:30:31,020 --> 00:30:34,920 is literally holding up a rubber duck on your hand or on your desk 644 00:30:34,920 --> 00:30:37,830 and talking to that rubber duck, explaining to the duck 645 00:30:37,830 --> 00:30:41,550 what you think your code is doing or what you want your code to do. 646 00:30:41,550 --> 00:30:45,690 And invariably, in talking out your code, it's quite common for people 647 00:30:45,690 --> 00:30:48,810 to realize, oh, that made no sense what I just 648 00:30:48,810 --> 00:30:52,380 said to the duck, let alone the weird fact you're talking to the duck. 649 00:30:52,380 --> 00:30:54,360 Or you realize, oh, no. 650 00:30:54,360 --> 00:30:57,240 I should be thinking about this differently just in hearing yourself 651 00:30:57,240 --> 00:30:57,990 talk. 652 00:30:57,990 --> 00:31:01,080 A more social way to do that is to have a friend or a colleague 653 00:31:01,080 --> 00:31:04,470 or someone on a video conference just to tell them about your code. 654 00:31:04,470 --> 00:31:09,480 But in general, talking through problems can save significant amounts of time. 655 00:31:09,480 --> 00:31:13,680 I can't tell you how many times I have spent minutes, hours, trying 656 00:31:13,680 --> 00:31:16,320 to fix some bug in code I wrote. 657 00:31:16,320 --> 00:31:22,290 And then I finally get up the nerve to reach out to Colton or to Brian 658 00:31:22,290 --> 00:31:24,810 and start talking to them about the problem. 659 00:31:24,810 --> 00:31:28,770 And even if they don't say something sometimes, do I realize, oh, that's it. 660 00:31:28,770 --> 00:31:29,910 Goodbye. 661 00:31:29,910 --> 00:31:32,070 And it's really a helpful constructive process 662 00:31:32,070 --> 00:31:35,130 to have that approach to collaboration. 663 00:31:35,130 --> 00:31:36,782 As for tools, I do think this varies. 664 00:31:36,782 --> 00:31:38,490 And in fact, Colton, do you want to speak 665 00:31:38,490 --> 00:31:42,498 to some of the different debugging techniques in various languages? 666 00:31:42,498 --> 00:31:43,290 COLTON OGDEN: Sure. 667 00:31:43,290 --> 00:31:46,860 So I'll echo what you said. 668 00:31:46,860 --> 00:31:49,418 Amongst all languages, I typically do like-- 669 00:31:49,418 --> 00:31:51,210 and I know it's not super encouraged, but I 670 00:31:51,210 --> 00:31:53,752 do like to use print statements because it's just an easy way 671 00:31:53,752 --> 00:31:56,140 to dump a variable and its output to the console. 672 00:31:56,140 --> 00:31:59,280 And you can just see, oh, my variable actually isn't getting a value. 673 00:31:59,280 --> 00:32:01,880 Or it's 0, and it shouldn't be 0. 674 00:32:01,880 --> 00:32:05,010 But if you're in a visual environment-- so I spend a lot of time 675 00:32:05,010 --> 00:32:06,300 doing web dev these days. 676 00:32:06,300 --> 00:32:07,960 And I've spent time in Unity as well. 677 00:32:07,960 --> 00:32:09,752 Both of those are very visual environments. 678 00:32:09,752 --> 00:32:12,940 And you have the chance to actually inspect a lot more than just variables 679 00:32:12,940 --> 00:32:13,440 and memory. 680 00:32:13,440 --> 00:32:16,640 You can actually look at a piece of the div. 681 00:32:16,640 --> 00:32:20,460 If you're building a website, and you click on Chrome Developer Tools, 682 00:32:20,460 --> 00:32:23,190 you can actually click on different pieces of what you're doing 683 00:32:23,190 --> 00:32:25,920 and look whether your JavaScript is actually 684 00:32:25,920 --> 00:32:28,230 affecting something or something else. 685 00:32:28,230 --> 00:32:32,610 And Unity is kind of the same way, where you can at runtime actually inspect 686 00:32:32,610 --> 00:32:34,060 all your variables. 687 00:32:34,060 --> 00:32:36,750 But if you're doing something like C or C++, 688 00:32:36,750 --> 00:32:40,860 and you don't have an engine to give yourself a visual environment to do 689 00:32:40,860 --> 00:32:45,450 this, you can use GDB, which CS50 teaches to an extent. 690 00:32:45,450 --> 00:32:48,450 And then that will allow you to actually examine your code 691 00:32:48,450 --> 00:32:51,120 as it's running in a lot more detail. 692 00:32:51,120 --> 00:32:52,870 But yeah, it just depends on the language, 693 00:32:52,870 --> 00:32:54,495 depends on the tools for that language. 694 00:32:54,495 --> 00:32:58,390 Python has PDB, Python Debugger, which you can use in Python as well. 695 00:32:58,390 --> 00:33:02,012 So yeah, get familiar with a debugger of some kind. 696 00:33:02,012 --> 00:33:04,470 I mean, also a big part of it, too, is intuition, honestly. 697 00:33:04,470 --> 00:33:06,750 I think as you get more experienced, I think 698 00:33:06,750 --> 00:33:09,570 you do start to see the common patterns crop up. 699 00:33:09,570 --> 00:33:12,540 And when things don't behave in the way that you expect-- and this 700 00:33:12,540 --> 00:33:16,590 is going environment-centric-- it can be easy to pick up 701 00:33:16,590 --> 00:33:19,650 on things even subconsciously and look at the right variables 702 00:33:19,650 --> 00:33:23,700 or the right function faster than early on, when you're not necessarily sure, 703 00:33:23,700 --> 00:33:25,990 and it's kind of an unfamiliar territory. 704 00:33:25,990 --> 00:33:27,558 I think just doing a lot of-- 705 00:33:27,558 --> 00:33:30,350 it's the baseline answer to a lot of questions in computer science. 706 00:33:30,350 --> 00:33:33,930 It's just do more exercises, do more programs, and get familiar. 707 00:33:33,930 --> 00:33:37,260 But with this specifically, also getting familiar with the tools 708 00:33:37,260 --> 00:33:40,013 at your disposal for debugging can be very helpful as well. 709 00:33:40,013 --> 00:33:42,430 DAVID MALAN: All right, well, thank you for that question. 710 00:33:42,430 --> 00:33:44,700 And indeed, print should be the place you begin, 711 00:33:44,700 --> 00:33:46,908 but not the place you end when it comes to debugging. 712 00:33:46,908 --> 00:33:50,160 Using a proper debugger and learning how to use a proper debugger, 713 00:33:50,160 --> 00:33:52,380 even if it takes you more time the first time around, 714 00:33:52,380 --> 00:33:57,160 is absolutely a long-term solution as well. 715 00:33:57,160 --> 00:34:00,570 Let's go next to Emily, if you'd like to say hello and where you're from 716 00:34:00,570 --> 00:34:04,130 and what your question is. 717 00:34:04,130 --> 00:34:04,820 AUDIENCE: Hi. 718 00:34:04,820 --> 00:34:05,670 I'm Emily. 719 00:34:05,670 --> 00:34:07,640 I'm from Mexico. 720 00:34:07,640 --> 00:34:08,540 Can you guys hear me? 721 00:34:08,540 --> 00:34:09,168 I think-- 722 00:34:09,168 --> 00:34:10,210 DAVID MALAN: We can, yes. 723 00:34:10,210 --> 00:34:11,010 Welcome. 724 00:34:11,010 --> 00:34:12,080 AUDIENCE: OK. 725 00:34:12,080 --> 00:34:18,050 So against all odds with this COVID thing, I got my first job in marketing. 726 00:34:18,050 --> 00:34:19,442 DAVID MALAN: [INAUDIBLE] 727 00:34:19,442 --> 00:34:20,150 AUDIENCE: Thanks. 728 00:34:20,150 --> 00:34:24,800 And the thing is the people that I work with don't know how to code 729 00:34:24,800 --> 00:34:26,820 or don't know how to program. 730 00:34:26,820 --> 00:34:32,679 So I was wondering if you could give me some ideas because I [AUDIO OUT] 731 00:34:32,679 --> 00:34:35,739 want to incorporate computer science into what I do. 732 00:34:35,739 --> 00:34:37,719 But I have no idea where to start. 733 00:34:37,719 --> 00:34:41,620 And the people that I work with know a lot about marketing, but not 734 00:34:41,620 --> 00:34:43,790 necessarily about computer science. 735 00:34:43,790 --> 00:34:47,800 So what are some good ways that I could potentially 736 00:34:47,800 --> 00:34:55,330 mix the two things, like computers and marketing? 737 00:34:55,330 --> 00:34:57,295 I don't know if I made myself clear. 738 00:34:57,295 --> 00:34:58,170 DAVID MALAN: You did. 739 00:34:58,170 --> 00:34:58,670 You did. 740 00:34:58,670 --> 00:35:01,110 And I think both Brian and I perhaps can respond to this. 741 00:35:01,110 --> 00:35:04,230 One of my first jobs after college wasn't working in marketing, 742 00:35:04,230 --> 00:35:08,040 but working in customer service, where my colleagues, too, really 743 00:35:08,040 --> 00:35:11,760 didn't have any computer science background, no programming background. 744 00:35:11,760 --> 00:35:15,480 And even my job was not to program and not to do CS per se. 745 00:35:15,480 --> 00:35:17,820 It was just to support some of this company's customers 746 00:35:17,820 --> 00:35:20,020 on the phone or email or the like. 747 00:35:20,020 --> 00:35:23,310 But what I realized after getting to know my colleagues 748 00:35:23,310 --> 00:35:27,630 and understanding their process every day of working at their own jobs 749 00:35:27,630 --> 00:35:31,170 was there was a lot of opportunities to improve efficiency. 750 00:35:31,170 --> 00:35:33,000 There was a lot of manual labor that they 751 00:35:33,000 --> 00:35:35,370 were doing, whether with their computer or paper 752 00:35:35,370 --> 00:35:39,180 or the like, that felt like, hey, I, as a computer science major, 753 00:35:39,180 --> 00:35:40,380 could improve this. 754 00:35:40,380 --> 00:35:43,170 I could speed this up and free them up to spend time 755 00:35:43,170 --> 00:35:44,558 on more interesting things. 756 00:35:44,558 --> 00:35:46,350 So I remember one of the first things I did 757 00:35:46,350 --> 00:35:48,810 was write some kind of web application that 758 00:35:48,810 --> 00:35:54,210 allowed all of the non-technical people to automatically email customers 759 00:35:54,210 --> 00:35:57,690 the equivalent of form letters, I think it was-- so automatically generated 760 00:35:57,690 --> 00:35:59,790 emails that were somewhat customized. 761 00:35:59,790 --> 00:36:04,800 And after that, I became the customer services team in-house developer, 762 00:36:04,800 --> 00:36:07,238 even though we had a development team. 763 00:36:07,238 --> 00:36:09,780 And that's just one thought that's not specific to marketing. 764 00:36:09,780 --> 00:36:12,660 But I think now that you're in a new world and with new people, 765 00:36:12,660 --> 00:36:15,870 undoubtedly, you'll see a lot of inefficiencies or opportunities 766 00:36:15,870 --> 00:36:17,620 to do things differently or better. 767 00:36:17,620 --> 00:36:19,770 And you will become everyone's best friend 768 00:36:19,770 --> 00:36:23,220 by knowing how to do those things technically. 769 00:36:23,220 --> 00:36:26,220 So I would consider that kind of a watchful eye. 770 00:36:26,220 --> 00:36:28,260 And Brian, your thoughts? 771 00:36:28,260 --> 00:36:30,180 BRIAN YU: Yeah, I was also going to suggest 772 00:36:30,180 --> 00:36:33,460 looking for areas where you can automate things or make things more efficient. 773 00:36:33,460 --> 00:36:36,240 The other thing I might suggest is in a lot of industry, 774 00:36:36,240 --> 00:36:38,850 and I'm sure marketing as well, your team probably 775 00:36:38,850 --> 00:36:41,550 has access to a lot of data-- data about customers 776 00:36:41,550 --> 00:36:44,553 and how effective your particular marketing campaigns have been. 777 00:36:44,553 --> 00:36:46,720 And one thing that computer science is quite good at 778 00:36:46,720 --> 00:36:49,080 is just data analysis-- that if you can write a script 779 00:36:49,080 --> 00:36:51,420 to be able to look through some data and draw 780 00:36:51,420 --> 00:36:53,940 some interesting or useful conclusions, that 781 00:36:53,940 --> 00:36:57,150 can be an often interesting place to start and something 782 00:36:57,150 --> 00:36:59,790 that could potentially produce very useful results. 783 00:36:59,790 --> 00:37:02,350 So I might look for what data your team has access to 784 00:37:02,350 --> 00:37:04,500 and thinking about what you could do with that data 785 00:37:04,500 --> 00:37:05,820 by writing a computer program. 786 00:37:05,820 --> 00:37:07,028 And see where that takes you. 787 00:37:07,028 --> 00:37:09,940 And congratulations on the job, too. 788 00:37:09,940 --> 00:37:11,620 DAVID MALAN: Indeed, congrats. 789 00:37:11,620 --> 00:37:17,045 Let's go next to Taylor, if you'd like to say hello and where you're from. 790 00:37:17,045 --> 00:37:18,940 AUDIENCE: Hi. 791 00:37:18,940 --> 00:37:24,810 I am from Massachusetts, living in Somerville right now, not far 792 00:37:24,810 --> 00:37:26,190 from Harvard. 793 00:37:26,190 --> 00:37:33,030 My question is about summer courses in the Harvard Summer School. 794 00:37:33,030 --> 00:37:41,400 I'm currently registered for E89, which is an intro deep-learning course, 795 00:37:41,400 --> 00:37:48,570 though I'm considering that course or E80, the AI course with Brian. 796 00:37:48,570 --> 00:37:50,880 I just took CS50 this spring. 797 00:37:50,880 --> 00:37:56,760 And I'm curious which one you might recommend for who 798 00:37:56,760 --> 00:38:02,340 and what students in each course might expect 799 00:38:02,340 --> 00:38:04,320 to get out of the one versus the other. 800 00:38:04,320 --> 00:38:05,070 DAVID MALAN: Yeah. 801 00:38:05,070 --> 00:38:07,320 For those unfamiliar, in addition to the courses 802 00:38:07,320 --> 00:38:10,050 that Brian and I teach and Colton teaches on edX, 803 00:38:10,050 --> 00:38:12,300 Harvard also has an extension school, the Division 804 00:38:12,300 --> 00:38:16,320 of Continuing Education, that offers courses for adults and younger students 805 00:38:16,320 --> 00:38:18,970 generally for credit, for transcripts, and so forth. 806 00:38:18,970 --> 00:38:20,820 There is tuition for those courses, but it 807 00:38:20,820 --> 00:38:24,073 allows students to actually pursue degrees online, 808 00:38:24,073 --> 00:38:26,490 unlike what you could do, for instance, via OpenCourseWare 809 00:38:26,490 --> 00:38:28,200 or a platform like edX. 810 00:38:28,200 --> 00:38:30,125 I do hear good things about E80. 811 00:38:30,125 --> 00:38:32,250 And perhaps Brian could generalize the answer, too, 812 00:38:32,250 --> 00:38:35,580 to be about not only E80 and E89 at the school, 813 00:38:35,580 --> 00:38:39,117 but about AI and deep learning more generally. 814 00:38:39,117 --> 00:38:40,200 BRIAN YU: Yeah, certainly. 815 00:38:40,200 --> 00:38:43,777 So these terms come up a lot in terms of like artificial intelligence, 816 00:38:43,777 --> 00:38:45,110 deep learning, machine learning. 817 00:38:45,110 --> 00:38:48,780 And it's a good question as to how these things relate to each other 818 00:38:48,780 --> 00:38:50,820 and what they all actually mean. 819 00:38:50,820 --> 00:38:55,020 To be very general about it, I would consider artificial intelligence or AI 820 00:38:55,020 --> 00:38:59,070 to be the superset of all of them, just to be generally referring to any time 821 00:38:59,070 --> 00:39:02,730 we're talking about building systems that can do things 822 00:39:02,730 --> 00:39:04,710 that we would consider to be intelligent, 823 00:39:04,710 --> 00:39:07,500 so whether that means them doing something rational 824 00:39:07,500 --> 00:39:10,470 or doing something that seems human-like. 825 00:39:10,470 --> 00:39:14,100 Within artificial intelligence, a subfield within that 826 00:39:14,100 --> 00:39:16,980 would be the field of machine learning, which is specifically 827 00:39:16,980 --> 00:39:20,850 about how do you train a computer to be able to do a task that it wasn't 828 00:39:20,850 --> 00:39:22,700 explicitly told how to do? 829 00:39:22,700 --> 00:39:25,290 And within machine learning is an even smaller subfield 830 00:39:25,290 --> 00:39:28,600 that is quite popular now which is that of deep learning. 831 00:39:28,600 --> 00:39:30,420 And deep learning is a specific technique 832 00:39:30,420 --> 00:39:34,830 within machine learning-- namely, the use of multi-layer neural networks 833 00:39:34,830 --> 00:39:37,088 to be able to solve problems. 834 00:39:37,088 --> 00:39:38,880 And it turns out, using neural networks has 835 00:39:38,880 --> 00:39:42,810 been able to solve a really wide variety of different types of problems 836 00:39:42,810 --> 00:39:45,480 within computer science and a whole bunch of different fields. 837 00:39:45,480 --> 00:39:48,990 And so as a result, it's a very popular and interesting topic 838 00:39:48,990 --> 00:39:51,540 within artificial intelligence nowadays. 839 00:39:51,540 --> 00:39:54,030 So in general, if you're taking a deep-learning class, 840 00:39:54,030 --> 00:39:57,280 it's going to focus very specifically on that one topic, 841 00:39:57,280 --> 00:40:00,257 going much more in-depth into neural networks specifically. 842 00:40:00,257 --> 00:40:03,090 Whereas artificial intelligence is going to be a little bit broader. 843 00:40:03,090 --> 00:40:05,173 If you're taking an artificial intelligence class, 844 00:40:05,173 --> 00:40:07,510 you'll probably spend some time on neural networks, 845 00:40:07,510 --> 00:40:09,510 but also spend some time on other techniques 846 00:40:09,510 --> 00:40:12,797 for how to design and build intelligent systems as well. 847 00:40:12,797 --> 00:40:14,200 DAVID MALAN: Nice. 848 00:40:14,200 --> 00:40:16,770 And while E89 is not freely available on edX, 849 00:40:16,770 --> 00:40:20,680 allow me to paste the URL of Brian's AI class, 850 00:40:20,680 --> 00:40:23,580 otherwise known as E80 at Harvard, which is indeed 851 00:40:23,580 --> 00:40:27,740 freely available via that platform and YouTube and the like. 852 00:40:27,740 --> 00:40:30,000 Well, best of luck with choosing, Taylor. 853 00:40:30,000 --> 00:40:31,890 How about over next to Akash? 854 00:40:31,890 --> 00:40:34,020 If you'd like to say hello and where you're from. 855 00:40:34,020 --> 00:40:36,162 And I hope I'm pronouncing your name right, too. 856 00:40:36,162 --> 00:40:37,086 AUDIENCE: Hey, David. 857 00:40:37,086 --> 00:40:39,420 Hi. 858 00:40:39,420 --> 00:40:40,390 I'm from India. 859 00:40:40,390 --> 00:40:45,630 And I wanted to ask about systems reliant on architecture. 860 00:40:45,630 --> 00:40:49,137 So I've been a software engineer for some time. 861 00:40:49,137 --> 00:40:50,970 But I still don't get a lot of opportunities 862 00:40:50,970 --> 00:40:53,840 to design a complete system. 863 00:40:53,840 --> 00:40:58,930 And I want to get better at making decisions like which DB to use, 864 00:40:58,930 --> 00:41:02,790 and from infrastructure to service stuff like load balancers 865 00:41:02,790 --> 00:41:08,400 and servers [INAUDIBLE] So how can I get better and then get some hands-on? 866 00:41:08,400 --> 00:41:10,400 DAVID MALAN: Yeah, it's a really good question-- 867 00:41:10,400 --> 00:41:14,610 how to go about getting better at the operations side of running web 868 00:41:14,610 --> 00:41:17,465 applications or apps more generally. 869 00:41:17,465 --> 00:41:20,590 It's very commonly the case that if you're working in software development, 870 00:41:20,590 --> 00:41:23,340 especially in a large company, for those unfamiliar, that you 871 00:41:23,340 --> 00:41:26,348 tend to be very focused on a pretty narrow piece of the puzzle. 872 00:41:26,348 --> 00:41:27,390 Maybe it's the front end. 873 00:41:27,390 --> 00:41:28,410 Maybe it's the back end. 874 00:41:28,410 --> 00:41:30,300 Maybe it's the database stuff. 875 00:41:30,300 --> 00:41:34,050 But it's not always the case that you have a complete picture of everything 876 00:41:34,050 --> 00:41:37,200 and the responsibility for everything, for better or for worse. 877 00:41:37,200 --> 00:41:39,720 But very increasingly common these days is 878 00:41:39,720 --> 00:41:42,330 what's generally known as DevOps, which is 879 00:41:42,330 --> 00:41:44,970 a conjunction of developments and operations, 880 00:41:44,970 --> 00:41:46,980 where development means writing the code. 881 00:41:46,980 --> 00:41:49,465 Operations means essentially running the code 882 00:41:49,465 --> 00:41:51,840 or setting up the servers that are going to run the code, 883 00:41:51,840 --> 00:41:55,140 setting up the firewalls that are going to protect the code, and so forth. 884 00:41:55,140 --> 00:42:00,450 And perhaps the best way to get good or experienced with DevOps 885 00:42:00,450 --> 00:42:04,290 is really to try to find some project of your own that you can take on, 886 00:42:04,290 --> 00:42:07,390 even if it's just an application for fun. 887 00:42:07,390 --> 00:42:09,460 Maybe it's some side project for work. 888 00:42:09,460 --> 00:42:12,790 Maybe it's a gig that you're doing for pay on the side, 889 00:42:12,790 --> 00:42:17,060 but something where you will have full control over the entire user 890 00:42:17,060 --> 00:42:19,290 experience and the hosting thereof. 891 00:42:19,290 --> 00:42:21,590 And I would encourage you, if you can, to try 892 00:42:21,590 --> 00:42:26,240 using services like Amazon's Web Services or Microsoft Azure 893 00:42:26,240 --> 00:42:29,390 or Google Compute Platform, each of which 894 00:42:29,390 --> 00:42:34,130 allow you more fine-grained control over your servers, over your memory, 895 00:42:34,130 --> 00:42:37,580 over your disk, over your firewalls, over everything. 896 00:42:37,580 --> 00:42:42,020 Then do higher-level services like Heroku or DreamHost 897 00:42:42,020 --> 00:42:46,520 or GoDaddy or higher platforms that hide all of those details for you. 898 00:42:46,520 --> 00:42:49,790 The downside is it can be complicated, and it's 899 00:42:49,790 --> 00:42:52,830 easy to break things when you're in charge of everything. 900 00:42:52,830 --> 00:42:55,730 But I think if you can find a personal or professional project that 901 00:42:55,730 --> 00:42:59,700 is yours to own and to figure out, it's the best way to learn. 902 00:42:59,700 --> 00:43:03,680 And so for instance, me-- some 10 years ago now, when Amazon Web Services, 903 00:43:03,680 --> 00:43:07,670 which is Amazon's cloud platform, was just coming into existence-- 904 00:43:07,670 --> 00:43:10,490 my own professional and personal goal was 905 00:43:10,490 --> 00:43:14,150 to try to replicate a cluster of servers that we 906 00:43:14,150 --> 00:43:16,730 had on campus at Harvard at the time, but move 907 00:43:16,730 --> 00:43:19,010 it into the cloud because I wanted to figure out 908 00:43:19,010 --> 00:43:22,070 how I could scale it to be bigger and handle more students, 909 00:43:22,070 --> 00:43:25,670 how I could automate certain processes, how I could have route or administrator 910 00:43:25,670 --> 00:43:27,980 access, which I didn't have on campus. 911 00:43:27,980 --> 00:43:30,650 And because I had a goal that I cared about, 912 00:43:30,650 --> 00:43:33,140 and it was going to solve a problem I had, 913 00:43:33,140 --> 00:43:35,990 it truly motivated me to figure everything out. 914 00:43:35,990 --> 00:43:39,860 And eventually, I figured out, wow, I don't want to run everything myself, 915 00:43:39,860 --> 00:43:41,520 but I know now how to do it. 916 00:43:41,520 --> 00:43:44,180 And I can have thoughtful discussions and design discussions 917 00:43:44,180 --> 00:43:46,720 around how to do those same things. 918 00:43:46,720 --> 00:43:47,990 So hope that helps. 919 00:43:47,990 --> 00:43:50,660 And so in short, sign up for a free trial 920 00:43:50,660 --> 00:43:55,080 account on Amazon or Google or Azure and see if that helps. 921 00:43:55,080 --> 00:43:59,238 All right, well, let's next go to Mateen, if I'm saying it correctly. 922 00:43:59,238 --> 00:44:01,280 If you'd like to say hello and where you're from? 923 00:44:01,280 --> 00:44:04,160 924 00:44:04,160 --> 00:44:04,980 AUDIENCE: Hi. 925 00:44:04,980 --> 00:44:09,810 I'm actually Persian, but I'm calling from Texas. 926 00:44:09,810 --> 00:44:11,250 DAVID MALAN: Nice to meet you. 927 00:44:11,250 --> 00:44:16,830 AUDIENCE: I just signed up for both CS50 and the game development class 928 00:44:16,830 --> 00:44:18,330 at the same time. 929 00:44:18,330 --> 00:44:23,640 And I have some experience with C Sharp and Java, 930 00:44:23,640 --> 00:44:25,170 that was like a few years ago. 931 00:44:25,170 --> 00:44:30,030 And I'm just trying to get back to programming. 932 00:44:30,030 --> 00:44:33,410 And also, I didn't see any due dates on the game development class, 933 00:44:33,410 --> 00:44:37,950 so I'm assuming that it's like the CS50, and it's by the end of 2020. 934 00:44:37,950 --> 00:44:44,100 So my question is, would you suggest that I solely focus on the CS50 class 935 00:44:44,100 --> 00:44:47,220 first, try to finish that, and then move on to CS50G? 936 00:44:47,220 --> 00:44:52,530 Or should I try to take them at the same time? 937 00:44:52,530 --> 00:44:54,060 What are your suggestions? 938 00:44:54,060 --> 00:44:54,810 DAVID MALAN: Sure. 939 00:44:54,810 --> 00:44:55,685 Really good question. 940 00:44:55,685 --> 00:44:59,120 Let's go straight to the source if, Colton, you'd like to advise? 941 00:44:59,120 --> 00:44:59,940 COLTON OGDEN: Sure. 942 00:44:59,940 --> 00:45:01,690 Personally, when people ask this question, 943 00:45:01,690 --> 00:45:03,900 I usually like to say do CS50 first. 944 00:45:03,900 --> 00:45:06,330 Now, since you said that you had some prior experience, 945 00:45:06,330 --> 00:45:09,900 you might be in a position where you can actually do both of them concurrently. 946 00:45:09,900 --> 00:45:14,040 But the games course is a lot of code by design, really, 947 00:45:14,040 --> 00:45:15,900 because games are a lot of code. 948 00:45:15,900 --> 00:45:18,150 And CS50 does ramp you up a bit. 949 00:45:18,150 --> 00:45:20,070 It doesn't start with a ton of code per se, 950 00:45:20,070 --> 00:45:23,130 although even the first few pieces are fairly intentionally a little bit 951 00:45:23,130 --> 00:45:25,020 rigorous. 952 00:45:25,020 --> 00:45:29,280 But yeah, I would say it would probably be a net positive for you 953 00:45:29,280 --> 00:45:31,380 in the long term to do CS50 first. 954 00:45:31,380 --> 00:45:35,570 Focus on that, rather than divert your attention between two at once or even 955 00:45:35,570 --> 00:45:37,320 do more of the game stuff first, because I 956 00:45:37,320 --> 00:45:39,810 think you'll have more questions than answers, especially early on. 957 00:45:39,810 --> 00:45:43,050 And that might get frustrating, although I don't know how personally you 958 00:45:43,050 --> 00:45:43,650 might deal with that. 959 00:45:43,650 --> 00:45:46,067 Maybe that's totally fine because that's kind of how I am. 960 00:45:46,067 --> 00:45:49,650 I just like to do whatever I feel like doing and get things done. 961 00:45:49,650 --> 00:45:52,680 But practically speaking, I think the short answer is CS50 first 962 00:45:52,680 --> 00:45:55,730 and then games would be what I recommend to most people. 963 00:45:55,730 --> 00:45:56,480 DAVID MALAN: Nice. 964 00:45:56,480 --> 00:45:59,020 Well, thanks for the question, Mateen. 965 00:45:59,020 --> 00:46:02,520 Let's go next to Musadiq, if you'd like to say hello and where you're from. 966 00:46:02,520 --> 00:46:05,042 And I hope I pronounce that right as well. 967 00:46:05,042 --> 00:46:07,000 AUDIENCE: Hello, this is Musadiq from Pakistan. 968 00:46:07,000 --> 00:46:07,810 Thank you. 969 00:46:07,810 --> 00:46:10,270 And the question is about how would you recommend someone 970 00:46:10,270 --> 00:46:14,740 who would just want to teach CS50 at the local schools, just in terms of content 971 00:46:14,740 --> 00:46:19,300 and how to inculcate the students with interest to learn about computer 972 00:46:19,300 --> 00:46:22,120 science and the things like this. 973 00:46:22,120 --> 00:46:22,870 DAVID MALAN: Yeah. 974 00:46:22,870 --> 00:46:25,450 Really good question, and thank you for the interest 975 00:46:25,450 --> 00:46:27,610 in teaching CS50 in some form. 976 00:46:27,610 --> 00:46:31,060 Let me paste a couple of resources here into the chat window. 977 00:46:31,060 --> 00:46:35,440 For those unfamiliar, in addition to CS50 being freely available on edX, 978 00:46:35,440 --> 00:46:38,590 we also have on harvard.edu our own version 979 00:46:38,590 --> 00:46:41,050 of the same OpenCourseWare that has all of the course's 980 00:46:41,050 --> 00:46:43,760 materials and a few others as well. 981 00:46:43,760 --> 00:46:47,080 We do have this network of high school teachers and university 982 00:46:47,080 --> 00:46:50,440 teachers and students and non-profits that wonderfully 983 00:46:50,440 --> 00:46:54,850 have chosen to adopt or adapt CS50's curriculum in some form, such 984 00:46:54,850 --> 00:46:57,130 that they teach the class locally. 985 00:46:57,130 --> 00:46:58,990 And how you can do this can vary, really, 986 00:46:58,990 --> 00:47:02,740 on what you think would work best for the students you have in mind. 987 00:47:02,740 --> 00:47:07,690 For instance, some teachers have adopted CS50 outright, so to speak. 988 00:47:07,690 --> 00:47:11,260 And they simply have their students watch the lectures online, 989 00:47:11,260 --> 00:47:15,100 do the problem sets online, submit online, and so forth, and really use 990 00:47:15,100 --> 00:47:18,490 the course as it exists on that URL I just pasted. 991 00:47:18,490 --> 00:47:22,390 But what they then do locally is help students with the problem sets. 992 00:47:22,390 --> 00:47:25,450 They hold the equivalent of office hours, not unlike these, 993 00:47:25,450 --> 00:47:28,680 but much more code-centric and generally in-person. 994 00:47:28,680 --> 00:47:31,300 And they might even hold what we at Harvard call sections. 995 00:47:31,300 --> 00:47:35,800 Sections are smaller classes led by teaching assistants or teaching fellows 996 00:47:35,800 --> 00:47:38,200 that guide students through additional examples, 997 00:47:38,200 --> 00:47:40,510 answer questions about material that they might 998 00:47:40,510 --> 00:47:42,670 have seen in the most recent lecture. 999 00:47:42,670 --> 00:47:46,630 Other teachers, by contrast, choose to adapt the course 1000 00:47:46,630 --> 00:47:48,880 instead of adopting it outright. 1001 00:47:48,880 --> 00:47:53,320 And by that, I mean the teachers might watch the lectures that I gave. 1002 00:47:53,320 --> 00:47:55,280 They might read through the problem sets. 1003 00:47:55,280 --> 00:47:57,070 But then they adapt those resources. 1004 00:47:57,070 --> 00:48:00,640 They teach the class themselves, but maybe using some of the same examples-- 1005 00:48:00,640 --> 00:48:04,750 maybe using my slides, but not my voice, using their own instead. 1006 00:48:04,750 --> 00:48:08,467 They might chop up larger problem sets into smaller pieces 1007 00:48:08,467 --> 00:48:10,300 so that they can spread it out, so that they 1008 00:48:10,300 --> 00:48:12,900 can work through things more slowly. 1009 00:48:12,900 --> 00:48:16,450 And they really do what they think is best for their own students. 1010 00:48:16,450 --> 00:48:19,960 What I can say next month, and we're in the midst of planning this now-- 1011 00:48:19,960 --> 00:48:23,170 Brian, Ramon, and I, in fact, with CS50's team-- 1012 00:48:23,170 --> 00:48:26,590 is a workshop that we hold annually for teachers 1013 00:48:26,590 --> 00:48:30,400 interested, like you, in adopting or adapting the course somehow. 1014 00:48:30,400 --> 00:48:33,820 I've just pasted an email address into the chat-- 1015 00:48:33,820 --> 00:48:37,020 outreach@cs50.harvard.edu. 1016 00:48:37,020 --> 00:48:40,240 And Musadiq, if you want to follow up more personally with an email, 1017 00:48:40,240 --> 00:48:43,510 we can connect you with the team and help you think about what next steps 1018 00:48:43,510 --> 00:48:44,620 you might want to take. 1019 00:48:44,620 --> 00:48:47,560 And in fact, if anyone else out there is interested 1020 00:48:47,560 --> 00:48:53,920 not in taking CS50, as you might already be, but in teaching CS50, 1021 00:48:53,920 --> 00:48:57,100 allow me to paste the URL of the pre-registration form 1022 00:48:57,100 --> 00:49:00,760 here into the chat via which you can register for this workshop. 1023 00:49:00,760 --> 00:49:03,280 It would have been here at Harvard in June. 1024 00:49:03,280 --> 00:49:06,940 It's now going to be online via Zoom in June, 1025 00:49:06,940 --> 00:49:09,890 so many more people can participate. 1026 00:49:09,890 --> 00:49:13,660 Well, thank you for the interest and for the question itself. 1027 00:49:13,660 --> 00:49:18,040 Well, let's go next to Mithilesh, if you would like to say hello 1028 00:49:18,040 --> 00:49:20,383 and where you are from. 1029 00:49:20,383 --> 00:49:21,550 AUDIENCE: So I'm from India. 1030 00:49:21,550 --> 00:49:26,960 And first of all, I'd like to thank all of team members 1031 00:49:26,960 --> 00:49:31,140 for coming up with such a fantastic course CS50. 1032 00:49:31,140 --> 00:49:34,250 And I'm in [INAUDIBLE] My question is, what 1033 00:49:34,250 --> 00:49:40,970 is the next course in the pipeline from the [INAUDIBLE] team members? 1034 00:49:40,970 --> 00:49:42,780 DAVID MALAN: That's a really good question. 1035 00:49:42,780 --> 00:49:44,180 We have made no decisions yet. 1036 00:49:44,180 --> 00:49:45,620 We have been brainstorming. 1037 00:49:45,620 --> 00:49:47,990 And in fact, we would welcome from people in the chat 1038 00:49:47,990 --> 00:49:53,710 or via social media suggestions for what might be of most help to you. 1039 00:49:53,710 --> 00:49:56,210 Brian, do you want to perhaps share some of the things we've 1040 00:49:56,210 --> 00:49:59,865 been thinking about, even though we've made no decisions just yet? 1041 00:49:59,865 --> 00:50:00,740 BRIAN YU: Yeah, sure. 1042 00:50:00,740 --> 00:50:04,370 So upcoming in about a month is going to be a refreshed version of the web 1043 00:50:04,370 --> 00:50:05,330 programming class. 1044 00:50:05,330 --> 00:50:07,170 That's been around for about two years now, 1045 00:50:07,170 --> 00:50:12,058 but we've updated it to focus on some more modern web frameworks, 1046 00:50:12,058 --> 00:50:14,600 in particular, the latest version of Django, a web framework, 1047 00:50:14,600 --> 00:50:18,890 as well as React, a popular front-end framework developed by Facebook. 1048 00:50:18,890 --> 00:50:21,210 So that's something that's coming up later this year. 1049 00:50:21,210 --> 00:50:23,085 But beyond that, as David mentioned, we don't 1050 00:50:23,085 --> 00:50:25,670 have anything in particular in mind, but definitely 1051 00:50:25,670 --> 00:50:29,120 been exploring possible other topics within computer science, 1052 00:50:29,120 --> 00:50:33,320 thinking about anything from some of the more theoretical ideas in computer 1053 00:50:33,320 --> 00:50:36,350 science, like the discrete mathematics that was talked about 1054 00:50:36,350 --> 00:50:39,800 and the algorithm design, to other types of programming-- 1055 00:50:39,800 --> 00:50:43,450 things like functional programming and logic programming 1056 00:50:43,450 --> 00:50:45,450 and different approaches to programming as well. 1057 00:50:45,450 --> 00:50:48,470 So certainly, feel free to let us know what things you would like to see 1058 00:50:48,470 --> 00:50:50,053 and what topics you are interested in. 1059 00:50:50,053 --> 00:50:53,810 But we don't currently have a definitive answer for what will be next. 1060 00:50:53,810 --> 00:50:54,560 DAVID MALAN: Yeah. 1061 00:50:54,560 --> 00:50:56,368 Stay tuned, indeed, for more. 1062 00:50:56,368 --> 00:50:57,410 Well, thank you for that. 1063 00:50:57,410 --> 00:51:02,288 Can we go next to Nathan, if you'd like to say hello and where you're from. 1064 00:51:02,288 --> 00:51:02,830 AUDIENCE: Hi. 1065 00:51:02,830 --> 00:51:06,410 I'm Nathan, 27, from London. 1066 00:51:06,410 --> 00:51:11,170 So my question really is if you are interested in pursuing computer 1067 00:51:11,170 --> 00:51:13,900 programming, say, as a career, should you 1068 00:51:13,900 --> 00:51:17,950 learn a broad aspect of all languages that you possibly can, really 1069 00:51:17,950 --> 00:51:20,410 focus down and become an expert on one language, 1070 00:51:20,410 --> 00:51:24,640 or just find out what programming languages are 1071 00:51:24,640 --> 00:51:28,216 relevant to the field you want to work in and have a good knowledge of all 1072 00:51:28,216 --> 00:51:28,808 of them? 1073 00:51:28,808 --> 00:51:30,850 DAVID MALAN: Yeah, that's a really good question. 1074 00:51:30,850 --> 00:51:34,370 Colton, how do you think about this? 1075 00:51:34,370 --> 00:51:37,270 COLTON OGDEN: So I like both approaches. 1076 00:51:37,270 --> 00:51:40,870 I think early on, it makes more sense to go deep into one area 1077 00:51:40,870 --> 00:51:44,830 because I think going too thin early on makes it hard 1078 00:51:44,830 --> 00:51:51,310 for you to be particularly competent enough to get a job, I think. 1079 00:51:51,310 --> 00:51:54,070 I think, because typically in a job, you're going to be doing-- 1080 00:51:54,070 --> 00:51:56,410 usually using-- I mean, depends on where you're working. 1081 00:51:56,410 --> 00:51:59,500 But I think if you're going to work for, say, a web company, 1082 00:51:59,500 --> 00:52:04,380 usually you're dealing with a very small set of technologies. 1083 00:52:04,380 --> 00:52:07,450 Or if you're in games, your engine's in one or two languages, you know? 1084 00:52:07,450 --> 00:52:09,940 It's going to depend on the environment you work in. 1085 00:52:09,940 --> 00:52:12,430 But early on, I would say focus-- 1086 00:52:12,430 --> 00:52:15,640 and especially because you gain more skill in deeper topics 1087 00:52:15,640 --> 00:52:17,470 by going deeper into one language. 1088 00:52:17,470 --> 00:52:21,370 And you learn a few more interesting ways to solve the same problem, 1089 00:52:21,370 --> 00:52:24,985 going beyond loops and if statements and stuff like that, which you learn. 1090 00:52:24,985 --> 00:52:27,610 And you can learn those easily amongst all different languages. 1091 00:52:27,610 --> 00:52:31,828 But every language has its own paradigm or way of thinking about things. 1092 00:52:31,828 --> 00:52:34,870 And you learn those things, and you learn the libraries for each language 1093 00:52:34,870 --> 00:52:37,510 if you're staying in one language and going a little bit deeper 1094 00:52:37,510 --> 00:52:38,380 in that language. 1095 00:52:38,380 --> 00:52:43,145 Now, that said, I think you get a more holistic appreciation for languages 1096 00:52:43,145 --> 00:52:46,270 and the pros and cons of using different languages and, therefore, a better 1097 00:52:46,270 --> 00:52:49,850 ability to choose a language, a framework, or an environment 1098 00:52:49,850 --> 00:52:54,260 once you have sampled a large set of the technologies out there. 1099 00:52:54,260 --> 00:52:57,010 And I think that, after you've got a couple of years experience, 1100 00:52:57,010 --> 00:53:00,850 actually makes you even more useful as a candidate-- 1101 00:53:00,850 --> 00:53:04,300 having deep knowledge in one area, but also a very holistic understanding 1102 00:53:04,300 --> 00:53:05,800 of the landscape. 1103 00:53:05,800 --> 00:53:09,070 At least, to me, I feel like that would be more valuable than somebody who 1104 00:53:09,070 --> 00:53:12,075 only knows one thing or one language. 1105 00:53:12,075 --> 00:53:14,200 But yeah, I think it's going to also heavily depend 1106 00:53:14,200 --> 00:53:16,667 on the environment and the problems you're trying to solve. 1107 00:53:16,667 --> 00:53:17,500 DAVID MALAN: Indeed. 1108 00:53:17,500 --> 00:53:19,180 Well, thank you for that question. 1109 00:53:19,180 --> 00:53:20,830 And we're nearing the end of the hour. 1110 00:53:20,830 --> 00:53:24,120 And we want to be mindful of everyone's time and schedule. 1111 00:53:24,120 --> 00:53:26,940 Before we conclude in just a bit, we have 1112 00:53:26,940 --> 00:53:32,400 a tradition we've started now of taking a group photo via screenshots of Zoom. 1113 00:53:32,400 --> 00:53:34,240 So stay tuned for that in just a moment. 1114 00:53:34,240 --> 00:53:37,230 But we thought we'd take at least one more question here. 1115 00:53:37,230 --> 00:53:41,640 Indeed, our last question-- how about from Josh, if you'd like to say hello 1116 00:53:41,640 --> 00:53:43,447 and where you're from? 1117 00:53:43,447 --> 00:53:44,280 AUDIENCE: All right. 1118 00:53:44,280 --> 00:53:44,970 I'm Josh. 1119 00:53:44,970 --> 00:53:49,500 I'm 16, and I'm from the island of Guam. 1120 00:53:49,500 --> 00:53:55,800 So my question is when you guys were first learning programming a long time 1121 00:53:55,800 --> 00:53:58,410 ago, what kept you motivated? 1122 00:53:58,410 --> 00:54:02,570 And when did programming really click with you? 1123 00:54:02,570 --> 00:54:05,100 DAVID MALAN: Oh, that's a really good question. 1124 00:54:05,100 --> 00:54:08,690 So I think we can probably each answer this one. 1125 00:54:08,690 --> 00:54:14,090 For me, I think it was when I finally started finding personal projects that 1126 00:54:14,090 --> 00:54:15,830 were not academic in nature. 1127 00:54:15,830 --> 00:54:19,970 They weren't homework, but they were actual problems that I wanted to solve. 1128 00:54:19,970 --> 00:54:23,240 That's where I really got into programming and the excitement 1129 00:54:23,240 --> 00:54:26,300 clicked and my thirst for wanting to learn more and figure out 1130 00:54:26,300 --> 00:54:28,625 how to do things differently and better really clicked. 1131 00:54:28,625 --> 00:54:30,500 And in fact, the first thing I can think of-- 1132 00:54:30,500 --> 00:54:32,120 I can paste this into the chat window. 1133 00:54:32,120 --> 00:54:35,780 This is from like literally 20 years ago in Harvard's newspaper 1134 00:54:35,780 --> 00:54:36,950 that I just googled. 1135 00:54:36,950 --> 00:54:39,620 I wrote this program at the time that was called Shuttle Boy. 1136 00:54:39,620 --> 00:54:43,595 And it was this command line program that you could run in a Unix 1137 00:54:43,595 --> 00:54:45,080 or in a Linux environment. 1138 00:54:45,080 --> 00:54:48,370 Before there was Webmail and Gmail, students at Harvard 1139 00:54:48,370 --> 00:54:50,450 use to check their email in a terminal window, 1140 00:54:50,450 --> 00:54:54,800 just like you might be compiling and running your C code or Python code. 1141 00:54:54,800 --> 00:54:57,230 And at the time, there was no GPS. 1142 00:54:57,230 --> 00:54:59,720 But we did have buses and automobiles. 1143 00:54:59,720 --> 00:55:01,580 And so Harvard had a lot of shuttle buses 1144 00:55:01,580 --> 00:55:05,250 that would drive around campus to take students from one location to another. 1145 00:55:05,250 --> 00:55:08,150 But the way you could figure out when the next schedule was you 1146 00:55:08,150 --> 00:55:11,233 picked up this old-school technology, printed paper, 1147 00:55:11,233 --> 00:55:14,150 and you could look up the time that the next shuttle could pick you up 1148 00:55:14,150 --> 00:55:18,680 from location A and take you to B. So for me, this seemed like an opportunity 1149 00:55:18,680 --> 00:55:22,850 to use some of the knowledge that I'd literally just picked up from CS50 1150 00:55:22,850 --> 00:55:25,160 and a follow-on class called CS51. 1151 00:55:25,160 --> 00:55:29,600 And I wanted to implement a program that would make this process much easier, 1152 00:55:29,600 --> 00:55:32,060 so students could check the schedule on their computer, 1153 00:55:32,060 --> 00:55:35,300 then go outside when they know there's going to be a bus there. 1154 00:55:35,300 --> 00:55:36,680 And it was just so gratifying. 1155 00:55:36,680 --> 00:55:39,080 I was lucky that this happened to solve problems, 1156 00:55:39,080 --> 00:55:41,880 not just for me, but for lots of other people on campus. 1157 00:55:41,880 --> 00:55:45,200 And I think several hundred, maybe a couple thousand students at Harvard, 1158 00:55:45,200 --> 00:55:46,820 ended up using this program. 1159 00:55:46,820 --> 00:55:49,850 And what was so cool about that was that it was never done-- 1160 00:55:49,850 --> 00:55:50,650 the program. 1161 00:55:50,650 --> 00:55:54,930 I kept wanting to add more and more features to it, fix bugs and so forth. 1162 00:55:54,930 --> 00:55:57,320 So it really became a passion project. 1163 00:55:57,320 --> 00:55:59,840 And that, I think, for me is when it really clicked-- 1164 00:55:59,840 --> 00:56:03,230 that I'm not just studying a topic in a class. 1165 00:56:03,230 --> 00:56:06,260 I'm not just learning something very mechanical. 1166 00:56:06,260 --> 00:56:09,020 Like, I'm learning something very empowering-- programming 1167 00:56:09,020 --> 00:56:15,110 that can genuinely solve problems that excite me and genuinely help others. 1168 00:56:15,110 --> 00:56:17,875 Brian, any thoughts come to you? 1169 00:56:17,875 --> 00:56:18,500 BRIAN YU: Yeah. 1170 00:56:18,500 --> 00:56:20,465 I think my general story is fairly similar-- 1171 00:56:20,465 --> 00:56:23,173 that when I was first learning, the thing that really inspired me 1172 00:56:23,173 --> 00:56:25,820 was the different types of problems that I was able to solve. 1173 00:56:25,820 --> 00:56:27,612 And when things really started to click was 1174 00:56:27,612 --> 00:56:31,700 when I found a way that I could apply computer science in my life outside 1175 00:56:31,700 --> 00:56:35,660 of computer science to be able to do interesting things and solve problems. 1176 00:56:35,660 --> 00:56:38,390 The one that comes to mind is that in college, I 1177 00:56:38,390 --> 00:56:41,420 was a graphic designer for my college's newspaper. 1178 00:56:41,420 --> 00:56:43,910 And I would often have to late at night be designing 1179 00:56:43,910 --> 00:56:46,130 all of these charts and various different graphics 1180 00:56:46,130 --> 00:56:50,180 in a particular style to put up on our website or to put into print. 1181 00:56:50,180 --> 00:56:53,870 And very often, we're designing a very similar type of graphic again and again 1182 00:56:53,870 --> 00:56:54,680 and again. 1183 00:56:54,680 --> 00:56:58,460 And I remember one day just deciding to write a Python program that would just 1184 00:56:58,460 --> 00:57:00,170 create these graphics for me. 1185 00:57:00,170 --> 00:57:02,240 So I could just type in a few lines of code 1186 00:57:02,240 --> 00:57:04,380 and generate the graphics automatically. 1187 00:57:04,380 --> 00:57:06,800 And that alone just saved me hours that semester. 1188 00:57:06,800 --> 00:57:08,840 I spent maybe half an hour writing a program, 1189 00:57:08,840 --> 00:57:10,970 and immediately, it was making things easier 1190 00:57:10,970 --> 00:57:13,253 for me and for the people that I was working with. 1191 00:57:13,253 --> 00:57:15,170 So that, I think, it really helped it to click 1192 00:57:15,170 --> 00:57:18,500 for me-- being able to write a little bit of code that 1193 00:57:18,500 --> 00:57:19,940 helped us solve a bigger problem. 1194 00:57:19,940 --> 00:57:20,690 DAVID MALAN: Nice. 1195 00:57:20,690 --> 00:57:21,740 How about Colton? 1196 00:57:21,740 --> 00:57:23,360 What inspired you? 1197 00:57:23,360 --> 00:57:25,220 COLTON OGDEN: So I went into it with a goal 1198 00:57:25,220 --> 00:57:28,140 from the very beginning, which was I wanted to make games. 1199 00:57:28,140 --> 00:57:30,710 And that was since I was probably 10 or 11 years old. 1200 00:57:30,710 --> 00:57:34,880 But it started around the time I was in high school, so 14, 15. 1201 00:57:34,880 --> 00:57:40,340 And the first time I actually tried coding, it was from an old book 1202 00:57:40,340 --> 00:57:44,767 on the Torque game engine, which was popular in the early to mid-2000s. 1203 00:57:44,767 --> 00:57:46,850 And it used a custom language called TorqueScript, 1204 00:57:46,850 --> 00:57:50,290 which looked kind of like Perl or PHP, but a little bit weird. 1205 00:57:50,290 --> 00:57:52,490 It had its own syntax for some stuff. 1206 00:57:52,490 --> 00:57:55,760 And probably because of all the syntax and just the fact that it 1207 00:57:55,760 --> 00:57:58,490 wasn't formatted very well and it was black and white, 1208 00:57:58,490 --> 00:58:02,290 I just kind of got immediately almost repulsed by it, to be honest, 1209 00:58:02,290 --> 00:58:02,930 and didn't-- 1210 00:58:02,930 --> 00:58:06,050 I had never seen code before, so I wasn't really familiar with it 1211 00:58:06,050 --> 00:58:08,900 or appreciated or know how it even worked or knew how to-- 1212 00:58:08,900 --> 00:58:10,490 like, what games were even made of. 1213 00:58:10,490 --> 00:58:14,210 I just thought they were all like visual editor-based projects. 1214 00:58:14,210 --> 00:58:16,940 But the desire to make games didn't go away. 1215 00:58:16,940 --> 00:58:18,890 I still wanted to make games. 1216 00:58:18,890 --> 00:58:20,403 So I tried it again. 1217 00:58:20,403 --> 00:58:23,570 But this time, I decided I was going to learn something beyond TorqueScript. 1218 00:58:23,570 --> 00:58:25,867 I was going to go learn something like C or C++. 1219 00:58:25,867 --> 00:58:27,950 Those were the first two languages that I learned. 1220 00:58:27,950 --> 00:58:32,777 And learning from a more structured beginner-focused way, 1221 00:58:32,777 --> 00:58:34,860 doing simple exercises, learning the very basics-- 1222 00:58:34,860 --> 00:58:37,250 you know, what's an if statement? 1223 00:58:37,250 --> 00:58:38,360 What's a variable? 1224 00:58:38,360 --> 00:58:39,380 What's a loop? 1225 00:58:39,380 --> 00:58:42,657 All of this stuff, I think, lit a fire within me-- 1226 00:58:42,657 --> 00:58:44,990 the fact that I could actually make a computer do things 1227 00:58:44,990 --> 00:58:48,350 that I wanted to using what sort of felt almost English-y, 1228 00:58:48,350 --> 00:58:51,470 but it's like giving instructions in a way, right? 1229 00:58:51,470 --> 00:58:52,520 Using C or C++-- 1230 00:58:52,520 --> 00:58:54,470 very imperative style. 1231 00:58:54,470 --> 00:58:59,640 That allured me in a way to where it wasn't just about making games anymore. 1232 00:58:59,640 --> 00:59:02,830 It became about coding because it was a craft 1233 00:59:02,830 --> 00:59:06,130 and because I thought it was interesting and because the landscape, honestly, 1234 00:59:06,130 --> 00:59:07,870 is just infinitely vast. 1235 00:59:07,870 --> 00:59:10,390 You can study your whole life and not know-- 1236 00:59:10,390 --> 00:59:12,340 and this is the same with most sciences. 1237 00:59:12,340 --> 00:59:15,550 But you won't be able to know everything there is to know 1238 00:59:15,550 --> 00:59:17,290 about everything in computer science. 1239 00:59:17,290 --> 00:59:18,730 So you'll always be learning something new, 1240 00:59:18,730 --> 00:59:20,860 and it'll always be fascinating and interesting. 1241 00:59:20,860 --> 00:59:23,140 And that's what keeps me enjoying it to this day. 1242 00:59:23,140 --> 00:59:23,740 I can learn. 1243 00:59:23,740 --> 00:59:27,790 I can get a lot of enjoyment out of even small, little, new things that 1244 00:59:27,790 --> 00:59:31,773 optimize my workflow or let me think about programming in a different way. 1245 00:59:31,773 --> 00:59:32,440 So I don't know. 1246 00:59:32,440 --> 00:59:33,593 It's been a fun journey. 1247 00:59:33,593 --> 00:59:36,760 DAVID MALAN: Well, thank you so much for joining us for CS50's office hours. 1248 00:59:36,760 --> 00:59:39,370 We will email everyone when we know when the next one will be. 1249 00:59:39,370 --> 00:59:42,880 Thank you to Brian, to Colton, and CS50's whole team behind the scenes 1250 00:59:42,880 --> 00:59:44,540 and to all of you for your questions. 1251 00:59:44,540 --> 00:59:46,460 I hope you'll forgive if we didn't answer all of them. 1252 00:59:46,460 --> 00:59:48,127 But we'll definitely do this again soon. 1253 00:59:48,127 --> 00:59:50,638 All our best to you and your families and friends. 1254 00:59:50,638 --> 00:59:52,180 BRIAN YU: Good to see everyone today. 1255 00:59:52,180 --> 00:59:53,190 Thanks, everyone. 1256 00:59:53,190 --> 00:59:53,390 COLTON OGDEN: Thanks, everybody. 1257 00:59:53,390 --> 00:59:54,640 BRIAN YU: --see you next time. 1258 00:59:54,640 --> 00:59:56,240 COLTON OGDEN: See you. 1259 00:59:56,240 --> 00:59:57,000