WEBVTT X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000 00:00:00.000 --> 00:00:03.976 [MUSIC PLAYING] 00:00:03.976 --> 00:01:18.530 [MUSIC PLAYING] 00:01:18.530 --> 00:01:19.580 DAVID J. MALAN: All right. 00:01:19.580 --> 00:01:20.876 AUDIENCE: All right. 00:01:20.876 --> 00:01:24.440 DAVID J. MALAN: [CHUCKLES] This is CS50. 00:01:24.440 --> 00:01:27.140 And this is week 10, our very last together. 00:01:27.140 --> 00:01:29.750 And before we dive in today, I just wanted 00:01:29.750 --> 00:01:33.877 to acknowledge how much work we know this course is for everyone. 00:01:33.877 --> 00:01:35.960 We know there's still a tad bit of work remaining. 00:01:35.960 --> 00:01:39.168 But we do hope ultimately, that you're really proud of what you've pulled off 00:01:39.168 --> 00:01:40.572 over the past few months only. 00:01:40.572 --> 00:01:43.280 And indeed the final project, whatever it is you end up building, 00:01:43.280 --> 00:01:45.320 really is meant to be this capstone, where 00:01:45.320 --> 00:01:46.890 you're finally standing on your own. 00:01:46.890 --> 00:01:50.120 There's no distribution code, there's not really a specification, and really 00:01:50.120 --> 00:01:53.810 just an opportunity to take all this knowledge out now for a spin. 00:01:53.810 --> 00:01:56.150 And we do hope it serves you well longer term. 00:01:56.150 --> 00:02:00.140 Before we dive in too, just wanted to offer a number of thanks for so much 00:02:00.140 --> 00:02:02.690 of the team that helps out behind the scenes, 00:02:02.690 --> 00:02:06.110 in particular, the Memorial Hall team, our hosts here, who 00:02:06.110 --> 00:02:09.530 make all of the space and the activities behind the scenes possible, 00:02:09.530 --> 00:02:12.710 the education support services team, who helps with audio and video 00:02:12.710 --> 00:02:16.640 and more, and then especially CS50 his own team all here in the darkness 00:02:16.640 --> 00:02:18.950 helping out in front of the camera, behind the camera. 00:02:18.950 --> 00:02:22.625 If we could, a huge round of applause for everyone that makes this possible. 00:02:22.625 --> 00:02:24.932 [APPLAUSE AND CHEERS] 00:02:31.220 --> 00:02:35.780 You might have noticed that these have been unusual times, 00:02:35.780 --> 00:02:38.480 and we've had some unusual guests in the front of the room here, 00:02:38.480 --> 00:02:41.893 since we weren't sure what to expect early on as to just what protocols 00:02:41.893 --> 00:02:42.685 would be on campus. 00:02:42.685 --> 00:02:45.260 And so we have, of course, all of these plush figures 00:02:45.260 --> 00:02:48.510 behind the scenes who have been helping out behind the camera, 00:02:48.510 --> 00:02:50.638 behind the monitors, and so forth. 00:02:50.638 --> 00:02:52.430 And what many of you'll see, if you've been 00:02:52.430 --> 00:02:55.405 watching right now or in the future of these videos online, 00:02:55.405 --> 00:02:57.530 you'll see a lot of backs of heads, so that there's 00:02:57.530 --> 00:03:00.810 a little bit of characteristic to some of the shots that we have here. 00:03:00.810 --> 00:03:03.650 But this is actually borne of an inspiration that 00:03:03.650 --> 00:03:07.730 comes from who will be ultimately today's special guest, Jennifer 8. 00:03:07.730 --> 00:03:10.730 Lee, in fact, whom we'll meet in just a little bit 00:03:10.730 --> 00:03:13.730 was ultimately the good friend of the cost 00:03:13.730 --> 00:03:17.780 that inspired this tradition of using puppetry in some form in the class 00:03:17.780 --> 00:03:18.530 here. 00:03:18.530 --> 00:03:22.070 What I see down below is a shot like this here. 00:03:22.070 --> 00:03:26.030 And funny enough, it seems that with machine learning, what it is nowadays, 00:03:26.030 --> 00:03:29.690 artificial intelligence, so to speak, on social media and the like-- 00:03:29.690 --> 00:03:34.340 Literally, no joke I pulled up Twitter earlier today and among my suggestions 00:03:34.340 --> 00:03:39.740 for whom I should follow now we're literally the suggestions here. 00:03:39.740 --> 00:03:42.200 This is perhaps not surprising though, because some weeks 00:03:42.200 --> 00:03:45.807 back I actually started following Count von Count, whom 00:03:45.807 --> 00:03:47.390 you might remember from Sesame Street. 00:03:47.390 --> 00:03:51.800 If you're not following him already, this is an amazing Count to follow, 00:03:51.800 --> 00:03:53.405 an actual count to follow. 00:03:53.405 --> 00:03:55.405 And it's actually an amazing use of programming. 00:03:55.405 --> 00:03:58.160 So this account joined in April of 2012. 00:03:58.160 --> 00:04:02.480 It's got 198,000 followers as of today. 00:04:02.480 --> 00:04:05.810 And what it's been doing for like nine plus years 00:04:05.810 --> 00:04:09.150 is tweeting out a number, one per day. 00:04:09.150 --> 00:04:15.950 This morning's was 3,327. 00:04:15.950 --> 00:04:18.476 Yesterday's was 3,326. 00:04:18.476 --> 00:04:19.790 Ah, ah, ah. 00:04:19.790 --> 00:04:23.270 And so presumably someone's just written a program, Python or something else, 00:04:23.270 --> 00:04:25.860 that's just generating these tweets once a day. 00:04:25.860 --> 00:04:28.760 Even more amusing though, is that every tweet for the past nine years 00:04:28.760 --> 00:04:31.980 has 20 or 30 comments on it, from people who are following it. 00:04:31.980 --> 00:04:36.890 So, perhaps consider following this same account and the same application of CS 00:04:36.890 --> 00:04:37.660 as well. 00:04:37.660 --> 00:04:40.650 Wanted to also thank CS50's team behind the cameras. 00:04:40.650 --> 00:04:44.750 You might recall the teaching fellows last year in particular, 00:04:44.750 --> 00:04:49.220 when everything was on Zoom, kindly put together this visualization of TCP/IP 00:04:49.220 --> 00:04:53.690 and the passing of messages among routers and in turn computers, 00:04:53.690 --> 00:04:56.990 for instance, from Phyllis at bottom right to Brian at top left. 00:04:56.990 --> 00:05:00.530 Just wanted to thank the team but also reveal to you 00:05:00.530 --> 00:05:04.310 all that these takes were not perfect by any means. 00:05:04.310 --> 00:05:07.280 And in fact, here's just 60 seconds or so of outtakes of us 00:05:07.280 --> 00:05:14.050 trying to get data from point A to point B. Buffering. 00:05:14.050 --> 00:05:16.270 OK. 00:05:16.270 --> 00:05:16.810 Josh. 00:05:16.810 --> 00:05:19.000 Yes. 00:05:19.000 --> 00:05:26.230 Ellen, ooh [LAUGHS] [INAUDIBLE] No. 00:05:26.230 --> 00:05:26.950 Oh, wait. 00:05:32.840 --> 00:05:33.950 That was amazing, Josh. 00:05:36.650 --> 00:05:38.915 Uh, um, Sophie. 00:05:41.680 --> 00:05:48.650 [LAUGHS] Amazing. 00:05:48.650 --> 00:05:50.840 That was perfect. 00:05:50.840 --> 00:05:51.607 Tony. 00:05:51.607 --> 00:05:54.290 [LAUGHS] 00:05:54.290 --> 00:05:55.615 AUDIENCE: I think I-- 00:05:55.615 --> 00:05:57.510 AUDIENCE: Hey, [INAUDIBLE] 00:05:57.510 --> 00:05:59.040 DAVID J. MALAN: [INAUDIBLE] 00:05:59.040 --> 00:06:00.290 AUDIENCE: Oh, now you expect-- 00:06:00.290 --> 00:06:00.915 DAVID J. MALAN: Guy? 00:06:04.880 --> 00:06:05.725 That was amazing. 00:06:05.725 --> 00:06:06.637 Thank you all. 00:06:06.637 --> 00:06:07.470 AUDIENCE: --so good. 00:06:09.835 --> 00:06:10.710 DAVID J. MALAN: All right. 00:06:10.710 --> 00:06:13.418 If we could too a round of applause for all the teaching fellows, 00:06:13.418 --> 00:06:15.300 teaching assistants, and course assistant 00:06:15.300 --> 00:06:18.750 who make the course possible as well. 00:06:18.750 --> 00:06:22.330 Before we now do a bit of review of the semester, 00:06:22.330 --> 00:06:25.448 I thought we'd take first a higher level view of where we've come from. 00:06:25.448 --> 00:06:27.990 Recall, of course, from the syllabus and literally week zero, 00:06:27.990 --> 00:06:30.120 we claimed this, that would ultimately matters in this course 00:06:30.120 --> 00:06:32.520 is not so much where you end up relative to classmates 00:06:32.520 --> 00:06:35.310 but where you end up relative to yourself when you began. 00:06:35.310 --> 00:06:36.435 And we really do mean that. 00:06:36.435 --> 00:06:39.143 There are certainly classmates of yours who have been programming 00:06:39.143 --> 00:06:40.330 since they are 10 years old. 00:06:40.330 --> 00:06:43.432 But there are 2/3 of your classmates who were not in fact that case. 00:06:43.432 --> 00:06:46.140 And so behind you, in front of you, to the left, and to the right 00:06:46.140 --> 00:06:49.930 today are so many classmates who have had a very shared experience with you. 00:06:49.930 --> 00:06:53.100 But the only person that really matters at the end of the day, in terms 00:06:53.100 --> 00:06:56.910 of how you've progressed in this class truly, is where you in fact began. 00:06:56.910 --> 00:06:59.820 And I realized that with CS, and especially this course, 00:06:59.820 --> 00:07:01.950 and with programming assignments especially, 00:07:01.950 --> 00:07:04.950 it can feel like week after week that you're not really making progress, 00:07:04.950 --> 00:07:07.830 because it might feel like you're struggling every darn week. 00:07:07.830 --> 00:07:12.147 But that's just really because we keep moving the bar higher and higher 00:07:12.147 --> 00:07:14.730 or pushing the finish line a little further and further ahead. 00:07:14.730 --> 00:07:18.420 Because think back to week one when this for instance-- whoops. 00:07:18.420 --> 00:07:22.200 When this alone was hard and you were just 00:07:22.200 --> 00:07:25.770 trying to get Mario to ascend a pyramid that might look a little something 00:07:25.770 --> 00:07:26.580 like this. 00:07:26.580 --> 00:07:30.090 Or the week after, when you started dabbling with readability, 00:07:30.090 --> 00:07:30.960 or two weeks after. 00:07:30.960 --> 00:07:33.910 Mr. And Mrs. Dursty of number four privet drive, and so forth, 00:07:33.910 --> 00:07:36.780 trying to analyze just how complex a sentence like that was, 00:07:36.780 --> 00:07:39.990 and manipulating strings and characters for the first time. 00:07:39.990 --> 00:07:44.228 And then of course, we progress to deeper dives into algorithms 00:07:44.228 --> 00:07:46.770 and actually implementing something that's all too real world 00:07:46.770 --> 00:07:50.760 these days in implementing electoral algorithms in a few different forms. 00:07:50.760 --> 00:07:54.030 Dabbling thereafter in a bit of forensics, a bit of imagery, 00:07:54.030 --> 00:07:57.780 and taking images like this here and filtering it in a number of ways. 00:07:57.780 --> 00:08:00.330 Ultimately understanding, hopefully, how these things 00:08:00.330 --> 00:08:01.980 are implemented underneath the hood. 00:08:01.980 --> 00:08:05.220 So that henceforth, when all you're doing is tapping an icon on your phone 00:08:05.220 --> 00:08:07.350 or clicking a command on your computer, you 00:08:07.350 --> 00:08:10.320 can infer, even if you didn't write that particular code, 00:08:10.320 --> 00:08:12.683 how the thing is likely working. 00:08:12.683 --> 00:08:15.600 And even if you had started to get your footing then around week four, 00:08:15.600 --> 00:08:18.690 then things escalated quickly further to data structures. 00:08:18.690 --> 00:08:23.370 But recall for your spell checker, you implemented a fairly sophisticated data 00:08:23.370 --> 00:08:24.930 structure known as a hash table. 00:08:24.930 --> 00:08:26.805 And even if you struggle to get that working, 00:08:26.805 --> 00:08:30.330 again, think back five weeks prior you were just 00:08:30.330 --> 00:08:33.240 trying to get for loops to work and variables to work. 00:08:33.240 --> 00:08:36.480 And so each week realized there was significant progress. 00:08:36.480 --> 00:08:39.539 And then if you aggregate all these most recent weeks with Python, 00:08:39.539 --> 00:08:42.270 and SQL, HTML, JavaScript, and CSS. 00:08:42.270 --> 00:08:44.460 I mean, you built your very own web application. 00:08:44.460 --> 00:08:46.710 And many of you will go on and build something grander 00:08:46.710 --> 00:08:50.580 for your own final project, or focus again on C, or on Python alone, 00:08:50.580 --> 00:08:51.310 or the like. 00:08:51.310 --> 00:08:54.030 But ultimately aggregating all of these technologies 00:08:54.030 --> 00:08:57.307 and kind of stitching together something that you yourself created. 00:08:57.307 --> 00:08:59.640 We might have put some of the foundation there in place, 00:08:59.640 --> 00:09:02.970 but the end result ultimately is yours. 00:09:02.970 --> 00:09:05.340 So at the end of the day, as we promised in week zero, 00:09:05.340 --> 00:09:08.130 this course is really about computational thinking, 00:09:08.130 --> 00:09:09.870 cleaning up your thought process, getting 00:09:09.870 --> 00:09:12.810 you to think a little more logically, more methodically, 00:09:12.810 --> 00:09:16.830 and to express yourself just as logically and methodically. 00:09:16.830 --> 00:09:19.470 But it's also about, in some form, critical thinking. 00:09:19.470 --> 00:09:21.975 And at the end of the day, what computer science is, 00:09:21.975 --> 00:09:26.340 is really just taking input producing output, ideally correct output. 00:09:26.340 --> 00:09:28.840 And all the hard stuff is in the middle there. 00:09:28.840 --> 00:09:32.040 But what we do hope you have in your toolkit, so to speak, 00:09:32.040 --> 00:09:34.290 is all the more of a mental model, all the more 00:09:34.290 --> 00:09:36.600 of an understanding of first principles from which you 00:09:36.600 --> 00:09:40.350 can derive new outputs, new conclusions, based on those inputs. 00:09:40.350 --> 00:09:44.070 And certainly today there's so much misinformation or miseducation 00:09:44.070 --> 00:09:44.650 in the world. 00:09:44.650 --> 00:09:47.700 And just being able to take input and produce proper output in and of 00:09:47.700 --> 00:09:49.860 itself is a compelling skill. 00:09:49.860 --> 00:09:52.410 And indeed when you all find yourselves invariably 00:09:52.410 --> 00:09:55.710 in engineering positions, where you're asked to build something 00:09:55.710 --> 00:09:58.238 because you now can or perhaps you're in a managerial role 00:09:58.238 --> 00:10:00.030 where you decide you should build something 00:10:00.030 --> 00:10:01.620 because you know people who can. 00:10:01.620 --> 00:10:05.250 I would also start to consider, even though the past 10 plus weeks have all 00:10:05.250 --> 00:10:08.730 been about build this because we ask you to, 00:10:08.730 --> 00:10:10.890 really start to consider whether it's for fun, 00:10:10.890 --> 00:10:13.380 for profession, for political purposes, or the like. 00:10:13.380 --> 00:10:14.760 Should you build something? 00:10:14.760 --> 00:10:17.760 And actually considering, now that you have this skill, 00:10:17.760 --> 00:10:20.280 how you can use it most responsibly. 00:10:20.280 --> 00:10:22.890 And not just make a website do something or make an app 00:10:22.890 --> 00:10:27.210 do something because it can be done, but really start to ask and ask of others, 00:10:27.210 --> 00:10:28.720 should we be doing this? 00:10:28.720 --> 00:10:32.790 It's just a skill that you can but don't necessarily have to use. 00:10:32.790 --> 00:10:34.920 Now, when it comes to writing some actual code, 00:10:34.920 --> 00:10:38.430 keep in mind that you might continue to evaluate 00:10:38.430 --> 00:10:40.440 or your employer or your colleagues might 00:10:40.440 --> 00:10:42.840 continue to evaluate your code along these same axes. 00:10:42.840 --> 00:10:44.250 These are not CS50 specific. 00:10:44.250 --> 00:10:45.570 Correctness. 00:10:45.570 --> 00:10:47.310 Does it do what it's supposed to do? 00:10:47.310 --> 00:10:48.000 Design. 00:10:48.000 --> 00:10:50.730 How well qualitatively is it implemented? 00:10:50.730 --> 00:10:51.450 And then style. 00:10:51.450 --> 00:10:52.320 How readable is it? 00:10:52.320 --> 00:10:53.250 How pretty is it? 00:10:53.250 --> 00:10:56.250 And these three axes should really guide all of your thinking, 00:10:56.250 --> 00:11:01.440 whether it's for a test, or a project, or an open source project, or the like. 00:11:01.440 --> 00:11:03.610 All three of these things really matter. 00:11:03.610 --> 00:11:06.382 And so, if you're in the mindset of wondering, oh, do I 00:11:06.382 --> 00:11:07.840 have to worry about style for this? 00:11:07.840 --> 00:11:09.220 Do I have to comment this? 00:11:09.220 --> 00:11:11.020 The answer is always yes. 00:11:11.020 --> 00:11:14.170 This is what it means to be a good programmer, a good engineer, 00:11:14.170 --> 00:11:17.440 to optimize these kinds of axes. 00:11:17.440 --> 00:11:20.500 Now what about those tools in the toolkit? 00:11:20.500 --> 00:11:23.020 Well, let's focus on just a couple of here. 00:11:23.020 --> 00:11:25.758 Full circle, at the end of the semester, abstraction recall 00:11:25.758 --> 00:11:27.550 was one of the tools in the toolkit that we 00:11:27.550 --> 00:11:31.540 proposed is all about taking complicated problems, complicated ideas, 00:11:31.540 --> 00:11:33.430 and simplifying them to really the essence. 00:11:33.430 --> 00:11:35.680 So you can focus on really just what matters 00:11:35.680 --> 00:11:38.170 or what helps you get real work done. 00:11:38.170 --> 00:11:41.418 And then related to that was also this notion of precision. 00:11:41.418 --> 00:11:43.210 Even as you abstract things away, you still 00:11:43.210 --> 00:11:46.240 have to be super precise when you're writing code for a computer 00:11:46.240 --> 00:11:48.380 or just giving instructions to another human 00:11:48.380 --> 00:11:53.020 so that they are implementing your ideas, your algorithms correctly. 00:11:53.020 --> 00:11:56.980 And sometimes these two goals, abstraction and precision 00:11:56.980 --> 00:11:58.717 can rather be at odds at one another. 00:11:58.717 --> 00:12:00.550 And what we thought we'd do is give everyone 00:12:00.550 --> 00:12:03.300 a sheet of paper today, which you probably received on the way in, 00:12:03.300 --> 00:12:04.180 if not a pen as well. 00:12:04.180 --> 00:12:06.610 If you didn't receive, hopefully you or a friend near you 00:12:06.610 --> 00:12:08.680 has a sheet of paper and a pen or pencil. 00:12:08.680 --> 00:12:10.030 Do go ahead and grab that. 00:12:10.030 --> 00:12:13.930 And we thought we'd come full circle too and see if we can't get a brave 00:12:13.930 --> 00:12:16.720 volunteer to come up on the stage here. 00:12:16.720 --> 00:12:19.020 And we just need someone to give some stage directions. 00:12:19.020 --> 00:12:19.520 All right. 00:12:19.520 --> 00:12:21.340 I like it when people start pointing and pointing. 00:12:21.340 --> 00:12:22.870 How about you being pointed at? 00:12:22.870 --> 00:12:24.300 Yes. 00:12:24.300 --> 00:12:24.850 Yes, you. 00:12:24.850 --> 00:12:25.540 Yes. 00:12:25.540 --> 00:12:27.768 Come on down. 00:12:27.768 --> 00:12:29.810 Well there'll be one more opportunity after this. 00:12:29.810 --> 00:12:30.520 Come on down. 00:12:30.520 --> 00:12:31.990 What's your name? 00:12:31.990 --> 00:12:32.830 AUDIENCE: Claire. 00:12:32.830 --> 00:12:33.300 DAVID J. MALAN: Claire. 00:12:33.300 --> 00:12:33.800 OK. 00:12:33.800 --> 00:12:36.370 A round of applause for Claire for being so enthusiastic. 00:12:36.370 --> 00:12:37.552 [APPLAUSE] 00:12:39.400 --> 00:12:40.540 Come on over here. 00:12:40.540 --> 00:12:43.000 Would you like to make a quick introduction to the group? 00:12:43.000 --> 00:12:43.625 AUDIENCE: Yeah. 00:12:43.625 --> 00:12:45.154 Hey. 00:12:45.154 --> 00:12:47.860 [CHUCKLES] I'm Claire. 00:12:47.860 --> 00:12:48.590 Yeah. 00:12:48.590 --> 00:12:50.380 That's all you need to know about me. 00:12:50.380 --> 00:12:50.830 DAVID J. MALAN: All right. 00:12:50.830 --> 00:12:51.340 [CHUCKLES] 00:12:51.340 --> 00:12:53.770 So what I'm about to hand Claire is a sheet of paper 00:12:53.770 --> 00:12:55.640 that has a drawing on it. 00:12:55.640 --> 00:13:00.100 And the goal at hand is for you all to ultimately follow 00:13:00.100 --> 00:13:02.410 Claire's hopefully very precise instructions, 00:13:02.410 --> 00:13:05.368 because she's going to give you step by step instructions, an algorithm 00:13:05.368 --> 00:13:08.930 if you will, for drawing something on that sheet of paper. 00:13:08.930 --> 00:13:09.430 All right. 00:13:09.430 --> 00:13:11.410 We're going to keep it in this manila envelope 00:13:11.410 --> 00:13:12.868 so that folks can't see through it. 00:13:12.868 --> 00:13:17.110 But this is what we would like you to give verbal instructions 00:13:17.110 --> 00:13:18.460 to the audience to draw. 00:13:18.460 --> 00:13:21.130 And you can say anything you want, but you may not 00:13:21.130 --> 00:13:25.032 make physical hand gestures or the like, and/or dip it down 00:13:25.032 --> 00:13:25.990 so everyone can see it. 00:13:25.990 --> 00:13:27.010 AUDIENCE: Oh, that's so true. 00:13:27.010 --> 00:13:27.670 That's so true. 00:13:27.670 --> 00:13:28.030 DAVID J. MALAN: All right. 00:13:28.030 --> 00:13:28.390 Go ahead. 00:13:28.390 --> 00:13:28.980 Step one. 00:13:28.980 --> 00:13:29.605 AUDIENCE: Wait. 00:13:29.605 --> 00:13:30.772 I could say whatever I want? 00:13:30.772 --> 00:13:32.230 DAVID J. MALAN: Related to this problem. 00:13:32.230 --> 00:13:32.830 Yes, idea. 00:13:32.830 --> 00:13:33.755 [CHUCKLES] 00:13:33.755 --> 00:13:34.630 AUDIENCE: Oh, my God. 00:13:34.630 --> 00:13:38.080 DAVID J. MALAN: Give them instructions for recreating this picture on their paper. 00:13:38.080 --> 00:13:40.614 AUDIENCE: OK. 00:13:40.614 --> 00:13:53.080 Start with like a square but, but it's-- 00:13:53.080 --> 00:13:54.460 DAVID J. MALAN: No hand gestures. 00:13:54.460 --> 00:13:54.780 AUDIENCE: OK. 00:13:54.780 --> 00:13:55.280 OK. 00:13:55.280 --> 00:13:55.870 Sorry, sorry. 00:13:55.870 --> 00:13:59.170 Start with the square, but it's like a diamond kind-- 00:13:59.170 --> 00:14:01.810 like there's a point on top. 00:14:01.810 --> 00:14:04.000 [LAUGHS] Wait. 00:14:04.000 --> 00:14:05.680 I should not be the one doing this. 00:14:05.680 --> 00:14:06.430 OK. 00:14:06.430 --> 00:14:08.680 So it's like a square but-- 00:14:08.680 --> 00:14:12.657 yeah, start with a square. 00:14:12.657 --> 00:14:13.240 DAVID J. MALAN: OK. 00:14:13.240 --> 00:14:14.290 Step two? 00:14:14.290 --> 00:14:18.520 AUDIENCE: Step two is that on one of the sides of the square 00:14:18.520 --> 00:14:20.035 there's another square. 00:14:20.035 --> 00:14:21.934 [CHUCKLES] 00:14:25.100 --> 00:14:27.100 DAVID J. MALAN: Doing really well on the abstraction. 00:14:27.100 --> 00:14:29.030 AUDIENCE: I don't feel like I'm doing too hot. 00:14:29.030 --> 00:14:29.530 OK. 00:14:29.530 --> 00:14:30.880 Woo. 00:14:30.880 --> 00:14:33.057 Does this affect my grade in any way? 00:14:33.057 --> 00:14:33.640 DAVID J. MALAN: No. 00:14:33.640 --> 00:14:34.140 No. 00:14:34.140 --> 00:14:34.780 [LAUGHTER] 00:14:34.780 --> 00:14:35.140 AUDIENCE: OK. 00:14:35.140 --> 00:14:35.848 DAVID J. MALAN: Go on. 00:14:35.848 --> 00:14:36.620 Two squares. 00:14:36.620 --> 00:14:37.120 Step three. 00:14:37.120 --> 00:14:39.100 AUDIENCE: Then there's another square. 00:14:39.100 --> 00:14:39.960 [CHUCKLES] 00:14:40.840 --> 00:14:41.800 But they're not square. 00:14:41.800 --> 00:14:44.470 They're kind of slanted. 00:14:44.470 --> 00:14:46.360 There's another square in between-- 00:14:46.360 --> 00:14:52.420 next to those squares, connecting those squares. 00:14:52.420 --> 00:14:54.550 DAVID J. MALAN: Any step four? 00:14:54.550 --> 00:14:59.353 AUDIENCE: Step four is that it should look like a cube. 00:14:59.353 --> 00:15:00.802 [CHUCKLES] 00:15:02.740 --> 00:15:03.370 DAVID J. MALAN: OK. 00:15:03.370 --> 00:15:05.050 So let's go ahead and pause here. 00:15:05.050 --> 00:15:06.112 Pause here. 00:15:06.112 --> 00:15:07.945 Let's thank Claire for coming on up bravely. 00:15:07.945 --> 00:15:08.445 [APPLAUSE] 00:15:08.445 --> 00:15:10.720 I'll take this. 00:15:10.720 --> 00:15:12.852 Let's go ahead and collect just a few of these. 00:15:12.852 --> 00:15:14.560 If maybe Carter and Valerie, you wouldn't 00:15:14.560 --> 00:15:16.600 mind helping me grab just a few sheets of paper. 00:15:16.600 --> 00:15:20.230 If you'd like to volunteer what it is you drew in those seconds, 00:15:20.230 --> 00:15:21.790 just hand it over if you would like. 00:15:21.790 --> 00:15:25.100 No need for a name or anything like that. 00:15:25.100 --> 00:15:25.600 OK. 00:15:25.600 --> 00:15:26.020 All right. 00:15:26.020 --> 00:15:26.560 Very eager. 00:15:26.560 --> 00:15:27.890 Thank you. 00:15:27.890 --> 00:15:28.390 OK. 00:15:28.390 --> 00:15:30.580 Thank you. 00:15:30.580 --> 00:15:32.870 All right. 00:15:32.870 --> 00:15:33.370 Thank you. 00:15:33.370 --> 00:15:34.480 Thank you. 00:15:34.480 --> 00:15:36.436 OK. 00:15:36.436 --> 00:15:37.870 [STRAINING] Sorry. 00:15:37.870 --> 00:15:38.820 OK. 00:15:38.820 --> 00:15:39.460 That's plenty. 00:15:39.460 --> 00:15:40.180 Let's come on up. 00:15:40.180 --> 00:15:42.670 If you want to-- want to hand me yours too. 00:15:42.670 --> 00:15:43.600 OK. 00:15:43.600 --> 00:15:44.870 Sorry to reach. 00:15:44.870 --> 00:15:45.370 All right. 00:15:45.370 --> 00:15:49.130 So Carter if you want to meet me up on stage for a second. 00:15:49.130 --> 00:15:52.540 So we have a whole bunch of submissions here 00:15:52.540 --> 00:15:56.770 that represent what it was Claire was describing. 00:15:56.770 --> 00:16:00.790 Let me go ahead and just project here in a moment. 00:16:00.790 --> 00:16:01.640 Use my camera. 00:16:01.640 --> 00:16:03.050 So here we have one. 00:16:03.050 --> 00:16:03.550 Let's see. 00:16:03.550 --> 00:16:06.530 Carter feel free to just bring those on up here. 00:16:06.530 --> 00:16:07.030 OK. 00:16:07.030 --> 00:16:10.750 So here we have one I'll hold up. 00:16:10.750 --> 00:16:11.350 All right. 00:16:11.350 --> 00:16:12.490 Some squares overlapping. 00:16:12.490 --> 00:16:13.990 Starts to look more like a cube. 00:16:13.990 --> 00:16:15.820 Thank you so much. 00:16:15.820 --> 00:16:18.200 Here maybe in more primitive form-- 00:16:18.200 --> 00:16:18.700 [LAUGHTER] 00:16:18.700 --> 00:16:20.660 --was another one. 00:16:20.660 --> 00:16:23.200 This one kind of started to have wheels, which was kind of-- 00:16:23.200 --> 00:16:24.610 [LAUGHTER] 00:16:24.610 --> 00:16:28.270 And then things started to take shape, perhaps at the very end, both big cube 00:16:28.270 --> 00:16:29.260 and small cube. 00:16:29.260 --> 00:16:32.680 What it was that Claire was showing us now, if we project it, 00:16:32.680 --> 00:16:34.390 was in fact this. 00:16:34.390 --> 00:16:36.280 And it's actually-- exactly what, Claire, 00:16:36.280 --> 00:16:39.250 you just went through is actually a perfect example of why abstraction 00:16:39.250 --> 00:16:41.410 can be hard and where the line is when you're just 00:16:41.410 --> 00:16:42.868 trying to communicate instructions. 00:16:42.868 --> 00:16:45.520 So in fairness, might have been nice to just start 00:16:45.520 --> 00:16:47.803 with, we're going to draw a cube and here's how, 00:16:47.803 --> 00:16:49.720 because that was kind of a spoiler at the end. 00:16:49.720 --> 00:16:51.610 But that too, a cube is an abstraction. 00:16:51.610 --> 00:16:53.260 But it's not very precise, right? 00:16:53.260 --> 00:16:54.700 Like, how big is the cube? 00:16:54.700 --> 00:16:56.567 At what angle is it rotated? 00:16:56.567 --> 00:16:57.650 How are you looking at it? 00:16:57.650 --> 00:17:00.067 And so when you were struggling to describe these squares, 00:17:00.067 --> 00:17:02.740 but no they're kind of like diamonds or whatnot, I mean, 00:17:02.740 --> 00:17:05.950 that's because of this tension between what it is you're trying to abstract 00:17:05.950 --> 00:17:08.170 but what it is you're trying to communicate. 00:17:08.170 --> 00:17:11.230 You could have gone maybe the complete other direction 00:17:11.230 --> 00:17:14.800 and maybe have been super precise and not abstract this thing away as a cube. 00:17:14.800 --> 00:17:16.540 But say to everyone, all right, everyone, 00:17:16.540 --> 00:17:18.380 put your pen down on the paper. 00:17:18.380 --> 00:17:23.720 Now draw a diagonal line to say southwest at 45 degrees. 00:17:23.720 --> 00:17:25.300 Now, do another one that's south. 00:17:25.300 --> 00:17:28.490 You could really get into the weeds and tell people to go up, down, left, 00:17:28.490 --> 00:17:28.990 right. 00:17:28.990 --> 00:17:31.573 Of course, it could get a little tricky if they sort of follow 00:17:31.573 --> 00:17:32.980 the direction incorrectly. 00:17:32.980 --> 00:17:34.930 But it would be hard for us all to know what 00:17:34.930 --> 00:17:38.690 it is we're drawing if all we're hearing are these very low level instructions. 00:17:38.690 --> 00:17:40.940 But that's what you're doing when you're writing code. 00:17:40.940 --> 00:17:43.090 You might implement a function called cube. 00:17:43.090 --> 00:17:46.150 How it works is via those low level instructions. 00:17:46.150 --> 00:17:47.740 But after that, you just don't care. 00:17:47.740 --> 00:17:50.350 You'd much rather think about it as a cube function, 00:17:50.350 --> 00:17:54.370 maybe with some arguments that speak to the size or the rotation of it 00:17:54.370 --> 00:17:57.140 or the like, and that's where, again, abstraction can come in. 00:17:57.140 --> 00:17:59.020 So as we've discussed for so many weeks now, 00:17:59.020 --> 00:18:01.570 these trade-off that were manifest even in week zero, 00:18:01.570 --> 00:18:05.080 even if we didn't necessarily put our finger on it just then. 00:18:05.080 --> 00:18:07.480 Why don't we do things in a slightly different direction? 00:18:07.480 --> 00:18:09.620 If we could get one other volunteer. 00:18:09.620 --> 00:18:10.120 OK. 00:18:10.120 --> 00:18:10.840 Come on down. 00:18:10.840 --> 00:18:12.160 I saw your hand first. 00:18:12.160 --> 00:18:16.690 One other volunteer, who this time we're going to give the pen to. 00:18:16.690 --> 00:18:19.450 We're going to give the pen to. 00:18:19.450 --> 00:18:20.800 And what's your name? 00:18:20.800 --> 00:18:22.760 Jonathan, come on up. 00:18:22.760 --> 00:18:25.940 So I'm going to make this screen be drawable in just a moment. 00:18:25.940 --> 00:18:31.210 But what we need you to do first, on the honor system, is close your eyes. 00:18:31.210 --> 00:18:31.900 All right. 00:18:31.900 --> 00:18:33.085 Eyes are closed. 00:18:33.085 --> 00:18:34.960 Everyone else in the audience is about to see 00:18:34.960 --> 00:18:36.660 the picture that we want you to draw. 00:18:36.660 --> 00:18:39.160 And you all the audience are going to give Jonathan the step 00:18:39.160 --> 00:18:40.840 by step instructions this time around. 00:18:40.840 --> 00:18:42.380 So eyes stay closed. 00:18:42.380 --> 00:18:46.090 This is what we're going to want Jonathan to draw. 00:18:46.090 --> 00:18:49.060 So kind of ingrain it in your mind. 00:18:49.060 --> 00:18:52.540 If you need a refresher we can have him close his eyes again. 00:18:52.540 --> 00:18:53.890 That's what we want him to draw. 00:18:53.890 --> 00:18:55.540 I'm going to go back to the blank screen. 00:18:55.540 --> 00:18:55.720 All right. 00:18:55.720 --> 00:18:57.095 Jonathan, you can open your eyes. 00:18:57.095 --> 00:18:58.780 We have a blank canvas. 00:18:58.780 --> 00:19:03.130 And now, step one, what would you like Jonathan to draw first? 00:19:03.130 --> 00:19:04.293 AUDIENCE: Draw a circle. 00:19:04.293 --> 00:19:05.710 DAVID J. MALAN: Draw a circle, I heard. 00:19:10.150 --> 00:19:12.860 OK, it's a little smaller I'm hearing now. 00:19:12.860 --> 00:19:13.360 OK. 00:19:13.360 --> 00:19:15.680 You can move it. 00:19:15.680 --> 00:19:16.180 Oh, no. 00:19:16.180 --> 00:19:16.763 Don't do that. 00:19:16.763 --> 00:19:17.930 All right. 00:19:17.930 --> 00:19:18.940 We'll give you one redo. 00:19:18.940 --> 00:19:21.820 Use three fingers to delete everything. 00:19:21.820 --> 00:19:23.350 Three fingers all together. 00:19:23.350 --> 00:19:24.130 Yep. 00:19:24.130 --> 00:19:26.920 They we-- Farther apart. 00:19:26.920 --> 00:19:27.660 There we go. 00:19:27.660 --> 00:19:29.060 No, it's back. 00:19:29.060 --> 00:19:29.560 OK. 00:19:29.560 --> 00:19:30.110 I'll do this part. 00:19:30.110 --> 00:19:30.610 [CHUCKLES] 00:19:30.610 --> 00:19:31.210 OK. 00:19:31.210 --> 00:19:31.780 All right. 00:19:31.780 --> 00:19:33.580 So I heard-- thank you. 00:19:33.580 --> 00:19:35.080 I heard draw a circle. 00:19:35.080 --> 00:19:38.560 Would anyone like to finish the sentence more precisely? 00:19:38.560 --> 00:19:39.910 A smaller circle-- 00:19:39.910 --> 00:19:41.380 [INAUDIBLE] 00:19:41.380 --> 00:19:41.965 --on top. 00:19:41.965 --> 00:19:43.960 AUDIENCE: A medium sized circle. 00:19:43.960 --> 00:19:46.760 DAVID J. MALAN: A medium sized circle at the top. 00:19:46.760 --> 00:19:47.260 All right. 00:19:47.260 --> 00:19:48.220 That's pretty good. 00:19:48.220 --> 00:19:49.617 Medium size circle at the top. 00:19:49.617 --> 00:19:50.950 And no more deleting after this. 00:19:50.950 --> 00:19:51.370 Good. 00:19:51.370 --> 00:19:51.820 [APPLAUSE] 00:19:51.820 --> 00:19:52.320 All right. 00:19:52.320 --> 00:19:53.492 Step two. 00:19:53.492 --> 00:19:54.820 AUDIENCE: A line straight down. 00:19:54.820 --> 00:19:56.440 DAVID J. MALAN: A line straight down. 00:19:56.440 --> 00:20:03.323 AUDIENCE: [INAUDIBLE] 00:20:03.323 --> 00:20:03.990 DAVID J. MALAN: Yeah. 00:20:03.990 --> 00:20:05.080 OK. 00:20:05.080 --> 00:20:05.580 Good. 00:20:05.580 --> 00:20:05.820 All right. 00:20:05.820 --> 00:20:06.570 That was step two. 00:20:06.570 --> 00:20:07.990 Nicely done. 00:20:07.990 --> 00:20:08.490 What's that? 00:20:08.490 --> 00:20:09.676 Step three. 00:20:09.676 --> 00:20:13.167 AUDIENCE: Draw a line down from the bottom of the line to the left. 00:20:13.167 --> 00:20:15.500 DAVID J. MALAN: Draw a line down from the bottom to the left. 00:20:15.500 --> 00:20:19.790 AUDIENCE: [INAUDIBLE] 00:20:19.790 --> 00:20:21.650 DAVID J. MALAN: OK. 00:20:21.650 --> 00:20:22.560 Good. 00:20:22.560 --> 00:20:23.060 All right. 00:20:23.060 --> 00:20:23.540 Next. 00:20:23.540 --> 00:20:24.332 Let's go over here. 00:20:24.332 --> 00:20:27.020 Next one? 00:20:27.020 --> 00:20:29.325 Same thing, but on the right. 00:20:29.325 --> 00:20:29.950 AUDIENCE: Yeah. 00:20:29.950 --> 00:20:30.950 DAVID J. MALAN: Yes. 00:20:30.950 --> 00:20:32.040 All right. 00:20:32.040 --> 00:20:32.540 That's what? 00:20:32.540 --> 00:20:33.457 One, two, three, four. 00:20:33.457 --> 00:20:35.750 Step five? 00:20:35.750 --> 00:20:36.910 Yes, step five. 00:20:36.910 --> 00:20:38.210 AUDIENCE: Do that again higher. 00:20:38.210 --> 00:20:39.590 Closer to the circle. 00:20:39.590 --> 00:20:43.670 DAVID J. MALAN: Do that again but higher, closer to the circle on the right side. 00:20:43.670 --> 00:20:49.280 AUDIENCE: [INAUDIBLE] 00:20:49.280 --> 00:20:50.540 DAVID J. MALAN: Oh. 00:20:50.540 --> 00:20:52.320 We're going to have to go with it. 00:20:52.320 --> 00:20:54.050 Step six. 00:20:54.050 --> 00:20:55.382 Step six? 00:20:55.382 --> 00:20:59.270 AUDIENCE: Starting from the neck, draw a line down and to the right. 00:20:59.270 --> 00:21:02.821 DAVID J. MALAN: Starting from the neck, draw a line down and to the right. 00:21:02.821 --> 00:21:08.018 AUDIENCE: [INAUDIBLE] 00:21:08.018 --> 00:21:09.310 DAVID J. MALAN: You don't like that. 00:21:09.310 --> 00:21:09.810 He's-- 00:21:09.810 --> 00:21:10.870 AUDIENCE: [INAUDIBLE] 00:21:10.870 --> 00:21:11.710 DAVID J. MALAN: What do you want him to do? 00:21:11.710 --> 00:21:12.235 Step six. 00:21:14.870 --> 00:21:16.520 AUDIENCE: [INAUDIBLE] step four. 00:21:16.520 --> 00:21:19.117 DAVID J. MALAN: [GUFFAWS] no one do. 00:21:19.117 --> 00:21:21.288 AUDIENCE: [INAUDIBLE] 00:21:21.288 --> 00:21:23.330 DAVID J. MALAN: Where the other line ends-- say again. 00:21:23.330 --> 00:21:28.065 AUDIENCE: [INAUDIBLE] 00:21:28.065 --> 00:21:29.440 DAVID J. MALAN: Where the other line-- 00:21:29.440 --> 00:21:35.350 AUDIENCE: [INAUDIBLE] 00:21:35.350 --> 00:21:40.690 DAVID J. MALAN: Near the vertical line where the other line ends 00:21:40.690 --> 00:21:43.360 draw a line that goes down. 00:21:43.360 --> 00:21:44.130 AUDIENCE: Yeah. 00:21:44.130 --> 00:21:44.970 DAVID J. MALAN: OK. 00:21:44.970 --> 00:21:45.950 A couple more steps. 00:21:45.950 --> 00:21:46.770 Step seven. 00:21:46.770 --> 00:21:47.460 Seven. 00:21:47.460 --> 00:21:50.550 AUDIENCE: Draw a horizontally slanting to the right line 00:21:50.550 --> 00:21:52.335 from the end of the line you just drew. 00:21:52.335 --> 00:21:55.680 DAVID J. MALAN: Draw a horizontally slanting line from the end of the line 00:21:55.680 --> 00:21:56.725 you just drew. 00:21:56.725 --> 00:21:57.600 AUDIENCE: Diagonally. 00:21:57.600 --> 00:21:59.196 DAVID J. MALAN: Diagonally. 00:21:59.196 --> 00:22:02.477 AUDIENCE: [INAUDIBLE] 00:22:02.477 --> 00:22:03.060 DAVID J. MALAN: OK. 00:22:03.060 --> 00:22:06.540 We're resorting to hand gestures now, but I think that's what you mean. 00:22:06.540 --> 00:22:07.630 Yes. 00:22:07.630 --> 00:22:08.130 OK. 00:22:08.130 --> 00:22:09.480 Good. 00:22:09.480 --> 00:22:10.800 Good. 00:22:10.800 --> 00:22:11.310 All right. 00:22:11.310 --> 00:22:12.480 One or two final steps. 00:22:12.480 --> 00:22:13.740 Let's get as close as we can. 00:22:13.740 --> 00:22:15.480 AUDIENCE: [INAUDIBLE] 00:22:15.480 --> 00:22:17.067 DAVID J. MALAN: Say hi. 00:22:17.067 --> 00:22:18.150 AUDIENCE: Make him say hi. 00:22:18.150 --> 00:22:19.440 DAVID J. MALAN: Make him say hi. 00:22:19.440 --> 00:22:21.360 AUDIENCE: No. 00:22:21.360 --> 00:22:22.083 DAVID J. MALAN: No. 00:22:22.083 --> 00:22:28.397 AUDIENCE: [INAUDIBLE] High. 00:22:28.397 --> 00:22:28.980 DAVID J. MALAN: OK. 00:22:28.980 --> 00:22:29.490 High. 00:22:29.490 --> 00:22:32.240 AUDIENCE: [INAUDIBLE] 00:22:32.240 --> 00:22:32.840 DAVID J. MALAN: OK. 00:22:32.840 --> 00:22:34.190 And maybe one final step. 00:22:34.190 --> 00:22:36.230 We'll give them one more-- 00:22:36.230 --> 00:22:39.050 say again. 00:22:39.050 --> 00:22:39.550 Again. 00:22:39.550 --> 00:22:42.200 AUDIENCE: Put one of the lines from high to the circle. 00:22:42.200 --> 00:22:46.160 DAVID J. MALAN: Put one of those lines from high to the circle. 00:22:46.160 --> 00:22:52.280 AUDIENCE: [INAUDIBLE] 00:22:52.280 --> 00:22:55.970 DAVID J. MALAN: A line between high and the circle. 00:22:55.970 --> 00:22:56.840 All right. 00:22:56.840 --> 00:22:58.520 Let's show Jonathan. 00:22:58.520 --> 00:22:59.720 That's pretty darn close. 00:22:59.720 --> 00:23:03.350 Let's show him what we had in mind was this. 00:23:03.350 --> 00:23:06.620 So a round of applause for Jonathan too, if we could. 00:23:06.620 --> 00:23:09.110 A bigger round of applause for Jonathan, if we could. 00:23:09.110 --> 00:23:10.415 [APPLAUSE] 00:23:11.720 --> 00:23:14.480 All right. 00:23:14.480 --> 00:23:17.420 There is this thing in computer science known as pair programming. 00:23:17.420 --> 00:23:18.890 Where you actually program with someone else. 00:23:18.890 --> 00:23:20.270 And that's actually not all that dissimilar 00:23:20.270 --> 00:23:22.320 trying to communicate your ideas to someone else. 00:23:22.320 --> 00:23:24.712 But notice just all of the ambiguities, and it certainly 00:23:24.712 --> 00:23:26.670 doesn't help that we're in a big space, but all 00:23:26.670 --> 00:23:28.587 of the ambiguities that arise when you're just 00:23:28.587 --> 00:23:30.140 trying to convey something precisely. 00:23:30.140 --> 00:23:33.530 So this is not necessarily as constrained as a program would. 00:23:33.530 --> 00:23:35.490 But it's representative of the end of the day, 00:23:35.490 --> 00:23:37.680 even after all these weeks, this stuff is hard. 00:23:37.680 --> 00:23:40.430 And in fact, it's not necessarily ever going 00:23:40.430 --> 00:23:43.160 to be completely straightforward, because the problems you're 00:23:43.160 --> 00:23:45.230 going to try solving down the road presumably, 00:23:45.230 --> 00:23:47.420 if you continue to apply these skills, themselves 00:23:47.420 --> 00:23:49.610 are just going to get more and more sophisticated. 00:23:49.610 --> 00:23:53.030 But hopefully, the feeling you get from accomplishing something as a result 00:23:53.030 --> 00:23:55.220 is just going to rise with them as well. 00:23:55.220 --> 00:23:58.970 Before we now do a bit of review, just wanted to offer a few suggestions 00:23:58.970 --> 00:24:02.948 and answer to an FAQ, which is, what do I do after a class like CS50. 00:24:02.948 --> 00:24:05.990 Typically about half of you will go on and take one or more other classes 00:24:05.990 --> 00:24:09.032 in CS, which is great building on this kind of foundation, and about half 00:24:09.032 --> 00:24:10.160 of you will not. 00:24:10.160 --> 00:24:10.910 This will be it. 00:24:10.910 --> 00:24:13.790 But very likely, certainly given how the world 00:24:13.790 --> 00:24:16.650 is trending, when you have opportunities in the arts, humanities, 00:24:16.650 --> 00:24:20.120 social sciences, or beyond to just apply programming to data 00:24:20.120 --> 00:24:22.230 sets, to problems, in those own domains. 00:24:22.230 --> 00:24:24.740 And so, toward that end, we would encourage 00:24:24.740 --> 00:24:31.100 you to start thinking about how you can transition from what has been your code 00:24:31.100 --> 00:24:34.940 space in the cloud to something client side, like using your own Mac 00:24:34.940 --> 00:24:36.570 and PC here on out. 00:24:36.570 --> 00:24:40.460 So that you're not reliant on a course's infrastructure, a particular website. 00:24:40.460 --> 00:24:43.220 And even though we used a fairly industry standard tool, 00:24:43.220 --> 00:24:45.590 you can actually get almost all of that stuff running, 00:24:45.590 --> 00:24:48.110 with some effort perhaps, on your own Mac and PC. 00:24:48.110 --> 00:24:51.200 So terminal Windows actually comes built into Mac OS. 00:24:51.200 --> 00:24:53.780 If you go to your applications folder, utilities, 00:24:53.780 --> 00:24:57.080 there is a program literally called terminal that has always been there, 00:24:57.080 --> 00:24:59.205 even if you've never used it, that will behave very 00:24:59.205 --> 00:25:01.432 similar to what VS codes does as well. 00:25:01.432 --> 00:25:03.140 In the world of Windows can you similarly 00:25:03.140 --> 00:25:05.780 install a version of the Terminal Windows software 00:25:05.780 --> 00:25:09.470 that we used in the cloud too to actually run similar commands like CD, 00:25:09.470 --> 00:25:11.180 and LS, and much more. 00:25:11.180 --> 00:25:13.820 We would encourage you ultimately, to learn Git. 00:25:13.820 --> 00:25:16.100 You've been indirectly using Git this semester. 00:25:16.100 --> 00:25:18.830 When you run certain commands, we have been 00:25:18.830 --> 00:25:21.470 using Git underneath the hood of some of CS50's tools 00:25:21.470 --> 00:25:25.040 that essentially push your code, so to speak, to the cloud, 00:25:25.040 --> 00:25:26.690 to a place like GitHub.com. 00:25:26.690 --> 00:25:30.920 But, Git itself is an incredibly powerful and just useful 00:25:30.920 --> 00:25:34.280 tool for one, backing up your code somewhere else to the cloud, which 00:25:34.280 --> 00:25:37.700 is effectively what we've used it for, but two, collaboration, 00:25:37.700 --> 00:25:40.820 so that you can actually share your code more readily with other people. 00:25:40.820 --> 00:25:44.450 And three, building much bigger pieces of software, where each of you 00:25:44.450 --> 00:25:46.520 work on different files, different folders, 00:25:46.520 --> 00:25:48.560 or even just different parts of the same file, 00:25:48.560 --> 00:25:50.578 and then somehow merge all of your handiwork 00:25:50.578 --> 00:25:53.120 together at the end of the day to build something much bigger 00:25:53.120 --> 00:25:55.520 than you as one person could alone. 00:25:55.520 --> 00:25:58.100 VS Code itself now too, we've been hosting it 00:25:58.100 --> 00:26:00.380 in the cloud, a real version of VS Code. 00:26:00.380 --> 00:26:03.590 But it's much more commonly used on people's own Macs and PCs. 00:26:03.590 --> 00:26:06.230 And you can download it onto your own Mac and PC. 00:26:06.230 --> 00:26:08.300 You might have to jump through a few more hoops 00:26:08.300 --> 00:26:10.250 to get things like C working, though Python 00:26:10.250 --> 00:26:12.410 is much easier to get working as well. 00:26:12.410 --> 00:26:14.600 Some of the configuration won't be quite the same, 00:26:14.600 --> 00:26:16.860 like your prompt might look a little different and the like. 00:26:16.860 --> 00:26:18.230 But that's just going to be the case any time 00:26:18.230 --> 00:26:20.480 you sit down in the future at a different system, 00:26:20.480 --> 00:26:23.647 it's going to look and feel a little different to things you've used before. 00:26:23.647 --> 00:26:25.880 But hopefully there'll be enough familiarities 00:26:25.880 --> 00:26:29.420 that you can get yourself up and running pretty quickly, nonetheless. 00:26:29.420 --> 00:26:30.440 Hosting a website. 00:26:30.440 --> 00:26:34.040 Not necessarily something you have to do or will do for your final project, 00:26:34.040 --> 00:26:35.300 depending on your proposal. 00:26:35.300 --> 00:26:39.350 But there's lots of ways to just host your own portfolio page, home 00:26:39.350 --> 00:26:43.430 page, website, whatever, on the internet itself 00:26:43.430 --> 00:26:46.760 using tools like these GitHub, or Netlify, or other tools too. 00:26:46.760 --> 00:26:50.265 Most of which have free student friendly plans. 00:26:50.265 --> 00:26:51.890 Some of these are indeed paid services. 00:26:51.890 --> 00:26:53.640 But they very often have entry level plans 00:26:53.640 --> 00:26:56.810 that are totally fine if it's just you on the internet 00:26:56.810 --> 00:26:59.553 and you don't expect having thousands, 10,000 of users. 00:26:59.553 --> 00:27:01.470 It's a drop in the bucket for these companies. 00:27:01.470 --> 00:27:03.980 And so they very often have free tiers of service. 00:27:03.980 --> 00:27:06.500 If you want to host something more dynamic, something 00:27:06.500 --> 00:27:10.415 like CS50 Finance that takes user input and output, uses sessions, 00:27:10.415 --> 00:27:13.490 uses databases you might like something like Heroku. 00:27:13.490 --> 00:27:17.150 And for instance, we have some documentation on one of CS50s websites 00:27:17.150 --> 00:27:20.180 for actually moving your implementation of CS50 Finance 00:27:20.180 --> 00:27:24.590 over to this third party application called Heroku so that you can actually 00:27:24.590 --> 00:27:27.920 run it or something like it in the cloud as well, here too 00:27:27.920 --> 00:27:29.750 using a free tier of service. 00:27:29.750 --> 00:27:31.200 All of these providers. 00:27:31.200 --> 00:27:33.740 These are big cloud providers these days. 00:27:33.740 --> 00:27:36.380 Amazon, Microsoft, Google, and others all 00:27:36.380 --> 00:27:40.040 have student-friendly accounts that you can sign up for during or shortly 00:27:40.040 --> 00:27:44.210 after you're in school that just give you free compute time and storage. 00:27:44.210 --> 00:27:47.300 GitHub itself has this whole student pack that by transitivity gives you 00:27:47.300 --> 00:27:50.160 access to a whole bunch of discounts on other things as well. 00:27:50.160 --> 00:27:51.952 So if you're liking this stuff and you just 00:27:51.952 --> 00:27:54.680 want to learn more perhaps over break, by playing on your own, 00:27:54.680 --> 00:27:57.710 these then would be some good starting points. 00:27:57.710 --> 00:27:59.630 And as for just keeping abreast of trends 00:27:59.630 --> 00:28:02.180 in programming and technology or the like, 00:28:02.180 --> 00:28:04.530 there's so many different blogs and websites out there. 00:28:04.530 --> 00:28:07.640 But here are just a couple of different subreddits, so to speak, 00:28:07.640 --> 00:28:10.940 on Reddit that are very programming specific, Stack Overflow with which 00:28:10.940 --> 00:28:14.750 you've probably interacted, Server Fault, which is similar, 00:28:14.750 --> 00:28:17.990 TechCrunch, Y Cominator, and other sites too. 00:28:17.990 --> 00:28:20.150 And ultimately, we would encourage all of you 00:28:20.150 --> 00:28:22.610 to stay in touch, certainly beyond today. 00:28:22.610 --> 00:28:25.055 By the time you finish your final projects 00:28:25.055 --> 00:28:27.120 we'll have something waiting for you. 00:28:27.120 --> 00:28:29.720 And if you want to stay engaged, either on the teaching staff 00:28:29.720 --> 00:28:33.240 or just as a lifelong learner of course and programming, by all means, 00:28:33.240 --> 00:28:34.820 check out any of these URLs here. 00:28:34.820 --> 00:28:38.030 But in just a few weeks' time will you have one of these to your name? 00:28:38.030 --> 00:28:41.840 Your very own I took CS50 t-shirt, which we will distribute before long-- 00:28:41.840 --> 00:28:43.640 [APPLAUSE] 00:28:43.640 --> 00:28:45.330 --as well. 00:28:45.330 --> 00:28:48.800 And now, if we may, we have an opportunity here 00:28:48.800 --> 00:28:51.950 to synthesize the past several weeks of material. 00:28:51.950 --> 00:28:55.070 If you would like to go ahead and open up the URL that we 00:28:55.070 --> 00:28:56.240 put on the screen earlier. 00:28:56.240 --> 00:28:57.720 I'll toss it up here again. 00:28:57.720 --> 00:28:59.970 You can use your phone or your laptop. 00:28:59.970 --> 00:29:02.750 You might recall for a previous problem set, 00:29:02.750 --> 00:29:06.770 we asked you to propose a whole bunch of review questions, multiple choice 00:29:06.770 --> 00:29:10.100 or the like that synthesized the past several weeks of material. 00:29:10.100 --> 00:29:14.240 We took some of our favorite submissions of those, ported it to this poll 00:29:14.240 --> 00:29:16.610 every war platform, so that we could interactively 00:29:16.610 --> 00:29:19.470 see where everyone's minds are at, understanding is that. 00:29:19.470 --> 00:29:23.090 And I think you'll find all of these are written by you and your classmates. 00:29:23.090 --> 00:29:26.648 That we slipped a few fun ones there, also written by you along the way. 00:29:26.648 --> 00:29:28.940 If Carter, you want to come on up here to get us ready. 00:29:28.940 --> 00:29:31.820 If you haven't yet open the website, go to this URL 00:29:31.820 --> 00:29:35.180 here on your phone or your laptop. 00:29:35.180 --> 00:29:37.490 And let me go ahead and switch us over here 00:29:37.490 --> 00:29:41.480 before Carter takes control of this machine here. 00:29:41.480 --> 00:29:43.690 Here's that same 2D bar code again. 00:29:43.690 --> 00:29:45.890 Feel free to background that now. 00:29:45.890 --> 00:29:49.250 And in just a moment, we've got a 20 question quiz show. 00:29:49.250 --> 00:29:50.485 It's all multiple choice. 00:29:50.485 --> 00:29:52.610 So long as you have internet access, whether you're 00:29:52.610 --> 00:29:54.650 here physically or online right now, you should 00:29:54.650 --> 00:29:58.130 be able to buzz in within 10 to 20 seconds of seeing a question. 00:29:58.130 --> 00:29:59.630 And I'll read each one aloud. 00:29:59.630 --> 00:30:01.560 I think Carter, were just about good to go. 00:30:01.560 --> 00:30:05.210 So, does everyone have the software up and running 00:30:05.210 --> 00:30:06.980 on their phone or their laptop? 00:30:06.980 --> 00:30:09.260 If not, no big deal, just look on with a friend. 00:30:09.260 --> 00:30:12.205 But otherwise, Carter, do you want to say hello too and tee us up? 00:30:12.205 --> 00:30:13.580 CARTER: Absolutely, Hi, everyone. 00:30:13.580 --> 00:30:17.060 We're going to go ahead and get started here with our first question. 00:30:17.060 --> 00:30:18.300 Speed here matters. 00:30:18.300 --> 00:30:19.970 So our first question, David, go ahead. 00:30:19.970 --> 00:30:20.708 What is it? 00:30:20.708 --> 00:30:23.750 DAVID J. MALAN: What does CSS stand for, is the first question written by you? 00:30:23.750 --> 00:30:27.830 Four possible options are, Cascading Style Sheet, 00:30:27.830 --> 00:30:32.600 coding style sheet, cascading style system, coded style sheet. 00:30:32.600 --> 00:30:38.570 Fifteen seconds, up to 300 responses already both here in person and online. 00:30:38.570 --> 00:30:40.140 Give folks a few more seconds. 00:30:40.140 --> 00:30:41.570 What does CSS stand for? 00:30:41.570 --> 00:30:43.700 These are the four options that were provided. 00:30:43.700 --> 00:30:47.540 Three, two, one, Carter. 00:30:47.540 --> 00:30:51.900 Cascading Style Sheets at 86% is indeed the right answer. 00:30:51.900 --> 00:30:54.710 So congrats to those of you 86% who got that one. 00:30:54.710 --> 00:30:55.790 Here's the leaderboard. 00:30:55.790 --> 00:30:58.040 You all have fairly random user names. 00:30:58.040 --> 00:31:01.835 But if your username is on this board here or really any of the 86% of you 00:31:01.835 --> 00:31:04.460 that just got that right, all of you are currently in the lead. 00:31:04.460 --> 00:31:07.610 But we'll see if this shifts before long. 00:31:07.610 --> 00:31:11.330 Question two, which best describe the role of a compiler, 00:31:11.330 --> 00:31:13.760 is our next question? 00:31:13.760 --> 00:31:16.790 Debug one's code, run the written program, 00:31:16.790 --> 00:31:19.190 distinguish between functions and arguments, 00:31:19.190 --> 00:31:22.280 turn source code into machine code. 00:31:22.280 --> 00:31:23.990 Three hundred responses in so far. 00:31:23.990 --> 00:31:25.220 Ten seconds to go. 00:31:25.220 --> 00:31:29.960 Which best describes the role of a compiler? 00:31:29.960 --> 00:31:31.400 Three seconds. 00:31:31.400 --> 00:31:32.720 Just crossed 400. 00:31:32.720 --> 00:31:37.730 And Carter, turning source code into machine code, at 92%. 00:31:37.730 --> 00:31:40.610 Some excellent progress there, is indeed the correct answer. 00:31:40.610 --> 00:31:45.120 And indeed more generally, a compiler just converts one language to another. 00:31:45.120 --> 00:31:48.950 The use cases we've seen for it have been only source code to machine code. 00:31:48.950 --> 00:31:50.870 But as you go out into the real world, you'll 00:31:50.870 --> 00:31:54.500 actually find there to be compilers from one source code language 00:31:54.500 --> 00:31:57.080 to another source code language that itself might 00:31:57.080 --> 00:31:59.060 be runnable or compiler thereafter. 00:31:59.060 --> 00:32:00.950 Good job to all of you guests. 00:32:00.950 --> 00:32:02.960 And Carter number three. 00:32:02.960 --> 00:32:06.560 What is the type of argc asks a classmate? 00:32:06.560 --> 00:32:08.570 Int, stir, char, float. 00:32:11.420 --> 00:32:13.010 What is the type of argc? 00:32:16.680 --> 00:32:18.600 All right about 350 responses. 00:32:18.600 --> 00:32:20.460 Seven seconds to go. 00:32:20.460 --> 00:32:24.360 About to cross the 400 threshold in three, two, one. 00:32:24.360 --> 00:32:28.257 The type of argc is int is indeed correct. 00:32:28.257 --> 00:32:30.090 But we're now starting to distinguish folks. 00:32:30.090 --> 00:32:32.310 Only 55% there. 00:32:32.310 --> 00:32:34.170 Char is not correct. 00:32:34.170 --> 00:32:38.100 You might be thinking of argv in C. But even that is not a char. 00:32:38.100 --> 00:32:43.090 It's a char star array or a char star star in fact. 00:32:43.090 --> 00:32:44.130 So it's not just a char. 00:32:44.130 --> 00:32:46.590 Stir is in Python. 00:32:46.590 --> 00:32:49.140 But even that too, if you were thinking of sys.argv, 00:32:49.140 --> 00:32:51.700 that would be a list of stirs, not a single stir. 00:32:51.700 --> 00:32:52.200 All right. 00:32:52.200 --> 00:32:55.000 Carter, the leaderboard. 00:32:55.000 --> 00:32:55.500 All right. 00:32:55.500 --> 00:32:56.940 There are our guests all in. 00:32:56.940 --> 00:32:57.600 Still tied. 00:32:57.600 --> 00:32:58.710 And number four. 00:32:58.710 --> 00:33:03.990 What is the searching efficiency of a balanced binary search tree? 00:33:03.990 --> 00:33:10.850 Big O of n, big O of n squared, big O of log n, big O of n log n. 00:33:10.850 --> 00:33:15.110 What is the searching efficiency of a balanced binary search tree? 00:33:15.110 --> 00:33:19.250 The balance being key because, as folks continue buzzing in, 00:33:19.250 --> 00:33:25.760 recall that binary search trees can degrade, devolve into linked lists-- 00:33:25.760 --> 00:33:29.380 Big O log n is correct for 54%. 00:33:29.380 --> 00:33:29.880 All right. 00:33:29.880 --> 00:33:31.400 Now, people are getting annoyed. 00:33:31.400 --> 00:33:32.400 But let's keep going. 00:33:32.400 --> 00:33:33.980 Number five. 00:33:33.980 --> 00:33:35.840 Leaderboard's not yet that interesting. 00:33:35.840 --> 00:33:40.010 More subtle, what was the CS50 duck's Halloween costume? 00:33:40.010 --> 00:33:42.740 He's here in winter dress today thanks to Valerie. 00:33:42.740 --> 00:33:48.590 A skeleton, a vampire, Frankenstein, or a ghost. 00:33:48.590 --> 00:33:54.020 What was its costume at Halloween a few weeks back? 00:33:54.020 --> 00:33:57.050 Answers are coming in a little slower this time. 00:33:57.050 --> 00:34:00.170 People online or perhaps clicking on the video. 00:34:00.170 --> 00:34:03.860 And vampire is correct at 69%. 00:34:03.860 --> 00:34:05.780 Nicely done. 00:34:05.780 --> 00:34:06.530 All right. 00:34:06.530 --> 00:34:08.690 Guests are still shuffled in the top. 00:34:08.690 --> 00:34:12.320 Oh, and we're starting to see some leaders pull ahead. 00:34:12.320 --> 00:34:15.679 The time in which you buzz in is also taken into account now. 00:34:15.679 --> 00:34:19.130 In C how can we unify several variables of different types 00:34:19.130 --> 00:34:21.320 into a single new type? 00:34:21.320 --> 00:34:25.960 Trees, arrays, structs, tables. 00:34:25.960 --> 00:34:26.770 Oh, it got quiet. 00:34:26.770 --> 00:34:30.199 In C how can we unify several variables of different types 00:34:30.199 --> 00:34:33.040 into a single new type? 00:34:33.040 --> 00:34:34.719 Eight seconds. 00:34:34.719 --> 00:34:36.280 Four hundred responses in. 00:34:39.610 --> 00:34:40.630 Four hundred fifty. 00:34:40.630 --> 00:34:44.679 And the answer is structs are indeed correct. 00:34:44.679 --> 00:34:46.270 Recall that we had a student struct. 00:34:46.270 --> 00:34:48.370 And we saw strokes later on four nodes that 00:34:48.370 --> 00:34:52.780 allowed us to cluster multiple variables or data types inside of our own brand 00:34:52.780 --> 00:34:55.389 new structure that we then typedef to a name. 00:34:55.389 --> 00:34:57.250 Carter, should we see the leaderboard now? 00:34:57.250 --> 00:34:58.270 [GRUMBLING] 00:34:58.270 --> 00:34:58.930 All right. 00:34:58.930 --> 00:35:05.230 Whoever guessed 4045 and 4383 have eked ahead ever so slightly. 00:35:05.230 --> 00:35:08.080 So buzzing and fast can now benefit your score too. 00:35:08.080 --> 00:35:09.550 Next question, Carter. 00:35:09.550 --> 00:35:13.540 In Python, which of the following statements is false, 00:35:13.540 --> 00:35:17.680 tuples are an ordered immutable set of data, dictionaries associate keywords 00:35:17.680 --> 00:35:20.770 with values, arrays in Python or fixed size, 00:35:20.770 --> 00:35:23.320 Python is an object oriented language? 00:35:23.320 --> 00:35:25.250 Which of those statements is false? 00:35:29.470 --> 00:35:30.550 Three seconds. 00:35:30.550 --> 00:35:33.430 Answers coming in more slowly. 00:35:33.430 --> 00:35:35.950 But the most popular answer is correct. 00:35:35.950 --> 00:35:40.342 Arrays in Python are indeed not of a fixed size, which is why that's false. 00:35:40.342 --> 00:35:42.550 They're not even called arrays, they're called lists. 00:35:42.550 --> 00:35:45.760 And recall that they dynamically grow and shrink effectively implemented 00:35:45.760 --> 00:35:48.400 for you as a linked list. 00:35:48.400 --> 00:35:50.200 All right. 00:35:50.200 --> 00:35:50.860 All right. 00:35:50.860 --> 00:35:52.270 We have a leader. 00:35:52.270 --> 00:35:56.290 Whoever 4383 is, nicely done. 00:35:56.290 --> 00:36:02.560 What does strcmp return in C, S-T-R-C-M-P. Does it return a boolean, 00:36:02.560 --> 00:36:04.255 an integer, a string, or a char? 00:36:08.060 --> 00:36:10.280 What does strcmp return in C? 00:36:10.280 --> 00:36:12.305 Used to compare two strings of course. 00:36:15.180 --> 00:36:21.150 Recall that it returns potentially not just true/false but-- 00:36:21.150 --> 00:36:24.300 ooh, an integer is indeed correct. 00:36:24.300 --> 00:36:25.560 Does anyone recall why? 00:36:25.560 --> 00:36:29.170 Why is it an int and not just a simple true/false? 00:36:29.170 --> 00:36:30.660 Why is three values helpful? 00:36:33.450 --> 00:36:34.020 Exactly. 00:36:34.020 --> 00:36:38.250 It returns 0, if they're equal, or returns negative value or positive 00:36:38.250 --> 00:36:41.370 value based on whether one string comes before or after 00:36:41.370 --> 00:36:45.000 the other ASCII-betically, so to speak, based on its ASCII code. 00:36:45.000 --> 00:36:46.590 The results, Carter. 00:36:46.590 --> 00:36:52.200 All right, 4383 still doing quite well, but being caught up with here. 00:36:52.200 --> 00:36:59.160 What is David Maylon's phone number 949-468-2750 play when you call it? 00:36:59.160 --> 00:37:02.010 The Harvard Alma mater, a parody of Yale song, 00:37:02.010 --> 00:37:06.390 a recording of David Maylon singing "Never Going to Give You Up." 00:37:06.390 --> 00:37:08.190 Feel free to call or text. 00:37:08.190 --> 00:37:11.175 I can't get it now, but we have nicely automated that process. 00:37:14.170 --> 00:37:15.040 Four seconds. 00:37:15.040 --> 00:37:17.340 Four hundred responses in, and the answer, of course, 00:37:17.340 --> 00:37:20.050 is "Never Going to Give You Up." 00:37:20.050 --> 00:37:21.880 Thanks to a little programming and a script 00:37:21.880 --> 00:37:24.400 that our friend Rong Shin wrote that essentially answers 00:37:24.400 --> 00:37:28.450 the phone automatically and replies with a URL or a song. 00:37:28.450 --> 00:37:30.880 Carter? 00:37:30.880 --> 00:37:34.470 Oh, dethroned. 00:37:34.470 --> 00:37:35.320 Dethroned. 00:37:35.320 --> 00:37:37.360 Two six eight eight, nicely done. 00:37:37.360 --> 00:37:39.970 Next question. 00:37:39.970 --> 00:37:42.370 From which of the following places does malloc 00:37:42.370 --> 00:37:50.080 get free memory for a program to use, heap, stack, array, or pointer? 00:37:50.080 --> 00:37:52.330 From which of the following places does malloc 00:37:52.330 --> 00:37:54.685 get free memory for a program to use? 00:37:58.650 --> 00:38:00.540 Answers are a little slower this time. 00:38:00.540 --> 00:38:01.260 Five seconds. 00:38:04.890 --> 00:38:07.880 And the answer is in-- 00:38:07.880 --> 00:38:09.098 [GRUMBLINGS] 00:38:11.852 --> 00:38:13.230 [LAUGHTER] 00:38:13.230 --> 00:38:13.770 OK. 00:38:13.770 --> 00:38:17.110 That's the answer we were given in the problem sets. 00:38:17.110 --> 00:38:20.460 But I think we would beg to differ. 00:38:20.460 --> 00:38:22.205 Pretty sure, Carter, would you go with-- 00:38:22.205 --> 00:38:23.580 CARTER: I would go with the heap. 00:38:23.580 --> 00:38:25.247 DAVID J. MALAN: I think it's indeed the heap. 00:38:25.247 --> 00:38:27.030 So this answer, not correct. 00:38:27.030 --> 00:38:28.380 [BOOING] 00:38:28.380 --> 00:38:29.220 I know. 00:38:29.220 --> 00:38:29.760 I know. 00:38:29.760 --> 00:38:31.800 We just transcribed what you gave us, though. 00:38:31.800 --> 00:38:34.050 Let's see how that affects the scores. 00:38:34.050 --> 00:38:35.280 AUDIENCE: No. 00:38:35.280 --> 00:38:38.010 DAVID J. MALAN: OK, 2688 is still doing OK. 00:38:38.010 --> 00:38:39.120 Next question. 00:38:39.120 --> 00:38:40.690 About 10 or so to go. 00:38:40.690 --> 00:38:44.490 Suppose I have an unsorted list of items, store receipts perhaps, 00:38:44.490 --> 00:38:47.730 should I sort the items before searching for an element? 00:38:47.730 --> 00:38:49.920 Yes, you should always sort before searching. 00:38:49.920 --> 00:38:52.740 No, you should never sought before searching. 00:38:52.740 --> 00:38:56.235 If you will be searching the list many times, then yes, you should sort first. 00:38:56.235 --> 00:38:58.110 If you will be searching the list many times, 00:38:58.110 --> 00:39:01.140 then no, you should not sort first. 00:39:01.140 --> 00:39:02.880 Some nuanced replies. 00:39:02.880 --> 00:39:05.760 Five seconds. 00:39:05.760 --> 00:39:07.900 Fewer answers than usual at this point. 00:39:07.900 --> 00:39:11.762 And, if you will be searching the list many times, then yes, 00:39:11.762 --> 00:39:12.720 you should short first. 00:39:12.720 --> 00:39:14.790 An example that we discussed of trade offs. 00:39:14.790 --> 00:39:16.915 Because if you're just going to do a one off search 00:39:16.915 --> 00:39:19.800 and never again, why bother incurring n log n or n 00:39:19.800 --> 00:39:22.515 squared time to actually sort the thing. 00:39:25.410 --> 00:39:26.100 All right. 00:39:26.100 --> 00:39:27.420 Some shuffling happening. 00:39:27.420 --> 00:39:29.040 But, 2688, nicely done. 00:39:29.040 --> 00:39:30.360 Next question. 00:39:30.360 --> 00:39:34.440 When you run the CREATE INDEX command and SQL, what type of data structure 00:39:34.440 --> 00:39:41.270 do you create, array, B-trees, linked lists, hash tables? 00:39:41.270 --> 00:39:44.960 When you run CREATE INDEX, recall we did this with the movie titles, 00:39:44.960 --> 00:39:48.110 the TV show titles, to speed things up, so that things 00:39:48.110 --> 00:39:50.420 wouldn't be super long and linear. 00:39:50.420 --> 00:39:53.580 We did a different data structure. 00:39:53.580 --> 00:39:54.080 All right. 00:39:54.080 --> 00:39:55.550 About 400 responses in. 00:39:55.550 --> 00:39:59.570 The answer is indeed B-trees. 00:39:59.570 --> 00:40:00.690 B-trees. 00:40:00.690 --> 00:40:02.390 Not to be confused with binary tree. 00:40:02.390 --> 00:40:06.530 A B-tree typically has other children besides two 00:40:06.530 --> 00:40:10.310 that pulls the data even higher up from the leaves of the tree. 00:40:10.310 --> 00:40:12.620 Could use a hash table, could use a linked list, 00:40:12.620 --> 00:40:15.920 but indeed the technology in databases is generally these things 00:40:15.920 --> 00:40:18.560 called B-trees, certainly in SQLite. 00:40:18.560 --> 00:40:20.810 Carter. 00:40:20.810 --> 00:40:25.370 Oh, dethroned, but 4179 has now pulled ahead. 00:40:25.370 --> 00:40:26.040 Nicely done. 00:40:26.040 --> 00:40:27.350 Next question. 00:40:27.350 --> 00:40:36.980 What HTTP status code means I'm a teapot, 000, 418, 007, 128? 00:40:36.980 --> 00:40:44.120 This, recall, was an April Fool's joke by technical people some years ago that 00:40:44.120 --> 00:40:46.640 has become part of computing lore. 00:40:46.640 --> 00:40:48.980 It's still there, though, in the document. 00:40:48.980 --> 00:40:53.760 In two seconds we'll know that it's 418, indeed. 00:40:53.760 --> 00:40:56.000 Let's see how that affected things. 00:40:56.000 --> 00:41:02.300 Four one seven nine is way down on the list, 7280 is number one now. 00:41:02.300 --> 00:41:03.200 Nicely done. 00:41:03.200 --> 00:41:06.620 What is an example of a SQL injection attack, 00:41:06.620 --> 00:41:10.220 when someone submits malicious SQL commands via web form, 00:41:10.220 --> 00:41:13.250 physically destroying a computer hardware that stores a SQL 00:41:13.250 --> 00:41:16.370 database, overwhelming a server with thousands of requests 00:41:16.370 --> 00:41:21.410 to access a database, injection attacks are only in movies or TV? 00:41:21.410 --> 00:41:22.670 Five seconds. 00:41:22.670 --> 00:41:26.110 Some fun answers. 00:41:26.110 --> 00:41:27.850 Four hundred responses about in. 00:41:27.850 --> 00:41:31.990 And indeed, when someone submits malicious SQL commands via web 00:41:31.990 --> 00:41:36.250 form because the programmer is not escaping the code using the question 00:41:36.250 --> 00:41:40.090 mark syntax that we've seen using CS50's library or other third party 00:41:40.090 --> 00:41:41.500 libraries like it. 00:41:41.500 --> 00:41:43.450 Carter. 00:41:43.450 --> 00:41:46.983 Seven two eight oh is still the guest to beat. 00:41:46.983 --> 00:41:47.650 Nearing the end. 00:41:47.650 --> 00:41:48.730 A few more questions. 00:41:48.730 --> 00:41:52.780 How are the elements of an array stored in memory, contiguously, 00:41:52.780 --> 00:41:55.180 in random locations that happen to be available, 00:41:55.180 --> 00:41:58.840 as a linked list, as a binary tree? 00:41:58.840 --> 00:42:04.720 How are the elements of an array stored in memory? 00:42:04.720 --> 00:42:06.730 About five seconds to go. 00:42:06.730 --> 00:42:09.430 Almost have everyone in. 00:42:09.430 --> 00:42:14.800 Two, one, and contiguously is indeed the right answer. 00:42:14.800 --> 00:42:18.580 Back to back to back in random locations that happen to be available 00:42:18.580 --> 00:42:21.940 is probably describing your use of malloc in the heap, 00:42:21.940 --> 00:42:24.550 but you would then need a linked list or some other structure 00:42:24.550 --> 00:42:26.590 to stitch those locations together. 00:42:26.590 --> 00:42:29.440 And array, by definition is contiguous. 00:42:29.440 --> 00:42:31.140 Carter. 00:42:31.140 --> 00:42:37.260 Seven two eight oh is hanging on to that lead by about 499 points. 00:42:37.260 --> 00:42:40.620 Next up is which SQL query would allow you 00:42:40.620 --> 00:42:46.530 to select the ID of a specific movie star Zendaya in a table of movie stars, 00:42:46.530 --> 00:42:50.880 select ID where name equals Zendaya, select Star ID for movie stars 00:42:50.880 --> 00:42:53.640 where name equals Zendaya, select ID from movie stars 00:42:53.640 --> 00:42:56.460 where name equals Zendaya, select ID for movie stars 00:42:56.460 --> 00:42:59.100 where name equals quote unquote Zendaya? 00:42:59.100 --> 00:43:01.350 And I'm spoiling it. 00:43:01.350 --> 00:43:04.020 I should have read out some quotes earlier too. 00:43:04.020 --> 00:43:05.970 One second. 00:43:05.970 --> 00:43:08.100 The last one is correct. 00:43:08.100 --> 00:43:11.220 And indeed, this one's almost correct but lacks the single quotes. 00:43:11.220 --> 00:43:12.660 Zendaya is not a single-- 00:43:12.660 --> 00:43:14.820 it's not a SQL key word. 00:43:14.820 --> 00:43:16.090 It's of course a string. 00:43:16.090 --> 00:43:17.955 So it does need to be escaped there. 00:43:17.955 --> 00:43:20.220 But 63% of you realized that. 00:43:20.220 --> 00:43:22.690 Seventy-two eighty is still in the lead. 00:43:22.690 --> 00:43:25.170 I think we have a few more questions to go. 00:43:25.170 --> 00:43:29.070 Why is a hash table faster to search than a linked list, 00:43:29.070 --> 00:43:33.390 even though the runtime for both is big O of n? 00:43:33.390 --> 00:43:37.350 The hash table actually has big O of n squared runtime, 00:43:37.350 --> 00:43:41.442 the hash table optimally has omega of O runtime, 00:43:41.442 --> 00:43:43.650 the hash table creates shorter length lists to search 00:43:43.650 --> 00:43:48.870 rather than one long linked list, the hash table takes less memory. 00:43:48.870 --> 00:43:54.000 And this was an example of practical versus theoretical differences. 00:43:54.000 --> 00:43:58.890 And indeed-- that was interesting. --with 83% of you buzzing in, 00:43:58.890 --> 00:44:01.540 the hash table creates shorter linked lists, ideally, 00:44:01.540 --> 00:44:05.730 if you have a good hash function rather than one long linked list. 00:44:05.730 --> 00:44:08.400 Even though technically it's still in big O of n. 00:44:08.400 --> 00:44:12.510 Seventy-two eighty seemed to know that is pulling ahead of the crowd. 00:44:12.510 --> 00:44:14.790 Still a few questions. 00:44:14.790 --> 00:44:20.100 Game of Thrones is a dot, dot, dot, comedy, drama, historical fantasy, 00:44:20.100 --> 00:44:24.660 documentary, romance sci-fi, or all of the above? 00:44:24.660 --> 00:44:31.110 This is written by your classmates, recall, based on our sequel week. 00:44:31.110 --> 00:44:37.440 In five seconds we'll be reminded that, according to our CSV file, 00:44:37.440 --> 00:44:39.990 they were all of the above. 00:44:39.990 --> 00:44:40.530 OK. 00:44:40.530 --> 00:44:43.450 All of the above. 00:44:43.450 --> 00:44:46.290 All right, 7280 did OK with that. 00:44:46.290 --> 00:44:47.700 Next question. 00:44:47.700 --> 00:44:49.800 Which of the following is a golden rule when 00:44:49.800 --> 00:44:54.180 allocating memory, every block of memory that you malloc must be freed, 00:44:54.180 --> 00:44:58.140 only memory that you malloc should be freed, do not free a block of memory 00:44:58.140 --> 00:45:00.030 more than once, all of the above? 00:45:03.330 --> 00:45:07.130 More into the nuances of C, this golden rule when allocating memory-- 00:45:07.130 --> 00:45:08.880 didn't have to worry about this in Python. 00:45:08.880 --> 00:45:13.680 We did in C. In two seconds we'll know that all of the above 00:45:13.680 --> 00:45:16.080 are indeed things you must do. 00:45:16.080 --> 00:45:18.300 Not doing those would be in fact bugs. 00:45:18.300 --> 00:45:20.520 Carter, the leaderboard. 00:45:20.520 --> 00:45:24.300 Still doing well 7280, whoever you are. 00:45:24.300 --> 00:45:25.890 Last few questions. 00:45:25.890 --> 00:45:28.110 Last question, in fact. 00:45:28.110 --> 00:45:29.460 Last question. 00:45:29.460 --> 00:45:34.650 What do the binary bulbs on stage spell today? 00:45:34.650 --> 00:45:40.680 The answers could be, faced with medical mask, faced with tears of joy, 00:45:40.680 --> 00:45:44.212 snowman without snow, or red heart? 00:45:44.212 --> 00:45:45.540 AUDIENCE: [INAUDIBLE] 00:45:45.540 --> 00:45:48.790 DAVID J. MALAN: What do the binary bulbs on stage spell? 00:45:48.790 --> 00:45:52.982 Six, five, four, three-- 00:45:52.982 --> 00:45:56.170 AUDIENCE: Two, one. 00:45:56.170 --> 00:45:59.650 DAVID J. MALAN: The answer is the red heart. 00:45:59.650 --> 00:46:02.560 Taking a look at the leaderboard here, who's our winner? 00:46:05.660 --> 00:46:08.420 The winner is-- oh! 00:46:08.420 --> 00:46:10.250 Guest 3487. 00:46:10.250 --> 00:46:12.290 A big round of applause for our guest. 00:46:12.290 --> 00:46:13.175 Thank you to Carter. 00:46:13.175 --> 00:46:14.951 [APPLAUSE] 00:46:17.940 --> 00:46:24.030 So it's nice that were some opportunity here, because recall that in week zero, 00:46:24.030 --> 00:46:27.690 we did start talking about emoji, and really about data, and representation, 00:46:27.690 --> 00:46:30.922 and we talked not about just binary but ASCII and then Unicode. 00:46:30.922 --> 00:46:33.630 And then when we had Unicode, we had all of these additional bits 00:46:33.630 --> 00:46:34.630 that we could play with. 00:46:34.630 --> 00:46:36.900 And we could start to represent not just letters 00:46:36.900 --> 00:46:39.270 of the English alphabet as an ASCII but really 00:46:39.270 --> 00:46:42.150 letters of any human alphabet and even alphabets 00:46:42.150 --> 00:46:43.565 that are continuing to develop. 00:46:43.565 --> 00:46:45.690 And indeed, this was faced with medical mask, which 00:46:45.690 --> 00:46:50.130 we claimed at the time was just how a Mac or PC or Android phone or iPhone 00:46:50.130 --> 00:46:54.240 nowadays would interpret and display a pattern of bits like this. 00:46:54.240 --> 00:46:59.310 This happening to be for the four bytes that represent that particular emoji. 00:46:59.310 --> 00:47:01.590 And over time, humans have been deciding to use 00:47:01.590 --> 00:47:06.720 different patterns for new emojis that might not have existed yesterday. 00:47:06.720 --> 00:47:09.270 And indeed, most any time you update your Mac, or your PC, 00:47:09.270 --> 00:47:12.660 or your phone these days, at least on a semi-annual basis, 00:47:12.660 --> 00:47:15.030 are you getting some new and improved emojis. 00:47:15.030 --> 00:47:17.185 And they're not just these faces now. 00:47:17.185 --> 00:47:19.560 They're of course, representing different human emotions, 00:47:19.560 --> 00:47:21.390 different physical objects, and ultimately 00:47:21.390 --> 00:47:23.730 among the Unicode consortium's goals, is to be 00:47:23.730 --> 00:47:26.160 able to represent all human languages. 00:47:26.160 --> 00:47:29.670 But, we're not for certain groups of people and certain individuals, 00:47:29.670 --> 00:47:32.302 these things would all rather look fairly similar. 00:47:32.302 --> 00:47:34.260 And indeed today, we're so pleased to be joined 00:47:34.260 --> 00:47:36.240 by an old classmate of mine Jennifer 8. 00:47:36.240 --> 00:47:39.240 Lee, who was class of '99 here at the college, who's 00:47:39.240 --> 00:47:43.140 gone off to do many, many different things in life, prolifically so. 00:47:43.140 --> 00:47:45.138 Not only has she been a writer, an author, 00:47:45.138 --> 00:47:48.180 a journalist for the New York Times, a producer of films like The Harvard 00:47:48.180 --> 00:47:51.060 Computers, The Search for General Tso, and The Emoji 00:47:51.060 --> 00:47:53.940 Story, which focuses on exactly today's topic. 00:47:53.940 --> 00:47:56.940 Jenny and her colleagues have been involved particularly 00:47:56.940 --> 00:48:01.620 with championing representation of different types of people, 00:48:01.620 --> 00:48:02.820 and cultures, and languages. 00:48:02.820 --> 00:48:06.120 And these are just a few of the emojis that our friend Jenny has indeed 00:48:06.120 --> 00:48:09.330 brought into creation on our phones and laptops. 00:48:09.330 --> 00:48:12.120 Jenny too is the original inspiration for what 00:48:12.120 --> 00:48:14.288 has become it seems my Twitter recommendations 00:48:14.288 --> 00:48:15.330 and all of these puppets. 00:48:15.330 --> 00:48:17.970 I was visiting her in Manhattan one time some years ago, 00:48:17.970 --> 00:48:21.550 she had on herself a couple of puppets known as Muppet whatnots. 00:48:21.550 --> 00:48:24.300 At the time you could go to FAO Schwartz or the website Therefore, 00:48:24.300 --> 00:48:26.160 an old tort store, and you could actually 00:48:26.160 --> 00:48:27.510 configure your very own Muppets. 00:48:27.510 --> 00:48:29.218 And I thought this was the coolest thing. 00:48:29.218 --> 00:48:31.800 And literally on the cab ride home from her place 00:48:31.800 --> 00:48:34.477 was I logging into the website configuring a couple of puppets. 00:48:34.477 --> 00:48:36.060 A couple of weeks later, they arrived. 00:48:36.060 --> 00:48:38.315 And then rather sat my shelf for a couple of years, 00:48:38.315 --> 00:48:41.190 as I wondered why I had just bought two Muppets in the back of a cab. 00:48:41.190 --> 00:48:43.530 But brought them into the office at one point. 00:48:43.530 --> 00:48:45.600 A colleague saw them, drew inspiration from them, 00:48:45.600 --> 00:48:48.720 and now have they been roving really into the fabric of this course, 00:48:48.720 --> 00:48:51.570 in particular, and a lot of the course's pedagogy, at least 00:48:51.570 --> 00:48:55.030 incarnated here just for fun but also in video form as well. 00:48:55.030 --> 00:48:57.780 Which is only to say, so glad that our friend Jenny 8. 00:48:57.780 --> 00:49:00.910 Lee is here for us today to talk about these emoji. 00:49:00.910 --> 00:49:01.410 Jenny. 00:49:01.410 --> 00:49:01.530 JENNIFER 8. 00:49:01.530 --> 00:49:02.030 LEE: Hi. 00:49:02.030 --> 00:49:03.618 [APPLAUSE] 00:49:07.780 --> 00:49:09.370 All right. 00:49:09.370 --> 00:49:10.480 This is very exciting. 00:49:10.480 --> 00:49:14.530 I took CS50 in 1994. 00:49:14.530 --> 00:49:16.270 To give you a sense, one of my blockmates 00:49:16.270 --> 00:49:21.310 was the first intern for Netscape, if you guys have ever heard of Netscape. 00:49:21.310 --> 00:49:25.262 And I graduated just as Google was-- 00:49:25.262 --> 00:49:27.220 we did not have Google when we were undergrads. 00:49:27.220 --> 00:49:32.410 So, it's an honor, obviously, to be at CS50. 00:49:32.410 --> 00:49:34.900 It's also very impressive to see how David has turned it 00:49:34.900 --> 00:49:39.580 from entry level computer science course into a lifestyle 00:49:39.580 --> 00:49:41.560 brand that is world renowned. 00:49:41.560 --> 00:49:42.880 So, it's an honor. 00:49:42.880 --> 00:49:48.460 And I'm going to talk to you today about how an emoji becomes an emoji. 00:49:48.460 --> 00:49:51.070 So first I'm going to talk about my journey 00:49:51.070 --> 00:49:54.730 down the rabbit hole of how I got involved with emoji. 00:49:54.730 --> 00:49:59.050 So, this is my friend Iing Lu, she is a designer 00:49:59.050 --> 00:50:01.540 famous for designing a Twitter Fail Whale, which 00:50:01.540 --> 00:50:06.680 was this kind of image that popped up when Twitter went down, 00:50:06.680 --> 00:50:08.890 which back in the day was rather often. 00:50:08.890 --> 00:50:12.940 So, she's Chinese-Australian-American, which 00:50:12.940 --> 00:50:15.550 is a weird interesting combination. 00:50:15.550 --> 00:50:19.240 So one day we were texting about dumplings, because that 00:50:19.240 --> 00:50:20.650 is what Chinese-ish women do. 00:50:20.650 --> 00:50:21.820 We text about food. 00:50:21.820 --> 00:50:24.820 And so I sent her this picture of dumplings. 00:50:24.820 --> 00:50:29.260 And then she said, yum, yum, yum, yum, yum knife and fork, knife 00:50:29.260 --> 00:50:30.310 and fork, knife and fork. 00:50:30.310 --> 00:50:33.160 And then she was like, oh, I'm surprised that Apple 00:50:33.160 --> 00:50:34.780 doesn't have a dumpling emoji. 00:50:34.780 --> 00:50:37.000 And I'm like, oh, yeah, that's kind of weird. 00:50:37.000 --> 00:50:42.040 And it's one of those things where the thought comes to your head 00:50:42.040 --> 00:50:43.960 and then it leaves. 00:50:43.960 --> 00:50:48.760 Was just an observation, but then half an hour later onto my phone 00:50:48.760 --> 00:50:52.360 pops up this dumpling emoji with hearts. 00:50:52.360 --> 00:50:55.810 Actually, you can't see it here, but it actually had blinking eyes. 00:50:55.810 --> 00:50:58.480 So she called it bling bling dumpling. 00:50:58.480 --> 00:50:59.380 She's a designer. 00:50:59.380 --> 00:51:05.740 So she decided she was going to fix this lack of dumpling emoji problem. 00:51:05.740 --> 00:51:09.310 And I was actually really puzzled. 00:51:09.310 --> 00:51:12.190 How could there be no dumpling emoji, right? 00:51:12.190 --> 00:51:15.730 Because I knew that emoji are originally Japanese. 00:51:15.730 --> 00:51:17.800 This by the way was back in 2015. 00:51:17.800 --> 00:51:23.620 So, Japanese food's super well represented on the emoji keyboard. 00:51:23.620 --> 00:51:28.150 You have ramen, you have tempura, you have curry, you have-- 00:51:28.150 --> 00:51:31.390 actually, wait, bento box, curry, then tempura. 00:51:31.390 --> 00:51:36.070 You even have slightly weird foods like-- 00:51:36.070 --> 00:51:36.640 let's see. 00:51:36.640 --> 00:51:41.360 You had these things on a stick, which are fish cakes, I discovered. 00:51:41.360 --> 00:51:45.190 Then you have this white and pink swirly thing, which is also a fish cake. 00:51:45.190 --> 00:51:49.450 You even have this triangle thing that looks like it's had a bikini wax. 00:51:49.450 --> 00:51:54.760 But, in essence, there were all these foods that were on the keyboard, 00:51:54.760 --> 00:51:57.100 but there was no dumpling, right? 00:51:57.100 --> 00:52:00.640 And I was like, dumplings are this universal food. 00:52:00.640 --> 00:52:03.250 Every culture has some version of a dumpling, 00:52:03.250 --> 00:52:07.300 whether or not it's empanadas, or ravioli, or-- 00:52:07.300 --> 00:52:08.440 God, what else? 00:52:08.440 --> 00:52:15.070 --ravioli, pierogi, momos-- the whole idea is all cultures have basically 00:52:15.070 --> 00:52:16.270 found the idea-- 00:52:16.270 --> 00:52:21.760 this concept of yummy goodness within a carbohydrate shell, whether or not it's 00:52:21.760 --> 00:52:24.490 baked, or steamed, or fried. 00:52:24.490 --> 00:52:27.100 So dumplings are universal. 00:52:27.100 --> 00:52:29.890 Emoji, I didn't use them that much. 00:52:29.890 --> 00:52:32.270 But I was like, they're all so kind of universal. 00:52:32.270 --> 00:52:37.270 So the fact there was no dumpling emoji told me whatever system was in place 00:52:37.270 --> 00:52:38.050 failed. 00:52:38.050 --> 00:52:39.370 And I actually had no idea. 00:52:39.370 --> 00:52:40.690 I was like, who controls emoji? 00:52:40.690 --> 00:52:42.640 I'm going to go fix this problem. 00:52:42.640 --> 00:52:46.390 There is something wrong with the universe if there's no dumpling emoji. 00:52:46.390 --> 00:52:49.280 And I took it upon myself to go fix that. 00:52:49.280 --> 00:52:54.306 So I Googled, and I basically discovered there was this thing called the Unicode 00:52:54.306 --> 00:53:00.820 Consortium, which is a non-profit based in Mountain View, California 00:53:00.820 --> 00:53:04.160 that when I looked had these like 12 full voting members. 00:53:04.160 --> 00:53:06.250 So this is late 2015. 00:53:06.250 --> 00:53:12.200 Of those 12, 9 were multinational US tech companies. 00:53:12.200 --> 00:53:17.440 So there was Oracle, IBM, Microsoft, Adobe, Google, Apple, 00:53:17.440 --> 00:53:19.090 Facebook, and Yahoo. 00:53:19.090 --> 00:53:22.180 So these were eight, I think. 00:53:22.180 --> 00:53:27.430 And then you had the German software company SAP, 00:53:27.430 --> 00:53:30.970 the Chinese company called Huawei, and then the government of Oman. 00:53:30.970 --> 00:53:34.270 So these were basically the people who were in charge 00:53:34.270 --> 00:53:36.910 and had full voting power on Unicode. 00:53:36.910 --> 00:53:42.490 So they paid $18,000 a year to have this full voting 00:53:42.490 --> 00:53:43.990 power, which is a lot of money. 00:53:43.990 --> 00:53:50.140 I was kind of very indignant on how this cabal of tech companies 00:53:50.140 --> 00:53:58.130 basically controlled this global curated image based language on your keyboard. 00:53:58.130 --> 00:54:01.720 So there was a little bit of a loophole, which 00:54:01.720 --> 00:54:05.560 is could pay $18,000 a year to have full voting power, 00:54:05.560 --> 00:54:09.470 or you could pay $75 a year as an individual. 00:54:09.470 --> 00:54:11.210 You had no voting power. 00:54:11.210 --> 00:54:17.155 But, you had the ability to sign up for the email list 00:54:17.155 --> 00:54:18.530 and also show up at the meetings. 00:54:18.530 --> 00:54:22.580 So, I put putting my credit card, got on email list. 00:54:22.580 --> 00:54:28.447 And was checking my email one day, when there 00:54:28.447 --> 00:54:31.280 was an invite that said they were going to have a quarterly meeting. 00:54:31.280 --> 00:54:34.190 And I think this is going to be October of 2015. 00:54:34.190 --> 00:54:36.950 And I looked-- it was in Sunnyvale. 00:54:36.950 --> 00:54:37.970 I looked in my calendar. 00:54:37.970 --> 00:54:41.270 I looked at the point that I was actually 00:54:41.270 --> 00:54:44.330 going to be able to be in Silicon Valley at that time. 00:54:44.330 --> 00:54:47.840 So I took a bus to Apple where they were having that meeting. 00:54:47.840 --> 00:54:51.320 And I don't know completely what I thought I was going to see. 00:54:51.320 --> 00:54:55.070 I think maybe it was going to be maybe like a Sanders Theater or a little mini 00:54:55.070 --> 00:54:57.320 Congress, people making emoji decisions. 00:54:57.320 --> 00:54:58.610 But that was not what it was. 00:54:58.610 --> 00:55:03.110 Basically, this is the room where it happens, in 2015, where 00:55:03.110 --> 00:55:04.820 the people who were deciding emoji. 00:55:04.820 --> 00:55:07.250 These were emoji decision makers, which were not 00:55:07.250 --> 00:55:10.922 the most demographically diverse group. 00:55:10.922 --> 00:55:12.380 They had a sense of humor about it. 00:55:12.380 --> 00:55:17.450 One guy had a shirt that said shadowy emoji overlord. 00:55:17.450 --> 00:55:21.860 And so I decided, along with my friend Iing Lu, to create a group 00:55:21.860 --> 00:55:26.450 called Emoji Nation, whose motto is emoji by the people, for the people. 00:55:26.450 --> 00:55:33.410 And it brought the voice of the normal world into the decision making chain. 00:55:33.410 --> 00:55:39.530 So, we launched a little campaign about dumpling emojis. 00:55:39.530 --> 00:55:42.560 We made a Kickstarter video. 00:55:42.560 --> 00:55:43.562 Let's see. 00:55:43.562 --> 00:55:46.520 SPEAKER 2: Dumplings are one of the most universal cross-cultural foods 00:55:46.520 --> 00:55:47.570 in the world. 00:55:47.570 --> 00:55:53.150 Georgia has kinkily, Japan has gyoza, Korea has mandu, Italy has ravioli, 00:55:53.150 --> 00:55:57.200 Poland has pierogi, Russia has pelmeni, Argentina has empanadas, 00:55:57.200 --> 00:56:00.110 Jewish people have kreplach, China has potstickers, 00:56:00.110 --> 00:56:02.960 Nepal and Tibet have momos. 00:56:02.960 --> 00:56:05.030 Yet somehow, despite their popularity, there 00:56:05.030 --> 00:56:07.950 is no dumpling emoji in the standard set. 00:56:07.950 --> 00:56:08.840 Why is that? 00:56:08.840 --> 00:56:13.280 Emoji exist for pizza, tempura, sushi, spaghetti, hot dog, and now tacos, 00:56:13.280 --> 00:56:15.650 which Taco Bell takes credit for. 00:56:15.650 --> 00:56:17.570 We need to right this disparity. 00:56:17.570 --> 00:56:18.800 Dumplings a global. 00:56:18.800 --> 00:56:20.190 Emoji are global. 00:56:20.190 --> 00:56:21.815 Isn't it time we brought them together? 00:56:24.380 --> 00:56:27.380 Oh, yeah, and while we're at it, how about an emoji for Chinese takeout? 00:56:30.958 --> 00:56:31.458 JENNIFER 8. 00:56:31.458 --> 00:56:36.680 LEE: So this is Thanksgiving of 2015. 00:56:36.680 --> 00:56:38.630 I wrote a dumpling emoji proposal. 00:56:38.630 --> 00:56:41.870 This is it, different styles, like whether or not 00:56:41.870 --> 00:56:44.270 it's a head-on view or slightly diagonal view. 00:56:47.660 --> 00:56:53.600 That's Iing with then one of the co-chairs of the Emoji Subcommittee. 00:56:53.600 --> 00:56:57.710 And so along with dumpling, we also did takeout box, we got chopsticks, 00:56:57.710 --> 00:57:02.360 and then fortune cookie, which actually, I have to be honest, 00:57:02.360 --> 00:57:05.240 I don't think fortune cookie would have gotten in on its own merits 00:57:05.240 --> 00:57:07.610 were it not on the coattails of the other three. 00:57:07.610 --> 00:57:09.530 So we got these four through. 00:57:09.530 --> 00:57:11.930 And that is how they look today. 00:57:11.930 --> 00:57:15.540 And I have to say that dumpling looks really photorealistic in the Apple 00:57:15.540 --> 00:57:16.040 world. 00:57:16.040 --> 00:57:19.002 Unlike the fortune cookie which has no slit. 00:57:19.002 --> 00:57:20.210 It looks like a dead Pac-Man. 00:57:20.210 --> 00:57:25.340 I don't know what is going on with that design. 00:57:25.340 --> 00:57:26.690 So very proud. 00:57:26.690 --> 00:57:30.110 I also did a lot of research on Chinese food in America, 00:57:30.110 --> 00:57:32.360 and wrote a book called The Fortune Cookie Chronicles, 00:57:32.360 --> 00:57:34.735 produced a documentary called The Search for General Tso. 00:57:34.735 --> 00:57:39.710 So I have a lot of moral authority on the issues of Asian food in America. 00:57:39.710 --> 00:57:44.240 Not all things, but this one I felt like I had made a mark 00:57:44.240 --> 00:57:47.720 on a 2,500 year history of emoji. 00:57:47.720 --> 00:57:50.960 I'm sorry of dumplings, my moving them into emoji. 00:57:50.960 --> 00:57:54.350 So it kind of gets into this very complicated thing. 00:57:54.350 --> 00:57:56.060 How does an emoji become an emoji. 00:57:56.060 --> 00:57:59.310 And it's actually fairly complex. 00:57:59.310 --> 00:58:02.660 So let's say you have an idea for an emoji. 00:58:02.660 --> 00:58:05.450 You write a proposal. 00:58:05.450 --> 00:58:09.440 And then you submit it to the Emoji Subcommittee 00:58:09.440 --> 00:58:12.020 that then debates and thinks about it. 00:58:12.020 --> 00:58:14.610 Sometimes they have feedback and they kick it back to you. 00:58:14.610 --> 00:58:17.830 And if so, then you have to revise it. 00:58:17.830 --> 00:58:19.880 And kind of goes around and around in a circle. 00:58:19.880 --> 00:58:23.540 And once they're happy with it, they kick it 00:58:23.540 --> 00:58:25.550 to the full Unicode technical committee, which 00:58:25.550 --> 00:58:31.250 is a governing body within Unicode on things technical and encoding. 00:58:31.250 --> 00:58:34.790 So what are the kinds of things that impact 00:58:34.790 --> 00:58:36.590 whether an emoji can be an emoji? 00:58:36.590 --> 00:58:40.010 So one, is there popular demand? 00:58:40.010 --> 00:58:43.670 Is it frequently requested? 00:58:43.670 --> 00:58:48.080 And at this point one of the very crude ways that we measure 00:58:48.080 --> 00:58:50.480 is, if you search for it on Google, does it 00:58:50.480 --> 00:58:58.370 have more than 500 million results, which is what elephant gets in English. 00:58:58.370 --> 00:59:00.740 And that's a median-- 00:59:00.740 --> 00:59:04.460 elephant is kind of right in the middle of popular emoji and not popular emoji. 00:59:04.460 --> 00:59:07.080 So, we used that as a benchmark. 00:59:07.080 --> 00:59:10.260 There's a plus if there's multiple usages and meanings. 00:59:10.260 --> 00:59:14.730 For example, sloth. 00:59:14.730 --> 00:59:16.860 That was an emoji that we did. 00:59:16.860 --> 00:59:20.250 It's both in it literally an emoji of an animal, 00:59:20.250 --> 00:59:22.080 but it also has lots of connotations. 00:59:22.080 --> 00:59:27.090 So if something has lots of multiple meanings, that gives it a bump. 00:59:27.090 --> 00:59:29.640 One thing is visually distinctive. 00:59:29.640 --> 00:59:31.827 Doesn't it work at little tiny emoji sizes. 00:59:31.827 --> 00:59:34.410 And that's actually really hard, because there are some things 00:59:34.410 --> 00:59:39.420 that I think could have been emoji but don't completely 00:59:39.420 --> 00:59:41.670 work when you try to shrink it down. 00:59:41.670 --> 00:59:43.930 And I'll give some examples of that later. 00:59:43.930 --> 00:59:48.610 And then filling the gap or completeness is another factor. 00:59:48.610 --> 00:59:52.350 So, for a long time we had red heart, yellow heart, green heart, blue heart, 00:59:52.350 --> 00:59:53.220 purple heart. 00:59:53.220 --> 00:59:54.630 There was no orange heart. 00:59:54.630 --> 00:59:57.900 And so there was a gay designer from Adobe 00:59:57.900 --> 01:00:00.310 who was actually very heartbroken by that. 01:00:00.310 --> 01:00:04.260 So he had been substituting the pumpkin to get the orange to get the rainbow. 01:00:04.260 --> 01:00:05.820 And so he proposed an orange heart. 01:00:05.820 --> 01:00:07.860 And that was obviously at that point, you're 01:00:07.860 --> 01:00:10.560 like, yes, that will complete a set. 01:00:10.560 --> 01:00:16.500 And another thing is, is it already something that one of the companies 01:00:16.500 --> 01:00:21.660 has and therefore everyone else is going to adopt it. 01:00:21.660 --> 01:00:26.490 And so a good example for that is the binary-- 01:00:26.490 --> 01:00:30.750 I think it was the non-gender binary emoji, the pink, blue, and white flag. 01:00:30.750 --> 01:00:36.360 So I have to say WhatsApp is by far one of the most rouge platforms. 01:00:36.360 --> 01:00:38.923 So they just randomly added it one day. 01:00:38.923 --> 01:00:39.840 And we just notice it. 01:00:39.840 --> 01:00:40.890 And we're like, oh, God. 01:00:40.890 --> 01:00:42.140 Given that they have to do it. 01:00:42.140 --> 01:00:45.180 Now we have the [INAUDIBLE]. 01:00:45.180 --> 01:00:49.920 So factors of exclusion or against inclusion, to be more PC. 01:00:49.920 --> 01:00:53.010 Sometimes if it's too specific or narrow, 01:00:53.010 --> 01:00:54.910 that works against being included. 01:00:54.910 --> 01:00:59.610 So poutine, which the Canadians love, was kind of really specific. 01:00:59.610 --> 01:01:01.830 And I know it's really important to the Canadians. 01:01:01.830 --> 01:01:08.100 But it just didn't have enough global appeal if it's redundant. 01:01:08.100 --> 01:01:10.710 So an example for that is a couple of years 01:01:10.710 --> 01:01:14.040 ago Butterball proposed a roasted turkey emoji. 01:01:14.040 --> 01:01:17.640 But we already had an unroasted live emoji of a turkey. 01:01:17.640 --> 01:01:20.550 So it wasn't clear that we needed the cooked version 01:01:20.550 --> 01:01:24.030 to go with the live version, so that didn't pass. 01:01:24.030 --> 01:01:25.215 Not visually discernible. 01:01:25.215 --> 01:01:29.820 So this one's actually really tricky and knocks out a lot of things. 01:01:29.820 --> 01:01:32.220 So, it knocked out kimchi, for example. 01:01:32.220 --> 01:01:34.980 Really hard to do kimchi on emoji sizes. 01:01:34.980 --> 01:01:39.240 How are you going-- is it in the jar or is it just in a little bowl? 01:01:39.240 --> 01:01:42.490 So kimchi kind of died on that. 01:01:42.490 --> 01:01:46.740 Another one that was really hard was a cave emoji, actually. 01:01:46.740 --> 01:01:48.540 Really hard at emoji sizes. 01:01:48.540 --> 01:01:53.310 And then, this is interesting, no logos, brands, deities, or celebrities. 01:01:53.310 --> 01:01:56.610 And this is a new policy we just introduced, which is no more flags. 01:01:56.610 --> 01:02:00.332 Flags were killing us, in terms of all kinds of complicated reasons. 01:02:00.332 --> 01:02:02.415 And there is much regret that we ever added flags. 01:02:05.020 --> 01:02:09.090 And lots of politics, so at this point, no more flags. 01:02:09.090 --> 01:02:14.370 So once it gets passed into the full Unicode technical committee, 01:02:14.370 --> 01:02:17.160 the proposal gets voted on once a year. 01:02:17.160 --> 01:02:20.470 And then they pass all the emoji for the next year. 01:02:20.470 --> 01:02:22.470 We just actually did that a couple of weeks ago. 01:02:22.470 --> 01:02:26.850 And it takes a while because it gets sent to all the companies like Apple, 01:02:26.850 --> 01:02:28.260 Google, Adobe, Facebook. 01:02:28.260 --> 01:02:31.590 And then they add it to all your devices. 01:02:31.590 --> 01:02:32.760 And then, ta-da. 01:02:32.760 --> 01:02:37.170 It takes about 18 to 24 months, from when you first have your proposal 01:02:37.170 --> 01:02:40.360 to when it lands onto your devices. 01:02:40.360 --> 01:02:43.585 So Emojination has worked on a bunch of emoji. 01:02:43.585 --> 01:02:45.460 And so we've kind of shepherded this through. 01:02:45.460 --> 01:02:49.320 So one of the interesting question is, why is it that Unicode controls emoji? 01:02:49.320 --> 01:02:52.320 So a lot of it has to go-- 01:02:52.320 --> 01:02:53.880 has to do with the history of emoji. 01:02:53.880 --> 01:02:56.670 They were originally popularized in Japan. 01:02:56.670 --> 01:03:00.540 There was a very-- one of the initial sets is from 1999 from DoCoMo. 01:03:00.540 --> 01:03:03.930 These were actually recently collected by the Museum 01:03:03.930 --> 01:03:06.570 of Modern Art in New York City. 01:03:06.570 --> 01:03:13.110 And so all the Japanese vendors had these little glyphs 01:03:13.110 --> 01:03:15.780 that they added to their character set. 01:03:15.780 --> 01:03:20.515 And the main problem is if you were DoCoMo, you had one set. 01:03:20.515 --> 01:03:22.390 If you were in SoftBank, you had another set. 01:03:22.390 --> 01:03:26.430 So no matter what you could only text the people who are on your platform, 01:03:26.430 --> 01:03:28.470 not across platforms. 01:03:28.470 --> 01:03:32.070 And that was a real big problem when Apple and Google started 01:03:32.070 --> 01:03:35.430 introducing smartphones into Japan. 01:03:35.430 --> 01:03:38.850 And there were this kind of understanding and expectation 01:03:38.850 --> 01:03:42.450 that if you did something in your smartphone 01:03:42.450 --> 01:03:48.540 you also want it to show up in email and be sent into the ether 01:03:48.540 --> 01:03:51.678 and someone else is supposed to get the same image that you sent. 01:03:51.678 --> 01:03:52.720 So that was not the case. 01:03:52.720 --> 01:03:55.260 So in 2007, they went to Unicode and asked 01:03:55.260 --> 01:03:59.400 them to basically unify the emoji set. 01:03:59.400 --> 01:04:02.040 And Unicode is interesting, because its mission 01:04:02.040 --> 01:04:05.850 is to enable everyone speaking every language on Earth 01:04:05.850 --> 01:04:08.580 to be able to use the language on computers and smartphones. 01:04:08.580 --> 01:04:10.890 And they actually see this as a human right. 01:04:10.890 --> 01:04:14.280 Because at a certain point, if your language cannot be captured digitally, 01:04:14.280 --> 01:04:15.580 it's going to disappear. 01:04:15.580 --> 01:04:20.640 So they spent a lot of time doing Chinese, Arabic, 01:04:20.640 --> 01:04:23.400 Cyrillic in the very early days. 01:04:23.400 --> 01:04:27.570 In 2001, they actually had a proposal for Klingon, which they did not 01:04:27.570 --> 01:04:29.560 actually accept at that point. 01:04:29.560 --> 01:04:31.800 So they have three major projects. 01:04:31.800 --> 01:04:33.600 They encode characters, including emoji. 01:04:33.600 --> 01:04:36.150 That's actually what they're most famous for. 01:04:36.150 --> 01:04:38.740 They also have a bunch of localization resources. 01:04:38.740 --> 01:04:45.690 So that's like, in this country they use this as a currency, 01:04:45.690 --> 01:04:50.160 and they use this kind of time format, and it's whether or not 01:04:50.160 --> 01:04:52.800 it's month month, date date, year year year year. 01:04:52.800 --> 01:04:56.290 In some countries it's date date, month month, year year year year, 01:04:56.290 --> 01:04:57.460 in other countries. 01:04:57.460 --> 01:05:00.870 So they tell you what country cares about what. 01:05:00.870 --> 01:05:03.060 And then they also then have the libraries 01:05:03.060 --> 01:05:06.450 so that no one's basically programming things from scratch. 01:05:06.450 --> 01:05:11.640 So, what's really funny is you say CLDR really fast it sounds like seal deer. 01:05:11.640 --> 01:05:14.700 And this really confused one of the girlfriends of one of the engineers 01:05:14.700 --> 01:05:16.500 why he was always talking about seal deers. 01:05:16.500 --> 01:05:22.890 And so she basically surgically attached a bunch of antlers to this little guy 01:05:22.890 --> 01:05:25.020 and made a seal dear. 01:05:25.020 --> 01:05:29.640 And so it took three years between 2007 to 2010 01:05:29.640 --> 01:05:31.860 to introduce the first Unicode emoji set. 01:05:31.860 --> 01:05:33.780 So, these were the ones that came out. 01:05:33.780 --> 01:05:36.390 It took many, many years to figure out how 01:05:36.390 --> 01:05:39.930 to reconcile all the different images and which ones should we include, 01:05:39.930 --> 01:05:42.030 which ones we shouldn't include. 01:05:42.030 --> 01:05:45.510 And as you guys probably know from CS50, a Unicode code point 01:05:45.510 --> 01:05:48.360 is a unique number assigned to each Unicode character. 01:05:48.360 --> 01:05:51.570 So you can represent that emoji-- 01:05:51.570 --> 01:05:59.020 tears with Facebook, tears of joy, as this, or this, or the binary code. 01:05:59.020 --> 01:06:02.730 So, emojis were just hanging out on your phone 01:06:02.730 --> 01:06:06.390 after 2010, until 2011 when Apple suddenly made them 01:06:06.390 --> 01:06:09.430 much easier to access on your phone. 01:06:09.430 --> 01:06:14.670 And one of the confusing things, of course, is emoji are very ambiguous. 01:06:14.670 --> 01:06:16.410 And it's not always clear what they mean. 01:06:16.410 --> 01:06:18.130 And that's one of the great joys, right? 01:06:18.130 --> 01:06:21.150 It can be more-- 01:06:21.150 --> 01:06:24.570 there's much more interpretation on-- 01:06:24.570 --> 01:06:27.087 in terms between the sender and the receiver. 01:06:27.087 --> 01:06:28.920 So if you actually look-- if you start doing 01:06:28.920 --> 01:06:30.735 that on Google, the autocompletes are like, 01:06:30.735 --> 01:06:32.610 what does it mean when a guy sends it to you? 01:06:32.610 --> 01:06:34.485 What does it mean when the girl sends to you? 01:06:34.485 --> 01:06:39.990 And clearly, many, many people have been confused by that emoji when 01:06:39.990 --> 01:06:40.960 it's been sent to them. 01:06:40.960 --> 01:06:42.360 So who can propose emoji? 01:06:42.360 --> 01:06:44.550 And a short answer is basically anyone. 01:06:44.550 --> 01:06:48.700 There's a Google form that is open between April and August. 01:06:48.700 --> 01:06:52.110 So the hijab emoji actually was originally 01:06:52.110 --> 01:06:56.490 proposed by a 15-year-old girl who is Saudi Arabian but lived in Germany. 01:06:56.490 --> 01:07:00.518 Rayouf Alhumedhi, who actually got into Harvard and then chose Stanford, 01:07:00.518 --> 01:07:02.310 so I was giving her a hard time about that. 01:07:02.310 --> 01:07:02.700 I know. 01:07:02.700 --> 01:07:03.200 Whoa. 01:07:03.200 --> 01:07:05.880 [LAUGHS] I'm kind of on that. 01:07:05.880 --> 01:07:07.780 I was like hmm. 01:07:07.780 --> 01:07:11.610 So, she wrote the proposal, and it got through. 01:07:11.610 --> 01:07:14.310 And she's actually the subject of the documentary 01:07:14.310 --> 01:07:16.600 that we put together called The Emoji Story. 01:07:16.600 --> 01:07:19.950 We also have a group of Argentinians who fought really hard for the mate 01:07:19.950 --> 01:07:21.600 emoji, their national drink. 01:07:21.600 --> 01:07:25.590 And then there was this nonprofit for girls advocacy 01:07:25.590 --> 01:07:27.900 that really wanted a menstruation emoji. 01:07:27.900 --> 01:07:32.585 And they sent in this bloody underpants proposal, which is really terrible, 01:07:32.585 --> 01:07:33.210 I'll be honest. 01:07:33.210 --> 01:07:38.220 So we kind of worked with them and got blood drop, which actually is one of-- 01:07:38.220 --> 01:07:42.240 actually it's done pretty statistically well. 01:07:42.240 --> 01:07:46.050 We were kind of surprised actually how popular it is. 01:07:46.050 --> 01:07:49.650 The skin tone emoji were actually proposed not from within Unicode, 01:07:49.650 --> 01:07:50.370 clearly. 01:07:50.370 --> 01:07:53.220 It was done by a mom from Houston who's also 01:07:53.220 --> 01:07:59.230 an entrepreneur, because her daughter asked her-- came home one day and said, 01:07:59.230 --> 01:08:01.170 I'd really like an emoji that looks like me. 01:08:01.170 --> 01:08:05.580 And her mom, Katrina Parrot, was like, that's great, honey. 01:08:05.580 --> 01:08:07.350 What's an emoji? 01:08:07.350 --> 01:08:10.320 But she actually had worked in procurement with NASA, 01:08:10.320 --> 01:08:12.150 and so she understood forum for proposals, 01:08:12.150 --> 01:08:17.609 and she actually was the one we should thank for having five skin tones today. 01:08:17.609 --> 01:08:18.840 Woman's flat shoe. 01:08:18.840 --> 01:08:22.890 And the one piece bathing suit, as opposed 01:08:22.890 --> 01:08:27.330 to just the yellow teeny weeny yellow polka bikini, 01:08:27.330 --> 01:08:31.770 is a mother of three now four who just wrote that, 01:08:31.770 --> 01:08:34.770 because she was very offended at that all of the shoe emoji 01:08:34.770 --> 01:08:37.637 had high heels for women. 01:08:37.637 --> 01:08:38.970 I actually really like this guy. 01:08:38.970 --> 01:08:42.300 Some random guy in Germany came up with this emoji. 01:08:42.300 --> 01:08:44.430 As we like to say, it's the Colbert emoji. 01:08:44.430 --> 01:08:49.050 He wrote a proposal, and it got accepted because it was a really good proposal. 01:08:49.050 --> 01:08:52.740 Then you even have governments, the Finnish government-- 01:08:52.740 --> 01:08:55.950 literally the Finnish government, their equivalent of the Department of State 01:08:55.950 --> 01:08:59.880 proposed a sauna emoji, which these are the images. 01:08:59.880 --> 01:09:01.770 And I think they're really ugly. 01:09:01.770 --> 01:09:03.960 There's so many problems with this emoji. 01:09:03.960 --> 01:09:07.120 But we helped them as Emojination. 01:09:07.120 --> 01:09:13.268 First we got rid of the clubbed feet and then gave them examples. 01:09:13.268 --> 01:09:18.220 Do you want them to hold the ladle, do you want the steam around it, 01:09:18.220 --> 01:09:25.510 do you want it with clothing or not clothing? 01:09:25.510 --> 01:09:30.290 We actually did a little bit of a towel for the more modest in us. 01:09:30.290 --> 01:09:31.870 So it got passed. 01:09:31.870 --> 01:09:36.010 And then the way it ended up is basically person in a steamy room. 01:09:36.010 --> 01:09:38.080 So this is how it evolved. 01:09:38.080 --> 01:09:41.500 So you can see that is what Finland submitted. 01:09:41.500 --> 01:09:42.910 That is what we submitted. 01:09:42.910 --> 01:09:46.040 And then that is how it's ended up on your phone. 01:09:46.040 --> 01:09:50.560 And that is basically supposed to mean sauna emoji. 01:09:50.560 --> 01:09:52.390 So one of the questions is like, why do I 01:09:52.390 --> 01:09:54.910 care so much about emoji and representation of emoji? 01:09:54.910 --> 01:09:57.160 And a lot of it has to do with the fact that I grew up 01:09:57.160 --> 01:10:02.740 speaking Chinese and going to Saturday Chinese school. 01:10:02.740 --> 01:10:06.565 And as you can see there's some really interesting parallels 01:10:06.565 --> 01:10:10.510 between modern day emoji and Chinese radicals and characters 01:10:10.510 --> 01:10:11.540 from a long time ago. 01:10:11.540 --> 01:10:12.670 So this is fire. 01:10:12.670 --> 01:10:13.910 This is mouth. 01:10:13.910 --> 01:10:15.160 This is tree. 01:10:15.160 --> 01:10:16.330 This is moon. 01:10:16.330 --> 01:10:18.100 This is sun. 01:10:18.100 --> 01:10:20.510 And you can mix and match them in Chinese as well. 01:10:20.510 --> 01:10:25.600 So, one of the interesting ones is two trees together basically makes 01:10:25.600 --> 01:10:26.710 a forest. 01:10:26.710 --> 01:10:32.230 You have a sun and a moon together, and that means bright in Chinese. 01:10:32.230 --> 01:10:33.220 It's kind of fun. 01:10:33.220 --> 01:10:35.410 Then, this one's fun, right? 01:10:35.410 --> 01:10:41.110 So it's basically a pig underneath a roof. 01:10:41.110 --> 01:10:44.380 So you're like, oh, maybe that means farm. 01:10:44.380 --> 01:10:48.250 Or I don't know, a barn or some kind of animal thing. 01:10:48.250 --> 01:10:51.880 But actually, that in Chinese means home or family. 01:10:51.880 --> 01:10:56.710 So home is where your pigs are, which I think says a lot about society 01:10:56.710 --> 01:11:01.673 and what people cared about way back in ancient China. 01:11:01.673 --> 01:11:02.840 This is one of my favorites. 01:11:02.840 --> 01:11:06.400 So, this is a character for woman or female knee. 01:11:06.400 --> 01:11:10.240 And I guess, it kind of looks like this like she's curtsy or something. 01:11:10.240 --> 01:11:18.550 So super interesting character if you grow up writing your characters. 01:11:18.550 --> 01:11:20.290 So this is a woman underneath a roof. 01:11:20.290 --> 01:11:24.100 And you're like, oh, that might mean wife, or family, or something. 01:11:24.100 --> 01:11:28.880 But it actually doesn't, it means peace on. 01:11:28.880 --> 01:11:32.860 So the idea is like things are at peace when 01:11:32.860 --> 01:11:37.270 the woman is under a roof, which I always thought I felt kind of weird 01:11:37.270 --> 01:11:39.160 about that growing up. 01:11:39.160 --> 01:11:43.960 Another one is-- OK there's the woman, and then you have a child or boy child, 01:11:43.960 --> 01:11:45.620 specifically. 01:11:45.620 --> 01:11:48.520 So you're like, oh, that might mean family, or mother, or something. 01:11:48.520 --> 01:11:50.080 But actually it means good. 01:11:50.080 --> 01:11:52.120 So the standard for good in ancient China 01:11:52.120 --> 01:11:56.620 was a woman with a boy child, which I thought was also, as a six-year-old, 01:11:56.620 --> 01:11:59.390 I found problematic as well. 01:11:59.390 --> 01:12:03.430 And all kinds of [CHUCKLES] interesting things in Chinese 01:12:03.430 --> 01:12:04.900 use the female radical. 01:12:04.900 --> 01:12:08.230 So three women together means evil. 01:12:08.230 --> 01:12:10.480 This one means greedy. 01:12:10.480 --> 01:12:12.850 This one means slave. 01:12:12.850 --> 01:12:16.570 This one means jealous. 01:12:16.570 --> 01:12:20.510 This one means betrayal or adultery, which I think is interesting. 01:12:20.510 --> 01:12:23.770 So, in case you want to bring this to your favorite 10-year-old, 01:12:23.770 --> 01:12:28.000 we have a Chinese an emoji kid's book coming out 01:12:28.000 --> 01:12:31.330 from MIT Press in the fall called Hanmoji. 01:12:31.330 --> 01:12:32.590 So it's from MIT teen Press. 01:12:32.590 --> 01:12:33.223 It's super fun. 01:12:33.223 --> 01:12:35.890 So it's a lot of these concepts, but a little bit more rigorous. 01:12:35.890 --> 01:12:43.180 And this idea of gender in emoji was really important to a bunch of us 01:12:43.180 --> 01:12:44.930 as we were working through the issues. 01:12:44.930 --> 01:12:48.350 So, for a long time, on the emoji keyboard 01:12:48.350 --> 01:12:52.060 there are all kinds of jobs you could have as a man. 01:12:52.060 --> 01:12:54.400 You could be a police officer, you could be a detective, 01:12:54.400 --> 01:12:57.550 you could be Buckingham Palace guard, you could even be Santa, 01:12:57.550 --> 01:13:01.090 you can be Black Santa, right? 01:13:01.090 --> 01:13:05.290 As of 2015, if you're a woman, there are only four jobs 01:13:05.290 --> 01:13:07.430 you could have on the emoji keyboard. 01:13:07.430 --> 01:13:11.140 So you could be a princess, you could be a bride, you could be a dancer, 01:13:11.140 --> 01:13:12.670 or you could play a Playboy bunny. 01:13:12.670 --> 01:13:14.330 So there's were your four choices. 01:13:14.330 --> 01:13:21.800 And so we worked really hard on trying to diversify what women could be. 01:13:21.800 --> 01:13:25.120 And one of the ways we did it was through this idea of combining emoji. 01:13:25.120 --> 01:13:29.470 So in emojiland there's something called ZWJ, a zero-width joiner. 01:13:29.470 --> 01:13:33.080 And a lot of emoji that you see are actually glued together. 01:13:33.080 --> 01:13:36.070 So the rainbow plus flag is how you get rainbow flag. 01:13:36.070 --> 01:13:39.460 And this is actually how we worked on introducing a bunch 01:13:39.460 --> 01:13:44.440 of the occupations in emojiland. 01:13:44.440 --> 01:13:52.660 So a lot of these are the chef is a woman plus the frying frying pan, 01:13:52.660 --> 01:13:57.175 or a teacher is a woman plus or man, actually, plus a school. 01:14:00.340 --> 01:14:03.670 So one of the interesting things is you can actually 01:14:03.670 --> 01:14:09.520 have as the result of all the gender parity stuff, we actually had 01:14:09.520 --> 01:14:14.110 to make male and female versions of all the emoji, because some of them 01:14:14.110 --> 01:14:17.140 originally were passes, like man and tuxedo. 01:14:17.140 --> 01:14:20.290 And now, because we had gendered versions of everything, 01:14:20.290 --> 01:14:21.643 we now have women with tuxedo. 01:14:21.643 --> 01:14:22.810 I don't know if you noticed. 01:14:22.810 --> 01:14:25.810 There's also a man in a wedding dress to compliment 01:14:25.810 --> 01:14:28.630 the woman in a wedding dress. 01:14:28.630 --> 01:14:30.400 There's now actually also bearded woman. 01:14:30.400 --> 01:14:32.500 I don't know if you've noticed that. 01:14:32.500 --> 01:14:33.700 So it gets interesting. 01:14:33.700 --> 01:14:36.910 Because originally, at a certain point we had passed a woman breastfeeding. 01:14:36.910 --> 01:14:39.970 And then there was all of this complaints coming into Unicode 01:14:39.970 --> 01:14:41.887 about what about man as caretakers? 01:14:41.887 --> 01:14:43.720 You can't actually tell she's breastfeeding. 01:14:43.720 --> 01:14:45.262 It's more just like she's holding it. 01:14:45.262 --> 01:14:47.800 So people are like, what about the man as a caretaker? 01:14:47.800 --> 01:14:49.790 Paternity leave and da, da, da, da, da, da. 01:14:49.790 --> 01:14:56.260 So, there is now man nursing the child. 01:14:56.260 --> 01:15:04.210 And the other ways you can combine the emoji are through skin tones. 01:15:04.210 --> 01:15:06.700 So unfortunately, those are not through ZWJs. 01:15:06.700 --> 01:15:10.660 This is there an older technology where you have all the skin 01:15:10.660 --> 01:15:15.250 tones are basically the yellow character plus a little square box at the end. 01:15:15.250 --> 01:15:17.200 We call them skin tone modifiers. 01:15:17.200 --> 01:15:22.240 And in terms of what are the things that we worked on at Emojination, 01:15:22.240 --> 01:15:27.760 which was one of the hardest ones was to create the interracial couples. 01:15:27.760 --> 01:15:30.940 And we worked on that with Tinder, which really cared about it. 01:15:30.940 --> 01:15:33.340 Because apparently, which I thought was interesting, 01:15:33.340 --> 01:15:36.610 when you introduce online dating into a community, 01:15:36.610 --> 01:15:39.340 the rates of interracial marriage go up. 01:15:39.340 --> 01:15:41.440 And there's a pretty interesting academic paper 01:15:41.440 --> 01:15:44.500 that systematically looks at the rollout from different countries 01:15:44.500 --> 01:15:47.540 and different communities. 01:15:47.540 --> 01:15:51.250 So it was really nice to see it introduced on the phone. 01:15:51.250 --> 01:15:53.260 One of my friends cried. 01:15:53.260 --> 01:15:56.570 In terms of Emojination emoji, we've worked on a lot. 01:15:56.570 --> 01:16:00.580 So these are just a sampling of the ones that we've done. 01:16:00.580 --> 01:16:02.800 I really liked-- let's see. 01:16:02.800 --> 01:16:04.420 DNA, I feel really good about. 01:16:04.420 --> 01:16:08.200 Lobster, on behalf of people from Maine. 01:16:08.200 --> 01:16:12.040 Yarn and thread, for all the people who like knitting. 01:16:12.040 --> 01:16:16.390 There is bagel emoji, on behalf of all New Yorkers. 01:16:16.390 --> 01:16:20.530 This emoji actually, which we called microbe, was like very sleepy 01:16:20.530 --> 01:16:22.562 on the keyboard, until 2020. 01:16:22.562 --> 01:16:23.770 And it really had its moment. 01:16:23.770 --> 01:16:26.440 I'm really proud of that one. 01:16:26.440 --> 01:16:32.890 And there is yoga emoji, sponge, so these are just a sampling of the ones 01:16:32.890 --> 01:16:33.790 that we've worked on. 01:16:33.790 --> 01:16:36.340 And this is a sampling of the people who have contributed. 01:16:36.340 --> 01:16:38.710 You too, if you feel really passionate about emoji, 01:16:38.710 --> 01:16:42.890 could impact billions of keyboards worldwide. 01:16:42.890 --> 01:16:46.810 So it's interesting to see in terms of frequency of use. 01:16:46.810 --> 01:16:51.220 It's very power law, right? 01:16:51.220 --> 01:16:56.440 These are actually order of magnitude. 01:16:56.440 --> 01:17:00.610 So one is half of this, two is half of one, all the way down. 01:17:00.610 --> 01:17:03.910 And one of the most stunning things I was surprised to see 01:17:03.910 --> 01:17:10.240 is that face of tears of joy by itself is almost 10% of all emoji sent, 01:17:10.240 --> 01:17:13.780 9.9% of emoji is just that one character. 01:17:13.780 --> 01:17:18.050 Number two is red heart, which I guess you guys can see in its binary form. 01:17:18.050 --> 01:17:20.360 And then it falls off pretty quickly. 01:17:20.360 --> 01:17:26.620 So I know I'm hearing that face of tears of joy is very Boomer or very Gen X, 01:17:26.620 --> 01:17:33.430 and that maybe among you guys it's a little bit blasé or déclassé at this 01:17:33.430 --> 01:17:34.330 point. 01:17:34.330 --> 01:17:35.650 So the future emoji-- 01:17:35.650 --> 01:17:39.040 we really don't-- Unicode does not want to be encoding emoji. 01:17:39.040 --> 01:17:42.190 And along the way I became a vise chair of the Unicode Emoji Subcommittee. 01:17:42.190 --> 01:17:46.450 So I went from shaking my fist at the institution 01:17:46.450 --> 01:17:50.150 to becoming part of the institution. 01:17:50.150 --> 01:17:54.070 So there's one idea, this coded hashups of arbitrary images. 01:17:54.070 --> 01:18:01.120 Can we create a system where instead of just using a binary code 01:18:01.120 --> 01:18:05.980 to represent all the different emoji, we actually can do specific images, 01:18:05.980 --> 01:18:09.040 we create hashes, and then you look and you 01:18:09.040 --> 01:18:13.955 can look up by the hash which image you're looking at. 01:18:13.955 --> 01:18:14.830 So that was the idea. 01:18:14.830 --> 01:18:16.360 This is from a Stanford professor. 01:18:16.360 --> 01:18:17.680 Didn't really get take off. 01:18:17.680 --> 01:18:23.050 Then there was this idea using Wikipedia or Wikimedia, the wiki data QID 01:18:23.050 --> 01:18:26.770 numbers, which I didn't know this, until this proposal came along. 01:18:26.770 --> 01:18:31.990 But everything in Wikipedia has a number and that 01:18:31.990 --> 01:18:34.610 allows it to match things between different languages. 01:18:34.610 --> 01:18:39.920 So in Chinese the page for Obama is matched with the English page, 01:18:39.920 --> 01:18:42.250 with this Arabic page. 01:18:42.250 --> 01:18:43.520 And that went nowhere. 01:18:43.520 --> 01:18:48.718 So, what I'm going to finish with is telling you what the new emoji are. 01:18:48.718 --> 01:18:51.010 You guys are among the first people to hear about this, 01:18:51.010 --> 01:18:53.587 because no one's really been paying attention. 01:18:53.587 --> 01:18:55.420 So, this is published a couple of weeks ago, 01:18:55.420 --> 01:19:01.180 but it made no news, because you have to be looking at the Unicode register. 01:19:01.180 --> 01:19:04.630 So first off, more hearts, because you guys all love hearts. 01:19:04.630 --> 01:19:07.378 So there's light blue heart, gray heart, and pink heart. 01:19:07.378 --> 01:19:08.420 There was kind of debate. 01:19:08.420 --> 01:19:09.587 Do we need more pink hearts? 01:19:09.587 --> 01:19:11.380 And the answer seems to be yes. 01:19:11.380 --> 01:19:12.760 Light blue is really interesting. 01:19:12.760 --> 01:19:17.890 Because in some cultures, light blue and dark blue are different colors. 01:19:17.890 --> 01:19:20.830 In our culture, we just call them versions of blue. 01:19:20.830 --> 01:19:24.730 It's sort of like how in English pink and red are different colors, 01:19:24.730 --> 01:19:29.658 but in some cultures there isn't a difference between pink and red. 01:19:29.658 --> 01:19:31.450 And then there were a bunch of bird things. 01:19:31.450 --> 01:19:35.410 The wing emoji is coming, blackbird and goose. 01:19:35.410 --> 01:19:37.840 I don't really know why. 01:19:37.840 --> 01:19:40.450 Hyacinth as a flower. 01:19:40.450 --> 01:19:43.600 This has very popular in Iranian culture. 01:19:43.600 --> 01:19:44.530 Jellyfish. 01:19:44.530 --> 01:19:47.650 I don't know. 01:19:47.650 --> 01:19:53.440 I'm very suspicious of a jellyfish, because they used man-of-war 01:19:53.440 --> 01:19:56.320 as one of their phrases that they searched for. 01:19:56.320 --> 01:19:57.460 And that had a billion-- 01:19:57.460 --> 01:19:59.500 I think-- it had a lot of entries. 01:19:59.500 --> 01:20:03.423 And I feel like those were not about the actual invertebrate. 01:20:03.423 --> 01:20:05.090 There was something else going on there. 01:20:05.090 --> 01:20:07.990 But kind of rode in on that. 01:20:07.990 --> 01:20:10.180 Moose on behalf of the Canadians. 01:20:10.180 --> 01:20:15.092 Donkey on behalf of, I guess, the Democrats. 01:20:15.092 --> 01:20:17.050 So that was interesting because you had to have 01:20:17.050 --> 01:20:19.090 the donkey look different from a horse. 01:20:19.090 --> 01:20:22.060 And there was a whole debate like, do you want a donkey head? 01:20:22.060 --> 01:20:23.650 Or do you want a donkey body? 01:20:23.650 --> 01:20:25.880 Do you want donkey with fluffy ears? 01:20:25.880 --> 01:20:28.330 Do you want-- all kinds of donkey debate. 01:20:28.330 --> 01:20:33.100 And it was actually originally proposed in 2019 and just got into this year. 01:20:33.100 --> 01:20:36.250 Ginger and peapod. 01:20:36.250 --> 01:20:37.420 These are kind of weird. 01:20:37.420 --> 01:20:39.670 The food things kind of got in, in a weird way. 01:20:39.670 --> 01:20:43.180 Ginger was good because it also represented root. 01:20:43.180 --> 01:20:45.925 And then wireless got in, which is interesting. 01:20:45.925 --> 01:20:48.550 Because we couldn't use a phrase Wi-Fi, because that's actually 01:20:48.550 --> 01:20:50.530 trademarked by the Wi-Fi people. 01:20:50.530 --> 01:20:54.340 And then on behalf of Sikhs, Khanda finally got in. 01:20:54.340 --> 01:20:58.060 It was the largest religion that wasn't already represented 01:20:58.060 --> 01:20:59.440 on the emoji keyboard. 01:20:59.440 --> 01:21:01.795 And then on behalf of the faces-- 01:21:01.795 --> 01:21:02.590 [LAUGHTER] 01:21:02.590 --> 01:21:04.720 --shaking face. 01:21:04.720 --> 01:21:09.205 So, I'm glad you guys are really excited by that. 01:21:09.205 --> 01:21:12.610 It is unclear to me-- 01:21:12.610 --> 01:21:15.520 I was not a big proponent of this, but your excitement about it 01:21:15.520 --> 01:21:17.560 makes me change my mind. 01:21:17.560 --> 01:21:19.952 Then, folding hand fan. 01:21:19.952 --> 01:21:21.910 I actually find that one interesting, because I 01:21:21.910 --> 01:21:23.500 think it was just college students. 01:21:23.500 --> 01:21:25.540 Or fresh out of college students were like, we 01:21:25.540 --> 01:21:27.430 want to do your proposal that passes. 01:21:27.430 --> 01:21:31.330 And they were very opportunistic and just chose fan. 01:21:31.330 --> 01:21:33.190 And then first they submitted electric fan. 01:21:33.190 --> 01:21:37.600 And then we told them, oh, the longevity for electric fan 01:21:37.600 --> 01:21:40.600 isn't great, even though it's been around for a couple years. 01:21:40.600 --> 01:21:44.470 Why don't we go with the folding hand fan, which is a much longer history. 01:21:44.470 --> 01:21:50.710 And then, this one is actually a big deal is afro hair pick. 01:21:50.710 --> 01:21:53.710 There was a lot of controversy about and debate about curly hair. 01:21:53.710 --> 01:21:57.010 And it supposed to be, represent, afros. 01:21:57.010 --> 01:21:58.750 And then Apple did not do that. 01:21:58.750 --> 01:22:01.210 So, everyone else has very Afro looking hair. 01:22:01.210 --> 01:22:03.190 Apple just makes it look wavy. 01:22:03.190 --> 01:22:06.040 And so there was like upsetness that Black hair 01:22:06.040 --> 01:22:07.600 wasn't represented in the emoji set. 01:22:07.600 --> 01:22:10.900 And so this was a proposal that someone worked on. 01:22:10.900 --> 01:22:12.200 And then animals. 01:22:12.200 --> 01:22:12.700 Sorry. 01:22:12.700 --> 01:22:14.140 Not animals, instruments. 01:22:14.140 --> 01:22:16.527 Maracas and flute. 01:22:16.527 --> 01:22:17.110 And that's it. 01:22:17.110 --> 01:22:19.880 So in terms of, if you have any questions, 01:22:19.880 --> 01:22:22.270 you can look at emojination.org. 01:22:22.270 --> 01:22:25.210 You can email me for all things emoji. 01:22:25.210 --> 01:22:26.680 jenny@emojination.org. 01:22:26.680 --> 01:22:29.740 And remember, you guys can actually impact 01:22:29.740 --> 01:22:31.870 billions of keyboards around the world. 01:22:31.870 --> 01:22:35.020 I mean, it's a little bit of impact for humans but billions, 01:22:35.020 --> 01:22:36.850 so that adds up to a lot. 01:22:36.850 --> 01:22:39.220 And you have any more questions, I am here 01:22:39.220 --> 01:22:41.770 and can give lots of answers and questions. 01:22:41.770 --> 01:22:45.310 And I'm really thrilled actually to bring 01:22:45.310 --> 01:22:49.060 the emoji flag waving to such a large crowd 01:22:49.060 --> 01:22:52.180 and especially a large, diverse and very motivated crowd. 01:22:52.180 --> 01:22:57.467 And one of the interesting things is, we've kind of-- 01:22:57.467 --> 01:22:59.425 I'm not a proponent of this, but they've slowly 01:22:59.425 --> 01:23:01.570 decreased the number of emoji per year. 01:23:01.570 --> 01:23:02.620 It was 70. 01:23:02.620 --> 01:23:03.400 Then it was 50. 01:23:03.400 --> 01:23:04.550 Then it was 30. 01:23:04.550 --> 01:23:06.190 And this year we only did 20. 01:23:06.190 --> 01:23:09.970 And I'm a little bit sad about that. 01:23:09.970 --> 01:23:17.230 But I hope that, if there's more excited proposals that 01:23:17.230 --> 01:23:21.020 can be submitted to Unicode, we might be able to dial that number back up. 01:23:21.020 --> 01:23:23.155 So, that is me. 01:23:23.155 --> 01:23:24.400 Am I good? 01:23:24.400 --> 01:23:24.920 Yeah. 01:23:24.920 --> 01:23:25.420 So-- 01:23:25.420 --> 01:23:25.920 [APPLAUSE] 01:23:25.920 --> 01:23:26.470 Thank you. 01:23:26.470 --> 01:23:27.454 [LAUGHTER] 01:23:27.454 --> 01:23:30.406 [APPLAUSE CONTINUES] 01:23:32.595 --> 01:23:35.470 DAVID J. MALAN: This is about 20 years late, but thank you so much, Jenny. 01:23:35.470 --> 01:23:39.290 We have an I took CS50 t-shirt for you. 01:23:39.290 --> 01:23:42.050 On the way out too, we have some CS50 stress balls for you. 01:23:42.050 --> 01:23:44.008 Cannot wait to see your final projects. 01:23:44.008 --> 01:23:45.800 Coming up if you'd like to chat with Jenny. 01:23:45.800 --> 01:23:47.570 This was CS50. 01:23:47.570 --> 01:23:48.140 See you soon. 01:23:48.140 --> 01:23:50.890 [CHEERS AND APPLAUSE] 01:23:50.890 --> 01:24:23.000 [MUSIC PLAYING]