1 00:00:00,000 --> 00:00:01,943 2 00:00:01,943 --> 00:00:04,860 DAVID MALAN: All right, and why don't we begin even as others join us? 3 00:00:04,860 --> 00:00:06,250 So my name is David Malan. 4 00:00:06,250 --> 00:00:10,120 I'm here with CS50's own Brian Yu for what are called office hours. 5 00:00:10,120 --> 00:00:12,970 Here on campus, what office hours traditionally are 6 00:00:12,970 --> 00:00:17,800 is an opportunity for students at Harvard to drop by a professor's office 7 00:00:17,800 --> 00:00:21,880 literally and chat about the course, chat about a problem set, 8 00:00:21,880 --> 00:00:23,865 chat about the real world more generally. 9 00:00:23,865 --> 00:00:26,740 And so what we thought we'd do today, as we've done a couple of times 10 00:00:26,740 --> 00:00:29,620 thus far online, is hold Zoom-based office hours 11 00:00:29,620 --> 00:00:32,200 so that CS50's community around the world 12 00:00:32,200 --> 00:00:35,500 has an opportunity to meet with each other as well as chat up me 13 00:00:35,500 --> 00:00:37,390 and Brian here on Zoom. 14 00:00:37,390 --> 00:00:41,950 If you are not familiar, just a couple of features of Zoom you should know-- 15 00:00:41,950 --> 00:00:45,980 odds are, in the bottom left-hand corner of your laptop or desktop, 16 00:00:45,980 --> 00:00:48,070 if you're not using a mobile device, there's 17 00:00:48,070 --> 00:00:50,830 a mute button and a start or stop video button. 18 00:00:50,830 --> 00:00:53,120 Do turn on your video if you haven't already, 19 00:00:53,120 --> 00:00:55,810 just so that we get a sense of who's in fact here. 20 00:00:55,810 --> 00:00:59,287 This time we've automatically muted everyone by default. 21 00:00:59,287 --> 00:01:01,120 Otherwise, as we've experienced in the past, 22 00:01:01,120 --> 00:01:02,787 there's quite a bit of background noise. 23 00:01:02,787 --> 00:01:07,150 So Brian, and I, and CS50's team will be able to unmute you for you 24 00:01:07,150 --> 00:01:09,430 when it comes time to ask a question. 25 00:01:09,430 --> 00:01:11,680 And in the middle of your Zoom window, there's 26 00:01:11,680 --> 00:01:14,762 probably a participants and/or a chat button. 27 00:01:14,762 --> 00:01:16,720 And if you click on the chat button, you should 28 00:01:16,720 --> 00:01:20,350 be able to interact via text with other people who are here on the call. 29 00:01:20,350 --> 00:01:22,900 And Brian and I will occasionally, this afternoon, 30 00:01:22,900 --> 00:01:28,210 use the chat window to paste in any URLs that might be of interest to you. 31 00:01:28,210 --> 00:01:31,420 One other change, this time, that we thought we would try out 32 00:01:31,420 --> 00:01:35,350 is rather than do virtual hands using Zoom's feature, which 33 00:01:35,350 --> 00:01:37,210 got a little overwhelming for me and Brian 34 00:01:37,210 --> 00:01:39,930 to keep track of who was asking questions, 35 00:01:39,930 --> 00:01:42,760 CS50's own Ramon Galvan is going to help us 36 00:01:42,760 --> 00:01:46,660 manage the questions by soliciting questions in advance 37 00:01:46,660 --> 00:01:49,690 from everyone here via this URL. 38 00:01:49,690 --> 00:01:52,630 So if you'd like to ask a question of your own, 39 00:01:52,630 --> 00:01:57,460 please take a moment now or at any point over the next hour to ask it via that 40 00:01:57,460 --> 00:02:03,940 URL there cs50.ly/question. 41 00:02:03,940 --> 00:02:07,480 That will lead you to a Google form where you can ask your question. 42 00:02:07,480 --> 00:02:10,780 As before, please forgive if we can't quite get to everyone's questions 43 00:02:10,780 --> 00:02:11,710 in the time allowed. 44 00:02:11,710 --> 00:02:14,350 We'll invariably do more of these in the future. 45 00:02:14,350 --> 00:02:15,430 So we'll do our best. 46 00:02:15,430 --> 00:02:19,857 And in fact, Ramon's going to help us cluster similar questions together 47 00:02:19,857 --> 00:02:22,690 so that if multiple people, this time, have asked the same question, 48 00:02:22,690 --> 00:02:25,730 we'll try to answer them all at once. 49 00:02:25,730 --> 00:02:28,720 So feel free to take a moment to ask your question there. 50 00:02:28,720 --> 00:02:31,570 We won't be using Zoom's blue hand feature. 51 00:02:31,570 --> 00:02:36,043 But please feel free to chat in the chat window during today's session. 52 00:02:36,043 --> 00:02:37,210 And we're so pleased to see. 53 00:02:37,210 --> 00:02:40,810 It looks like we have some 360 CS50 community 54 00:02:40,810 --> 00:02:43,150 members from around the world. 55 00:02:43,150 --> 00:02:44,950 So welcome to all. 56 00:02:44,950 --> 00:02:49,297 RAMON GALVAN: When is the next episode of the CS50 podcast coming up? 57 00:02:49,297 --> 00:02:51,130 DAVID MALAN: That is a really good question. 58 00:02:51,130 --> 00:02:54,790 For that, let me turn to my friend Brian. 59 00:02:54,790 --> 00:02:56,540 BRIAN YU: Yeah, it's a very good question. 60 00:02:56,540 --> 00:02:58,820 For those of you who don't know, David and I 61 00:02:58,820 --> 00:03:04,110 co-host a podcast that used to be hosted by CS50's own Colton Ogden as well. 62 00:03:04,110 --> 00:03:10,340 You can find those episodes on YouTube, and also on most podcast players. 63 00:03:10,340 --> 00:03:13,220 Because of the current global health situation, 64 00:03:13,220 --> 00:03:15,855 we've been outside of our normal office in Cambridge. 65 00:03:15,855 --> 00:03:17,230 And we've been working from home. 66 00:03:17,230 --> 00:03:21,110 So we haven't been able to meet up in person to record the podcast the way 67 00:03:21,110 --> 00:03:22,730 we normally do. 68 00:03:22,730 --> 00:03:27,477 But certainly, we're hoping to get back on another episode soon. 69 00:03:27,477 --> 00:03:28,310 DAVID MALAN: Indeed. 70 00:03:28,310 --> 00:03:31,040 If you are a Spotify user, allow me to go ahead 71 00:03:31,040 --> 00:03:34,130 and paste the URL of the podcast if you'd like to check it out. 72 00:03:34,130 --> 00:03:37,970 Previously, I did this with CS50's own Colton Ogden, and then most recently, 73 00:03:37,970 --> 00:03:38,840 Brian. 74 00:03:38,840 --> 00:03:43,500 So if you Google "CS50 podcast" as well, you can find it on iTunes, 75 00:03:43,500 --> 00:03:47,248 you can find it on YouTube, and a bunch of other channels as well. 76 00:03:47,248 --> 00:03:48,540 All right, who do we have next? 77 00:03:48,540 --> 00:03:49,340 Ramon? 78 00:03:49,340 --> 00:03:52,310 RAMON GALVAN: All right, we have Priyah up next. 79 00:03:52,310 --> 00:03:52,977 AUDIENCE: Hello. 80 00:03:52,977 --> 00:03:53,768 DAVID MALAN: Hello. 81 00:03:53,768 --> 00:03:55,520 Would you like to ask your question? 82 00:03:55,520 --> 00:03:59,750 AUDIENCE: Yeah, I was wondering, after I do the CS50 cour-- 83 00:03:59,750 --> 00:04:02,750 sorry, the course-- what do I do next? 84 00:04:02,750 --> 00:04:05,030 Because I've really been enjoying it. 85 00:04:05,030 --> 00:04:10,540 And for my GCSE stuff, I took computer science, 86 00:04:10,540 --> 00:04:13,400 but I didn't really understand half the stuff. 87 00:04:13,400 --> 00:04:15,100 And then I did this. 88 00:04:15,100 --> 00:04:17,600 I'm on week two, and I get so much. 89 00:04:17,600 --> 00:04:21,832 So thank you, everyone who is on the CS50 team. 90 00:04:21,832 --> 00:04:23,540 So yeah, just wanted to say that as well. 91 00:04:23,540 --> 00:04:24,332 DAVID MALAN: Great. 92 00:04:24,332 --> 00:04:27,020 And Priyah, where in the world are you from? 93 00:04:27,020 --> 00:04:30,650 AUDIENCE: I am studying in Thailand, but I'm originally from the UK. 94 00:04:30,650 --> 00:04:32,150 DAVID MALAN: OK, well, nice to meet. 95 00:04:32,150 --> 00:04:34,040 Well, for those following along via chat, 96 00:04:34,040 --> 00:04:39,950 I've pasted one URL into the chat window which just shows other courses of CS50. 97 00:04:39,950 --> 00:04:44,180 Often, here at Harvard College, a common next course for a student to take 98 00:04:44,180 --> 00:04:46,850 would be, here at Harvard, what's called CS51. 99 00:04:46,850 --> 00:04:51,290 And what that is, a course on what's called functional programming as well 100 00:04:51,290 --> 00:04:53,690 as object-oriented programming, which is to say, 101 00:04:53,690 --> 00:04:56,917 a common next step for a student after taking a class like CS50 102 00:04:56,917 --> 00:04:59,000 would be to learn a different type of programming. 103 00:04:59,000 --> 00:05:02,480 In CS50, we tend to learn what's called procedural programming. 104 00:05:02,480 --> 00:05:04,940 You sort of write your code line by line, step by step. 105 00:05:04,940 --> 00:05:07,820 But there are other ways of thinking about solving problems 106 00:05:07,820 --> 00:05:10,130 in other languages, with which you can solve problems 107 00:05:10,130 --> 00:05:12,620 in a conceptually different way. 108 00:05:12,620 --> 00:05:14,450 So CS51 itself is not online. 109 00:05:14,450 --> 00:05:17,210 But there are other classes on functional programming 110 00:05:17,210 --> 00:05:20,690 and on object-oriented programming, which would be a good next step. 111 00:05:20,690 --> 00:05:23,060 And then there's more application-oriented classes 112 00:05:23,060 --> 00:05:24,270 that you can take. 113 00:05:24,270 --> 00:05:27,020 For instance, Brian teaches a class on web programming 114 00:05:27,020 --> 00:05:32,680 that I'll let him speak to next, which is, indeed, freely available already. 115 00:05:32,680 --> 00:05:35,540 BRIAN YU: Yeah, so at the URL that David posted in the chat, 116 00:05:35,540 --> 00:05:40,760 which is edx.org/cs50, you can find some of CS50's follow-on courses that you 117 00:05:40,760 --> 00:05:43,490 can take after completing the regular course. 118 00:05:43,490 --> 00:05:46,250 And one of those is a course that I teach on web programming 119 00:05:46,250 --> 00:05:50,510 where we pick up where CS50 leaves off, diving a little more deeply into how 120 00:05:50,510 --> 00:05:55,020 to build web applications, and some of the security ideas behind that, 121 00:05:55,020 --> 00:05:58,160 and thinking about how you think about scaling web applications 122 00:05:58,160 --> 00:06:00,027 as they start to grow larger as well. 123 00:06:00,027 --> 00:06:01,360 So depending on your interests-- 124 00:06:01,360 --> 00:06:03,950 CS50 will introduce you to a lot of different fields 125 00:06:03,950 --> 00:06:05,535 and aspects of computer science-- 126 00:06:05,535 --> 00:06:07,910 there are a lot of different directions that can take you 127 00:06:07,910 --> 00:06:09,770 after completing the class. 128 00:06:09,770 --> 00:06:10,985 AUDIENCE: Thank you so much. 129 00:06:10,985 --> 00:06:13,190 DAVID MALAN: Yeah, thanks for the question. 130 00:06:13,190 --> 00:06:14,923 Let's see who we have next. 131 00:06:14,923 --> 00:06:17,840 RAMON GALVAN: Well, David, I'm going to cluster quite a few questions. 132 00:06:17,840 --> 00:06:20,990 But a lot of people are interested in learning 133 00:06:20,990 --> 00:06:25,040 what courses CS50 offers after CS50. 134 00:06:25,040 --> 00:06:28,550 Especially of interest is the AI course. 135 00:06:28,550 --> 00:06:32,300 DAVID MALAN: Yeah, so for this one too, I can toss to Brian. 136 00:06:32,300 --> 00:06:34,903 In addition to the web course that he alluded to, 137 00:06:34,903 --> 00:06:37,070 he also teaches a course on artificial intelligence, 138 00:06:37,070 --> 00:06:40,442 which is another apt follow-on Brian? 139 00:06:40,442 --> 00:06:42,650 BRIAN YU: Yeah, so the artificial intelligence course 140 00:06:42,650 --> 00:06:45,980 is also designed to pick up from where CS50 leaves off. 141 00:06:45,980 --> 00:06:49,220 And it's specifically about using Python to be 142 00:06:49,220 --> 00:06:52,310 able to write artificial intelligence programs, 143 00:06:52,310 --> 00:06:57,110 designing computer programs that are able to do intelligent things that you 144 00:06:57,110 --> 00:06:59,750 might ordinarily think are reserved for just people. 145 00:06:59,750 --> 00:07:02,570 So for things like playing games, or for things 146 00:07:02,570 --> 00:07:04,910 like understanding human questions and trying 147 00:07:04,910 --> 00:07:08,000 to be able to answer those questions, or for trying 148 00:07:08,000 --> 00:07:11,960 to figure out what's inside of an image by using self-driving car 149 00:07:11,960 --> 00:07:14,750 type of technology to identify what road signs are, 150 00:07:14,750 --> 00:07:17,570 for example, those are the sorts of questions that we explore 151 00:07:17,570 --> 00:07:19,280 in the artificial intelligence class. 152 00:07:19,280 --> 00:07:21,950 And over the course of the class, you get a sense 153 00:07:21,950 --> 00:07:24,260 for what some of the common strategies are for trying 154 00:07:24,260 --> 00:07:25,920 to solve these sorts of problems. 155 00:07:25,920 --> 00:07:28,010 And you get to write some of your own Python code 156 00:07:28,010 --> 00:07:32,322 to be able to create artificial intelligence of your very own. 157 00:07:32,322 --> 00:07:35,030 DAVID MALAN: And let me ask, before we move to our next question, 158 00:07:35,030 --> 00:07:38,810 if you did submit a question via cs50.ly/question, 159 00:07:38,810 --> 00:07:40,400 do make sure your video is on. 160 00:07:40,400 --> 00:07:43,220 Because we much prefer to have you ask the question on video 161 00:07:43,220 --> 00:07:45,610 than just us reading it aloud. 162 00:07:45,610 --> 00:07:47,540 But with that said, who do we have next? 163 00:07:47,540 --> 00:07:51,098 Fernando, would you like to-- where in the world are you from? 164 00:07:51,098 --> 00:07:52,140 And what's your question? 165 00:07:52,140 --> 00:07:54,060 AUDIENCE: I am from Chile. 166 00:07:54,060 --> 00:07:55,860 DAVID MALAN: Nice to meet you. 167 00:07:55,860 --> 00:07:59,100 AUDIENCE: And my question is, what can I do 168 00:07:59,100 --> 00:08:04,590 once I finish the course later on for not getting stuck or going further 169 00:08:04,590 --> 00:08:10,200 in my programming skills so I can have like a more solid way of taking this 170 00:08:10,200 --> 00:08:11,735 seriously in the future? 171 00:08:11,735 --> 00:08:13,610 DAVID MALAN: Yeah, so that's a good question. 172 00:08:13,610 --> 00:08:17,750 And I would propose we answer it from a non-course-directed-- it's 173 00:08:17,750 --> 00:08:20,205 very common for students online especially 174 00:08:20,205 --> 00:08:22,580 to wonder, what course should they take next, what course 175 00:08:22,580 --> 00:08:23,497 should they take next? 176 00:08:23,497 --> 00:08:25,370 And this is sort of an endless cycle. 177 00:08:25,370 --> 00:08:27,650 And you never actually necessarily do something 178 00:08:27,650 --> 00:08:29,870 with all of the knowledge and skills you've acquired. 179 00:08:29,870 --> 00:08:32,809 So I would say one of the best ways to proceed 180 00:08:32,809 --> 00:08:36,140 after taking one or more courses like CS50 181 00:08:36,140 --> 00:08:38,539 is to find some project of personal interest to you. 182 00:08:38,539 --> 00:08:40,610 Maybe this is your own personal home page. 183 00:08:40,610 --> 00:08:44,773 Maybe this is a web application for your parents' small business. 184 00:08:44,773 --> 00:08:47,815 Maybe this is an application for a student group that you're involved in. 185 00:08:47,815 --> 00:08:51,500 In short, find some problem that can be solved by software, 186 00:08:51,500 --> 00:08:55,040 or perhaps even hardware, that you think you have some of the skills to solve, 187 00:08:55,040 --> 00:08:57,620 and then figure out everything that you don't. 188 00:08:57,620 --> 00:08:59,720 Like, very early on when I was in college, 189 00:08:59,720 --> 00:09:02,750 the way I learned C all the more was by writing 190 00:09:02,750 --> 00:09:08,750 a program for letting other students on campus find the upcoming shuttle buses. 191 00:09:08,750 --> 00:09:12,110 So Harvard has a lot of buses that drive all around campus bringing students 192 00:09:12,110 --> 00:09:14,570 from point A to point B. And one of the most gratifying 193 00:09:14,570 --> 00:09:18,260 projects I took on that really taught me more about programming 194 00:09:18,260 --> 00:09:20,750 was to write a program that helped people look up the days 195 00:09:20,750 --> 00:09:22,880 and times of those next shuttles. 196 00:09:22,880 --> 00:09:26,040 And so wherever you see a problem that can be solved with software, 197 00:09:26,040 --> 00:09:27,230 I would try to take that on. 198 00:09:27,230 --> 00:09:29,930 And better yet, take on a project that you don't necessarily 199 00:09:29,930 --> 00:09:31,960 know how to do yet yourself. 200 00:09:31,960 --> 00:09:33,830 Like, it should scare you a little bit. 201 00:09:33,830 --> 00:09:36,500 You should have, maybe, no idea where to start. 202 00:09:36,500 --> 00:09:38,930 And hands down, that will be the most rewarding way 203 00:09:38,930 --> 00:09:40,970 of learning something new when you really 204 00:09:40,970 --> 00:09:44,530 have to teach yourself most of it. 205 00:09:44,530 --> 00:09:45,450 AUDIENCE: Thank you. 206 00:09:45,450 --> 00:09:45,920 DAVID MALAN: That helped. 207 00:09:45,920 --> 00:09:47,190 AUDIENCE: Thank you so much. 208 00:09:47,190 --> 00:09:48,210 DAVID MALAN: Sure. 209 00:09:48,210 --> 00:09:51,150 Let's see, who do we have next here? 210 00:09:51,150 --> 00:09:55,596 211 00:09:55,596 --> 00:09:57,020 RAMON GALVAN: Give me one second. 212 00:09:57,020 --> 00:10:00,180 213 00:10:00,180 --> 00:10:02,790 Ooh, I think he just left the chat-- 214 00:10:02,790 --> 00:10:06,300 or left the video feed. 215 00:10:06,300 --> 00:10:08,650 Let's see. 216 00:10:08,650 --> 00:10:10,100 Well, I can ask the question. 217 00:10:10,100 --> 00:10:20,160 The question was, are there any teasers for the upcoming updates for CS50 Web? 218 00:10:20,160 --> 00:10:22,220 BRIAN YU: Sure, I can take that question. 219 00:10:22,220 --> 00:10:25,860 Yeah, so the web programming class, which is currently available on EdX, 220 00:10:25,860 --> 00:10:30,150 is due for a refresh that will be launched over the summer on July 1, 221 00:10:30,150 --> 00:10:31,960 I believe, is the day that will happen. 222 00:10:31,960 --> 00:10:33,822 And there are a couple of changes to what's 223 00:10:33,822 --> 00:10:36,030 going to be included in the new version of the class. 224 00:10:36,030 --> 00:10:38,490 A lot of the big ideas are still the same about thinking 225 00:10:38,490 --> 00:10:43,930 about how to go about designing a web application and how to think about all 226 00:10:43,930 --> 00:10:47,740 of the pieces that need to come together to make a web application work. 227 00:10:47,740 --> 00:10:51,420 But among the new things are going to be an increased focus on Django, which 228 00:10:51,420 --> 00:10:55,380 is a Python web framework just designed to make it easier 229 00:10:55,380 --> 00:10:58,845 to get set up with web applications that deal with a lot of data. 230 00:10:58,845 --> 00:11:00,720 So if you're imagining a web application that 231 00:11:00,720 --> 00:11:04,050 might have a lot of users that have a lot of data associated with them, 232 00:11:04,050 --> 00:11:06,030 something like a social networking website 233 00:11:06,030 --> 00:11:08,130 or an e-commerce website for example, we'll 234 00:11:08,130 --> 00:11:10,300 spend some more time focusing on that. 235 00:11:10,300 --> 00:11:14,610 In addition, the new class also covers a JavaScript framework called React, 236 00:11:14,610 --> 00:11:16,110 which some of you may have heard of. 237 00:11:16,110 --> 00:11:19,410 And React is a framework that is designed 238 00:11:19,410 --> 00:11:23,230 to make it easy to build really interactive user interfaces. 239 00:11:23,230 --> 00:11:26,190 So if you're using a lot of modern web applications nowadays, 240 00:11:26,190 --> 00:11:28,860 where things on the page are changing all the time, 241 00:11:28,860 --> 00:11:32,300 without needing to reload the page, you're seeing notifications pop up 242 00:11:32,300 --> 00:11:37,260 and chat messages pop up, a lot of that is because of a reactive web framework. 243 00:11:37,260 --> 00:11:40,140 And so over the course of the new CS50W, we'll 244 00:11:40,140 --> 00:11:42,360 spend some time focusing on what that really means 245 00:11:42,360 --> 00:11:46,760 and how you can build those sorts of user interfaces. 246 00:11:46,760 --> 00:11:49,260 DAVID MALAN: And in fact, if you would like a sneak preview, 247 00:11:49,260 --> 00:11:55,140 I've pasted into the chat window the URL of Brian's new version of Web 50 248 00:11:55,140 --> 00:11:56,325 at Harvard Extension School. 249 00:11:56,325 --> 00:11:58,200 You won't be able to submit the projects yet. 250 00:11:58,200 --> 00:12:01,500 But starting on July 1, the new version of that cause 251 00:12:01,500 --> 00:12:04,950 will be freely available on edx.org as well. 252 00:12:04,950 --> 00:12:08,114 253 00:12:08,114 --> 00:12:10,227 All right, Ramon, who do we have next? 254 00:12:10,227 --> 00:12:19,780 255 00:12:19,780 --> 00:12:22,188 RAMON GALVAN: We have Vasu, or "Vashu." 256 00:12:22,188 --> 00:12:22,980 AUDIENCE: Yes, sir. 257 00:12:22,980 --> 00:12:24,254 Hi, sir. 258 00:12:24,254 --> 00:12:25,485 DAVID MALAN: Yes, hello. 259 00:12:25,485 --> 00:12:27,360 Where are you from, and what's your question? 260 00:12:27,360 --> 00:12:28,570 AUDIENCE: I am from India. 261 00:12:28,570 --> 00:12:29,820 So I have the question. 262 00:12:29,820 --> 00:12:34,330 So after doing the CS50 course, what all I will learn through it? 263 00:12:34,330 --> 00:12:37,260 And I'm basically new to computer science. 264 00:12:37,260 --> 00:12:40,355 So I am just very-- 265 00:12:40,355 --> 00:12:44,100 I want to ask what all we will do around the course. 266 00:12:44,100 --> 00:12:46,290 DAVID MALAN: Sure, so CS50 itself is-- 267 00:12:46,290 --> 00:12:48,390 or CS50x, on EdX-- 268 00:12:48,390 --> 00:12:52,320 is meant to be an introduction to computer science itself, which means 269 00:12:52,320 --> 00:12:55,470 you'll learn a lot of the fundamental ideas of computer science. 270 00:12:55,470 --> 00:12:58,110 For instance, how do you represent information? 271 00:12:58,110 --> 00:13:01,260 How do you solve problems using a computer? 272 00:13:01,260 --> 00:13:05,790 How do you represent large amounts of information 273 00:13:05,790 --> 00:13:08,730 efficiently to facilitate what are called algorithms, step 274 00:13:08,730 --> 00:13:11,100 by step processes for solving problems? 275 00:13:11,100 --> 00:13:15,930 As such, we'll talk about how computers search very large data sets, how 276 00:13:15,930 --> 00:13:19,500 computers sort very large data sets, the exact kind of problems 277 00:13:19,500 --> 00:13:23,040 that the Googles, and Facebooks, and Microsofts of the world do every day. 278 00:13:23,040 --> 00:13:26,160 Toward the end of the semester, we'll transition from those primitives 279 00:13:26,160 --> 00:13:28,050 to applications thereof. 280 00:13:28,050 --> 00:13:32,520 We'll introduce a bit of web programming using a language called Python. 281 00:13:32,520 --> 00:13:36,780 We'll use a framework, which is a free library, called Flask. 282 00:13:36,780 --> 00:13:41,540 And we'll also introduce students to languages like SQL for databases, HTML, 283 00:13:41,540 --> 00:13:45,520 CSS, and JavaScript for web programming so that you ultimately, 284 00:13:45,520 --> 00:13:48,712 at the end of the semester, are able to build something of your very own. 285 00:13:48,712 --> 00:13:51,420 So with that said, while it's an introduction to computer science 286 00:13:51,420 --> 00:13:54,840 primitives, it's very much a hands-on software class. 287 00:13:54,840 --> 00:13:57,540 And so at the end of it, you should be very well 288 00:13:57,540 --> 00:14:00,480 prepared to go on and take other classes in programming 289 00:14:00,480 --> 00:14:03,553 and solve problems using your own devices. 290 00:14:03,553 --> 00:14:04,553 Thanks for the question. 291 00:14:04,553 --> 00:14:05,386 AUDIENCE: Thank you. 292 00:14:05,386 --> 00:14:07,675 293 00:14:07,675 --> 00:14:09,800 DAVID MALAN: Let's see, who do we have next, Ramon? 294 00:14:09,800 --> 00:14:13,720 295 00:14:13,720 --> 00:14:19,820 RAMON GALVAN: Coming up is someone that has their video currently shut off. 296 00:14:19,820 --> 00:14:23,350 So I think I will have to find someone else. 297 00:14:23,350 --> 00:14:24,430 Give me a quick second. 298 00:14:24,430 --> 00:14:27,620 299 00:14:27,620 --> 00:14:30,920 Again, please, if you want to ask a question, 300 00:14:30,920 --> 00:14:34,880 do have your video turned on so we can have you on screen. 301 00:14:34,880 --> 00:14:35,450 Here we go. 302 00:14:35,450 --> 00:14:39,078 303 00:14:39,078 --> 00:14:40,370 DAVID MALAN: Eric, you're live. 304 00:14:40,370 --> 00:14:43,460 Would you like to say where you're from and your question? 305 00:14:43,460 --> 00:14:45,950 AUDIENCE: Hi, I'm from New York. 306 00:14:45,950 --> 00:14:47,882 I was going to ask about continuing classes, 307 00:14:47,882 --> 00:14:50,090 but it seems that we've already kind of covered that. 308 00:14:50,090 --> 00:14:55,370 But I was curious more about continuing for Mac OS and iOS development, 309 00:14:55,370 --> 00:15:00,080 or maybe if we were going to use Python for Bash scripting 310 00:15:00,080 --> 00:15:02,220 or that kind of stuff. 311 00:15:02,220 --> 00:15:04,920 DAVID MALAN: Yeah, and how you can go about learning those? 312 00:15:04,920 --> 00:15:06,440 Or what's the question precisely? 313 00:15:06,440 --> 00:15:08,190 AUDIENCE: Just like what courses you would 314 00:15:08,190 --> 00:15:10,780 recommend to look into that stuff. 315 00:15:10,780 --> 00:15:14,710 DAVID MALAN: Sure, so on the iPhone front, if you have an iPad, or iPhone, 316 00:15:14,710 --> 00:15:19,090 or the like, the course that, years ago, I first learned iOS development on was 317 00:15:19,090 --> 00:15:20,207 Stanford's. 318 00:15:20,207 --> 00:15:21,290 I did a quick google here. 319 00:15:21,290 --> 00:15:23,680 That might not be the very latest URL. 320 00:15:23,680 --> 00:15:26,930 But Stanford's course, that I just pasted into the chat window, 321 00:15:26,930 --> 00:15:29,860 is called CS193p. 322 00:15:29,860 --> 00:15:31,690 And that should be freely available online. 323 00:15:31,690 --> 00:15:34,150 It was a wonderful, rapid-fire introduction 324 00:15:34,150 --> 00:15:38,320 to a lot of the basics of iOS development. 325 00:15:38,320 --> 00:15:42,035 Brian, do you want to speak to the Python front? 326 00:15:42,035 --> 00:15:42,910 BRIAN YU: Yeah, sure. 327 00:15:42,910 --> 00:15:48,730 Just to add on a little bit with regards to iOS and Mac OS development, 328 00:15:48,730 --> 00:15:52,770 most of development for native Mac and iOS apps 329 00:15:52,770 --> 00:15:56,230 are done in a programming language called Swift developed by Apple. 330 00:15:56,230 --> 00:15:58,630 And so if you're interested in learning Swift, 331 00:15:58,630 --> 00:16:02,020 I think Apple's own documentation and Apple's own website on this matter 332 00:16:02,020 --> 00:16:05,050 does a very good job of trying to introduce the language for beginners 333 00:16:05,050 --> 00:16:06,610 who haven't seen it before. 334 00:16:06,610 --> 00:16:10,180 So that URL over there will take you to Apple's developer page 335 00:16:10,180 --> 00:16:12,128 for how to learn the Swift language. 336 00:16:12,128 --> 00:16:14,170 And getting a good understanding of that language 337 00:16:14,170 --> 00:16:15,940 is a good first step, because it's really 338 00:16:15,940 --> 00:16:19,990 a language designed to make it easy to then go and build applications 339 00:16:19,990 --> 00:16:22,570 for the Mac or for iOS. 340 00:16:22,570 --> 00:16:26,890 And then if you're planning to develop-- 341 00:16:26,890 --> 00:16:30,090 so then, if you're planning to write your own Python scripts that 342 00:16:30,090 --> 00:16:35,080 run on your computer as well, for that, you don't need a programming language-- 343 00:16:35,080 --> 00:16:38,860 a full graphical interface like what developing a Mac or an iOS app 344 00:16:38,860 --> 00:16:39,560 will give you. 345 00:16:39,560 --> 00:16:42,295 But the Python scripts that you've written in CS50, for example, 346 00:16:42,295 --> 00:16:44,170 might be a good starting point there for just 347 00:16:44,170 --> 00:16:47,540 getting a sense for the types of problems that you can solve. 348 00:16:47,540 --> 00:16:50,470 So in the class, you'll, for example, write Python scripts 349 00:16:50,470 --> 00:16:55,360 that can analyze DNA samples, for example, and open up CSV files, 350 00:16:55,360 --> 00:16:56,860 and be able to process them. 351 00:16:56,860 --> 00:16:59,890 And so those are some of the building blocks of a lot of other scripts 352 00:16:59,890 --> 00:17:00,490 that you might write. 353 00:17:00,490 --> 00:17:02,680 So depending on the problem you might try to solve, 354 00:17:02,680 --> 00:17:05,560 you might look for what aspects of those problems 355 00:17:05,560 --> 00:17:08,589 you know how to solve using the tools you've learned in the class, 356 00:17:08,589 --> 00:17:12,490 and then go out and do some research as to what missing pieces you might need 357 00:17:12,490 --> 00:17:17,599 to fill in in order to solve the problem you're trying to solve with the script. 358 00:17:17,599 --> 00:17:18,588 AUDIENCE: Thanks. 359 00:17:18,588 --> 00:17:20,380 DAVID MALAN: Thanks for the question, Eric. 360 00:17:20,380 --> 00:17:23,069 All right, who do we have next, Ramon? 361 00:17:23,069 --> 00:17:26,319 Musadique, if I'm pronouncing your name correctly? 362 00:17:26,319 --> 00:17:28,069 AUDIENCE: Yeah, you are right. 363 00:17:28,069 --> 00:17:29,710 DAVID MALAN: Sure, you would like to tell us where you're from 364 00:17:29,710 --> 00:17:31,150 and what your question is? 365 00:17:31,150 --> 00:17:32,680 AUDIENCE: Yeah, I'm from Pakistan. 366 00:17:32,680 --> 00:17:34,090 And my question is-- 367 00:17:34,090 --> 00:17:37,360 that is a general type of question-- what are your productivity 368 00:17:37,360 --> 00:17:41,080 hacks, especially when you're learning something new and complex, 369 00:17:41,080 --> 00:17:44,710 when it is really difficult, at times, to stick with your goals 370 00:17:44,710 --> 00:17:46,570 and to keep the momentum? 371 00:17:46,570 --> 00:17:50,980 So how would you explain your time schedule or your productivity hacks 372 00:17:50,980 --> 00:17:52,342 to learn better? 373 00:17:52,342 --> 00:17:54,300 DAVID MALAN: Yeah, it's a really good question. 374 00:17:54,300 --> 00:17:56,675 Let me start with Brian, because he was smiling the most, 375 00:17:56,675 --> 00:17:59,225 and perhaps has the best ideas, first. 376 00:17:59,225 --> 00:18:01,320 BRIAN YU: I like this question a lot. 377 00:18:01,320 --> 00:18:04,520 I think a lot about trying to figure out how to manage time 378 00:18:04,520 --> 00:18:07,760 and how to make sure to stay productive on things. 379 00:18:07,760 --> 00:18:11,000 One thing I do, which I don't think a lot of people do-- but I find it, 380 00:18:11,000 --> 00:18:12,570 personally, very helpful-- 381 00:18:12,570 --> 00:18:15,380 It's something called time tracking, where, basically, I 382 00:18:15,380 --> 00:18:19,668 keep track of how much time I spend on any particular task. 383 00:18:19,668 --> 00:18:21,710 So if I'm learning something new, I'll keep track 384 00:18:21,710 --> 00:18:23,330 of how much time I'm spending on that. 385 00:18:23,330 --> 00:18:25,880 If I'm working on a particular project, I'll 386 00:18:25,880 --> 00:18:28,700 keep track of how much time I'm spending on that project. 387 00:18:28,700 --> 00:18:30,918 That does a couple of things for me. 388 00:18:30,918 --> 00:18:32,960 One, it helps to keep me accountable, because I'm 389 00:18:32,960 --> 00:18:36,635 keeping track of how much time I'm spending wasting, not 390 00:18:36,635 --> 00:18:37,760 doing something productive. 391 00:18:37,760 --> 00:18:39,635 And I'm also keeping track and really holding 392 00:18:39,635 --> 00:18:42,990 myself accountable to how much time I'm spending working on things. 393 00:18:42,990 --> 00:18:44,808 And it's also a useful reflective tool. 394 00:18:44,808 --> 00:18:46,850 So at the end of the week, I can go back and look 395 00:18:46,850 --> 00:18:48,743 at what I spent my time on in the past week 396 00:18:48,743 --> 00:18:50,660 and think about if that's really what I wanted 397 00:18:50,660 --> 00:18:52,940 to be spending my time on or not. 398 00:18:52,940 --> 00:18:54,860 So I think the takeaway there is just access 399 00:18:54,860 --> 00:18:58,218 to data about what I am using my time for has been helpful 400 00:18:58,218 --> 00:19:00,260 for me, personally, in thinking about how to make 401 00:19:00,260 --> 00:19:02,457 sure I'm productively using that time. 402 00:19:02,457 --> 00:19:05,040 DAVID MALAN: Brian do you want to paste the URLs of one or two 403 00:19:05,040 --> 00:19:08,390 of the software programs that you've found useful for that? 404 00:19:08,390 --> 00:19:11,270 BRIAN YU: Yeah, so the one I personally use is called Toggle. 405 00:19:11,270 --> 00:19:13,820 I just pasted the link for that there. 406 00:19:13,820 --> 00:19:14,800 It's a web app. 407 00:19:14,800 --> 00:19:16,512 It's got mobile and desktop apps as well. 408 00:19:16,512 --> 00:19:18,720 But basically, you just click on a button when I say, 409 00:19:18,720 --> 00:19:20,512 oh, I'm going to check my email now, or I'm 410 00:19:20,512 --> 00:19:24,138 going to work on trying to learn how to program in this language right now. 411 00:19:24,138 --> 00:19:26,430 And at the end of the week, or at the end of the month, 412 00:19:26,430 --> 00:19:28,930 it produces some nice reports where you can go back and look 413 00:19:28,930 --> 00:19:30,578 at how you were spending your time. 414 00:19:30,578 --> 00:19:32,370 DAVID MALAN: And Musadique, I would propose 415 00:19:32,370 --> 00:19:36,960 that my approach to life, for better or for worse, is a little more organic. 416 00:19:36,960 --> 00:19:41,250 I am amazed by Brian's level of organization, 417 00:19:41,250 --> 00:19:43,433 as evinced by that software there. 418 00:19:43,433 --> 00:19:45,600 But I would say there's two things, at least for me, 419 00:19:45,600 --> 00:19:47,850 that tend to help me keep on track. 420 00:19:47,850 --> 00:19:50,370 Certainly, when I want to work toward some goal, 421 00:19:50,370 --> 00:19:54,540 I try to make sure that I have decided in advance on at least one thing 422 00:19:54,540 --> 00:19:56,880 that I want to accomplish during the day so that I have 423 00:19:56,880 --> 00:19:59,730 a well-defined goal, especially if it's a large project that I know I'm not 424 00:19:59,730 --> 00:20:01,260 going to finish in that given day. 425 00:20:01,260 --> 00:20:04,290 And so I try to decide that, OK, I'm going to fix this bug, 426 00:20:04,290 --> 00:20:06,450 or I'm going to implement this feature. 427 00:20:06,450 --> 00:20:08,910 And in fact, that relates to my second rule 428 00:20:08,910 --> 00:20:12,810 of thumb, which I actually learned from one of CS50s former teaching fellows. 429 00:20:12,810 --> 00:20:13,560 This was a fellow. 430 00:20:13,560 --> 00:20:17,040 Some of you might remember him from past shorts of CS50. 431 00:20:17,040 --> 00:20:18,750 His name was Tommy MacWilliam. 432 00:20:18,750 --> 00:20:22,650 And he was extraordinary when it came to writing software, 433 00:20:22,650 --> 00:20:24,630 because he could be in the middle of an airport 434 00:20:24,630 --> 00:20:28,980 waiting to board a flight with his laptop open, implementing some feature 435 00:20:28,980 --> 00:20:30,570 or solving some bug. 436 00:20:30,570 --> 00:20:32,700 And it always blew my mind just how he would 437 00:20:32,700 --> 00:20:37,878 make use of every possible moment of productivity like that. 438 00:20:37,878 --> 00:20:40,170 Whereas I-- at least when it comes to writing software, 439 00:20:40,170 --> 00:20:42,270 generally, I need to clear my desk. 440 00:20:42,270 --> 00:20:44,070 I need to get everyone out of the room. 441 00:20:44,070 --> 00:20:48,060 I need to have like eight hours straight so that I can actually focus. 442 00:20:48,060 --> 00:20:51,300 And so I've been trying to get better at that 443 00:20:51,300 --> 00:20:55,350 and trying to be more like Tommy's approach by saying, all right, 444 00:20:55,350 --> 00:20:57,427 I know I can't solve this whole problem today. 445 00:20:57,427 --> 00:20:59,760 But you know what, I'm going to have this list of issues 446 00:20:59,760 --> 00:21:01,870 in GitHub or in some other tool. 447 00:21:01,870 --> 00:21:04,470 And I'm just going to bite off one, maybe two, maybe three. 448 00:21:04,470 --> 00:21:07,680 But I try to quantize it step by step so that I at least feel 449 00:21:07,680 --> 00:21:10,515 good about making some progress. 450 00:21:10,515 --> 00:21:11,980 That's a really good question. 451 00:21:11,980 --> 00:21:14,160 Thank you for asking that one. 452 00:21:14,160 --> 00:21:15,902 I think we have Emmeline next. 453 00:21:15,902 --> 00:21:18,360 If, Emmeline, you'd like to say hello and where you're from 454 00:21:18,360 --> 00:21:19,990 and ask your question? 455 00:21:19,990 --> 00:21:24,300 AUDIENCE: Hi, my name is Emmeline Wong, and I'm tuning in from Dallas, Texas. 456 00:21:24,300 --> 00:21:27,180 And I really appreciate all the resources 457 00:21:27,180 --> 00:21:30,180 that you've made available for us to be able to take CS50. 458 00:21:30,180 --> 00:21:33,160 The app, the web app, everything's awesome. 459 00:21:33,160 --> 00:21:37,240 I was trying to find out how to get a copy of all the questions I asked, 460 00:21:37,240 --> 00:21:39,570 so I'll just go by memory. 461 00:21:39,570 --> 00:21:41,910 So I was curious-- 462 00:21:41,910 --> 00:21:45,840 so I like what you mentioned about how the way you stay motivated 463 00:21:45,840 --> 00:21:51,140 is to have a personal project where you can practice the skills on. 464 00:21:51,140 --> 00:21:56,940 So the two questions I had were, what's a good way for us 465 00:21:56,940 --> 00:22:00,570 to assess ourselves to know that we're ready, 466 00:22:00,570 --> 00:22:05,310 for example, to participate in a hackathon 467 00:22:05,310 --> 00:22:10,810 or to contribute to an open source community like Cloud Native Computing 468 00:22:10,810 --> 00:22:11,310 Foundation? 469 00:22:11,310 --> 00:22:13,360 I know that's way down the line. 470 00:22:13,360 --> 00:22:16,780 But I just thought, for example, with language-- 471 00:22:16,780 --> 00:22:20,250 I speak Mandarin-- there's HSK levels. 472 00:22:20,250 --> 00:22:22,530 And I was curious, from a computer science 473 00:22:22,530 --> 00:22:29,160 standpoint, what do you and Brian recommend for us to test where we are? 474 00:22:29,160 --> 00:22:31,570 Is there some kind of standard in the industry? 475 00:22:31,570 --> 00:22:32,520 Thank you. 476 00:22:32,520 --> 00:22:35,280 DAVID MALAN: Sure, I mean, I would say, short answer, no. 477 00:22:35,280 --> 00:22:39,780 And I think if you're already thinking about doing something like a hackathon, 478 00:22:39,780 --> 00:22:40,560 you're ready. 479 00:22:40,560 --> 00:22:42,300 No one's going to keep you out of it, and no one's 480 00:22:42,300 --> 00:22:43,842 going to stop you from participating. 481 00:22:43,842 --> 00:22:46,410 And even if, upon participating, you realized, 482 00:22:46,410 --> 00:22:48,840 wow, everyone to the left of me and to the right of me 483 00:22:48,840 --> 00:22:51,240 really seems to know more, that's a good thing, 484 00:22:51,240 --> 00:22:53,640 to surround yourself by people who can teach you 485 00:22:53,640 --> 00:22:56,490 a little something new and who can challenge you a bit more when 486 00:22:56,490 --> 00:23:00,270 it comes to whatever project it is you're working on the hackathon. 487 00:23:00,270 --> 00:23:03,480 And I think that if you wait until you feel ready, 488 00:23:03,480 --> 00:23:05,170 that day might never quite come. 489 00:23:05,170 --> 00:23:07,003 Because odds are, there's always going to be 490 00:23:07,003 --> 00:23:11,433 something more to learn and more comfort that you think you can achieve. 491 00:23:11,433 --> 00:23:14,100 So if you're already thinking about it, I think now is the time. 492 00:23:14,100 --> 00:23:17,350 And then just to give you a more concrete data point, at Harvard, 493 00:23:17,350 --> 00:23:20,430 we have the so-called CS50 hackathon, which 494 00:23:20,430 --> 00:23:24,540 is at the end of the semester for us, which means, after three months, 495 00:23:24,540 --> 00:23:27,690 CS50 students are ready to participate in a hackathon. 496 00:23:27,690 --> 00:23:31,450 Granted, our hackathon focuses on CS50's final projects. 497 00:23:31,450 --> 00:23:34,650 So it is not necessarily an open-ended project 498 00:23:34,650 --> 00:23:37,260 that you don't all find out about until you get there. 499 00:23:37,260 --> 00:23:39,090 But I think a more concrete rule of thumb 500 00:23:39,090 --> 00:23:41,970 would be, after CS50 itself, after three months, 501 00:23:41,970 --> 00:23:45,870 you're certainly ready and encouraged to try something like that out. 502 00:23:45,870 --> 00:23:48,930 Brian has, in fact, taught at and participated in a few of these things 503 00:23:48,930 --> 00:23:52,497 and can perhaps give you a more personal perspective too. 504 00:23:52,497 --> 00:23:55,080 BRIAN YU: Yeah, I mean, I would definitely agree with the idea 505 00:23:55,080 --> 00:23:57,420 that hackathons and these types of experiences 506 00:23:57,420 --> 00:23:58,830 are really learning experiences. 507 00:23:58,830 --> 00:24:00,983 You're not expected to know exactly how to solve 508 00:24:00,983 --> 00:24:03,900 the problems that you're trying to solve when you enter the hackathon. 509 00:24:03,900 --> 00:24:06,022 It's meant to be a collaborative opportunity where 510 00:24:06,022 --> 00:24:07,980 you can talk to other people about the problems 511 00:24:07,980 --> 00:24:10,770 you're trying to solve and get feedback and ideas 512 00:24:10,770 --> 00:24:12,450 for how you might approach them. 513 00:24:12,450 --> 00:24:15,090 As for working on open source projects and trying 514 00:24:15,090 --> 00:24:17,430 to contribute to those projects, what might be 515 00:24:17,430 --> 00:24:21,120 a good first step is to first start just by trying to read some 516 00:24:21,120 --> 00:24:23,080 of the code in other people's projects. 517 00:24:23,080 --> 00:24:26,220 It's a very different experience writing your own code from scratch 518 00:24:26,220 --> 00:24:30,430 than it is to look at someone else's code and try to read and understand it. 519 00:24:30,430 --> 00:24:32,260 And that's a good skill to develop as well. 520 00:24:32,260 --> 00:24:34,290 It's one of the reasons why, later in CS50, 521 00:24:34,290 --> 00:24:37,890 we have you start to read some of our own distribution code for problem sets 522 00:24:37,890 --> 00:24:41,400 that we give to you as practice with reading other people's code. 523 00:24:41,400 --> 00:24:43,920 And reading other open source project code 524 00:24:43,920 --> 00:24:45,863 can help you to better get a sense for how 525 00:24:45,863 --> 00:24:48,780 they work and can be a good stepping stone if, later on, you then want 526 00:24:48,780 --> 00:24:51,020 to contribute to those projects as well. 527 00:24:51,020 --> 00:24:51,960 DAVID MALAN: And I-- 528 00:24:51,960 --> 00:24:52,810 AUDIENCE: Thank you. 529 00:24:52,810 --> 00:24:54,810 DAVID MALAN: Yeah, and on the open source front, 530 00:24:54,810 --> 00:24:58,230 I've just pasted the URL of a website that is super simple. 531 00:24:58,230 --> 00:25:00,930 This is a project that someone made just to help 532 00:25:00,930 --> 00:25:04,395 people look up their GitHub user ID. 533 00:25:04,395 --> 00:25:06,270 In addition to your GitHub username, everyone 534 00:25:06,270 --> 00:25:09,000 has an integer that's their unique identifier that can be 535 00:25:09,000 --> 00:25:10,770 useful for certain types of projects. 536 00:25:10,770 --> 00:25:12,390 And so I found my way to that website. 537 00:25:12,390 --> 00:25:15,570 And as of a few months ago, there was a bug in that website, 538 00:25:15,570 --> 00:25:18,510 and it wasn't quite displaying information correctly. 539 00:25:18,510 --> 00:25:20,830 And I realized, wow, wait, I can probably fix this. 540 00:25:20,830 --> 00:25:25,440 So I found the GitHub repository in which the code was stored. 541 00:25:25,440 --> 00:25:29,940 I literally made one change to one line of code 542 00:25:29,940 --> 00:25:32,100 and submitted what's called a pull request, which 543 00:25:32,100 --> 00:25:34,590 is a request for the owner of the code to actually merge it 544 00:25:34,590 --> 00:25:35,850 into their code base. 545 00:25:35,850 --> 00:25:39,330 And I was just so happy when he actually said yes, like, thank you 546 00:25:39,330 --> 00:25:43,320 for the change, and merged my one-line change into the project, which is only 547 00:25:43,320 --> 00:25:48,390 to say that if you start using other people's tools or free and open source 548 00:25:48,390 --> 00:25:51,120 libraries in your own projects, when you discover 549 00:25:51,120 --> 00:25:55,098 that that program or that library has a bug, or it's missing some feature, 550 00:25:55,098 --> 00:25:58,140 I think one of the best ways to get involved in the open source community 551 00:25:58,140 --> 00:26:01,650 is try to go implement that feature or try to go solve that bug 552 00:26:01,650 --> 00:26:05,520 yourself and submit what's called a pull request, just like I did. 553 00:26:05,520 --> 00:26:10,600 And it's the most gratifying thing, which is admittedly a very geeky thing. 554 00:26:10,600 --> 00:26:13,032 But it was a lot of fun just contributing to a project 555 00:26:13,032 --> 00:26:15,240 and learning something new about someone else's code. 556 00:26:15,240 --> 00:26:17,130 So I would encourage you to try that too. 557 00:26:17,130 --> 00:26:19,290 Solve problems in things you, yourself, use. 558 00:26:19,290 --> 00:26:21,950 559 00:26:21,950 --> 00:26:23,870 All right, up next, we have Asher. 560 00:26:23,870 --> 00:26:26,745 If you'd like to say hello, and where you're from, and your question? 561 00:26:26,745 --> 00:26:29,360 562 00:26:29,360 --> 00:26:30,840 And we just need to unmute you. 563 00:26:30,840 --> 00:26:31,560 Asher, go ahead. 564 00:26:31,560 --> 00:26:33,930 AUDIENCE: Hi, am from New York City as well. 565 00:26:33,930 --> 00:26:39,215 And just answering Emmeline's, at the last office hours 566 00:26:39,215 --> 00:26:40,340 I asked a similar question. 567 00:26:40,340 --> 00:26:43,820 And then afterwards, there was a bug with the-- 568 00:26:43,820 --> 00:26:48,380 there was a feature request for the submit50 program. 569 00:26:48,380 --> 00:26:51,950 And I submitted a single pull request that changed one line. 570 00:26:51,950 --> 00:26:54,830 And it was the best feeling ever, just to have 571 00:26:54,830 --> 00:26:58,440 your code running when you run that. 572 00:26:58,440 --> 00:27:01,730 But my question is, I always seem-- 573 00:27:01,730 --> 00:27:04,350 I always seem to do well on the problem sets. 574 00:27:04,350 --> 00:27:10,310 But whenever it gets to projects, I have trouble figuring out ideas or just 575 00:27:10,310 --> 00:27:11,050 getting started. 576 00:27:11,050 --> 00:27:13,310 So do you have a sort of process for doing that? 577 00:27:13,310 --> 00:27:18,050 Or is it just find what needs to be solved? 578 00:27:18,050 --> 00:27:20,340 DAVID MALAN: Personally, I have a to-do list 579 00:27:20,340 --> 00:27:24,380 that seems to be infinitely long that I will never get through 580 00:27:24,380 --> 00:27:26,450 by the time I'm done programming. 581 00:27:26,450 --> 00:27:29,450 So thankfully, I'm in a position where I just have more projects 582 00:27:29,450 --> 00:27:32,003 that I want to take on that I can. 583 00:27:32,003 --> 00:27:33,920 But I think your own instincts are just right. 584 00:27:33,920 --> 00:27:36,710 When you see something, that's an opportunity to jump on it. 585 00:27:36,710 --> 00:27:40,160 And very quickly, I think, will you start to see more, and more, 586 00:27:40,160 --> 00:27:43,160 and more opportunities or projects that you want to get involved in. 587 00:27:43,160 --> 00:27:47,330 And then the harder question is going to be which of those to prioritize. 588 00:27:47,330 --> 00:27:50,513 Brian, you've taken on some of these yourself too, yes? 589 00:27:50,513 --> 00:27:53,180 BRIAN YU: Yeah, so actually, what you just pointed out, I think, 590 00:27:53,180 --> 00:27:55,740 is a really good suggestion, which is keeping a list, 591 00:27:55,740 --> 00:27:59,120 just some sort of to-do list of things you would like to do someday. 592 00:27:59,120 --> 00:28:02,000 Because oftentimes you'll notice something that you wish existed 593 00:28:02,000 --> 00:28:04,070 or that you wish were slightly different. 594 00:28:04,070 --> 00:28:05,492 But you're out and about. 595 00:28:05,492 --> 00:28:08,450 You're not really at home, sitting in front of a computer in a position 596 00:28:08,450 --> 00:28:11,540 to actually start writing some code to work on a project. 597 00:28:11,540 --> 00:28:14,510 And just the idea of maintaining a list of things 598 00:28:14,510 --> 00:28:17,780 that you want to do so that when you notice something you can write it down, 599 00:28:17,780 --> 00:28:20,810 that's really helpful such that, later on, you can go back to that list 600 00:28:20,810 --> 00:28:22,280 and refer to it. 601 00:28:22,280 --> 00:28:25,370 I find checklists and a list of things to do 602 00:28:25,370 --> 00:28:27,590 is a very helpful organizing tool to make 603 00:28:27,590 --> 00:28:29,820 sure I'm organized about the things that I'm doing, 604 00:28:29,820 --> 00:28:33,410 and also very helpful just for being more aware of things 605 00:28:33,410 --> 00:28:36,500 that I might want to do some day and then remembering those later instead 606 00:28:36,500 --> 00:28:37,292 of forgetting them. 607 00:28:37,292 --> 00:28:39,500 DAVID MALAN: Yeah, and to Brian's point about a list, 608 00:28:39,500 --> 00:28:42,660 this past weekend I spent updating my own personal website for, like, 609 00:28:42,660 --> 00:28:45,180 the first time in 10 or 15 years. 610 00:28:45,180 --> 00:28:48,270 And even once I finished it, I already had 611 00:28:48,270 --> 00:28:50,430 a list of, like, seven, or eight, or nine 612 00:28:50,430 --> 00:28:52,980 more to-dos that I still want to get to. 613 00:28:52,980 --> 00:28:54,420 It's sort of diminishing returns. 614 00:28:54,420 --> 00:28:58,510 Like, it's smaller features or slightly more information and I want to add. 615 00:28:58,510 --> 00:29:00,720 But that is just to say that if I wanted to, 616 00:29:00,720 --> 00:29:03,570 I could spend all day long tackling some of these to-dos. 617 00:29:03,570 --> 00:29:07,200 And you'll start to see that, I think, if you start making a list. 618 00:29:07,200 --> 00:29:08,310 AUDIENCE: Thank you 619 00:29:08,310 --> 00:29:11,790 DAVID MALAN: Sure, up next, we have Jabock, if you'd like to say hello 620 00:29:11,790 --> 00:29:13,980 and where you're from. 621 00:29:13,980 --> 00:29:17,430 AUDIENCE: Currently, I am taking CS50 web development course. 622 00:29:17,430 --> 00:29:22,590 And I am amazed by how Brian Yu teaches us. 623 00:29:22,590 --> 00:29:24,210 And I love him very much. 624 00:29:24,210 --> 00:29:29,450 And my question is, as the project begins to grow bigger and bigger, 625 00:29:29,450 --> 00:29:36,670 how do we plan so that we can quickly plan and work on that project? 626 00:29:36,670 --> 00:29:38,762 627 00:29:38,762 --> 00:29:40,470 DAVID MALAN: Can you-- can you elaborate? 628 00:29:40,470 --> 00:29:42,860 I'm not sure we followed exactly. 629 00:29:42,860 --> 00:29:48,240 AUDIENCE: I mean to say that as the project begin to larger, supporting 630 00:29:48,240 --> 00:29:52,040 CS50 web development final project. 631 00:29:52,040 --> 00:29:53,456 DAVID MALAN: What to do? 632 00:29:53,456 --> 00:29:55,500 AUDIENCE: How can we manage the-- 633 00:29:55,500 --> 00:30:01,060 how can we manage the project and think about in terms of database 634 00:30:01,060 --> 00:30:02,540 and all of those? 635 00:30:02,540 --> 00:30:03,290 DAVID MALAN: Sure. 636 00:30:03,290 --> 00:30:05,055 Brian, do you want to speak to that? 637 00:30:05,055 --> 00:30:05,930 BRIAN YU: Yeah, sure. 638 00:30:05,930 --> 00:30:07,710 So I think this is sort of in two parts. 639 00:30:07,710 --> 00:30:11,480 One is in, when you're planning for a large web application, 640 00:30:11,480 --> 00:30:13,700 it's often helpful to think about, before you even 641 00:30:13,700 --> 00:30:17,520 start writing any code, what the different components of the application 642 00:30:17,520 --> 00:30:18,020 are going-- 643 00:30:18,020 --> 00:30:18,890 is going to be. 644 00:30:18,890 --> 00:30:22,130 What do you want to-- what features should the application support? 645 00:30:22,130 --> 00:30:23,570 What should users be able to do? 646 00:30:23,570 --> 00:30:25,580 What kind of data do you need to store? 647 00:30:25,580 --> 00:30:29,660 So thinking first about those questions is probably a good step. 648 00:30:29,660 --> 00:30:33,110 And then what you might want to do is to divide some of those features 649 00:30:33,110 --> 00:30:35,750 into different milestones for yourself. 650 00:30:35,750 --> 00:30:39,230 Likely, it's not going to be feasible to take a big web application 651 00:30:39,230 --> 00:30:41,780 and just write the entire thing in one afternoon. 652 00:30:41,780 --> 00:30:44,270 But rather, you'll build incrementally in the same way 653 00:30:44,270 --> 00:30:46,910 that, in the first weeks of CS50 with your Scratch project, 654 00:30:46,910 --> 00:30:49,362 you probably built it incrementally, adding a few scripts, 655 00:30:49,362 --> 00:30:52,320 and testing it out, and seeing what happens, then adding a little more, 656 00:30:52,320 --> 00:30:53,862 and testing, and seeing what happens. 657 00:30:53,862 --> 00:30:56,840 The same principle holds true for larger applications as well. 658 00:30:56,840 --> 00:30:59,150 You'll probably set milestones for yourself 659 00:30:59,150 --> 00:31:02,030 such that the essential features happen first. 660 00:31:02,030 --> 00:31:03,410 You work on writing those. 661 00:31:03,410 --> 00:31:05,850 You work on testing them and seeing how they work. 662 00:31:05,850 --> 00:31:07,642 And once you're comfortable with those, you 663 00:31:07,642 --> 00:31:10,350 can begin incrementally adding to that project as well. 664 00:31:10,350 --> 00:31:12,410 But going into the project with a general plan 665 00:31:12,410 --> 00:31:14,870 and being willing for that plan to change, I think, 666 00:31:14,870 --> 00:31:16,972 is a good place to start. 667 00:31:16,972 --> 00:31:19,430 DAVID MALAN: And even though in CS50, we have everyone sign 668 00:31:19,430 --> 00:31:23,720 up for a GitHub account, as you know, we don't really use GitHub that much. 669 00:31:23,720 --> 00:31:27,650 Although other courses that follow on from CS50 do use it a bit more. 670 00:31:27,650 --> 00:31:31,340 But having the right tools in place, I think, is really helpful too, 671 00:31:31,340 --> 00:31:35,885 Jabock, such that I just pasted two URLs into the chat window for github.com. 672 00:31:35,885 --> 00:31:37,010 And there are alternatives. 673 00:31:37,010 --> 00:31:38,870 You can use GitLab and Bitbucket. 674 00:31:38,870 --> 00:31:42,140 And there's other third parties as well that provide the same services. 675 00:31:42,140 --> 00:31:45,590 But if you look at a couple of those URLs, if you're not familiar, 676 00:31:45,590 --> 00:31:49,940 a lot of these tools like GitHub make it easier to build large projects 677 00:31:49,940 --> 00:31:51,770 and to collaborate with other people. 678 00:31:51,770 --> 00:31:54,500 I alluded to pull requests with Emmeline's question earlier 679 00:31:54,500 --> 00:31:56,840 and the ability to submit your code to someone else 680 00:31:56,840 --> 00:31:58,820 to incorporate into their project. 681 00:31:58,820 --> 00:32:01,070 There's the notion of a code review, which 682 00:32:01,070 --> 00:32:03,230 is an opportunity for a friend, or a colleague, 683 00:32:03,230 --> 00:32:05,510 or a random stranger on the internet to provide you, 684 00:32:05,510 --> 00:32:08,240 or in my case, me, with feedback on the code 685 00:32:08,240 --> 00:32:10,550 that you are trying to contribute to a project. 686 00:32:10,550 --> 00:32:14,838 And then there's what are called issues, or projects, or project boards, 687 00:32:14,838 --> 00:32:16,880 which are features that sites like GitHub support 688 00:32:16,880 --> 00:32:19,700 as well that help you organize, to Asher's point earlier, 689 00:32:19,700 --> 00:32:21,710 a lot of your ideas and to-dos. 690 00:32:21,710 --> 00:32:24,095 And you can assign them from one person to another. 691 00:32:24,095 --> 00:32:25,970 So getting the right tools in place, I think, 692 00:32:25,970 --> 00:32:30,150 can help you be all the more productive as well. 693 00:32:30,150 --> 00:32:32,930 All right, next up, we have Bryna, if I'm saying it right, 694 00:32:32,930 --> 00:32:34,760 if you'd like to say hello. 695 00:32:34,760 --> 00:32:36,510 AUDIENCE: Hi, yes, you're saying it right. 696 00:32:36,510 --> 00:32:37,760 DAVID MALAN: Nice to meet you. 697 00:32:37,760 --> 00:32:39,980 Where are you from, and what's your question? 698 00:32:39,980 --> 00:32:42,670 AUDIENCE: Well, I'm from Atlanta, Georgia. 699 00:32:42,670 --> 00:32:43,770 DAVID MALAN: Nice to meet. 700 00:32:43,770 --> 00:32:44,770 AUDIENCE: Thank you. 701 00:32:44,770 --> 00:32:49,610 Well, my question is, in regards to data analysis-- 702 00:32:49,610 --> 00:32:54,610 that's where the-- that's the path that I want to put myself into-- 703 00:32:54,610 --> 00:32:57,490 what other courses or what kind of path do you 704 00:32:57,490 --> 00:33:00,600 recommend for somebody pursuing that career? 705 00:33:00,600 --> 00:33:02,290 DAVID MALAN: Ah, that's a good question. 706 00:33:02,290 --> 00:33:06,500 So I think the buzzword du jour would be data science these days, 707 00:33:06,500 --> 00:33:11,630 which is an amalgamation of programming, of statistical methods to larger data 708 00:33:11,630 --> 00:33:14,470 sets so that you can ask questions of that data. 709 00:33:14,470 --> 00:33:17,530 Brian, do you perhaps have some go-to links or courses offhand? 710 00:33:17,530 --> 00:33:20,528 Otherwise I can try to find on my side. 711 00:33:20,528 --> 00:33:21,820 BRIAN YU: Yeah, so I've heard-- 712 00:33:21,820 --> 00:33:24,550 I haven't taken the class myself, but I know that Coursera 713 00:33:24,550 --> 00:33:27,140 offers a popular class on data science. 714 00:33:27,140 --> 00:33:31,450 So I've pasted that link there as something you might look into. 715 00:33:31,450 --> 00:33:34,450 So you can certainly do data science in a programming language 716 00:33:34,450 --> 00:33:36,760 like Python, which CS50 teaches. 717 00:33:36,760 --> 00:33:38,620 This course in particular uses a language 718 00:33:38,620 --> 00:33:42,970 called R, which is also very popular for writing statistical programs 719 00:33:42,970 --> 00:33:46,150 and doing data analysis with programming. 720 00:33:46,150 --> 00:33:48,790 And so that language I'll also paste there, 721 00:33:48,790 --> 00:33:52,370 for the website for the R Project, which is the project that 722 00:33:52,370 --> 00:33:54,590 organizes that particular language. 723 00:33:54,590 --> 00:33:56,890 So that might be something worth looking into as well. 724 00:33:56,890 --> 00:33:59,830 There are definitely multiple options you have in terms of languages 725 00:33:59,830 --> 00:34:01,600 to use for data science. 726 00:34:01,600 --> 00:34:04,083 But Python and R are both quite popular for that. 727 00:34:04,083 --> 00:34:06,400 DAVID MALAN: Yeah, and also, on the database side too, 728 00:34:06,400 --> 00:34:09,580 SQL is also very powerful as well. 729 00:34:09,580 --> 00:34:13,670 We look at it a little bit in CS50 and in Brian's web class. 730 00:34:13,670 --> 00:34:17,409 But getting more comfortable with analyzing large corpuses of data using 731 00:34:17,409 --> 00:34:19,840 SQL can be very powerful as well-- 732 00:34:19,840 --> 00:34:23,010 very popular area right now. 733 00:34:23,010 --> 00:34:27,010 All right Emmanuel, you're up next from UK, I gather. 734 00:34:27,010 --> 00:34:32,070 AUDIENCE: Yes, hi there, Professor Malan, Brian, all the CS50 community. 735 00:34:32,070 --> 00:34:35,679 I'm a professional musician, a classical guitarist specifically. 736 00:34:35,679 --> 00:34:39,909 I've been taking CS50 as an introduction to coding during these times 737 00:34:39,909 --> 00:34:43,750 where we're staying at home trying to develop a hobby, and potentially 738 00:34:43,750 --> 00:34:46,300 a side profession, let's say. 739 00:34:46,300 --> 00:34:50,139 And just to say, it's surpassed any expectations I had about programming 740 00:34:50,139 --> 00:34:52,340 and just how exciting it could be. 741 00:34:52,340 --> 00:35:01,330 So my question is, what have you seen as overlaps between arts and coding? 742 00:35:01,330 --> 00:35:06,130 And are there perhaps overarching trends that you may have observed, perhaps 743 00:35:06,130 --> 00:35:09,462 amongst your CS50 alumni community? 744 00:35:09,462 --> 00:35:11,420 DAVID MALAN: Yeah, it's a really good question. 745 00:35:11,420 --> 00:35:15,365 Brian, do you want to speak to this first given your musical tendencies? 746 00:35:15,365 --> 00:35:16,240 BRIAN YU: Yeah, sure. 747 00:35:16,240 --> 00:35:20,990 So speaking more generally about the arts, David and I actually, 748 00:35:20,990 --> 00:35:23,750 a couple years ago now, were teaching a class 749 00:35:23,750 --> 00:35:26,030 on programming in the digital humanities. 750 00:35:26,030 --> 00:35:28,090 So the digital humanities is an entire field 751 00:35:28,090 --> 00:35:31,580 that's really all about the intersection of humanities, and the arts, 752 00:35:31,580 --> 00:35:32,630 and computing. 753 00:35:32,630 --> 00:35:35,450 So there's a lot of interesting work that's going on there. 754 00:35:35,450 --> 00:35:40,850 With regards to music specifically, CS50 actually had a problem about music 755 00:35:40,850 --> 00:35:41,845 a couple of years ago. 756 00:35:41,845 --> 00:35:44,470 I'll paste the link to that problem there if you're interested. 757 00:35:44,470 --> 00:35:44,870 AUDIENCE: Thanks. 758 00:35:44,870 --> 00:35:47,662 BRIAN YU: But that was a program where you could write some C code, 759 00:35:47,662 --> 00:35:50,023 and it would-- oh, I see David posted the link too-- 760 00:35:50,023 --> 00:35:52,190 where you can write some C code to actually generate 761 00:35:52,190 --> 00:35:56,340 some music of your own based on some representation of sheet music. 762 00:35:56,340 --> 00:35:59,240 But especially now, with artificial intelligence, 763 00:35:59,240 --> 00:36:01,790 the intersection between computation and music 764 00:36:01,790 --> 00:36:04,250 is getting very interesting where there's actually 765 00:36:04,250 --> 00:36:07,730 artificial intelligence, in particular, variants of neural networks, that 766 00:36:07,730 --> 00:36:10,220 are able to generate musical compositions that 767 00:36:10,220 --> 00:36:12,560 are almost indistinguishable from compositions 768 00:36:12,560 --> 00:36:15,690 that a human might have composed themselves. 769 00:36:15,690 --> 00:36:19,280 One of the most famous ones there is OpenAI's MuseNet, which 770 00:36:19,280 --> 00:36:20,850 is a neural network that can be used. 771 00:36:20,850 --> 00:36:22,930 I just posted a link to it there. 772 00:36:22,930 --> 00:36:25,070 But you can hear samples of music that was 773 00:36:25,070 --> 00:36:27,640 generated by artificial intelligence. 774 00:36:27,640 --> 00:36:31,400 And this, I think, is one of the really interesting powers 775 00:36:31,400 --> 00:36:34,580 that some modern techniques in artificial intelligence 776 00:36:34,580 --> 00:36:37,970 are now able to do is they can generate compositions like that. 777 00:36:37,970 --> 00:36:40,520 DAVID MALAN: Yeah, and suffice it to say too, 778 00:36:40,520 --> 00:36:43,550 there's this intersection of computing and music certainly, 779 00:36:43,550 --> 00:36:45,540 when it comes to consumer applications. 780 00:36:45,540 --> 00:36:47,960 If you have Shazam, for instance, on your phone, 781 00:36:47,960 --> 00:36:51,650 this is a piece of software on iPhone and Android that you can hit a button 782 00:36:51,650 --> 00:36:55,820 and figure out what song is playing in a restaurant, or at a friend's house, 783 00:36:55,820 --> 00:36:56,670 or the like. 784 00:36:56,670 --> 00:36:59,120 And it does that generally by quantifying the music 785 00:36:59,120 --> 00:37:01,730 into small, little signatures or fingerprints 786 00:37:01,730 --> 00:37:03,860 that can then be looked up in a database. 787 00:37:03,860 --> 00:37:06,860 YouTube, and Facebook, and others are using computing 788 00:37:06,860 --> 00:37:09,530 to detect when copyright has been violated 789 00:37:09,530 --> 00:37:13,280 and someone has maybe uploaded, when they shouldn't, a copy of some song 790 00:37:13,280 --> 00:37:17,280 by looking at patterns that uniquely identify that song as well. 791 00:37:17,280 --> 00:37:21,710 And at the risk of maybe embarrassing, but hopefully flattering, Brian 792 00:37:21,710 --> 00:37:23,008 himself is quite the musician. 793 00:37:23,008 --> 00:37:24,800 And I've just pasted, into the chat window, 794 00:37:24,800 --> 00:37:28,700 60 seconds of Brian playing the piano on the stage of Sanders Theatre 795 00:37:28,700 --> 00:37:29,570 at Harvard. 796 00:37:29,570 --> 00:37:31,790 And in fact, it was Brian's talents a few years ago 797 00:37:31,790 --> 00:37:37,160 that inspired that new music problem set that he, too, pasted earlier. 798 00:37:37,160 --> 00:37:38,745 All right, well, thank you, Emmanuel. 799 00:37:38,745 --> 00:37:41,120 We have up next Ben carpenter, if you'd like to say hello 800 00:37:41,120 --> 00:37:43,390 and where you're from. 801 00:37:43,390 --> 00:37:45,510 AUDIENCE: Hi. yeah, so I'm Ben Carpenter. 802 00:37:45,510 --> 00:37:48,930 I'm from western Massachusetts actually. 803 00:37:48,930 --> 00:37:53,358 So I was hoping to ask what you guys thought the best option for when 804 00:37:53,358 --> 00:37:55,150 you're trying to work through a problem set 805 00:37:55,150 --> 00:37:57,030 and you just kind of can't get something. 806 00:37:57,030 --> 00:38:02,100 And hopefully you've hit the 70% plus on check50. 807 00:38:02,100 --> 00:38:07,414 When is it the right time to just kind of say, let's move on? 808 00:38:07,414 --> 00:38:09,510 DAVID MALAN: Yeah, that's a really good question. 809 00:38:09,510 --> 00:38:15,330 My personality is such that 100% is usually when I would quit, 810 00:38:15,330 --> 00:38:16,110 which is tough. 811 00:38:16,110 --> 00:38:19,440 Because there's often diminishing returns of your time 812 00:38:19,440 --> 00:38:23,550 where you might spend 10% of your time on 90% of the problem 813 00:38:23,550 --> 00:38:28,020 set, but 90% of your time on 10% of the problem set. 814 00:38:28,020 --> 00:38:31,380 But gosh, the sense of gratification, honestly, for me, 815 00:38:31,380 --> 00:38:34,950 for that last 10% or 30% is really where I 816 00:38:34,950 --> 00:38:39,060 think a lot of the sense of pride and accomplishment is for the very reason 817 00:38:39,060 --> 00:38:42,510 that it's so much harder sometimes to solve those final bugs 818 00:38:42,510 --> 00:38:44,490 or figure out that corner case. 819 00:38:44,490 --> 00:38:49,470 But I think the upside of trying to adopt that behavior in general 820 00:38:49,470 --> 00:38:51,990 is that you just get so much better over time 821 00:38:51,990 --> 00:38:53,910 at solving problems in your own code. 822 00:38:53,910 --> 00:38:58,470 And the peak, I think, is when you become a sufficiently comfortable 823 00:38:58,470 --> 00:39:01,110 programmer that no matter what your bug is, 824 00:39:01,110 --> 00:39:04,710 you are confident that if you just give it enough time, you will figure it out. 825 00:39:04,710 --> 00:39:06,210 You don't need to ask a teacher. 826 00:39:06,210 --> 00:39:07,600 You don't need to ask a friend. 827 00:39:07,600 --> 00:39:09,480 You don't need to post on Stack Overflow. 828 00:39:09,480 --> 00:39:13,380 You begin to acquire a confidence that you've done bugs like this before. 829 00:39:13,380 --> 00:39:16,480 Yes, they take a long time, but you know you can solve it. 830 00:39:16,480 --> 00:39:20,130 And so I think that's the upside, I think, of conditioning yourself, 831 00:39:20,130 --> 00:39:22,992 training yourself to try to go past that 70% point. 832 00:39:22,992 --> 00:39:25,200 Now in the real world, of course, there's trade-offs, 833 00:39:25,200 --> 00:39:26,760 and there's other demands on your time. 834 00:39:26,760 --> 00:39:28,927 Maybe you have other classes you want to do in well. 835 00:39:28,927 --> 00:39:32,280 Maybe there's work or family matters that you need to attend to. 836 00:39:32,280 --> 00:39:34,830 And that's more of a personal judgment call. 837 00:39:34,830 --> 00:39:40,680 But I would encourage you not to be satisfied with satisfactory performance 838 00:39:40,680 --> 00:39:45,240 alone and to push yourself that additional 30% or even 10%. 839 00:39:45,240 --> 00:39:47,662 AUDIENCE: Would you say that-- 840 00:39:47,662 --> 00:39:49,620 sometimes when I get stuck on a problem, right, 841 00:39:49,620 --> 00:39:51,810 my instinct is to move on and come back. 842 00:39:51,810 --> 00:39:57,630 Like, I've been trying to do the image filtering problem set for a long time 843 00:39:57,630 --> 00:39:59,820 now, like almost all week. 844 00:39:59,820 --> 00:40:03,450 And I've just-- I've gotten everything except for the blurring. 845 00:40:03,450 --> 00:40:08,610 And it looks like it's coming out right, but the math with the actual check50 846 00:40:08,610 --> 00:40:10,580 is coming out wrong. 847 00:40:10,580 --> 00:40:15,300 So I'm wondering if it's a good time for me to just move on to the next one 848 00:40:15,300 --> 00:40:17,550 before making the submit. 849 00:40:17,550 --> 00:40:20,730 DAVID MALAN: So personally, I wouldn't deprive yourself 850 00:40:20,730 --> 00:40:24,390 of that sense of satisfaction of actually figuring that out, 851 00:40:24,390 --> 00:40:26,432 especially since you've been so determined. 852 00:40:26,432 --> 00:40:29,640 But I would encourage you to consider that maybe you're doing something wrong 853 00:40:29,640 --> 00:40:33,090 in the sense that, if you keep spending more, and more, and more time on it, 854 00:40:33,090 --> 00:40:35,940 maybe you're not putting very good-- very-- 855 00:40:35,940 --> 00:40:37,650 you're not using that time very smartly. 856 00:40:37,650 --> 00:40:39,480 You're doing the same thing again and again 857 00:40:39,480 --> 00:40:42,035 and expecting something to change, when really, what you 858 00:40:42,035 --> 00:40:44,160 should maybe be doing is sitting down with a family 859 00:40:44,160 --> 00:40:47,450 member, or a sibling, or friend and talk them through the problem, right? 860 00:40:47,450 --> 00:40:49,740 Teach them what it is your code is doing. 861 00:40:49,740 --> 00:40:52,770 This is the equivalent of the rubber duck, a photo of which I just 862 00:40:52,770 --> 00:40:54,420 pasted into the chat window. 863 00:40:54,420 --> 00:40:57,180 Just hearing yourself talk through the problem can work wonders. 864 00:40:57,180 --> 00:41:00,510 And I do this all the time with Brian, with Kareem, with others on our team, 865 00:41:00,510 --> 00:41:02,610 just talking to them about what I'm working on. 866 00:41:02,610 --> 00:41:05,400 Then all of a sudden, I have that aha moment. 867 00:41:05,400 --> 00:41:07,630 I don't even need Brian or Kareem to be there. 868 00:41:07,630 --> 00:41:10,080 But the fact that they let me talk at them 869 00:41:10,080 --> 00:41:12,910 helped me understand where I was going wrong. 870 00:41:12,910 --> 00:41:15,060 And so maybe that's helpful in your case. 871 00:41:15,060 --> 00:41:17,940 I also find it helpful to go for a jog, to go to sleep, 872 00:41:17,940 --> 00:41:21,030 to just do something else, but kind of put it on the backburner. 873 00:41:21,030 --> 00:41:23,850 And I've lost track of how many problems I've solved literally when 874 00:41:23,850 --> 00:41:25,560 I'm just getting ready to go to sleep. 875 00:41:25,560 --> 00:41:27,390 I sit up and, like, oh, that's it. 876 00:41:27,390 --> 00:41:30,630 And then three hours later, I'm still awake, but I've made progress. 877 00:41:30,630 --> 00:41:33,480 So whatever you keep doing, don't do that. 878 00:41:33,480 --> 00:41:35,190 Try to shake things up a bit somehow. 879 00:41:35,190 --> 00:41:37,960 880 00:41:37,960 --> 00:41:39,290 All right, let's see. 881 00:41:39,290 --> 00:41:43,410 Next up, we have Yousef, if you'd like to say hello and where you're from. 882 00:41:43,410 --> 00:41:45,960 AUDIENCE: Hello, this is Yousef from Tunisia. 883 00:41:45,960 --> 00:41:51,450 I took CS50 last year in July and finished it successfully. 884 00:41:51,450 --> 00:41:55,750 I want to thank you, all the CS50 teams, for this amazing course. 885 00:41:55,750 --> 00:42:02,800 And I want to mention Kareem for helping me, fixing the CS50 IDE defined issues. 886 00:42:02,800 --> 00:42:04,350 Thank you, Kareem. 887 00:42:04,350 --> 00:42:08,410 So I have a couple of questions here. 888 00:42:08,410 --> 00:42:16,420 So my first question is about JavaScript in this time of the year. 889 00:42:16,420 --> 00:42:19,730 Especially the TypeScript is a new language. 890 00:42:19,730 --> 00:42:24,570 So will JavaScript still be successful and used? 891 00:42:24,570 --> 00:42:28,380 Or will it flow down? 892 00:42:28,380 --> 00:42:33,630 And my question is, when I want to go for an internship, 893 00:42:33,630 --> 00:42:38,110 for Google, for example, and I'm a JavaScript developer, 894 00:42:38,110 --> 00:42:42,660 I don't find that they are interested in JavaScript developers. 895 00:42:42,660 --> 00:42:46,030 They just want you to be a Python or Java. 896 00:42:46,030 --> 00:42:50,040 So what do you think about this? 897 00:42:50,040 --> 00:42:54,750 And my final question is how to contribute to CS50 on GitHub. 898 00:42:54,750 --> 00:42:56,880 Thank you. 899 00:42:56,880 --> 00:42:59,160 DAVID MALAN: Sure, I think on the last question, 900 00:42:59,160 --> 00:43:04,920 if you want to go to github.com/cs50 and look at some of our open source repos, 901 00:43:04,920 --> 00:43:08,700 many of them have open issues, which you're welcome to contribute to or ask 902 00:43:08,700 --> 00:43:10,470 questions about. 903 00:43:10,470 --> 00:43:14,430 As for JavaScript, it is an incredibly popular language right now. 904 00:43:14,430 --> 00:43:17,510 It's not going anywhere, I think, anytime soon. 905 00:43:17,510 --> 00:43:21,910 Brian, do you want to speak to it and its application in the real world? 906 00:43:21,910 --> 00:43:25,410 BRIAN YU: Yeah, certainly one of the most popular languages out there 907 00:43:25,410 --> 00:43:27,870 at the moment in terms of what's being used. 908 00:43:27,870 --> 00:43:30,420 Every year, Stack Overflow does a developer survey 909 00:43:30,420 --> 00:43:32,790 of what are the popular languages right now. 910 00:43:32,790 --> 00:43:35,940 And if you look at the most popular languages list, 911 00:43:35,940 --> 00:43:38,560 JavaScript is at the top of that list for this past year. 912 00:43:38,560 --> 00:43:40,380 I just pasted the link in the chat there. 913 00:43:40,380 --> 00:43:43,360 And it's been at the top of the list for a fair amount of time. 914 00:43:43,360 --> 00:43:45,690 Now what you might notice is that Stack Overflow also 915 00:43:45,690 --> 00:43:48,540 has a most loved languages list. 916 00:43:48,540 --> 00:43:51,870 And JavaScript does not rank very highly on that list, 917 00:43:51,870 --> 00:43:54,840 in particular because, with all the different versions of JavaScript, 918 00:43:54,840 --> 00:43:59,070 with all the quirks of the language, it's very easy to write JavaScript code 919 00:43:59,070 --> 00:44:01,140 that you think will work but doesn't quite 920 00:44:01,140 --> 00:44:03,070 work the way that you would expect. 921 00:44:03,070 --> 00:44:05,070 And it's for that reason that, as you mentioned, 922 00:44:05,070 --> 00:44:08,910 there have been a lot of extensions to JavaScript, other languages that 923 00:44:08,910 --> 00:44:12,510 are JavaScript-like that end up compiling to JavaScript 924 00:44:12,510 --> 00:44:14,730 that can be translated into JavaScript. 925 00:44:14,730 --> 00:44:16,740 So among them are languages like TypeScript, 926 00:44:16,740 --> 00:44:19,680 which you mentioned, which I happen to personally like quite a lot. 927 00:44:19,680 --> 00:44:22,530 Other ones include CoffeeScript, for example. 928 00:44:22,530 --> 00:44:27,870 And so these languages try to solve some of the problems with JavaScript while, 929 00:44:27,870 --> 00:44:32,490 at the same time, still allowing them to run inside of a web browser the way 930 00:44:32,490 --> 00:44:35,320 that JavaScript code normally can be. 931 00:44:35,320 --> 00:44:38,005 So I happen to quite like TypeScript in particular. 932 00:44:38,005 --> 00:44:40,380 But there are a lot of different extensions to JavaScript 933 00:44:40,380 --> 00:44:43,830 that are designed to try to keep the practical side of JavaScript 934 00:44:43,830 --> 00:44:47,010 while adding some additional features, adding some safety 935 00:44:47,010 --> 00:44:50,118 features to make it easier to use. 936 00:44:50,118 --> 00:44:52,160 DAVID MALAN: And one of the upsides of JavaScript 937 00:44:52,160 --> 00:44:55,970 is arguably that it can increasingly be used both on the client 938 00:44:55,970 --> 00:44:57,230 side and the server side. 939 00:44:57,230 --> 00:44:59,930 In CS50, we introduce it to students on the client 940 00:44:59,930 --> 00:45:04,460 side whereby it's running within the browser itself alongside HTML and CSS. 941 00:45:04,460 --> 00:45:08,390 But thanks to a runtime called Node, or Node.js, 942 00:45:08,390 --> 00:45:10,430 you can use JavaScript on the server side. 943 00:45:10,430 --> 00:45:12,830 And that, as a principle, is just very compelling. 944 00:45:12,830 --> 00:45:16,220 Because if you and your development team can all work in the same language 945 00:45:16,220 --> 00:45:20,820 everywhere, it decreases cost arguably, decreases time. 946 00:45:20,820 --> 00:45:25,520 So it's a very vibrant ecosystem, but it does change very frequently. 947 00:45:25,520 --> 00:45:27,930 There's always something new in that world. 948 00:45:27,930 --> 00:45:30,590 All right, up next, we have Louis, is you'd like to say hello 949 00:45:30,590 --> 00:45:31,625 and where you're from. 950 00:45:31,625 --> 00:45:32,900 AUDIENCE: Hey, hello, guys. 951 00:45:32,900 --> 00:45:34,160 I am from France. 952 00:45:34,160 --> 00:45:37,940 Actually, I'm Brazilian, currently live in France. 953 00:45:37,940 --> 00:45:43,040 I have a question about frameworks as we talk about web development. 954 00:45:43,040 --> 00:45:48,060 We show a lot of discussion on Twitter about React and Angular 955 00:45:48,060 --> 00:45:51,050 that are two different kinds of frameworks. 956 00:45:51,050 --> 00:45:53,900 So I would like to ask, which one is better? 957 00:45:53,900 --> 00:45:57,410 I mean, we see a lot of people saying that React is better 958 00:45:57,410 --> 00:46:01,180 because it's easier to-- 959 00:46:01,180 --> 00:46:04,980 I don't know-- to learn, and also many people saying that Angular is better. 960 00:46:04,980 --> 00:46:06,982 So which one is better, then? 961 00:46:06,982 --> 00:46:08,690 DAVID MALAN: Either way, you're not going 962 00:46:08,690 --> 00:46:11,330 to get an officially accurate response here. 963 00:46:11,330 --> 00:46:13,980 Because this is very much one of these "religious" debates. 964 00:46:13,980 --> 00:46:18,230 But Brian, want to speak to this given your experience with the web class? 965 00:46:18,230 --> 00:46:21,080 BRIAN YU: Yeah, so React and Angular are both frameworks that 966 00:46:21,080 --> 00:46:23,030 are designed to do similar things. 967 00:46:23,030 --> 00:46:25,490 Both of them are JavaScript frameworks that 968 00:46:25,490 --> 00:46:31,130 are designed to make it easier to build interactive interfaces on the web. 969 00:46:31,130 --> 00:46:33,230 React happens to be developed by Facebook. 970 00:46:33,230 --> 00:46:36,380 Angular happens to be developed by Google. 971 00:46:36,380 --> 00:46:37,820 Both of them have learning curves. 972 00:46:37,820 --> 00:46:40,560 Both of them have their advantages and disadvantages. 973 00:46:40,560 --> 00:46:44,600 So you're really never going to get a definitive answer on which one is best. 974 00:46:44,600 --> 00:46:46,760 Ultimately, it might vary a little bit based 975 00:46:46,760 --> 00:46:50,560 on what it is that you want to be working on specifically, 976 00:46:50,560 --> 00:46:54,620 that especially, if you're contributing to a project that already exists, 977 00:46:54,620 --> 00:46:58,830 it may already use Angular, or it may already use React, for example. 978 00:46:58,830 --> 00:46:59,900 So both are very popular. 979 00:46:59,900 --> 00:47:01,370 Both are definitely in demand. 980 00:47:01,370 --> 00:47:03,980 They do use different languages. 981 00:47:03,980 --> 00:47:08,660 They both ultimately use JavaScript, but React uses an extension to JavaScript 982 00:47:08,660 --> 00:47:12,980 called JavaScriptX, or JSX, that makes JavaScript look a little bit more 983 00:47:12,980 --> 00:47:14,390 like HTML. 984 00:47:14,390 --> 00:47:16,670 And Angular uses a language called TypeScript, 985 00:47:16,670 --> 00:47:18,740 which we mentioned a little while back, that 986 00:47:18,740 --> 00:47:24,440 specifically adds more strict types to the JavaScript language too. 987 00:47:24,440 --> 00:47:27,590 So trade-offs to both, and they're just used in different circumstances. 988 00:47:27,590 --> 00:47:30,110 I don't think you'll get a definitive answer about which one 989 00:47:30,110 --> 00:47:32,330 is necessarily better than the other. 990 00:47:32,330 --> 00:47:34,250 But everyone has their personal preferences. 991 00:47:34,250 --> 00:47:36,810 I personally like React, but people will disagree. 992 00:47:36,810 --> 00:47:39,310 DAVID MALAN: Yeah, React does have a lot of momentum lately. 993 00:47:39,310 --> 00:47:42,430 And honestly, if you aren't working at a company that already 994 00:47:42,430 --> 00:47:44,560 uses one framework or the other, and you're just 995 00:47:44,560 --> 00:47:46,780 trying to decide for yourself which one to learn, 996 00:47:46,780 --> 00:47:50,320 honestly, I would take a look at tutorials online for both, 997 00:47:50,320 --> 00:47:54,110 implement the equivalent of hello world in both, or something more advanced, 998 00:47:54,110 --> 00:47:56,980 and just see which one seems more pleasant to you. 999 00:47:56,980 --> 00:48:01,590 Odds are you'll fall on one side of the fence or the other as well. 1000 00:48:01,590 --> 00:48:04,270 All right, next up we have Nitten, if you'd like to say hello 1001 00:48:04,270 --> 00:48:06,220 and where you're from. 1002 00:48:06,220 --> 00:48:09,130 AUDIENCE: I'm Nitten, from Mumbai, India. 1003 00:48:09,130 --> 00:48:16,510 And my question was that I have been learning computers since the past three 1004 00:48:16,510 --> 00:48:18,340 years now in school. 1005 00:48:18,340 --> 00:48:21,130 But I didn't really get my basics right. 1006 00:48:21,130 --> 00:48:24,940 Like, I've been learning Java and C++. 1007 00:48:24,940 --> 00:48:27,970 So what books, or resources, or language would you 1008 00:48:27,970 --> 00:48:32,893 recommend so that I can get my basics and concepts right? 1009 00:48:32,893 --> 00:48:35,560 DAVID MALAN: Yeah, I don't think those are bad languages at all. 1010 00:48:35,560 --> 00:48:38,560 Both of them are what are called object-oriented programming languages. 1011 00:48:38,560 --> 00:48:41,110 They're both very common as first languages, 1012 00:48:41,110 --> 00:48:44,020 either in high schools or universities. 1013 00:48:44,020 --> 00:48:46,390 So I don't think you're going wrong there. 1014 00:48:46,390 --> 00:48:50,350 With that said, I think Python is very much in vogue these days. 1015 00:48:50,350 --> 00:48:52,360 And learning it is-- 1016 00:48:52,360 --> 00:48:55,480 probably opens up possibilities for you as well. 1017 00:48:55,480 --> 00:48:59,140 As Louis pointed out, JavaScript-- or someone earlier-- 1018 00:48:59,140 --> 00:49:02,505 JavaScript certainly is very trendy now as well. 1019 00:49:02,505 --> 00:49:05,130 But I think it should depend on what you want to get out of it. 1020 00:49:05,130 --> 00:49:07,870 Because you are currently studying C++ and Java, 1021 00:49:07,870 --> 00:49:10,600 which are very similar languages in spirit. 1022 00:49:10,600 --> 00:49:14,570 Syntax-wise, they're very different, but they can do similar things. 1023 00:49:14,570 --> 00:49:18,010 So to one of the first questions that was asked today 1024 00:49:18,010 --> 00:49:20,080 about other types of classes to take, I would 1025 00:49:20,080 --> 00:49:23,710 encourage you to look into what might be called functional programming. 1026 00:49:23,710 --> 00:49:26,380 This is something that you can learn a bit with JavaScript. 1027 00:49:26,380 --> 00:49:28,360 You can learn it somewhat with Python. 1028 00:49:28,360 --> 00:49:32,140 You can learn it with more specialized languages like Lisp, 1029 00:49:32,140 --> 00:49:35,620 for instance, or ML, or OCaml. 1030 00:49:35,620 --> 00:49:37,960 Those are classes-- or those are languages-- 1031 00:49:37,960 --> 00:49:42,040 that force you to learn how to program in a somewhat different way. 1032 00:49:42,040 --> 00:49:45,700 But I don't think you're off on a bad start in any way by starting with Java 1033 00:49:45,700 --> 00:49:46,270 and C++. 1034 00:49:46,270 --> 00:49:50,620 1035 00:49:50,620 --> 00:49:54,290 So next up, we have Sukantra, if I'm pronouncing it right, 1036 00:49:54,290 --> 00:49:56,766 if you'd like to say hello. 1037 00:49:56,766 --> 00:49:59,480 AUDIENCE: Yeah, hello, I'm Sukandra. 1038 00:49:59,480 --> 00:50:01,480 I'm from India. 1039 00:50:01,480 --> 00:50:12,380 And my question is, how would you advise the students 1040 00:50:12,380 --> 00:50:17,985 to approach the problem sets, particularly which involve coding? 1041 00:50:17,985 --> 00:50:19,610 DAVID MALAN: Can you read it once more? 1042 00:50:19,610 --> 00:50:22,870 I was having trouble hearing you. 1043 00:50:22,870 --> 00:50:25,420 AUDIENCE: My question is, how would you advise 1044 00:50:25,420 --> 00:50:28,590 the students to approach the problem sets, particularly which 1045 00:50:28,590 --> 00:50:30,548 involve coding? 1046 00:50:30,548 --> 00:50:33,090 DAVID MALAN: Oh, how to approach the problem sets, especially 1047 00:50:33,090 --> 00:50:34,330 those that involve coding. 1048 00:50:34,330 --> 00:50:37,705 Brian, do you want to take this first? 1049 00:50:37,705 --> 00:50:38,580 BRIAN YU: Yeah, sure. 1050 00:50:38,580 --> 00:50:41,910 So I think with CS50's problem sets in particular, 1051 00:50:41,910 --> 00:50:46,190 it's a good idea to start by reading the background section for the problem set, 1052 00:50:46,190 --> 00:50:50,070 which will usually introduce any of the necessary framing 1053 00:50:50,070 --> 00:50:54,490 to understand what the project is and what it is that you're supposed to do. 1054 00:50:54,490 --> 00:50:57,157 And then after that, with any problem that you try to solve it-- 1055 00:50:57,157 --> 00:50:58,907 I mentioned this a little while back too-- 1056 00:50:58,907 --> 00:51:01,110 but a strategy that I find very helpful is just 1057 00:51:01,110 --> 00:51:03,190 to work on building it incrementally. 1058 00:51:03,190 --> 00:51:06,610 So if you're trying to work on the Mario problem, for example, 1059 00:51:06,610 --> 00:51:09,180 you need to take an input, and make sure the input is valid, 1060 00:51:09,180 --> 00:51:10,860 and build a pyramid of that height. 1061 00:51:10,860 --> 00:51:13,450 Rather than write all of that code and then try to run it, 1062 00:51:13,450 --> 00:51:16,480 start by just writing a program that takes in user input. 1063 00:51:16,480 --> 00:51:18,130 Make sure you can do that. 1064 00:51:18,130 --> 00:51:21,640 And once that's working, go ahead and build the next piece on top of that. 1065 00:51:21,640 --> 00:51:24,750 If you write all of the code at once, it becomes a little bit 1066 00:51:24,750 --> 00:51:27,030 harder to think about and a little bit harder to debug 1067 00:51:27,030 --> 00:51:28,800 if something doesn't quite work right. 1068 00:51:28,800 --> 00:51:31,740 Whereas if you start small and then add to that, 1069 00:51:31,740 --> 00:51:35,100 that can make it a little bit easier to know, when something goes wrong, 1070 00:51:35,100 --> 00:51:37,142 what might be going wrong and just make it easier 1071 00:51:37,142 --> 00:51:39,267 for you to think about trying to solve the problem. 1072 00:51:39,267 --> 00:51:41,100 So while the problem sets might be vague, 1073 00:51:41,100 --> 00:51:43,793 breaking them up into smaller pieces can be helpful for that. 1074 00:51:43,793 --> 00:51:46,710 And the walkthrough videos that we associate with each of the problems 1075 00:51:46,710 --> 00:51:49,890 try to help you towards that too, trying to break the problem into smaller 1076 00:51:49,890 --> 00:51:53,760 steps that might be more easy to implement independently 1077 00:51:53,760 --> 00:51:55,885 and then putting all those pieces together. 1078 00:51:55,885 --> 00:51:58,760 DAVID MALAN: And that's a good question, in fact, very similar to one 1079 00:51:58,760 --> 00:52:01,552 other that Julie Lee, if I'm pronouncing your name right-- if you'd 1080 00:52:01,552 --> 00:52:04,820 like to ask your related question here. 1081 00:52:04,820 --> 00:52:06,440 Julie? 1082 00:52:06,440 --> 00:52:07,670 AUDIENCE: Hi, I'm Julie. 1083 00:52:07,670 --> 00:52:09,170 I'm from Oklahoma. 1084 00:52:09,170 --> 00:52:11,420 And my question is kind of similar. 1085 00:52:11,420 --> 00:52:15,067 So I've been taking computer science for the past two years now, 1086 00:52:15,067 --> 00:52:17,150 and I've learned, like, three different languages. 1087 00:52:17,150 --> 00:52:20,000 And I always get stuck at one point and try to give up. 1088 00:52:20,000 --> 00:52:22,770 So like, I have a problem looking at a bigger picture, 1089 00:52:22,770 --> 00:52:25,790 because I try to focus on the smaller parts. 1090 00:52:25,790 --> 00:52:28,070 But I have a hard time implementing it altogether. 1091 00:52:28,070 --> 00:52:32,870 So how do you work through getting stuck at a certain point? 1092 00:52:32,870 --> 00:52:36,330 And how do you get better at looking at a bigger picture? 1093 00:52:36,330 --> 00:52:40,040 DAVID MALAN: Yeah, and by getting stuck, do you mean with a particular feature, 1094 00:52:40,040 --> 00:52:43,130 or fixing some bug, or something else? 1095 00:52:43,130 --> 00:52:47,570 AUDIENCE: I think it's like when I am stuck on a certain logic, 1096 00:52:47,570 --> 00:52:52,030 just not knowing how to code the logic that I 1097 00:52:52,030 --> 00:52:54,347 need to figure out if that makes sense. 1098 00:52:54,347 --> 00:52:55,180 DAVID MALAN: Gotcha. 1099 00:52:55,180 --> 00:52:58,840 Yeah, Brian, do you want to take that one first? 1100 00:52:58,840 --> 00:53:00,660 BRIAN YU: Yeah, so I think this will depend 1101 00:53:00,660 --> 00:53:02,700 a little bit on your personal strat-- 1102 00:53:02,700 --> 00:53:05,100 your personal style for solving problems. 1103 00:53:05,100 --> 00:53:07,780 I often, when I'm struggling with the logic of a problem, 1104 00:53:07,780 --> 00:53:12,460 find it helpful to write things out on paper just to-- 1105 00:53:12,460 --> 00:53:14,460 sometimes just writing something down or drawing 1106 00:53:14,460 --> 00:53:18,270 a diagram or a picture of what my computer's memory might look like, 1107 00:53:18,270 --> 00:53:20,280 for example, or what data is being stored 1108 00:53:20,280 --> 00:53:22,740 where can often be helpful for me when I'm 1109 00:53:22,740 --> 00:53:25,623 trying to think about solving much larger problems. 1110 00:53:25,623 --> 00:53:27,790 Of course, that'll vary a little bit by the problem. 1111 00:53:27,790 --> 00:53:30,630 But I find being able to look at something more visual 1112 00:53:30,630 --> 00:53:31,590 helps me personally. 1113 00:53:31,590 --> 00:53:34,090 I learn very visually, and I think very visually. 1114 00:53:34,090 --> 00:53:36,000 And so that's useful for me. 1115 00:53:36,000 --> 00:53:38,040 But it may-- that may be helpful for you. 1116 00:53:38,040 --> 00:53:41,100 You may find that other strategies work for you as well. 1117 00:53:41,100 --> 00:53:43,560 Certainly, other tools like debuggers exist 1118 00:53:43,560 --> 00:53:46,110 for helping you to step through your code line by line 1119 00:53:46,110 --> 00:53:47,880 and get a better understanding. 1120 00:53:47,880 --> 00:53:49,890 David mentioned rubber duck debugging as well, 1121 00:53:49,890 --> 00:53:51,960 just talking the problem out loud. 1122 00:53:51,960 --> 00:53:55,440 Sometimes it's helpful for making your thinking a little bit more 1123 00:53:55,440 --> 00:53:57,090 precise and a little bit more formal. 1124 00:53:57,090 --> 00:53:59,880 And that can sometimes reveal where your bug might be 1125 00:53:59,880 --> 00:54:02,280 or how you might go about modifying your logic. 1126 00:54:02,280 --> 00:54:05,090 So all of these are strategies that may prove helpful. 1127 00:54:05,090 --> 00:54:08,340 DAVID MALAN: Yeah, and I can't emphasize enough the idea of talking to someone 1128 00:54:08,340 --> 00:54:10,410 else, or if need be, a rubber duck. 1129 00:54:10,410 --> 00:54:14,190 I mean, even in CS50's office hours on campus, when students come to me, 1130 00:54:14,190 --> 00:54:18,210 and Brian, and the courses teachers, teaching fellows for help, 1131 00:54:18,210 --> 00:54:23,010 very often, we'll just ask the student to explain their code on their screen 1132 00:54:23,010 --> 00:54:26,010 and ask them, what do you mean for this code to be doing? 1133 00:54:26,010 --> 00:54:27,700 What are you trying to accomplish? 1134 00:54:27,700 --> 00:54:32,170 And so often, just by asking the student to walk through their logic verbally 1135 00:54:32,170 --> 00:54:35,010 so that they, themselves, are thinking about it step by step, 1136 00:54:35,010 --> 00:54:36,530 they too have that aha moment. 1137 00:54:36,530 --> 00:54:38,280 And they realize where they've gone wrong. 1138 00:54:38,280 --> 00:54:40,800 So you can waste a lot of time, honestly, 1139 00:54:40,800 --> 00:54:42,750 by just sitting in your room or your dorm room 1140 00:54:42,750 --> 00:54:44,610 just banging your own head against the wall. 1141 00:54:44,610 --> 00:54:47,310 But honestly, taking a step back and talking to someone, 1142 00:54:47,310 --> 00:54:51,360 or talking to a duck, can really help speed things up, honestly. 1143 00:54:51,360 --> 00:54:55,320 So as before, change the approach you're taking, and see if that helps 1144 00:54:55,320 --> 00:54:57,762 gets you to a better solution. 1145 00:54:57,762 --> 00:54:59,970 I think we have time for just another question or so. 1146 00:54:59,970 --> 00:55:04,270 Can we call on Angelia, if I'm pronouncing it right? 1147 00:55:04,270 --> 00:55:05,460 AUDIENCE: Yeah, hi. 1148 00:55:05,460 --> 00:55:09,410 I'm Angela, from Jakarta, Indonesia. 1149 00:55:09,410 --> 00:55:10,660 DAVID MALAN: Nice to meet you. 1150 00:55:10,660 --> 00:55:11,960 AUDIENCE: Yeah. 1151 00:55:11,960 --> 00:55:15,900 My question is, I say, from the courses that Brian and David are 1152 00:55:15,900 --> 00:55:18,510 really patient when they are teaching. 1153 00:55:18,510 --> 00:55:21,690 So my question is how to develop such expertise. 1154 00:55:21,690 --> 00:55:26,440 I mean like public speaking and teaching CS combining and solve, and always 1155 00:55:26,440 --> 00:55:28,210 technical skill. 1156 00:55:28,210 --> 00:55:28,710 Thank you. 1157 00:55:28,710 --> 00:55:29,918 DAVID MALAN: Well, thank you. 1158 00:55:29,918 --> 00:55:31,840 You're too kind, I think. 1159 00:55:31,840 --> 00:55:36,130 So one of the reasons I, at least, went into teaching 20 years ago 1160 00:55:36,130 --> 00:55:39,220 was honestly because I wanted to get better at public speaking. 1161 00:55:39,220 --> 00:55:42,850 As you may have heard me say in one of CS50's classes, at the time, 1162 00:55:42,850 --> 00:55:47,200 I had run for the undergraduate council at Harvard, 1163 00:55:47,200 --> 00:55:50,650 or the student government if familiar, student council at the school, 1164 00:55:50,650 --> 00:55:54,580 just kids that generally try to accomplish goals on campus. 1165 00:55:54,580 --> 00:55:57,010 And I ran for this election and lost miserably. 1166 00:55:57,010 --> 00:55:59,200 Like, I did not win the election. 1167 00:55:59,200 --> 00:56:01,510 And part of that, I do think, was because I 1168 00:56:01,510 --> 00:56:03,220 was very ineloquent at the time. 1169 00:56:03,220 --> 00:56:04,930 I had trouble conveying my ideas. 1170 00:56:04,930 --> 00:56:07,908 I performed very poorly in one of the on-campus debates. 1171 00:56:07,908 --> 00:56:09,700 And so I was really kind of angry at myself 1172 00:56:09,700 --> 00:56:12,220 that I wasn't better-spoken at the time. 1173 00:56:12,220 --> 00:56:15,070 And so I started volunteering as a teacher 1174 00:56:15,070 --> 00:56:17,620 for one of the undergraduate student groups that 1175 00:56:17,620 --> 00:56:20,200 allowed me to teach classes to other students, 1176 00:56:20,200 --> 00:56:23,650 like HTML, and CSS, and other such technologies. 1177 00:56:23,650 --> 00:56:28,060 I then was a teaching fellow, or teaching assistant, my fall 1178 00:56:28,060 --> 00:56:30,375 of my senior year of university. 1179 00:56:30,375 --> 00:56:32,750 And then I was fortunate to be able to teach my own class 1180 00:56:32,750 --> 00:56:35,500 my spring of my senior year. 1181 00:56:35,500 --> 00:56:39,280 And so it really honestly was just practice, practice, practice. 1182 00:56:39,280 --> 00:56:43,930 And teaching particularly really helped me organize my thoughts, 1183 00:56:43,930 --> 00:56:46,600 allowed me an opportunity, again and again, 1184 00:56:46,600 --> 00:56:49,150 to try to communicate clearly to other people 1185 00:56:49,150 --> 00:56:53,440 more so than if you're just giving a speech or just presenting in a class. 1186 00:56:53,440 --> 00:56:56,290 Having to teach, I think, was really a key ingredient. 1187 00:56:56,290 --> 00:56:58,540 And I think it helped technically that I just 1188 00:56:58,540 --> 00:57:00,340 enjoyed what it was I was teaching. 1189 00:57:00,340 --> 00:57:02,170 I really enjoyed programming. 1190 00:57:02,170 --> 00:57:04,510 I really enjoyed computer science on the whole. 1191 00:57:04,510 --> 00:57:06,580 And so being able to teach something I was 1192 00:57:06,580 --> 00:57:09,150 passionate about just really helped. 1193 00:57:09,150 --> 00:57:11,300 Brian, what was the case for you? 1194 00:57:11,300 --> 00:57:14,050 BRIAN YU: Yeah, I think I would agree with just about all of that. 1195 00:57:14,050 --> 00:57:18,850 I think the practice is the key thing that helps make you a better teacher. 1196 00:57:18,850 --> 00:57:22,450 Just getting experience, even if it's just explaining something to a friend 1197 00:57:22,450 --> 00:57:25,360 or to a peer, that helps you to start to think 1198 00:57:25,360 --> 00:57:28,330 about how to take the ideas that might exist in your head, 1199 00:57:28,330 --> 00:57:31,290 and put them a little bit more precisely into words, 1200 00:57:31,290 --> 00:57:34,570 and in particular, to be able to explain something 1201 00:57:34,570 --> 00:57:38,110 in a way that is accessible to someone who hasn't seen the topic before. 1202 00:57:38,110 --> 00:57:40,690 But I often think about, when I was first 1203 00:57:40,690 --> 00:57:43,990 learning some of the material, the types of explanations that worked and didn't 1204 00:57:43,990 --> 00:57:47,260 work for me and trying to come up with explanations 1205 00:57:47,260 --> 00:57:50,620 that can help to explain very technical topics, 1206 00:57:50,620 --> 00:57:55,150 but hopefully in a bit of it easier to understand and more accessible way. 1207 00:57:55,150 --> 00:57:57,850 And it definitely helps that the topics that I get to teach 1208 00:57:57,850 --> 00:58:00,190 are things that I find really interesting. 1209 00:58:00,190 --> 00:58:04,180 With the artificial intelligence class that was released this month on EdX, 1210 00:58:04,180 --> 00:58:06,610 I had a lot of fun preparing that class and thinking 1211 00:58:06,610 --> 00:58:08,137 about what topics I wanted to cover. 1212 00:58:08,137 --> 00:58:09,970 Because they're all topics that I personally 1213 00:58:09,970 --> 00:58:13,083 find very interesting and exciting in computer science right now. 1214 00:58:13,083 --> 00:58:15,625 And so the opportunity to be able to teach about those topics 1215 00:58:15,625 --> 00:58:19,270 and to talk them through in a lot of detail I found very exciting. 1216 00:58:19,270 --> 00:58:22,030 And so I hope that does come across in the classes. 1217 00:58:22,030 --> 00:58:23,927 And I'm glad that you've been enjoying it. 1218 00:58:23,927 --> 00:58:26,260 DAVID MALAN: And I hope you'll all forgive if we don't-- 1219 00:58:26,260 --> 00:58:28,302 if we haven't quite gone to everyone's questions. 1220 00:58:28,302 --> 00:58:31,110 We're going to have to log off momentarily.