1 00:00:00,000 --> 00:00:02,780 2 00:00:02,780 --> 00:00:03,970 GUY WHITE: Hello, Indonesia. 3 00:00:03,970 --> 00:00:07,185 [CHEERING AND APPLAUSE] 4 00:00:07,185 --> 00:00:08,100 5 00:00:08,100 --> 00:00:10,840 It's so good to see all my friends here. 6 00:00:10,840 --> 00:00:15,030 So many of you come from such a long way away. 7 00:00:15,030 --> 00:00:16,950 How many of you walked here? 8 00:00:16,950 --> 00:00:17,910 How many walked here? 9 00:00:17,910 --> 00:00:19,200 [LAUGHTER] 10 00:00:19,200 --> 00:00:22,560 How many of you took a plane? 11 00:00:22,560 --> 00:00:24,030 How many were on a plane? 12 00:00:24,030 --> 00:00:25,170 Oh, my gosh. 13 00:00:25,170 --> 00:00:28,080 I want to say from the bottom of our heart here at CS 50. 14 00:00:28,080 --> 00:00:30,850 We are so thankful for you. 15 00:00:30,850 --> 00:00:34,210 And please, tonight we want you to contact your family, and we want-- 16 00:00:34,210 --> 00:00:34,710 [LAUGHTER] 17 00:00:34,710 --> 00:00:36,650 Seriously. 18 00:00:36,650 --> 00:00:37,560 I'm serious. 19 00:00:37,560 --> 00:00:40,310 I want you to contact your family, and please, 20 00:00:40,310 --> 00:00:44,510 extend our thanks to them for allowing you 21 00:00:44,510 --> 00:00:48,170 to come here this distance to be away from your family and to work. 22 00:00:48,170 --> 00:00:51,074 [CHEERING AND APPLAUSE] 23 00:00:51,074 --> 00:00:53,500 24 00:00:53,500 --> 00:00:57,760 It takes such a commitment to have done what you have done. 25 00:00:57,760 --> 00:01:00,697 But today, is not the end of your journey. 26 00:01:00,697 --> 00:01:02,530 This weekend is not the end of your journey. 27 00:01:02,530 --> 00:01:05,394 This weekend is just the start of something. 28 00:01:05,394 --> 00:01:08,130 [CHEERING] 29 00:01:08,130 --> 00:01:09,510 30 00:01:09,510 --> 00:01:12,842 So I want to see who has traveled the longest way. 31 00:01:12,842 --> 00:01:15,050 So the way we're going to do this is let us stand up. 32 00:01:15,050 --> 00:01:16,500 All of you stand up, please. 33 00:01:16,500 --> 00:01:17,000 Thank you. 34 00:01:17,000 --> 00:01:18,380 Stand up, please. 35 00:01:18,380 --> 00:01:26,090 All right, so if you have come less than five kilometers, please, sit down. 36 00:01:26,090 --> 00:01:26,960 Five kilometers? 37 00:01:26,960 --> 00:01:28,820 10 kilometers or less sit down. 38 00:01:28,820 --> 00:01:32,108 How about 50 kilometers or less, go ahead and sit down. 39 00:01:32,108 --> 00:01:33,650 Thank you, 50 kilo-- oh, there we go. 40 00:01:33,650 --> 00:01:34,400 Got some movement. 41 00:01:34,400 --> 00:01:37,220 [SIDE CONVERSATIONS] 42 00:01:37,220 --> 00:01:43,470 43 00:01:43,470 --> 00:01:46,140 OK, if you had come more-- 44 00:01:46,140 --> 00:01:50,970 less, if you've come less than 100 kilometers, go ahead and sit down. 45 00:01:50,970 --> 00:01:53,010 Sit down. 46 00:01:53,010 --> 00:01:56,566 How about 300, less than 300, please, sit down. 47 00:01:56,566 --> 00:01:58,470 Less than 300? 48 00:01:58,470 --> 00:01:59,470 Oh, it's the longest. 49 00:01:59,470 --> 00:01:59,970 It's-- 50 00:01:59,970 --> 00:02:01,830 [SIDE CONVERSATIONS] 51 00:02:01,830 --> 00:02:03,580 I'm going to have to make it higher. 52 00:02:03,580 --> 00:02:06,420 How many of you have come from less than 1,000? 53 00:02:06,420 --> 00:02:07,634 Go ahead and sit down. 54 00:02:07,634 --> 00:02:08,134 Oh. 55 00:02:08,134 --> 00:02:14,890 56 00:02:14,890 --> 00:02:20,983 How many of you have come less than 1,500? 57 00:02:20,983 --> 00:02:21,900 Go ahead and sit down. 58 00:02:21,900 --> 00:02:25,309 59 00:02:25,309 --> 00:02:29,150 OK, all right, now let's look around. 60 00:02:29,150 --> 00:02:32,480 Let's look around and look at these people. 61 00:02:32,480 --> 00:02:38,823 How many people have come less than 2,500? 62 00:02:38,823 --> 00:02:39,740 Go ahead and sit down. 63 00:02:39,740 --> 00:02:41,270 Less than 2,500? 64 00:02:41,270 --> 00:02:42,590 Oh, one? 65 00:02:42,590 --> 00:02:43,790 Wait, oh, we have two? 66 00:02:43,790 --> 00:02:45,710 We have two? 67 00:02:45,710 --> 00:02:47,815 OK, those people stand back up. 68 00:02:47,815 --> 00:02:48,405 Stand back up. 69 00:02:48,405 --> 00:02:49,030 I did it again. 70 00:02:49,030 --> 00:02:49,840 OK, not a good-- 71 00:02:49,840 --> 00:02:52,060 OK, so let's try this again. 72 00:02:52,060 --> 00:02:54,100 2,200. 73 00:02:54,100 --> 00:02:59,800 If you have travelled-- if you traveled more than 2,200, stand up. 74 00:02:59,800 --> 00:03:03,130 OK, now, let's try here. 75 00:03:03,130 --> 00:03:08,230 If you traveled less than 2,300, sit down. 76 00:03:08,230 --> 00:03:09,234 2,300. 77 00:03:09,234 --> 00:03:09,734 2,300? 78 00:03:09,734 --> 00:03:10,702 AUDIENCE: Whoa. 79 00:03:10,702 --> 00:03:12,640 GUY WHITE: Oh, look at-- 80 00:03:12,640 --> 00:03:18,450 OK, so sir, please, where are you from? 81 00:03:18,450 --> 00:03:19,755 AUDIENCE: [INAUDIBLE]. 82 00:03:19,755 --> 00:03:21,880 GUY WHITE: Wonderful, give him a round of applause. 83 00:03:21,880 --> 00:03:24,790 [APPLAUSE] 84 00:03:24,790 --> 00:03:26,245 85 00:03:26,245 --> 00:03:27,220 Thank you. 86 00:03:27,220 --> 00:03:28,090 And right here. 87 00:03:28,090 --> 00:03:29,941 My friend, where are you from? 88 00:03:29,941 --> 00:03:30,915 AUDIENCE: Oh, oh. 89 00:03:30,915 --> 00:03:33,837 [SIDE CONVERSATIONS] 90 00:03:33,837 --> 00:03:35,300 91 00:03:35,300 --> 00:03:38,370 AUDIENCE: I'm Indonesian but based on [INAUDIBLE].. 92 00:03:38,370 --> 00:03:41,220 [CHEERING AND APPLAUSE] 93 00:03:41,220 --> 00:03:42,650 94 00:03:42,650 --> 00:03:44,960 GUY WHITE: And how about you? 95 00:03:44,960 --> 00:03:46,310 AUDIENCE: I'm from London. 96 00:03:46,310 --> 00:03:48,230 GUY WHITE: Wonderful. 97 00:03:48,230 --> 00:03:49,190 How many kilometers? 98 00:03:49,190 --> 00:03:51,631 AUDIENCE: [? 234. ?] 99 00:03:51,631 --> 00:03:52,506 GUY WHITE: Wonderful. 100 00:03:52,506 --> 00:03:53,500 AUDIENCE: [INAUDIBLE]. 101 00:03:53,500 --> 00:03:54,375 GUY WHITE: Wonderful. 102 00:03:54,375 --> 00:03:56,380 [APPLAUSE] 103 00:03:56,380 --> 00:03:58,950 And up here. 104 00:03:58,950 --> 00:04:00,780 AUDIENCE: I'm from [INAUDIBLE]. 105 00:04:00,780 --> 00:04:01,655 GUY WHITE: Wonderful. 106 00:04:01,655 --> 00:04:03,705 [CHEERING AND APPLAUSE] 107 00:04:03,705 --> 00:04:04,990 108 00:04:04,990 --> 00:04:05,490 Thank you. 109 00:04:05,490 --> 00:04:05,990 Thank you. 110 00:04:05,990 --> 00:04:06,540 Thank you. 111 00:04:06,540 --> 00:04:07,320 And did I see-- 112 00:04:07,320 --> 00:04:08,950 I see a face over here. 113 00:04:08,950 --> 00:04:09,600 Excellent. 114 00:04:09,600 --> 00:04:11,520 I'm going to go this way and not get injured. 115 00:04:11,520 --> 00:04:13,272 [LAUGHTER] 116 00:04:13,272 --> 00:04:15,450 And let's pass the mic up, but I want it back. 117 00:04:15,450 --> 00:04:15,950 OK. 118 00:04:15,950 --> 00:04:19,190 119 00:04:19,190 --> 00:04:21,320 AUDIENCE: I come from the western of Indonesia 120 00:04:21,320 --> 00:04:23,765 at the end of Sumatra and Aceh province. 121 00:04:23,765 --> 00:04:27,020 [APPLAUSE] 122 00:04:27,020 --> 00:04:29,520 123 00:04:29,520 --> 00:04:30,520 AUDIENCE: Thank you. 124 00:04:30,520 --> 00:04:34,041 I'm from [INAUDIBLE],, around [? 3,000 ?] kilometers. 125 00:04:34,041 --> 00:04:34,624 AUDIENCE: Wow. 126 00:04:34,624 --> 00:04:38,000 [APPLAUSE] 127 00:04:38,000 --> 00:04:42,500 GUY WHITE: So not only is your family proud of you, 128 00:04:42,500 --> 00:04:45,930 but your city, you province is proud of you. 129 00:04:45,930 --> 00:04:49,520 Last night the minister visited you and the school. 130 00:04:49,520 --> 00:04:51,560 You're part of the reason-- 131 00:04:51,560 --> 00:04:53,970 you are the reason this is all happening. 132 00:04:53,970 --> 00:04:57,060 We are so happy to be here with you today. 133 00:04:57,060 --> 00:05:00,140 So we're going to play is we're going to play a game really quick to get 134 00:05:00,140 --> 00:05:02,960 us started called counting to 23. 135 00:05:02,960 --> 00:05:04,280 But we can do it in Bahasa. 136 00:05:04,280 --> 00:05:06,710 So how do you say the number one in Bahasa? 137 00:05:06,710 --> 00:05:08,813 AUDIENCE: [SPEAKING BAHASA] 138 00:05:08,813 --> 00:05:09,980 GUY WHITE: [SPEAKING BAHASA] 139 00:05:09,980 --> 00:05:10,563 AUDIENCE: Yes. 140 00:05:10,563 --> 00:05:13,962 GUY WHITE: [SPEAKING BAHASA]. 141 00:05:13,962 --> 00:05:15,710 [LAUGHTER] 142 00:05:15,710 --> 00:05:17,177 OK, so we're going to count. 143 00:05:17,177 --> 00:05:19,010 In a minute, we're going to hand of the mic. 144 00:05:19,010 --> 00:05:21,740 We're going to go 1, 2, 3 in [? Bahasa. ?] 145 00:05:21,740 --> 00:05:23,270 AUDIENCE: [SPEAKING BAHASA]. 146 00:05:23,270 --> 00:05:24,676 AUDIENCE: [SPEAKING BAHASA]. 147 00:05:24,676 --> 00:05:26,430 AUDIENCE: [SPEAKING BAHASA]. 148 00:05:26,430 --> 00:05:27,597 AUDIENCE: [SPEAKING BAHASA]. 149 00:05:27,597 --> 00:05:29,932 AUDIENCE: [SPEAKING BAHASA]. 150 00:05:29,932 --> 00:05:31,800 AUDIENCE: [SPEAKING BAHASA]. 151 00:05:31,800 --> 00:05:33,210 AUDIENCE: [SPEAKING BAHASA]. 152 00:05:33,210 --> 00:05:34,830 AUDIENCE: [SPEAKING BAHASA]. 153 00:05:34,830 --> 00:05:37,850 AUDIENCE: [SPEAKING BAHASA]. 154 00:05:37,850 --> 00:05:39,481 AUDIENCE: [SPEAKING BAHASA]. 155 00:05:39,481 --> 00:05:40,942 AUDIENCE: [SPEAKING BAHASA]. 156 00:05:40,942 --> 00:05:42,890 AUDIENCE: [SPEAKING BAHASA]. 157 00:05:42,890 --> 00:05:44,300 AUDIENCE: [SPEAKING BAHASA]. 158 00:05:44,300 --> 00:05:46,220 AUDIENCE: [SPEAKING BAHASA]. 159 00:05:46,220 --> 00:05:47,813 AUDIENCE: [SPEAKING BAHASA]. 160 00:05:47,813 --> 00:05:48,980 AUDIENCE: [SPEAKING BAHASA]. 161 00:05:48,980 --> 00:05:49,772 GUY WHITE: And 123. 162 00:05:49,772 --> 00:05:50,992 [LAUGHTER] 163 00:05:50,992 --> 00:05:52,356 AUDIENCE: [SPEAKING BAHASA]. 164 00:05:52,356 --> 00:05:53,523 AUDIENCE: [SPEAKING BAHASA]. 165 00:05:53,523 --> 00:05:54,690 AUDIENCE: [SPEAKING BAHASA]. 166 00:05:54,690 --> 00:05:56,250 AUDIENCE: [SPEAKING BAHASA]. 167 00:05:56,250 --> 00:05:58,220 AUDIENCE: [SPEAKING BAHASA]. 168 00:05:58,220 --> 00:06:01,823 AUDIENCE: [SPEAKING BAHASA]. 169 00:06:01,823 --> 00:06:02,990 AUDIENCE: [SPEAKING BAHASA]. 170 00:06:02,990 --> 00:06:03,590 GUY WHITE: 21. 171 00:06:03,590 --> 00:06:04,961 AUDIENCE: Yeah! 172 00:06:04,961 --> 00:06:07,710 AUDIENCE: [SPEAKING BAHASA]. 173 00:06:07,710 --> 00:06:08,940 AUDIENCE: [SPEAKING BAHASA]. 174 00:06:08,940 --> 00:06:10,764 [CHEERING AND APPLAUSE] 175 00:06:10,764 --> 00:06:13,460 176 00:06:13,460 --> 00:06:15,060 AUDIENCE: [SPEAKING BAHASA]. 177 00:06:15,060 --> 00:06:16,980 AUDIENCE: [SPEAKING BAHASA]. 178 00:06:16,980 --> 00:06:18,390 AUDIENCE: [SPEAKING BAHASA]. 179 00:06:18,390 --> 00:06:20,380 AUDIENCE: [SPEAKING BAHASA]. 180 00:06:20,380 --> 00:06:22,020 AUDIENCE: [SPEAKING BAHASA]. 181 00:06:22,020 --> 00:06:24,090 AUDIENCE: [SPEAKING BAHASA]. 182 00:06:24,090 --> 00:06:25,740 AUDIENCE: [SPEAKING BAHASA]. 183 00:06:25,740 --> 00:06:27,621 AUDIENCE: [SPEAKING BAHASA]. 184 00:06:27,621 --> 00:06:29,213 AUDIENCE: [SPEAKING BAHASA]. 185 00:06:29,213 --> 00:06:30,380 AUDIENCE: [SPEAKING BAHASA]. 186 00:06:30,380 --> 00:06:33,250 AUDIENCE: [SPEAKING BAHASA]. 187 00:06:33,250 --> 00:06:35,660 AUDIENCE: [SPEAKING BAHASA]. 188 00:06:35,660 --> 00:06:37,019 AUDIENCE: [SPEAKING BAHASA]. 189 00:06:37,019 --> 00:06:40,931 190 00:06:40,931 --> 00:06:42,398 AUDIENCE: [INAUDIBLE]. 191 00:06:42,398 --> 00:06:45,332 [CHEERING AND APPLAUSE] 192 00:06:45,332 --> 00:06:47,780 193 00:06:47,780 --> 00:06:49,043 AUDIENCE: [SPEAKING BAHASA]. 194 00:06:49,043 --> 00:06:50,210 AUDIENCE: [SPEAKING BAHASA]. 195 00:06:50,210 --> 00:06:51,716 [LAUGHTER] 196 00:06:51,716 --> 00:06:53,410 AUDIENCE: [SPEAKING BAHASA]. 197 00:06:53,410 --> 00:06:54,577 AUDIENCE: [SPEAKING BAHASA]. 198 00:06:54,577 --> 00:06:56,260 [LAUGHTER] 199 00:06:56,260 --> 00:06:58,190 AUDIENCE: [SPEAKING BAHASA]. 200 00:06:58,190 --> 00:06:59,626 AUDIENCE: [SPEAKING BAHASA]. 201 00:06:59,626 --> 00:07:01,700 AUDIENCE: [SPEAKING BAHASA]. 202 00:07:01,700 --> 00:07:03,530 AUDIENCE: [SPEAKING BAHASA]. 203 00:07:03,530 --> 00:07:05,696 AUDIENCE: [SPEAKING BAHASA]. 204 00:07:05,696 --> 00:07:07,570 AUDIENCE: [SPEAKING BAHASA]. 205 00:07:07,570 --> 00:07:09,624 AUDIENCE: [SPEAKING BAHASA]. 206 00:07:09,624 --> 00:07:12,510 AUDIENCE: [SPEAKING BAHASA]. 207 00:07:12,510 --> 00:07:13,953 AUDIENCE: [SPEAKING BAHASA]. 208 00:07:13,953 --> 00:07:15,877 AUDIENCE: [SPEAKING BAHASA]. 209 00:07:15,877 --> 00:07:17,320 AUDIENCE: [SPEAKING BAHASA]. 210 00:07:17,320 --> 00:07:18,487 AUDIENCE: [SPEAKING BAHASA]. 211 00:07:18,487 --> 00:07:20,090 AUDIENCE: [SPEAKING BAHASA]. 212 00:07:20,090 --> 00:07:21,950 AUDIENCE: [SPEAKING BAHASA]. 213 00:07:21,950 --> 00:07:23,960 AUDIENCE: [SPEAKING BAHASA]. 214 00:07:23,960 --> 00:07:25,400 AUDIENCE: [SPEAKING BAHASA]. 215 00:07:25,400 --> 00:07:27,110 AUDIENCE: [SPEAKING BAHASA]. 216 00:07:27,110 --> 00:07:29,820 AUDIENCE: [SPEAKING BAHASA]. 217 00:07:29,820 --> 00:07:31,661 AUDIENCE: [SPEAKING BAHASA]. 218 00:07:31,661 --> 00:07:33,363 AUDIENCE: [SPEAKING BAHASA]. 219 00:07:33,363 --> 00:07:34,530 AUDIENCE: [SPEAKING BAHASA]. 220 00:07:34,530 --> 00:07:36,030 GUY WHITE: And remember your number. 221 00:07:36,030 --> 00:07:37,065 [LAUGHTER] 222 00:07:37,065 --> 00:07:39,308 AUDIENCE: [SPEAKING BAHASA]. 223 00:07:39,308 --> 00:07:41,970 AUDIENCE: [SPEAKING BAHASA]. 224 00:07:41,970 --> 00:07:44,140 AUDIENCE: [SPEAKING BAHASA]. 225 00:07:44,140 --> 00:07:45,363 AUDIENCE: [SPEAKING BAHASA]. 226 00:07:45,363 --> 00:07:47,430 AUDIENCE: [SPEAKING BAHASA]. 227 00:07:47,430 --> 00:07:49,680 AUDIENCE: [SPEAKING BAHASA]. 228 00:07:49,680 --> 00:07:50,926 AUDIENCE: [SPEAKING BAHASA]. 229 00:07:50,926 --> 00:07:53,370 AUDIENCE: [SPEAKING BAHASA]. 230 00:07:53,370 --> 00:07:54,753 AUDIENCE: [SPEAKING BAHASA]. 231 00:07:54,753 --> 00:07:55,920 AUDIENCE: [SPEAKING BAHASA]. 232 00:07:55,920 --> 00:07:59,280 AUDIENCE: [SPEAKING BAHASA]. 233 00:07:59,280 --> 00:08:01,290 AUDIENCE: [SPEAKING BAHASA]. 234 00:08:01,290 --> 00:08:02,584 AUDIENCE: [SPEAKING BAHASA]. 235 00:08:02,584 --> 00:08:04,900 AUDIENCE: [SPEAKING BAHASA]. 236 00:08:04,900 --> 00:08:06,640 AUDIENCE: [SPEAKING BAHASA]. 237 00:08:06,640 --> 00:08:08,302 AUDIENCE: [SPEAKING BAHASA]. 238 00:08:08,302 --> 00:08:10,150 AUDIENCE: [SPEAKING BAHASA]. 239 00:08:10,150 --> 00:08:13,770 AUDIENCE: [SPEAKING BAHASA]. 240 00:08:13,770 --> 00:08:15,491 AUDIENCE: [SPEAKING BAHASA]. 241 00:08:15,491 --> 00:08:16,658 AUDIENCE: [SPEAKING BAHASA]. 242 00:08:16,658 --> 00:08:18,570 AUDIENCE: [SPEAKING BAHASA]. 243 00:08:18,570 --> 00:08:20,004 AUDIENCE: [SPEAKING BAHASA]. 244 00:08:20,004 --> 00:08:26,230 245 00:08:26,230 --> 00:08:27,737 AUDIENCE: [SPEAKING BAHASA]. 246 00:08:27,737 --> 00:08:28,445 [SPEAKING BAHASA] 247 00:08:28,445 --> 00:08:30,295 [LAUGHTER] 248 00:08:30,295 --> 00:08:32,020 AUDIENCE: [SPEAKING BAHASA]. 249 00:08:32,020 --> 00:08:33,979 AUDIENCE: [SPEAKING BAHASA]. 250 00:08:33,979 --> 00:08:35,806 AUDIENCE: [SPEAKING BAHASA]. 251 00:08:35,806 --> 00:08:38,105 AUDIENCE: [SPEAKING BAHASA]. 252 00:08:38,105 --> 00:08:39,460 AUDIENCE: [SPEAKING BAHASA]. 253 00:08:39,460 --> 00:08:42,349 AUDIENCE: [SPEAKING BAHASA]. 254 00:08:42,349 --> 00:08:44,770 AUDIENCE: [SPEAKING BAHASA]. 255 00:08:44,770 --> 00:08:45,992 AUDIENCE: [SPEAKING BAHASA]. 256 00:08:45,992 --> 00:08:47,680 AUDIENCE: [SPEAKING BAHASA]. 257 00:08:47,680 --> 00:08:49,030 AUDIENCE: [SPEAKING BAHASA]. 258 00:08:49,030 --> 00:08:50,300 AUDIENCE: [SPEAKING BAHASA]. 259 00:08:50,300 --> 00:08:51,800 AUDIENCE: [SPEAKING BAHASA]. 260 00:08:51,800 --> 00:08:53,800 AUDIENCE: [SPEAKING BAHASA]. 261 00:08:53,800 --> 00:08:55,774 AUDIENCE: [SPEAKING BAHASA]. 262 00:08:55,774 --> 00:08:57,240 AUDIENCE: [SPEAKING BAHASA]. 263 00:08:57,240 --> 00:08:58,980 AUDIENCE: [SPEAKING BAHASA]. 264 00:08:58,980 --> 00:09:01,800 AUDIENCE: [SPEAKING BAHASA]. 265 00:09:01,800 --> 00:09:03,620 AUDIENCE: [SPEAKING BAHASA]. 266 00:09:03,620 --> 00:09:05,460 AUDIENCE: [SPEAKING BAHASA]. 267 00:09:05,460 --> 00:09:07,430 AUDIENCE: [SPEAKING BAHASA]. 268 00:09:07,430 --> 00:09:09,410 AUDIENCE: [SPEAKING BAHASA]. 269 00:09:09,410 --> 00:09:11,084 AUDIENCE: [SPEAKING BAHASA]. 270 00:09:11,084 --> 00:09:13,060 AUDIENCE: [SPEAKING BAHASA]. 271 00:09:13,060 --> 00:09:14,814 AUDIENCE: [SPEAKING BAHASA]. 272 00:09:14,814 --> 00:09:16,630 AUDIENCE: [SPEAKING BAHASA]. 273 00:09:16,630 --> 00:09:18,900 AUDIENCE: [SPEAKING BAHASA]. 274 00:09:18,900 --> 00:09:20,444 AUDIENCE: [SPEAKING BAHASA]. 275 00:09:20,444 --> 00:09:23,500 AUDIENCE: [SPEAKING BAHASA]. 276 00:09:23,500 --> 00:09:25,530 AUDIENCE: [SPEAKING BAHASA]. 277 00:09:25,530 --> 00:09:27,670 AUDIENCE: [SPEAKING BAHASA]. 278 00:09:27,670 --> 00:09:29,400 AUDIENCE: [SPEAKING BAHASA]. 279 00:09:29,400 --> 00:09:30,966 AUDIENCE: [SPEAKING BAHASA]. 280 00:09:30,966 --> 00:09:32,700 AUDIENCE: [SPEAKING BAHASA]. 281 00:09:32,700 --> 00:09:34,240 AUDIENCE: [SPEAKING BAHASA]. 282 00:09:34,240 --> 00:09:35,570 AUDIENCE: [SPEAKING BAHASA]. 283 00:09:35,570 --> 00:09:38,710 284 00:09:38,710 --> 00:09:41,710 AUDIENCE: [SPEAKING BAHASA]. 285 00:09:41,710 --> 00:09:42,980 AUDIENCE: [SPEAKING BAHASA]. 286 00:09:42,980 --> 00:09:44,032 AUDIENCE: [SPEAKING BAHASA]. 287 00:09:44,032 --> 00:09:44,420 GUY WHITE: Is that it? 288 00:09:44,420 --> 00:09:44,920 Yay! 289 00:09:44,920 --> 00:09:47,475 [APPLAUSE] 290 00:09:47,475 --> 00:09:50,470 291 00:09:50,470 --> 00:09:54,425 And now we will spend the entire weekend making a better algorithm for that. 292 00:09:54,425 --> 00:09:56,083 [LAUGHTER] 293 00:09:56,083 --> 00:09:57,350 All right. 294 00:09:57,350 --> 00:10:01,070 It is so awesome to be with you here today. 295 00:10:01,070 --> 00:10:02,500 I'm so honored to be part of this. 296 00:10:02,500 --> 00:10:05,510 We're so happy to be joined by the Harvard team today to be here 297 00:10:05,510 --> 00:10:07,280 and just to be here with you. 298 00:10:07,280 --> 00:10:09,410 So please, do send our thanks to your family. 299 00:10:09,410 --> 00:10:13,570 To get us started, we need to make some noise to bring on Dr. David Malan. 300 00:10:13,570 --> 00:10:16,420 [CHEERING AND APPLAUSE] 301 00:10:16,420 --> 00:10:20,220 302 00:10:20,220 --> 00:10:22,920 DAVID MALAN: Thank you so much to CS50 [INAUDIBLE].. 303 00:10:22,920 --> 00:10:24,620 This is a very hard act to follow. 304 00:10:24,620 --> 00:10:27,520 And in fact, he was kind enough to pass the applause off to me. 305 00:10:27,520 --> 00:10:29,340 But I think we should give it back to him. 306 00:10:29,340 --> 00:10:32,238 [CHEERING AND APPLAUSE] 307 00:10:32,238 --> 00:10:33,690 308 00:10:33,690 --> 00:10:36,330 And allow me to begin this way, if we may. 309 00:10:36,330 --> 00:10:37,800 This is-- 310 00:10:37,800 --> 00:10:40,090 AUDIENCE: CS50! 311 00:10:40,090 --> 00:10:42,950 DAVID MALAN: So nice to have all of you here with us this weekend. 312 00:10:42,950 --> 00:10:45,500 And welcome to CS50's full community. 313 00:10:45,500 --> 00:10:50,246 We thought we-- before we dive into the behind the scenes of CS50's pedagogy, 314 00:10:50,246 --> 00:10:53,090 let's do a bit of a pop quiz of sorts. 315 00:10:53,090 --> 00:10:57,470 Could we get eight brave volunteers to come on down? 316 00:10:57,470 --> 00:10:59,420 We need eight volunteers. 317 00:10:59,420 --> 00:11:03,020 1, 2, 3, 4, 5. 318 00:11:03,020 --> 00:11:04,670 Let me go over here. 319 00:11:04,670 --> 00:11:05,690 No hands over here? 320 00:11:05,690 --> 00:11:08,120 OK, 6, 7, 8. 321 00:11:08,120 --> 00:11:09,620 Come on down. 322 00:11:09,620 --> 00:11:14,080 And if you can form a line right here in the middle. 323 00:11:14,080 --> 00:11:16,202 Come on down [INAUDIBLE]. 324 00:11:16,202 --> 00:11:19,527 325 00:11:19,527 --> 00:11:20,360 AUDIENCE: All right. 326 00:11:20,360 --> 00:11:21,720 DAVID MALAN: Thank you. 327 00:11:21,720 --> 00:11:27,220 All right, here comes number eight, so 1, 2, 3, 4, 5, 6, 7, 8. 328 00:11:27,220 --> 00:11:30,307 OK, from left to right, do you want to introduce yourself to the group? 329 00:11:30,307 --> 00:11:31,390 AUDIENCE: I'm [INAUDIBLE]. 330 00:11:31,390 --> 00:11:34,518 My name is [INAUDIBLE] from [INAUDIBLE]. 331 00:11:34,518 --> 00:11:35,560 AUDIENCE: Hello, welcome. 332 00:11:35,560 --> 00:11:36,790 My name is [? Zach. ?] 333 00:11:36,790 --> 00:11:38,251 [LAUGHTER] 334 00:11:38,251 --> 00:11:42,550 I'm mathematics teachers from South Sulawesi. 335 00:11:42,550 --> 00:11:46,477 AUDIENCE: Hi, my name is [? Luth ?] from [INAUDIBLE],, Jordan. 336 00:11:46,477 --> 00:11:47,560 AUDIENCE: Hello, everyone. 337 00:11:47,560 --> 00:11:49,240 My name is [INAUDIBLE]. 338 00:11:49,240 --> 00:11:51,280 I'm from West Sumatra. 339 00:11:51,280 --> 00:11:52,550 AUDIENCE: Hello, everyone. 340 00:11:52,550 --> 00:11:56,068 My name is Diana, and I am from Pocasi, West Java. 341 00:11:56,068 --> 00:11:56,860 AUDIENCE: Hi, guys. 342 00:11:56,860 --> 00:11:58,180 My name's [INAUDIBLE]. 343 00:11:58,180 --> 00:11:58,885 I'm [INAUDIBLE]. 344 00:11:58,885 --> 00:12:01,807 [LAUGHTER] 345 00:12:01,807 --> 00:12:02,890 AUDIENCE: Hello, everyone. 346 00:12:02,890 --> 00:12:05,310 My name is [INAUDIBLE],, and I'm an [? MS ?] teacher, 347 00:12:05,310 --> 00:12:08,100 and I'm from [INAUDIBLE]. 348 00:12:08,100 --> 00:12:08,983 Thank you. 349 00:12:08,983 --> 00:12:10,080 AUDIENCE: Hello, guys. 350 00:12:10,080 --> 00:12:11,070 My name is [INAUDIBLE]. 351 00:12:11,070 --> 00:12:14,120 I come from Aceh. 352 00:12:14,120 --> 00:12:18,838 AUDIENCE: Hello, my name is [INAUDIBLE] [? Sandy, ?] and [INAUDIBLE].. 353 00:12:18,838 --> 00:12:22,240 354 00:12:22,240 --> 00:12:25,120 DAVID MALAN: Thank you so much to our nine volunteers. 355 00:12:25,120 --> 00:12:27,532 [APPLAUSE] 356 00:12:27,532 --> 00:12:29,033 So what's your name again? 357 00:12:29,033 --> 00:12:29,950 AUDIENCE: [? Sandy. ?] 358 00:12:29,950 --> 00:12:31,600 DAVID MALAN: [? Sandy. ?] OK, let's have you step-- 359 00:12:31,600 --> 00:12:32,080 step this way. 360 00:12:32,080 --> 00:12:33,913 You're going to help me with this algorithm. 361 00:12:33,913 --> 00:12:36,886 [CHEERING AND APPLAUSE] 362 00:12:36,886 --> 00:12:41,470 All right, volunteers now could reveal by turning around their pieces of paper 363 00:12:41,470 --> 00:12:43,360 what number they are. 364 00:12:43,360 --> 00:12:45,640 So show your number to the audience. 365 00:12:45,640 --> 00:12:48,880 You'll see that, unfortunately, they're unsorted. 366 00:12:48,880 --> 00:12:52,960 And so I think our first question for the volunteers 367 00:12:52,960 --> 00:12:55,795 here is, please, sort yourselves. 368 00:12:55,795 --> 00:12:58,610 [LAUGHTER] 369 00:12:58,610 --> 00:13:06,330 370 00:13:06,330 --> 00:13:09,210 OK, [? Sandy, ?] what algorithm was that? 371 00:13:09,210 --> 00:13:11,916 [LAUGHTER] 372 00:13:11,916 --> 00:13:13,720 373 00:13:13,720 --> 00:13:16,060 Unclear, unclear, so let's rewind. 374 00:13:16,060 --> 00:13:21,490 Randomize yourself, different order, any order is fine. 375 00:13:21,490 --> 00:13:26,378 All right, and now, why don't we propose to have just our volunteers-- 376 00:13:26,378 --> 00:13:28,045 Sandy will give you the third algorithm. 377 00:13:28,045 --> 00:13:28,813 [LAUGHTER] 378 00:13:28,813 --> 00:13:31,730 [INAUDIBLE] volunteers, could you bubble sort? 379 00:13:31,730 --> 00:13:34,100 [LAUGHTER] 380 00:13:34,100 --> 00:13:37,190 Starting from left to right, bubble sort yourselves. 381 00:13:37,190 --> 00:13:39,950 [SIDE CONVERSATIONS] 382 00:13:39,950 --> 00:14:00,290 383 00:14:00,290 --> 00:14:02,830 [? Sandy, ?] what algorithm was that? 384 00:14:02,830 --> 00:14:05,830 [LAUGHTER] 385 00:14:05,830 --> 00:14:08,220 386 00:14:08,220 --> 00:14:10,420 Hopefully, that was the bubble sort. 387 00:14:10,420 --> 00:14:10,920 I know. 388 00:14:10,920 --> 00:14:11,840 Sorry. 389 00:14:11,840 --> 00:14:13,356 Let's run the randomizer. 390 00:14:13,356 --> 00:14:16,284 [LAUGHTER] 391 00:14:16,284 --> 00:14:19,212 [SIDE CONVERSATIONS] 392 00:14:19,212 --> 00:14:22,140 393 00:14:22,140 --> 00:14:25,180 [? Sandy ?] and I [INAUDIBLE] out with this. 394 00:14:25,180 --> 00:14:26,550 So now they're unsorted. 395 00:14:26,550 --> 00:14:29,230 Now, [INAUDIBLE] the bubble sort has us go left to right, 396 00:14:29,230 --> 00:14:34,226 left to right, left to right, swapping elements that are out of order. 397 00:14:34,226 --> 00:14:36,955 So accordingly, at the 6 and 7 are OK. 398 00:14:36,955 --> 00:14:40,000 So [? Sandy ?] look over here. 399 00:14:40,000 --> 00:14:41,386 7 and 3 are out of order. 400 00:14:41,386 --> 00:14:42,886 So what should they do, [? Sandy? ?] 401 00:14:42,886 --> 00:14:45,802 [INTERPOSING VOICES] 402 00:14:45,802 --> 00:14:52,120 403 00:14:52,120 --> 00:14:55,036 [CHEERING] 404 00:14:55,036 --> 00:14:57,466 OK, [? Sandy, ?] 7 and 4? 405 00:14:57,466 --> 00:14:58,195 AUDIENCE: Yeah! 406 00:14:58,195 --> 00:14:59,070 DAVID MALAN: 7 and 8? 407 00:14:59,070 --> 00:14:59,896 AUDIENCE: No! 408 00:14:59,896 --> 00:15:00,938 DAVID MALAN: [INAUDIBLE]. 409 00:15:00,938 --> 00:15:03,273 AUDIENCE: [INAUDIBLE]. 410 00:15:03,273 --> 00:15:05,335 AUDIENCE: [INAUDIBLE]. 411 00:15:05,335 --> 00:15:06,460 DAVID MALAN: Yeah, 8 and 1? 412 00:15:06,460 --> 00:15:07,910 AUDIENCE: Yeah! 413 00:15:07,910 --> 00:15:08,820 DAVID MALAN: 8 and 2? 414 00:15:08,820 --> 00:15:10,288 AUDIENCE: Yeah! 415 00:15:10,288 --> 00:15:11,330 DAVID MALAN: Are we done? 416 00:15:11,330 --> 00:15:11,872 AUDIENCE: No! 417 00:15:11,872 --> 00:15:14,202 418 00:15:14,202 --> 00:15:16,660 DAVID MALAN: OK, again, [? Sandy, ?] you take it from here. 419 00:15:16,660 --> 00:15:17,410 6 and 3? 420 00:15:17,410 --> 00:15:19,880 [INTERPOSING VOICES] 421 00:15:19,880 --> 00:15:31,242 422 00:15:31,242 --> 00:15:34,206 [CHEERING] 423 00:15:34,206 --> 00:15:37,170 [INTERPOSING VOICES] 424 00:15:37,170 --> 00:15:54,155 425 00:15:54,155 --> 00:15:55,280 DAVID MALAN: Are they done? 426 00:15:55,280 --> 00:15:55,822 AUDIENCE: No! 427 00:15:55,822 --> 00:15:58,370 428 00:15:58,370 --> 00:16:00,325 DAVID MALAN: 3 and 4, 4 and 6, 6 and 5. 429 00:16:00,325 --> 00:16:01,336 [INTERPOSING VOICES] 430 00:16:01,336 --> 00:16:02,211 DAVID MALAN: 6 and 1. 431 00:16:02,211 --> 00:16:02,652 AUDIENCE: Yeah! 432 00:16:02,652 --> 00:16:03,534 DAVID MALAN: 6 and 2. 433 00:16:03,534 --> 00:16:03,975 AUDIENCE: Yeah! 434 00:16:03,975 --> 00:16:04,857 DAVID MALAN: 6 and 7? 435 00:16:04,857 --> 00:16:05,742 AUDIENCE: No! 436 00:16:05,742 --> 00:16:06,626 DAVID MALAN: 7 and 8. 437 00:16:06,626 --> 00:16:07,385 AUDIENCE: No! 438 00:16:07,385 --> 00:16:08,510 DAVID MALAN: Are they done? 439 00:16:08,510 --> 00:16:09,510 AUDIENCE: No! 440 00:16:09,510 --> 00:16:12,323 DAVID MALAN: 3 and 4, 4 and 5, 5 and 1. 441 00:16:12,323 --> 00:16:12,948 AUDIENCE: Yeah! 442 00:16:12,948 --> 00:16:13,824 DAVID MALAN: 5 and 2. 443 00:16:13,824 --> 00:16:14,449 AUDIENCE: Yeah! 444 00:16:14,449 --> 00:16:15,514 DAVID MALAN: 5 and 6. 445 00:16:15,514 --> 00:16:16,056 AUDIENCE: No! 446 00:16:16,056 --> 00:16:16,942 DAVID MALAN: 6 and 7. 447 00:16:16,942 --> 00:16:17,484 AUDIENCE: No! 448 00:16:17,484 --> 00:16:17,960 DAVID MALAN: 7 and 8. 449 00:16:17,960 --> 00:16:18,620 Are they done? 450 00:16:18,620 --> 00:16:20,380 AUDIENCE: No! 451 00:16:20,380 --> 00:16:22,268 DAVID MALAN: 3 and 4, for 4 and 1. 452 00:16:22,268 --> 00:16:22,810 AUDIENCE: No! 453 00:16:22,810 --> 00:16:23,685 DAVID MALAN: 4 and 2. 454 00:16:23,685 --> 00:16:24,310 AUDIENCE: Yeah! 455 00:16:24,310 --> 00:16:25,240 DAVID MALAN: 4 and 5. 456 00:16:25,240 --> 00:16:26,052 5 and 6. 457 00:16:26,052 --> 00:16:26,940 6 and 7. 458 00:16:26,940 --> 00:16:27,440 7 and 8. 459 00:16:27,440 --> 00:16:28,018 AUDIENCE: No! 460 00:16:28,018 --> 00:16:29,060 DAVID MALAN: Are we done? 461 00:16:29,060 --> 00:16:30,545 AUDIENCE: No! 462 00:16:30,545 --> 00:16:31,535 DAVID MALAN: 3 and 1. 463 00:16:31,535 --> 00:16:32,525 AUDIENCE: Yes! 464 00:16:32,525 --> 00:16:33,861 DAVID MALAN: 3 and 2. 465 00:16:33,861 --> 00:16:34,444 AUDIENCE: Yes! 466 00:16:34,444 --> 00:16:35,388 DAVID MALAN: 3 and 4. 467 00:16:35,388 --> 00:16:36,304 1 and 5. 468 00:16:36,304 --> 00:16:36,804 [INAUDIBLE] 469 00:16:36,804 --> 00:16:39,443 [CHEERING AND APPLAUSE] 470 00:16:39,443 --> 00:16:40,860 Round of applause for [? Sandy. ?] 471 00:16:40,860 --> 00:16:43,580 [CHEERING AND APPLAUSE] 472 00:16:43,580 --> 00:16:45,590 Thank you so much to our volunteers. 473 00:16:45,590 --> 00:16:47,510 Please, have a seat. 474 00:16:47,510 --> 00:16:51,350 All right, so that you can keep this [INAUDIBLE].. 475 00:16:51,350 --> 00:16:55,160 So that then was bubble sort. 476 00:16:55,160 --> 00:16:58,640 Well, then the next two days are meant to be about CS50. 477 00:16:58,640 --> 00:17:02,000 It's meant to be not what is CS50 and what is computer science, 478 00:17:02,000 --> 00:17:03,980 but really why is CS50? 479 00:17:03,980 --> 00:17:06,710 Among our goals for today and tomorrow are 480 00:17:06,710 --> 00:17:11,480 to look initially at the pedagogy behind CS50 itself, 481 00:17:11,480 --> 00:17:13,640 looking at why we teach things the way we 482 00:17:13,640 --> 00:17:17,220 do so that you can decide for yourselves as a teacher, do you agree? 483 00:17:17,220 --> 00:17:17,970 Do you disagree? 484 00:17:17,970 --> 00:17:21,020 Do you want to adopt the class for your own students? 485 00:17:21,020 --> 00:17:23,520 Do you want to adapt the class for your own students? 486 00:17:23,520 --> 00:17:27,170 So there is no one way to teach certainly computer science and even 487 00:17:27,170 --> 00:17:28,040 CS50. 488 00:17:28,040 --> 00:17:30,200 Both back home and around the world, teachers 489 00:17:30,200 --> 00:17:33,920 like you really modified it as they see fit for their students. 490 00:17:33,920 --> 00:17:35,720 And what you'll find typically is that when 491 00:17:35,720 --> 00:17:39,120 you're teaching computer science or CS50 for the first time, 492 00:17:39,120 --> 00:17:42,620 you might indeed want to adopt the class, lean on us. 493 00:17:42,620 --> 00:17:46,100 So have your students watch, for instance, my videos or some 494 00:17:46,100 --> 00:17:49,430 of our shorts online until you get comfortable yourselves 495 00:17:49,430 --> 00:17:50,240 with the material. 496 00:17:50,240 --> 00:17:53,540 And then maybe later in the year or a year or two later 497 00:17:53,540 --> 00:17:57,980 you can adapt the class and make it your own doing what you agree with, 498 00:17:57,980 --> 00:17:59,660 not doing what you don't disagree with. 499 00:17:59,660 --> 00:18:01,880 And instead of having your students watch the videos, 500 00:18:01,880 --> 00:18:05,030 maybe just you watch the videos and then bring the same material 501 00:18:05,030 --> 00:18:07,640 to life yourself in the classroom. 502 00:18:07,640 --> 00:18:11,510 But before we dive into the why, allow me to thank all of our amazing hosts 503 00:18:11,510 --> 00:18:12,290 here at JIS. 504 00:18:12,290 --> 00:18:14,133 You met some of the Ministry last night. 505 00:18:14,133 --> 00:18:17,383 And a round of applause if we could for everyone who's made this [INAUDIBLE].. 506 00:18:17,383 --> 00:18:20,694 [APPLAUSE] 507 00:18:20,694 --> 00:18:23,620 Allow me to take a moment to in that same microphone 508 00:18:23,620 --> 00:18:27,620 to introduce, not just Guy and myself, but more of CS50's team, 509 00:18:27,620 --> 00:18:31,300 including CS50's own, formerly JIS's own Bernie Longboy. 510 00:18:31,300 --> 00:18:34,210 [CHEERING AND APPLAUSE] 511 00:18:34,210 --> 00:18:35,135 512 00:18:35,135 --> 00:18:36,635 BERNIE LONGBOY: [NON-ENGLISH SPEECH] 513 00:18:36,635 --> 00:18:38,980 AUDIENCE: [NON-ENGLISH SPEECH] 514 00:18:38,980 --> 00:18:40,480 BERNIE LONGBOY: Is it [NON-ENGLISH]. 515 00:18:40,480 --> 00:18:43,878 AUDIENCE: [NON-ENGLISH SPEECH] 516 00:18:43,878 --> 00:18:45,920 BERNIE LONGBOY: I could never get that one right. 517 00:18:45,920 --> 00:18:48,890 [NON-ENGLISH SPEECH]. 518 00:18:48,890 --> 00:18:51,870 Welcome, so happy to have you all here. 519 00:18:51,870 --> 00:18:53,330 We waited for what? 520 00:18:53,330 --> 00:18:57,000 Six months, and super excited to have you all here today. 521 00:18:57,000 --> 00:19:00,410 So I'm Bernie, and I'm in charge of-- what do I do? 522 00:19:00,410 --> 00:19:02,000 outreach and partnerships. 523 00:19:02,000 --> 00:19:05,900 So really this big event is something that we all worked on, 524 00:19:05,900 --> 00:19:07,980 and we're really excited to kick off today. 525 00:19:07,980 --> 00:19:09,260 So again, welcome. 526 00:19:09,260 --> 00:19:12,860 And if you have any questions or anything, just look out for any of us, 527 00:19:12,860 --> 00:19:14,180 and we're happy to answer them. 528 00:19:14,180 --> 00:19:17,000 [CHEERING AND APPLAUSE] 529 00:19:17,000 --> 00:19:19,360 530 00:19:19,360 --> 00:19:22,350 DAVID MALAN: And we next introduce CS50's own Carter Zenke, 531 00:19:22,350 --> 00:19:25,350 who has the distinction of running CS50 itself back home 532 00:19:25,350 --> 00:19:28,930 at Harvard with our 600, 700 students over the course of the year. 533 00:19:28,930 --> 00:19:29,430 Carter. 534 00:19:29,430 --> 00:19:31,972 [CHEERING AND APPLAUSE] 535 00:19:31,972 --> 00:19:33,222 CARTER ZENKE: Hello, everyone. 536 00:19:33,222 --> 00:19:34,900 It's so good to see you again. 537 00:19:34,900 --> 00:19:35,760 My name is Carter. 538 00:19:35,760 --> 00:19:37,470 And I [? lead ?] the courses lectures. 539 00:19:37,470 --> 00:19:40,740 I lead our sections, our recitations, our [INAUDIBLE] hands-on [INAUDIBLE] 540 00:19:40,740 --> 00:19:41,545 classes. 541 00:19:41,545 --> 00:19:44,670 I also get to work with our 80 teachers that we have at Harvard College who 542 00:19:44,670 --> 00:19:46,020 help teach the class. 543 00:19:46,020 --> 00:19:47,220 It's a big group. 544 00:19:47,220 --> 00:19:48,330 We are a big group here. 545 00:19:48,330 --> 00:19:49,810 And I love being part of that community. 546 00:19:49,810 --> 00:19:51,090 So it's exciting being part of that community. 547 00:19:51,090 --> 00:19:53,290 You all as teachers can grow in that way. 548 00:19:53,290 --> 00:19:55,207 So thank you [INAUDIBLE] here in [INAUDIBLE].. 549 00:19:55,207 --> 00:19:57,660 [APPLAUSE] 550 00:19:57,660 --> 00:19:58,205 551 00:19:58,205 --> 00:20:00,330 DAVID MALAN: Allow us to next introduce all the way 552 00:20:00,330 --> 00:20:04,568 from New York City, Margaret Tanzosh who teaches her own classes of computer 553 00:20:04,568 --> 00:20:05,610 science for high schools. 554 00:20:05,610 --> 00:20:08,250 And has been wonderfully working with CS50 for years, 555 00:20:08,250 --> 00:20:11,130 adopting and adapting the class as she sees fit too. 556 00:20:11,130 --> 00:20:13,330 MARGARET TANZOSH: Hi, so nice to meet all of you. 557 00:20:13,330 --> 00:20:17,820 I am so excited to share what I've been doing in my classroom in CS50 558 00:20:17,820 --> 00:20:19,410 for the past eight years. 559 00:20:19,410 --> 00:20:22,493 I was actually one of the first high school teachers to take on the course 560 00:20:22,493 --> 00:20:25,612 and do a combination of adopting and adapting and everything in between. 561 00:20:25,612 --> 00:20:27,570 So I'll be talking to you tomorrow a little bit 562 00:20:27,570 --> 00:20:28,930 about what I do my class like. 563 00:20:28,930 --> 00:20:30,882 And I'm [? asking ?] if you can now visualize 564 00:20:30,882 --> 00:20:33,465 how you want to run your class as well [INAUDIBLE] discussion. 565 00:20:33,465 --> 00:20:36,090 [CHEERING AND APPLAUSE] 566 00:20:36,090 --> 00:20:38,430 567 00:20:38,430 --> 00:20:40,780 DAVID MALAN: I daresay he needs no reintroduction, 568 00:20:40,780 --> 00:20:42,746 but for those of you who [INAUDIBLE]-- 569 00:20:42,746 --> 00:20:44,460 [LAUGHTER] 570 00:20:44,460 --> 00:20:46,868 --allow us to ask Guy to introduce himself [INAUDIBLE].. 571 00:20:46,868 --> 00:20:50,291 [CHEERING AND APPLAUSE] 572 00:20:50,291 --> 00:20:53,230 GUY WHITE: Hello, I'm Guy White from Portland, Oregon-- 573 00:20:53,230 --> 00:20:55,800 [CHEERING AND APPLAUSE] 574 00:20:55,800 --> 00:20:58,110 --where are the weather is a lot like this today. 575 00:20:58,110 --> 00:21:00,150 It's raining there right now. 576 00:21:00,150 --> 00:21:03,990 I just want to say again, it is my pleasure to have worked with you. 577 00:21:03,990 --> 00:21:06,180 Truly, please, thank your family. 578 00:21:06,180 --> 00:21:08,245 You've just filled my heart. 579 00:21:08,245 --> 00:21:09,120 This such a blessing. 580 00:21:09,120 --> 00:21:10,560 Thank you so much, everyone. 581 00:21:10,560 --> 00:21:13,143 And I look forward to working with you over the next two days. 582 00:21:13,143 --> 00:21:15,115 [CHEERING AND APPLAUSE] 583 00:21:15,115 --> 00:21:17,240 DAVID MALAN: And we don't want to give them the mic 584 00:21:17,240 --> 00:21:19,323 because otherwise we'll stop recording everything. 585 00:21:19,323 --> 00:21:22,040 But not only are we joined by JIS's video team here, 586 00:21:22,040 --> 00:21:24,590 we also have Max, and Xochi and Rongxin. 587 00:21:24,590 --> 00:21:27,455 [CHEERING AND APPLAUSE] 588 00:21:27,455 --> 00:21:29,370 589 00:21:29,370 --> 00:21:32,850 So indeed, the videos that we film this weekend we'll 590 00:21:32,850 --> 00:21:34,290 make available ultimately online. 591 00:21:34,290 --> 00:21:36,540 All of the photos that we've been taking out in the photo booth, 592 00:21:36,540 --> 00:21:39,510 we'll follow up with the URL so you can get our versions thereof. 593 00:21:39,510 --> 00:21:43,680 And all of the materials today and onward will be available on this 594 00:21:43,680 --> 00:21:50,250 website here, CS50.ly/indonesia, which will give you links to the slides, 595 00:21:50,250 --> 00:21:53,620 any code that we distribute, the agenda itself. 596 00:21:53,620 --> 00:21:56,940 So this is the URL that you should keep in your phone today and tomorrow, 597 00:21:56,940 --> 00:21:59,880 but perhaps after the workshop as well. 598 00:21:59,880 --> 00:22:03,390 As we forge ahead today, please, do interject at any point 599 00:22:03,390 --> 00:22:06,630 if you have questions and also during the breaks or lunch time tomorrow. 600 00:22:06,630 --> 00:22:09,750 Please, feel free to ask any of us questions that you might have. 601 00:22:09,750 --> 00:22:12,540 But thought I'd give you an overview of what we hope to do over 602 00:22:12,540 --> 00:22:14,260 the next couple of days as follows. 603 00:22:14,260 --> 00:22:18,600 So today, we are at that first white bullet, CS50 explained, 604 00:22:18,600 --> 00:22:19,860 behind the pedagogy. 605 00:22:19,860 --> 00:22:24,030 Between now and 4:00 PM, what we'll do is focus on that line 606 00:22:24,030 --> 00:22:26,220 of teaching CS50 the way that we do. 607 00:22:26,220 --> 00:22:27,690 We'll then take a 30-minute break. 608 00:22:27,690 --> 00:22:31,140 And at 4:30 PM we'll resume focusing on what we call back 609 00:22:31,140 --> 00:22:34,170 in Cambridge microteaching, giving everyone an opportunity 610 00:22:34,170 --> 00:22:39,210 to very comfortably, very safely, very experimentally teach something 611 00:22:39,210 --> 00:22:41,515 to some of your fellow teachers. 612 00:22:41,515 --> 00:22:43,890 And we'll explain after the break what that will involve. 613 00:22:43,890 --> 00:22:47,370 No prior preparation is expected. 614 00:22:47,370 --> 00:22:48,443 Maybe we should do this. 615 00:22:48,443 --> 00:22:51,360 Maybe we should teach bubble sort in all of the individual [INAUDIBLE] 616 00:22:51,360 --> 00:22:52,260 you can do that. 617 00:22:52,260 --> 00:22:54,390 [INAUDIBLE] explain what that's all about it. 618 00:22:54,390 --> 00:22:57,030 It's meant to really help you get any of the nerves you 619 00:22:57,030 --> 00:23:00,628 have out now because, especially if you're teaching CS50 for the first time 620 00:23:00,628 --> 00:23:03,420 or will have been a few months since you've seen your own students, 621 00:23:03,420 --> 00:23:05,837 it will be a much safer space, much more comfortable space 622 00:23:05,837 --> 00:23:08,940 to be nervous in among your colleagues than necessarily 623 00:23:08,940 --> 00:23:12,030 feeling that way in a few weeks or month's time in your classes. 624 00:23:12,030 --> 00:23:14,270 Tomorrow, meanwhile, we'll get started early. 625 00:23:14,270 --> 00:23:17,490 And over breakfast, we'll distribute a packet of puzzles. 626 00:23:17,490 --> 00:23:21,090 Some of you might know online that we have a tradition of CS50 Puzzle Day. 627 00:23:21,090 --> 00:23:22,120 More on that in a bit. 628 00:23:22,120 --> 00:23:24,450 So upon arrival tomorrow, you'll be provided 629 00:23:24,450 --> 00:23:26,355 with some food as well as some puzzles. 630 00:23:26,355 --> 00:23:28,900 Now, you don't have to solve all of the puzzles. 631 00:23:28,900 --> 00:23:31,740 You'll find that they're somewhat easy or medium or hard. 632 00:23:31,740 --> 00:23:35,160 But the goal is just to enable you to chat with more teachers 633 00:23:35,160 --> 00:23:37,620 than you came into this workshop knowing so you hopefully 634 00:23:37,620 --> 00:23:40,320 make a few new connections and friends and colleagues 635 00:23:40,320 --> 00:23:42,765 while having some fun solving the very types of problems 636 00:23:42,765 --> 00:23:44,890 that we'll make available to you in the coming year 637 00:23:44,890 --> 00:23:47,370 if you to run a similar event for your students. 638 00:23:47,370 --> 00:23:51,930 We'll then focus on teaching CS50 itself and actually experimenting with 639 00:23:51,930 --> 00:23:54,510 and talking about methodologies thereof. 640 00:23:54,510 --> 00:23:57,480 Managing a CS50 classroom, really a computer science 641 00:23:57,480 --> 00:24:01,320 classroom more generally, focusing thereafter on comfort levels. 642 00:24:01,320 --> 00:24:04,140 As you might know, within CS50, certainly back home where we 643 00:24:04,140 --> 00:24:06,270 have a lot of undergraduate students, we have 644 00:24:06,270 --> 00:24:09,210 problems for those less comfortable and more comfortable 645 00:24:09,210 --> 00:24:11,040 and somewhere in between too. 646 00:24:11,040 --> 00:24:13,890 And so what we'll discuss is exactly how you too, 647 00:24:13,890 --> 00:24:16,200 having students who might have been programming since 648 00:24:16,200 --> 00:24:19,800 they were six years old, and some students who don't even have access 649 00:24:19,800 --> 00:24:22,560 to computers outside of school, but you can balance those two 650 00:24:22,560 --> 00:24:24,240 different types of demographics. 651 00:24:24,240 --> 00:24:27,960 We'll take a break and do a working lunch with some Q&A followed 652 00:24:27,960 --> 00:24:31,950 by a hands-on opportunity to actually-- and this will be much more fun than 653 00:24:31,950 --> 00:24:33,930 being graded by the teaching fellows-- 654 00:24:33,930 --> 00:24:38,880 actually grading some sample work so that you'll get a sense of what is a 5 655 00:24:38,880 --> 00:24:42,630 out of 5 for correctness, at least as we view it, or design, or style, 656 00:24:42,630 --> 00:24:44,640 and getting you to think about the teacher 657 00:24:44,640 --> 00:24:48,390 perspective of what you've just experienced for months as the students 658 00:24:48,390 --> 00:24:49,110 as well. 659 00:24:49,110 --> 00:24:52,290 We'll then have a round two of microteaching, an opportunity 660 00:24:52,290 --> 00:24:55,140 to improve on however later today goes. 661 00:24:55,140 --> 00:24:57,330 And ultimately, we'll be giving you an overview 662 00:24:57,330 --> 00:24:59,460 at the end of tomorrow, all of the resources 663 00:24:59,460 --> 00:25:01,710 that will be available to you from CS50's team, 664 00:25:01,710 --> 00:25:04,180 both now and in the coming months and years. 665 00:25:04,180 --> 00:25:07,710 And then we'll conclude with a presentation of your very own CS50 666 00:25:07,710 --> 00:25:10,936 certificates and congratulate you and acknowledge you [INAUDIBLE].. 667 00:25:10,936 --> 00:25:13,912 [APPLAUSE] 668 00:25:13,912 --> 00:25:14,910 669 00:25:14,910 --> 00:25:19,730 I do think the right way to think about CS50 as being OpenCourseWare, 670 00:25:19,730 --> 00:25:24,680 freely available open concept, is that you can indeed adopt it or adapt it. 671 00:25:24,680 --> 00:25:28,880 And to reiterate, adopt in our mind means lean on us heavily. 672 00:25:28,880 --> 00:25:32,120 Have your students watch me, watch Doug in the shorts, 673 00:25:32,120 --> 00:25:37,700 use our problem sets as is, use all our [? grading ?] as is until such time 674 00:25:37,700 --> 00:25:40,760 as you just feel more comfortable maybe making some changes 675 00:25:40,760 --> 00:25:44,120 or creating your own problems or presenting material your own way. 676 00:25:44,120 --> 00:25:47,360 Now, you could certainly do that from day one if you're already comfortable. 677 00:25:47,360 --> 00:25:50,540 But in general, adapting the course would be just that. 678 00:25:50,540 --> 00:25:54,560 Like any good teacher, using what you like or what you don't like 679 00:25:54,560 --> 00:25:57,645 or changing what you don't like in order to really make the class 680 00:25:57,645 --> 00:25:59,270 and your students' experience your own. 681 00:25:59,270 --> 00:26:01,280 And so that's generally how we frame the course. 682 00:26:01,280 --> 00:26:02,810 It's not some curriculum. 683 00:26:02,810 --> 00:26:06,200 It's not some textbook that you have to either use or not use. 684 00:26:06,200 --> 00:26:08,390 So do know that first and foremost. 685 00:26:08,390 --> 00:26:11,300 And those of you who have never taught CS before, 686 00:26:11,300 --> 00:26:13,820 are maybe coming from another field, maybe it's math. 687 00:26:13,820 --> 00:26:15,680 Maybe it's something completely unrelated. 688 00:26:15,680 --> 00:26:18,240 Realize and know that it is perfectly OK, 689 00:26:18,240 --> 00:26:21,480 and I would encourage you to just learn along with your students, 690 00:26:21,480 --> 00:26:25,040 especially those kids who are already a little more comfortable, maybe 691 00:26:25,040 --> 00:26:26,905 have been programming even longer than you. 692 00:26:26,905 --> 00:26:29,030 They're going to catch on if you're just pretending 693 00:26:29,030 --> 00:26:30,447 to know what you're talking about. 694 00:26:30,447 --> 00:26:32,220 And so no good will come from that. 695 00:26:32,220 --> 00:26:35,030 So I would encourage you to be comfortable 696 00:26:35,030 --> 00:26:36,750 feeling uncomfortable at times. 697 00:26:36,750 --> 00:26:39,250 And if you don't know some topic or some answer, just offer, 698 00:26:39,250 --> 00:26:40,740 well, we'll figure it out together. 699 00:26:40,740 --> 00:26:43,130 And indeed, that plays into really something 700 00:26:43,130 --> 00:26:46,670 that's a little unusual within CS50 or at least certain courses 701 00:26:46,670 --> 00:26:50,480 back at Harvard is consider, if you so can with your schools, 702 00:26:50,480 --> 00:26:54,290 using students as your own teaching assistants or teaching fellows, 703 00:26:54,290 --> 00:26:55,730 as we call them, or TAs. 704 00:26:55,730 --> 00:26:59,990 And by this I mean, if you already have that one or a few students who probably 705 00:26:59,990 --> 00:27:01,793 don't really need to be taking the class, 706 00:27:01,793 --> 00:27:03,960 but maybe it still fills in gaps in their knowledge, 707 00:27:03,960 --> 00:27:07,245 so it's not pointless for them to be taking the class formally. 708 00:27:07,245 --> 00:27:10,370 But if you already know that they're going to be the kid with their hand up 709 00:27:10,370 --> 00:27:13,730 or they're going to be the one getting 100% on the assignments already, 710 00:27:13,730 --> 00:27:17,630 consider, if you can, deputizing them, so to speak, so as 711 00:27:17,630 --> 00:27:20,540 to be in addition to you one of the humans walking 712 00:27:20,540 --> 00:27:22,340 around helping their classmates. 713 00:27:22,340 --> 00:27:24,680 For instance, we give some of our staff little lanyards 714 00:27:24,680 --> 00:27:27,950 that say CS50 that make clear that they are part of the team. 715 00:27:27,950 --> 00:27:29,840 So little touches like that, or name tags, 716 00:27:29,840 --> 00:27:32,990 or just knowing that this person or that is 717 00:27:32,990 --> 00:27:34,650 the teaching assistant for the class. 718 00:27:34,650 --> 00:27:37,130 That's an invaluable resource, truly, especially 719 00:27:37,130 --> 00:27:39,020 if your class is somewhat larger. 720 00:27:39,020 --> 00:27:43,080 You now had two humans or three instead of just one. 721 00:27:43,080 --> 00:27:43,940 So here we go. 722 00:27:43,940 --> 00:27:46,573 CS50 explained, behind the pedagogy. 723 00:27:46,573 --> 00:27:47,240 This is the why. 724 00:27:47,240 --> 00:27:49,250 Please, interject at any point. 725 00:27:49,250 --> 00:27:52,400 And of course, we'll make these slides available for reference thereafter. 726 00:27:52,400 --> 00:27:57,350 Thought we would present to you a few types of answers to why, namely 727 00:27:57,350 --> 00:28:01,040 on the courses languages, on the courses lectures, 728 00:28:01,040 --> 00:28:04,070 or really classroom curriculum, and finally, 729 00:28:04,070 --> 00:28:07,910 focusing too on some of the courses problem sets. 730 00:28:07,910 --> 00:28:10,070 So this is an image you might recall. 731 00:28:10,070 --> 00:28:12,050 It might still feel this way. 732 00:28:12,050 --> 00:28:16,280 This is a photograph of a [? half ?] down the road from Harvard and MIT, 733 00:28:16,280 --> 00:28:19,820 where some industrious students connected a fire hose and fire 734 00:28:19,820 --> 00:28:22,160 hydrant to a water fountain. 735 00:28:22,160 --> 00:28:25,280 And pictured on that sign there, even though it's very pixelated, 736 00:28:25,280 --> 00:28:29,210 is a the statement along the lines of, getting an education from MIT 737 00:28:29,210 --> 00:28:32,270 is like drinking from a fire hose, which is 738 00:28:32,270 --> 00:28:35,150 to say there's no way you're going to absorb or swallow 739 00:28:35,150 --> 00:28:36,590 all of the information at once. 740 00:28:36,590 --> 00:28:38,150 And it is a little bit forceful. 741 00:28:38,150 --> 00:28:40,760 But the point though, is that to expect this 742 00:28:40,760 --> 00:28:44,210 from the get go means that you can indeed be comfortable feeling 743 00:28:44,210 --> 00:28:46,890 uncomfortable throughout the course. 744 00:28:46,890 --> 00:28:49,070 It is not the expectation, even of our own students 745 00:28:49,070 --> 00:28:51,750 back home, that they'll master each and every topic, 746 00:28:51,750 --> 00:28:53,320 but that they'll have that exposure. 747 00:28:53,320 --> 00:28:57,560 CS50 is indeed meant to be this foundation for, this introduction 748 00:28:57,560 --> 00:29:00,560 to computer science, not necessarily something that's 749 00:29:00,560 --> 00:29:03,950 going to come naturally to all students the very first time 750 00:29:03,950 --> 00:29:05,610 that they dive into it. 751 00:29:05,610 --> 00:29:09,380 So with that said, why do we use the languages that we do? 752 00:29:09,380 --> 00:29:12,920 Because CS50, as you might have gleaned, is already a little different from many 753 00:29:12,920 --> 00:29:15,260 introductory courses, most introductory courses, 754 00:29:15,260 --> 00:29:19,520 which are typically a Java class or a Python class or a C++ [INAUDIBLE].. 755 00:29:19,520 --> 00:29:21,470 They are very language centric. 756 00:29:21,470 --> 00:29:25,190 And we're not, because over the course of 12 or so weeks we, of course, 757 00:29:25,190 --> 00:29:29,720 go from Scratch to C to Python to SQL to HTML, CSS, Java. 758 00:29:29,720 --> 00:29:32,540 It's very fire hose, right, on my fingers. 759 00:29:32,540 --> 00:29:33,500 It's a lot. 760 00:29:33,500 --> 00:29:34,400 But what's the point? 761 00:29:34,400 --> 00:29:37,670 Well, very early on when I actually started teaching CS50, 762 00:29:37,670 --> 00:29:39,592 the course was pretty much only taught in SQL. 763 00:29:39,592 --> 00:29:42,300 Though there's a little bit of a language called Ruby at the end. 764 00:29:42,300 --> 00:29:44,133 But students would exit the class, even when 765 00:29:44,133 --> 00:29:48,860 I took it 20 years ago, with the mindset that they learned how to program in C. 766 00:29:48,860 --> 00:29:53,180 And so it was rather exclusionary to them understanding or diving 767 00:29:53,180 --> 00:29:56,513 into other courses or other languages because they had learned C. 768 00:29:56,513 --> 00:29:58,430 They hadn't learned computer science, and they 769 00:29:58,430 --> 00:30:00,930 hadn't learned how to program period. 770 00:30:00,930 --> 00:30:04,140 And so among our goals with this suite of languages is twofold. 771 00:30:04,140 --> 00:30:07,850 One, to make sure that students do feel that they learned how 772 00:30:07,850 --> 00:30:09,590 to program period. 773 00:30:09,590 --> 00:30:12,800 Or if we want to qualify it, they learned how to program procedurally. 774 00:30:12,800 --> 00:30:16,420 So not so much object-oriented stuff, not so much functional stuff, 775 00:30:16,420 --> 00:30:19,458 if you're familiar with these terms, procedurally programming. 776 00:30:19,458 --> 00:30:22,000 And this is the type of languages we've generally introduced. 777 00:30:22,000 --> 00:30:24,700 But beyond that, among our goals in CS50, 778 00:30:24,700 --> 00:30:27,700 is to ensure that it's a foundation for students taking 779 00:30:27,700 --> 00:30:31,690 computer science for the very first time before they go on to higher level 780 00:30:31,690 --> 00:30:35,110 classes and more computer science and programming so they're prepared for it. 781 00:30:35,110 --> 00:30:38,170 But at least back home at Harvard, half of our students 782 00:30:38,170 --> 00:30:40,850 never take another CS course before. 783 00:30:40,850 --> 00:30:42,250 And we know that going into it. 784 00:30:42,250 --> 00:30:44,980 And for those students we felt that it's very important 785 00:30:44,980 --> 00:30:49,570 that they not only have the conceptual mindset of a computer scientist, 786 00:30:49,570 --> 00:30:53,050 they know how to process information and think about problem solving more 787 00:30:53,050 --> 00:30:56,380 effectively, but they also have some practical skills that they can bring 788 00:30:56,380 --> 00:30:59,890 back to the arts, humanities, social sciences, physical sciences, 789 00:30:59,890 --> 00:31:01,300 medical sciences, and the like. 790 00:31:01,300 --> 00:31:03,940 They just have some practical programming techniques. 791 00:31:03,940 --> 00:31:07,690 And so while we start with this terminal window using C, 792 00:31:07,690 --> 00:31:11,110 and we end with more of a familiar paradigm, namely of course, 793 00:31:11,110 --> 00:31:13,770 web programming that's also increasingly used-- 794 00:31:13,770 --> 00:31:17,000 thanks to HTML, CSS, and JavaScript in the mobile world as well. 795 00:31:17,000 --> 00:31:20,110 So the students are prepared to never again take a CS class, 796 00:31:20,110 --> 00:31:23,570 but at least to continue to teach themselves new languages. 797 00:31:23,570 --> 00:31:24,670 So why Scratch? 798 00:31:24,670 --> 00:31:27,670 So back in 2007, one of the first changes 799 00:31:27,670 --> 00:31:31,600 we made when I took over the class was changed the class from introducing-- 800 00:31:31,600 --> 00:31:36,100 no joke-- assembly language in the first week of the class to Scratch, which is 801 00:31:36,100 --> 00:31:37,630 dare say the complete opposite. 802 00:31:37,630 --> 00:31:40,120 And even though you might not know much assembly yourself, 803 00:31:40,120 --> 00:31:43,720 if you think back to week two, we talked about this. 804 00:31:43,720 --> 00:31:46,690 And we showed the very scary looking code that wasn't even 0s and 1s. 805 00:31:46,690 --> 00:31:48,790 It was almost scarier and more cryptic. 806 00:31:48,790 --> 00:31:50,590 But that's still with us today, and that's 807 00:31:50,590 --> 00:31:53,800 a worthy topic for computer science or engineering students 808 00:31:53,800 --> 00:31:56,120 to learn but maybe not on the first day of class. 809 00:31:56,120 --> 00:31:59,740 So Scratch, for us, is really meant to introduce these ideas, these building 810 00:31:59,740 --> 00:32:00,580 blocks to students. 811 00:32:00,580 --> 00:32:02,928 By the way, this is fun, and better yet, in a way 812 00:32:02,928 --> 00:32:04,720 that they can share it with their roommates 813 00:32:04,720 --> 00:32:08,320 or send a link back to their parents back home and delight in what they've 814 00:32:08,320 --> 00:32:12,940 created very visually, very graphically, without the stupidity of semicolons 815 00:32:12,940 --> 00:32:14,920 and parentheses and curly braces and stuff 816 00:32:14,920 --> 00:32:17,260 that is just not intellectually interesting. 817 00:32:17,260 --> 00:32:20,330 Certainly, something you have to get over eventually, but again, 818 00:32:20,330 --> 00:32:22,238 not on the first day of the class. 819 00:32:22,238 --> 00:32:25,030 And so it's very deliberate, as you might recall, from our own week 820 00:32:25,030 --> 00:32:28,810 0 and week 1, that when we introduce this as the first program 821 00:32:28,810 --> 00:32:30,910 that someone could write in Scratch, we then 822 00:32:30,910 --> 00:32:34,630 tease students with this code, which, my god, that escalated quickly. 823 00:32:34,630 --> 00:32:38,260 But then if you think about what you can do with these visuals, 824 00:32:38,260 --> 00:32:39,730 we briefly color code it. 825 00:32:39,730 --> 00:32:43,990 So now, everything that's orange has to do with the green flag being clicked. 826 00:32:43,990 --> 00:32:46,870 Everything that's purple has to do with the save block. 827 00:32:46,870 --> 00:32:48,250 And yes, it looks ridiculous. 828 00:32:48,250 --> 00:32:50,920 It's not going to be obvious what most of those symbols do. 829 00:32:50,920 --> 00:32:53,210 But that's not the point, certainly on the first day. 830 00:32:53,210 --> 00:32:56,860 This program, of course, still just prints out, Hello, world. 831 00:32:56,860 --> 00:33:00,100 And then of course, we translate it to the actual Scratch blocks 832 00:33:00,100 --> 00:33:02,770 so that in the subsequent week 1, as we call it, 833 00:33:02,770 --> 00:33:04,840 now students hopefully have a mental model 834 00:33:04,840 --> 00:33:08,620 where they're comfy with the idea of functions and conditionals 835 00:33:08,620 --> 00:33:11,650 and loops and maybe a few other ideas like variables and more. 836 00:33:11,650 --> 00:33:15,410 Now we can literally side by side compare the two 837 00:33:15,410 --> 00:33:17,320 so that if you're comfy with the program you 838 00:33:17,320 --> 00:33:20,440 wrote just having the task say, Hello, world, OK, it 839 00:33:20,440 --> 00:33:24,920 looks a little harder to master now on the right, but it's just the same idea. 840 00:33:24,920 --> 00:33:27,400 So the syntax will come, but the ideas are the same. 841 00:33:27,400 --> 00:33:28,450 Same thing here. 842 00:33:28,450 --> 00:33:31,900 On the left here, we have an if, else if, else statement in Scratch. 843 00:33:31,900 --> 00:33:36,850 And of course, it looks much scarier to a student unfamiliar with textual code, 844 00:33:36,850 --> 00:33:38,300 but it's the same idea. 845 00:33:38,300 --> 00:33:41,680 And so pedagogically the motivation is to really assure students 846 00:33:41,680 --> 00:33:43,960 that it's fine if you don't quite get all the syntax 847 00:33:43,960 --> 00:33:45,790 or you make stupid typographical errors. 848 00:33:45,790 --> 00:33:48,500 What's important is that you understand this, 849 00:33:48,500 --> 00:33:51,612 and you'll get, with practice, more comfort with this. 850 00:33:51,612 --> 00:33:53,320 And of course, we can do this with loops, 851 00:33:53,320 --> 00:33:56,380 and we can do this with so many other different features, including 852 00:33:56,380 --> 00:33:56,990 transitioning. 853 00:33:56,990 --> 00:34:01,720 And this too is delivered mid-semester in week 6 from C to Python. 854 00:34:01,720 --> 00:34:04,150 You might recall that we use the same kinds of slides 855 00:34:04,150 --> 00:34:07,120 where I pulled out the exact same pictures of Scratch blocks 856 00:34:07,120 --> 00:34:11,320 but then showed students how we would translate it to Python as well. 857 00:34:11,320 --> 00:34:13,810 And this [? isn't ?] very intentional. 858 00:34:13,810 --> 00:34:16,000 Among our goals with CS50 too in teaching 859 00:34:16,000 --> 00:34:18,219 these different languages is to show students 860 00:34:18,219 --> 00:34:22,510 that you don't need to take a whole course on Python to learn Python. 861 00:34:22,510 --> 00:34:24,219 Now, that might accelerate your learning, 862 00:34:24,219 --> 00:34:26,199 and there is something to be said for learning 863 00:34:26,199 --> 00:34:29,440 from an expert in the field who might be able to structure your lessons. 864 00:34:29,440 --> 00:34:32,889 But in reality, they're probably not going to take courses endlessly 865 00:34:32,889 --> 00:34:33,920 in the future. 866 00:34:33,920 --> 00:34:35,739 And so all the better if we can give them 867 00:34:35,739 --> 00:34:39,850 some discomfort now looking some things up online, looking at some 868 00:34:39,850 --> 00:34:42,909 slides, googling for some answer as to how to do the syntax, 869 00:34:42,909 --> 00:34:47,409 but making clear to them that, even after three, after six months of CS50, 870 00:34:47,409 --> 00:34:49,600 you've seen most of the ideas out there. 871 00:34:49,600 --> 00:34:54,010 And you just now need to translate them to some different syntax as well. 872 00:34:54,010 --> 00:34:58,310 We introduce beyond those languages, of course, SQL for databases. 873 00:34:58,310 --> 00:35:01,990 And here is where I think teachers, among them Margaret and others, 874 00:35:01,990 --> 00:35:04,780 have made different decisions as how to structure their classes. 875 00:35:04,780 --> 00:35:09,880 So SQL we introduce so that students have a real-world database that they 876 00:35:09,880 --> 00:35:10,630 can rely on. 877 00:35:10,630 --> 00:35:14,488 And nowadays, data science and statistics are increasingly popular. 878 00:35:14,488 --> 00:35:17,280 So this is just a really useful tool, especially for those students 879 00:35:17,280 --> 00:35:18,780 who never take CS again. 880 00:35:18,780 --> 00:35:22,410 And we use it so that at the end of the term, especially when we introduce 881 00:35:22,410 --> 00:35:24,480 web programming, students just don't have 882 00:35:24,480 --> 00:35:27,720 to use a CSV file, which would work for small websites. 883 00:35:27,720 --> 00:35:29,760 You could read and write data, but it's not 884 00:35:29,760 --> 00:35:33,190 the right way to do things for any decent number of users. 885 00:35:33,190 --> 00:35:35,670 So we introduce students to at least the simplest flavor 886 00:35:35,670 --> 00:35:38,910 of SQL, so not my SQL anymore or [INAUDIBLE] or, god forbid, 887 00:35:38,910 --> 00:35:41,400 Oracle or the like, but rather just SQL lite, 888 00:35:41,400 --> 00:35:43,960 which shows all of the ideas of the language 889 00:35:43,960 --> 00:35:48,820 but also helps students get the job done on the web or in mobile environments 890 00:35:48,820 --> 00:35:49,320 too. 891 00:35:49,320 --> 00:35:51,030 We introduce HTML, right? 892 00:35:51,030 --> 00:35:52,380 This isn't going anywhere. 893 00:35:52,380 --> 00:35:54,690 Like it or hate it, it's being used now for the web, 894 00:35:54,690 --> 00:35:57,698 of course, but also for mobile applications increasingly, 895 00:35:57,698 --> 00:36:00,240 especially since in this room some of you might have iPhones. 896 00:36:00,240 --> 00:36:02,070 Some of you might have Android devices. 897 00:36:02,070 --> 00:36:06,180 That means twice as much labor for a company or an individual developer 898 00:36:06,180 --> 00:36:09,123 to make if they want to have an app that is cross-platform. 899 00:36:09,123 --> 00:36:11,040 So increasingly, you're seeing, even though we 900 00:36:11,040 --> 00:36:15,330 don't talk about this in CS50 much, but you're seeing HTML, CSS, and JavaScript 901 00:36:15,330 --> 00:36:15,870 being used. 902 00:36:15,870 --> 00:36:17,910 So you write the code once, and then you just 903 00:36:17,910 --> 00:36:20,830 put it in a different type of rectangular window, if you will, 904 00:36:20,830 --> 00:36:25,150 so that it works on both Android and iOS as well. 905 00:36:25,150 --> 00:36:27,270 So we introduce this though, again, so that we 906 00:36:27,270 --> 00:36:30,780 could off-board students at the end of the semester to an environment 907 00:36:30,780 --> 00:36:33,390 that they can actually build real world tools with. 908 00:36:33,390 --> 00:36:35,820 Of course, we introduce Flask, which I think 909 00:36:35,820 --> 00:36:38,550 is probably the simplest of the Python frameworks 910 00:36:38,550 --> 00:36:41,670 that doesn't abstract too much, doesn't get especially bloated, 911 00:36:41,670 --> 00:36:43,770 like I think Django gets, especially if we just 912 00:36:43,770 --> 00:36:45,780 have a week or two to introduce it. 913 00:36:45,780 --> 00:36:48,150 And this of course, is how we introduce students then 914 00:36:48,150 --> 00:36:53,820 to writing code but now interacting with users via HTTP and the like. 915 00:36:53,820 --> 00:36:57,300 And as for tools, of course, we've introduced, over the past two 916 00:36:57,300 --> 00:37:00,060 years now, Visual Studio code, implemented by way 917 00:37:00,060 --> 00:37:02,430 of GitHub code spaces in the cloud. 918 00:37:02,430 --> 00:37:04,830 For us, this too is very deliberate. 919 00:37:04,830 --> 00:37:06,900 Code.org has their own platform. 920 00:37:06,900 --> 00:37:09,990 Many of you might have used Replit or certain other platforms 921 00:37:09,990 --> 00:37:15,000 out there or even client side IDEs, like Eclipse or NetBeans or the like. 922 00:37:15,000 --> 00:37:20,070 It's deliberate that we use VS Code insofar as it's a very general purpose 923 00:37:20,070 --> 00:37:20,640 solution. 924 00:37:20,640 --> 00:37:22,800 It's not one language specific. 925 00:37:22,800 --> 00:37:25,210 It's also free, which is great. 926 00:37:25,210 --> 00:37:27,045 It's also very popular nowadays. 927 00:37:27,045 --> 00:37:30,630 And certainly among US tech companies and increasingly internationally, 928 00:37:30,630 --> 00:37:34,260 it's just VS code [INAUDIBLE] development environment of choice 929 00:37:34,260 --> 00:37:37,595 because it's so extensible by having extensions and plugins and the like. 930 00:37:37,595 --> 00:37:39,720 And so this is deliberate too that we want students 931 00:37:39,720 --> 00:37:43,337 not using a toy CS50 specific environment such 932 00:37:43,337 --> 00:37:46,170 that when they finish the class they have no idea how to write code. 933 00:37:46,170 --> 00:37:48,180 But rather, they use this in the cloud. 934 00:37:48,180 --> 00:37:52,830 And then at the end of our term, we try to off-board as many of our students 935 00:37:52,830 --> 00:37:55,740 as we can by giving them instructions and videos 936 00:37:55,740 --> 00:37:59,970 for learning how to install Python and VS Code and anything else 937 00:37:59,970 --> 00:38:01,770 they want on their own Mac or PC. 938 00:38:01,770 --> 00:38:04,500 It's still a headache even a few months into the class, 939 00:38:04,500 --> 00:38:07,130 but it's not like a barrier on day one when they just 940 00:38:07,130 --> 00:38:08,880 want to write Hello, world, but they can't 941 00:38:08,880 --> 00:38:12,630 get Python working in their Windows path or something like that. 942 00:38:12,630 --> 00:38:18,790 So it's literally start in the cloud but try to end in the local Macs and PCs. 943 00:38:18,790 --> 00:38:24,130 Any questions now on this whirlwind tour of our use of languages and tools 944 00:38:24,130 --> 00:38:25,854 and why? 945 00:38:25,854 --> 00:38:28,776 AUDIENCE: Questions [INAUDIBLE]. 946 00:38:28,776 --> 00:38:30,724 DAVID MALAN: Yeah. 947 00:38:30,724 --> 00:38:35,107 AUDIENCE: [INAUDIBLE] about [INAUDIBLE]? 948 00:38:35,107 --> 00:38:38,030 949 00:38:38,030 --> 00:38:40,880 DAVID MALAN: Ah, sure try me and I'll defer it if its two specific. 950 00:38:40,880 --> 00:38:42,824 AUDIENCE: I was thinking about [INAUDIBLE].. 951 00:38:42,824 --> 00:38:46,950 Is it like [INAUDIBLE]? 952 00:38:46,950 --> 00:38:48,560 Or is it [INAUDIBLE]? 953 00:38:48,560 --> 00:38:57,138 954 00:38:57,138 --> 00:39:01,592 And then [INAUDIBLE] 955 00:39:01,592 --> 00:39:03,300 DAVID MALAN: Sure, a really good question 956 00:39:03,300 --> 00:39:05,940 about the capacity of a SQL-like database as it 957 00:39:05,940 --> 00:39:07,800 relates to something like Google Drive. 958 00:39:07,800 --> 00:39:11,370 The capacity of a SQL-like database completely depends on the device 959 00:39:11,370 --> 00:39:13,140 that your storing the database on. 960 00:39:13,140 --> 00:39:15,090 As you might recall from the end of the class, 961 00:39:15,090 --> 00:39:18,870 a SQL-like file is usually [INAUDIBLE] in something like dot dB 962 00:39:18,870 --> 00:39:20,310 or even dot SQL lite. 963 00:39:20,310 --> 00:39:24,330 And that's literally just a file, a binary file made with 0s and 1s 964 00:39:24,330 --> 00:39:27,098 that might be 0 bytes if there's nothing in it yet. 965 00:39:27,098 --> 00:39:29,640 That could be a megabyte if you've got a few tables and rows. 966 00:39:29,640 --> 00:39:32,290 Could be 100 megabytes if you've got a lot of data. 967 00:39:32,290 --> 00:39:36,360 So the only limiting factor is what's available on your own Mac or PC 968 00:39:36,360 --> 00:39:38,520 or Android or iOS device. 969 00:39:38,520 --> 00:39:39,770 AUDIENCE: I have a question. 970 00:39:39,770 --> 00:39:41,520 DAVID MALAN: Other questions on languages. 971 00:39:41,520 --> 00:39:45,170 972 00:39:45,170 --> 00:39:57,850 AUDIENCE: [INAUDIBLE] to make SQL [? lite ?] by sending some 973 00:39:57,850 --> 00:40:05,140 [? technical ?] [INAUDIBLE] as easy to write code [INAUDIBLE].. 974 00:40:05,140 --> 00:40:14,280 And can we use [INAUDIBLE] for our student [INAUDIBLE]?? 975 00:40:14,280 --> 00:40:15,600 DAVID MALAN: Yes, absolutely. 976 00:40:15,600 --> 00:40:19,500 So you can, in fact, use code.CS50.IO, which 977 00:40:19,500 --> 00:40:22,470 will lead you to the same environment that you've all been using 978 00:40:22,470 --> 00:40:24,180 as students the past several months. 979 00:40:24,180 --> 00:40:26,130 Your own students can use the same. 980 00:40:26,130 --> 00:40:30,840 There are also other ways you can use code spaces even independent of CS50. 981 00:40:30,840 --> 00:40:33,030 And what we'll do in the coming weeks is we 982 00:40:33,030 --> 00:40:36,300 hold a Zoom-based tutorial for those who want to see 983 00:40:36,300 --> 00:40:38,130 other ways of using these same tools. 984 00:40:38,130 --> 00:40:42,750 You can actually use code spaces itself as a teacher for free because of grants 985 00:40:42,750 --> 00:40:46,500 that Microsoft and GitHub provide that essentially it gives you more 986 00:40:46,500 --> 00:40:48,390 control over the student's experience. 987 00:40:48,390 --> 00:40:52,180 Whereas, code.CS50.IO automates a lot of things right now. 988 00:40:52,180 --> 00:40:52,970 So both options. 989 00:40:52,970 --> 00:40:55,312 AUDIENCE: Including all the [INAUDIBLE] class. 990 00:40:55,312 --> 00:40:56,020 DAVID MALAN: Yes. 991 00:40:56,020 --> 00:40:57,320 AUDIENCE: In C or Python. 992 00:40:57,320 --> 00:41:00,650 DAVID MALAN: There is nothing you have just experienced in the past six months 993 00:41:00,650 --> 00:41:02,600 that you will not continue to have access to. 994 00:41:02,600 --> 00:41:05,540 [CHEERING AND APPLAUSE] 995 00:41:05,540 --> 00:41:08,980 996 00:41:08,980 --> 00:41:12,880 So allow me to transition now to the more curricular side of things. 997 00:41:12,880 --> 00:41:16,740 And as you might know from the videos, we 998 00:41:16,740 --> 00:41:19,680 tried within CS50 on that beautiful stage 999 00:41:19,680 --> 00:41:23,980 that in Sanders create as many memorable moments for students as possible. 1000 00:41:23,980 --> 00:41:27,390 And what this means is just trying to bring the material to life in ways 1001 00:41:27,390 --> 00:41:31,560 that PowerPoint slides do not belong or just talking about the material 1002 00:41:31,560 --> 00:41:33,150 or having students read a textbook. 1003 00:41:33,150 --> 00:41:35,790 It doesn't necessarily mean that these memorable moments 1004 00:41:35,790 --> 00:41:40,440 and these physical demonstrations are showing or introducing any more 1005 00:41:40,440 --> 00:41:43,440 material that you couldn't introduce via those other technologies 1006 00:41:43,440 --> 00:41:45,870 and techniques, but that you're creating, hopefully, 1007 00:41:45,870 --> 00:41:49,650 this visual, like the eight or nine of you who came up. 1008 00:41:49,650 --> 00:41:52,860 You will never again forget how not to do bubbles sort perhaps, 1009 00:41:52,860 --> 00:41:55,110 like [? leading ?] that demonstration. 1010 00:41:55,110 --> 00:41:58,628 Until then, we actually did it with the one final way. 1011 00:41:58,628 --> 00:42:00,420 And so the goal is just to give that visual 1012 00:42:00,420 --> 00:42:05,220 that persists long after term's end for many more months, maybe even years. 1013 00:42:05,220 --> 00:42:07,320 And we don't do that for every topic, of course. 1014 00:42:07,320 --> 00:42:09,265 Otherwise, we'd be here forever. 1015 00:42:09,265 --> 00:42:11,640 But we try to do it for some of the most difficult topics 1016 00:42:11,640 --> 00:42:15,570 or at least those topics that lend themselves to theatricality, 1017 00:42:15,570 --> 00:42:16,420 so to speak. 1018 00:42:16,420 --> 00:42:21,180 And so I thought I'd share with you a few screenshots in a few slides that 1019 00:42:21,180 --> 00:42:24,840 explain why we did things this past year the way we did. 1020 00:42:24,840 --> 00:42:27,030 So with that said, the first and foremost, 1021 00:42:27,030 --> 00:42:29,160 maybe most memorable for students, tends to be 1022 00:42:29,160 --> 00:42:32,620 our implementation of binary search at the very beginning of the class. 1023 00:42:32,620 --> 00:42:37,200 So here is me in a very awkward screenshot, tearing that phone 1024 00:42:37,200 --> 00:42:39,420 book, which admittedly are getting very hard 1025 00:42:39,420 --> 00:42:43,056 to find, so much so we tried to find one here in Indonesia, and we could not. 1026 00:42:43,056 --> 00:42:44,010 [LAUGHTER] 1027 00:42:44,010 --> 00:42:46,050 But they're even hard to find back home too. 1028 00:42:46,050 --> 00:42:49,630 But this is an example that, honestly, after 16 years of teaching 1029 00:42:49,630 --> 00:42:52,830 CS50, some students, alumni still come up to me 1030 00:42:52,830 --> 00:42:55,986 and mention, oh, I still remember when you tore that phone book. 1031 00:42:55,986 --> 00:42:56,780 [LAUGHTER] 1032 00:42:56,780 --> 00:42:59,280 There's something to be said for certainly the memories that 1033 00:42:59,280 --> 00:43:01,140 instills but also just the idea. 1034 00:43:01,140 --> 00:43:05,670 Those students, hopefully, will never forget the essence of binary search. 1035 00:43:05,670 --> 00:43:08,790 They forget the term, the essence of dividing and conquering 1036 00:43:08,790 --> 00:43:11,820 a problem by dividing and dividing and dividing again. 1037 00:43:11,820 --> 00:43:16,260 And so when you have access to props like this or anything, 1038 00:43:16,260 --> 00:43:18,600 any collection of paper that you can tear this way, 1039 00:43:18,600 --> 00:43:20,940 consider doing it to bring that material to life. 1040 00:43:20,940 --> 00:43:21,820 Vary it up. 1041 00:43:21,820 --> 00:43:24,000 Sometimes I have students come up onto the stage, 1042 00:43:24,000 --> 00:43:25,620 and I have to whisper into their ear that you have 1043 00:43:25,620 --> 00:43:27,360 to want them to tear the phone book. 1044 00:43:27,360 --> 00:43:29,610 But for now, that just allows you to create 1045 00:43:29,610 --> 00:43:33,000 all the more visuals for your students to latch on to even as they 1046 00:43:33,000 --> 00:43:35,310 might struggle with those same topics. 1047 00:43:35,310 --> 00:43:37,530 Something like Scratch, meanwhile, so Scratch 1048 00:43:37,530 --> 00:43:40,950 has been meant again to be this practical, fun, accessible opportunity 1049 00:43:40,950 --> 00:43:42,490 to bring material to life. 1050 00:43:42,490 --> 00:43:45,240 And even though some of your students might have already used 1051 00:43:45,240 --> 00:43:48,720 Scratch or Scratch Junior as kids in school or at home, 1052 00:43:48,720 --> 00:43:52,532 it's still an opportunity to elevate it intellectually to make clear 1053 00:43:52,532 --> 00:43:54,990 that it's not just a game or something to poke around with. 1054 00:43:54,990 --> 00:43:56,190 It is computer science. 1055 00:43:56,190 --> 00:43:58,740 It is an example of programming, certainly, 1056 00:43:58,740 --> 00:44:02,400 that's much more accessible than what they're about to see weeks later. 1057 00:44:02,400 --> 00:44:05,190 And here too, we have fun, especially in that first class, 1058 00:44:05,190 --> 00:44:08,730 where if you're trying to convince students who might not necessarily 1059 00:44:08,730 --> 00:44:12,300 even consider computer science for them demographically, academically, 1060 00:44:12,300 --> 00:44:16,330 or otherwise, Scratch is just a nice way to put everyone on the same playing 1061 00:44:16,330 --> 00:44:16,830 field. 1062 00:44:16,830 --> 00:44:19,800 And you might remember from week 0, it's great 1063 00:44:19,800 --> 00:44:23,940 when you can get students literally jumping on stage and implementing this. 1064 00:44:23,940 --> 00:44:27,367 Recall that I think he was trying to hit the Whack-a-mole, so 1065 00:44:27,367 --> 00:44:29,950 to speak, as we say in English, where the thing was moving up, 1066 00:44:29,950 --> 00:44:30,930 down, left, and right. 1067 00:44:30,930 --> 00:44:32,280 So just this idea too. 1068 00:44:32,280 --> 00:44:35,160 It's not maybe as high information content 1069 00:44:35,160 --> 00:44:38,010 as something like tearing the phone book for binary search. 1070 00:44:38,010 --> 00:44:38,812 But it's just fun. 1071 00:44:38,812 --> 00:44:40,270 It makes students want to be there. 1072 00:44:40,270 --> 00:44:42,145 It makes them want to come back the next day, 1073 00:44:42,145 --> 00:44:45,750 and we particularly do these kinds of things at the beginning of the class 1074 00:44:45,750 --> 00:44:50,290 as students are trying to figure out if this is indeed a world for them. 1075 00:44:50,290 --> 00:44:52,710 With that said, binary itself, of course, 1076 00:44:52,710 --> 00:44:54,210 is something we talk about early on. 1077 00:44:54,210 --> 00:44:57,070 And this too is an opportunity to bring students up on stage. 1078 00:44:57,070 --> 00:44:58,950 So here, for instance, didn't have paper. 1079 00:44:58,950 --> 00:45:02,470 We actually had found plastic numbers with light bulbs that lighted up. 1080 00:45:02,470 --> 00:45:07,890 And we had our students represent the 1s place, 2s place, 4s place, and 8 place 1081 00:45:07,890 --> 00:45:11,160 in a way that just allows us to get some audience participation. 1082 00:45:11,160 --> 00:45:15,567 And really, pedagogically, for the students in the audience or the puppets 1083 00:45:15,567 --> 00:45:16,275 in the audience-- 1084 00:45:16,275 --> 00:45:16,775 [LAUGHTER] 1085 00:45:16,775 --> 00:45:21,000 --to see the students on stage as themselves 1086 00:45:21,000 --> 00:45:25,890 sort of imagining what would I do in that student's position? 1087 00:45:25,890 --> 00:45:29,460 So they're engaging a little more actively within than in just 1088 00:45:29,460 --> 00:45:33,670 listening to someone like me talk about these kinds of ideas. 1089 00:45:33,670 --> 00:45:37,320 So debugging, we quickly transition to now our week 2, 1090 00:45:37,320 --> 00:45:40,800 and we tell students about print f and print later in Python. 1091 00:45:40,800 --> 00:45:46,170 We introduce them to debug50, which is CS50 specific, but all it does 1092 00:45:46,170 --> 00:45:49,920 is automatically open the built-in Visible Studio Code debugger. 1093 00:45:49,920 --> 00:45:53,730 So that too is not CS50 specific, but we make it a little easier to use. 1094 00:45:53,730 --> 00:45:57,165 And then of course, we introduce them to, in our case, 1095 00:45:57,165 --> 00:46:02,595 a seven-foot rubber duck standing on stage, an inflatable duck in this case. 1096 00:46:02,595 --> 00:46:04,470 These are sometimes-- well, actually, they've 1097 00:46:04,470 --> 00:46:06,600 gotten very hard to find at that scale. 1098 00:46:06,600 --> 00:46:10,590 But we also have, of course, these tinier little ducks that we actually 1099 00:46:10,590 --> 00:46:11,700 give out to students. 1100 00:46:11,700 --> 00:46:12,870 And they don't even have to be that big. 1101 00:46:12,870 --> 00:46:15,390 You can find online or you can make ones [? own ?] out of paper 1102 00:46:15,390 --> 00:46:16,682 or the like, tiny little ducks. 1103 00:46:16,682 --> 00:46:20,550 The goal is to give students recall some inanimate objects, something cute, 1104 00:46:20,550 --> 00:46:22,780 something memorable just to put on their shelf 1105 00:46:22,780 --> 00:46:25,200 so when they don't have a friend or roommate or teacher 1106 00:46:25,200 --> 00:46:28,990 available to answer questions, they can just start talking through their ideas. 1107 00:46:28,990 --> 00:46:32,550 And there's a reason that we do this to steer into this. 1108 00:46:32,550 --> 00:46:36,330 And this is kind of ridiculous that we have this seven-foot duck among all 1109 00:46:36,330 --> 00:46:37,560 our teaching supplies. 1110 00:46:37,560 --> 00:46:39,750 But the goal is to just normalize this, not just 1111 00:46:39,750 --> 00:46:43,260 to tell students, hey, go find something inanimate to talk to. 1112 00:46:43,260 --> 00:46:46,110 But to say, hey, if I can stand there for three hours in front 1113 00:46:46,110 --> 00:46:49,470 of this goofy duck, you can certainly try it as a debugging technique. 1114 00:46:49,470 --> 00:46:52,560 And some students do take that to heart and indeed attest 1115 00:46:52,560 --> 00:46:55,140 that this little guy proves helpful for them 1116 00:46:55,140 --> 00:46:59,040 sometimes because they just hear the illogic in something they're saying, 1117 00:46:59,040 --> 00:47:01,920 and the proverbial light bulb goes on. 1118 00:47:01,920 --> 00:47:03,550 How about now arrays? 1119 00:47:03,550 --> 00:47:07,380 So arrays are one of the first data structures that we introduce students 1120 00:47:07,380 --> 00:47:09,970 to, specifically in C in our case. 1121 00:47:09,970 --> 00:47:12,782 And we introduced them initially in the abstract like this. 1122 00:47:12,782 --> 00:47:14,490 And you might recall too that [INAUDIBLE] 1123 00:47:14,490 --> 00:47:16,170 even more of the computer's memory. 1124 00:47:16,170 --> 00:47:19,860 But we try to focus on just a few bytes at a time left to right. 1125 00:47:19,860 --> 00:47:24,060 And from this though, we try to connect it to something metaphorical, 1126 00:47:24,060 --> 00:47:25,800 like closed doors. 1127 00:47:25,800 --> 00:47:27,928 Like in the US, it's very common to have hallways 1128 00:47:27,928 --> 00:47:30,220 filled with lockers, where the kids can put their books 1129 00:47:30,220 --> 00:47:31,840 and their backpacks and the like. 1130 00:47:31,840 --> 00:47:33,840 And so we try to give them that mental model 1131 00:47:33,840 --> 00:47:37,980 to latch onto like they used to have maybe in middle school or high school. 1132 00:47:37,980 --> 00:47:40,920 And now some years, most recently this year, 1133 00:47:40,920 --> 00:47:45,617 we were fortunate to find, let's see, seven actual lockers. 1134 00:47:45,617 --> 00:47:47,700 These aren't even the big ones, though they're not 1135 00:47:47,700 --> 00:47:50,510 fun to move across campus, seven big lockers. 1136 00:47:50,510 --> 00:47:53,440 But the point is that the door is closed. 1137 00:47:53,440 --> 00:47:57,000 You can't see all of the numbers at once with this bird's-eye view. 1138 00:47:57,000 --> 00:48:00,220 You have to deliberately index into it one at a time. 1139 00:48:00,220 --> 00:48:02,230 And this too, of course, involves not just me 1140 00:48:02,230 --> 00:48:04,890 but a student potentially coming on up to act this out, 1141 00:48:04,890 --> 00:48:07,140 lending itself to that memorable moment. 1142 00:48:07,140 --> 00:48:10,890 But this is the perfect example, too, of things where it doesn't 1143 00:48:10,890 --> 00:48:13,350 need to be as high budget as this. 1144 00:48:13,350 --> 00:48:15,600 The fact that I brought paper today with those numbers 1145 00:48:15,600 --> 00:48:18,262 is exactly what we used to do back in the day. 1146 00:48:18,262 --> 00:48:20,220 We might just have the students turn it around. 1147 00:48:20,220 --> 00:48:22,090 When it's closed, they turn it this way. 1148 00:48:22,090 --> 00:48:24,510 So even though we're fortunate in Cambridge sometimes 1149 00:48:24,510 --> 00:48:28,710 to have seven-feet ducks and seven of these red lockers, 1150 00:48:28,710 --> 00:48:33,570 paper and pencil and tape is all we used in my first several years of teaching 1151 00:48:33,570 --> 00:48:36,870 CS50 because that's what I had in home or we had there on campus. 1152 00:48:36,870 --> 00:48:41,100 So all of these examples are meant to be quite accessible. 1153 00:48:41,100 --> 00:48:44,770 Now, they didn't know we were going to do that demo at first. 1154 00:48:44,770 --> 00:48:47,550 So here's a discussion of bubble sorted selection sort. 1155 00:48:47,550 --> 00:48:50,730 Here, of course, we have those same plastic numbers that we used back home, 1156 00:48:50,730 --> 00:48:52,950 but paper certainly suffices for this too. 1157 00:48:52,950 --> 00:48:56,970 But this is an opportunity, again, to get the audience viewing themselves 1158 00:48:56,970 --> 00:49:00,750 as maybe thinking, my god, thank god I'm not up there on stage doing this. 1159 00:49:00,750 --> 00:49:01,770 [LAUGHTER] 1160 00:49:01,770 --> 00:49:04,350 But they think to themselves, how would they do that? 1161 00:49:04,350 --> 00:49:06,840 Or just like you all were wonderfully yelling 1162 00:49:06,840 --> 00:49:10,620 like a game show up here, just rooting for the participants 1163 00:49:10,620 --> 00:49:12,780 to actually sort themselves properly. 1164 00:49:12,780 --> 00:49:15,450 That is probably a memory that will not leave you, 1165 00:49:15,450 --> 00:49:17,550 will not leave them for some time. 1166 00:49:17,550 --> 00:49:20,820 And I daresay, it's a lot more fun to have that memory about something 1167 00:49:20,820 --> 00:49:23,760 as arcane as bubble sort or selection sort. 1168 00:49:23,760 --> 00:49:26,040 These are not topics that you go home and tell 1169 00:49:26,040 --> 00:49:27,750 mom and dad about all that commonly. 1170 00:49:27,750 --> 00:49:30,270 But you might tell mom and dad and your friends 1171 00:49:30,270 --> 00:49:32,490 about what you did in your CS class today 1172 00:49:32,490 --> 00:49:35,910 when this sort of hilarity but educational presentation 1173 00:49:35,910 --> 00:49:37,860 came to life in this way. 1174 00:49:37,860 --> 00:49:41,940 Now, merge sort, recall, was harder than those two algorithms too. 1175 00:49:41,940 --> 00:49:44,940 And it's especially harder for students to wrap their mind 1176 00:49:44,940 --> 00:49:45,930 around what's going on. 1177 00:49:45,930 --> 00:49:47,700 And we often try different techniques. 1178 00:49:47,700 --> 00:49:49,410 So while I talk about it, for instance. 1179 00:49:49,410 --> 00:49:50,790 And I might show the pseudocode. 1180 00:49:50,790 --> 00:49:54,270 I might then pull up one of those web-based animations with the graphics 1181 00:49:54,270 --> 00:49:56,320 or the YouTube video that's showing it. 1182 00:49:56,320 --> 00:49:59,530 That's deliberate too because some students are very visual learners. 1183 00:49:59,530 --> 00:50:00,480 Some are very audible. 1184 00:50:00,480 --> 00:50:02,410 Some are very intellectual about it. 1185 00:50:02,410 --> 00:50:06,000 And so by just trying 1, 2, 3 different approaches, hopefully, 1186 00:50:06,000 --> 00:50:08,190 we're getting most of the students on board. 1187 00:50:08,190 --> 00:50:11,970 With this example here, this is just a metal shelf we put together. 1188 00:50:11,970 --> 00:50:15,120 This allows us to convey very visually the merge sort 1189 00:50:15,120 --> 00:50:18,810 that the key to its speed is you have more space. 1190 00:50:18,810 --> 00:50:22,770 And bubble sort and selection sort just use in-place swapping here. 1191 00:50:22,770 --> 00:50:25,200 We only need as many bytes if we had people. 1192 00:50:25,200 --> 00:50:27,810 But merge sort, you need at least twice as much space. 1193 00:50:27,810 --> 00:50:31,230 Now, just for convenience, I actually use four times as much space 1194 00:50:31,230 --> 00:50:31,920 in this demo. 1195 00:50:31,920 --> 00:50:36,000 But I could go down, up, down, up as I do those merging. 1196 00:50:36,000 --> 00:50:38,520 So this too, having a couple of shelves is certainly 1197 00:50:38,520 --> 00:50:41,460 something that should be discoverable most anywhere. 1198 00:50:41,460 --> 00:50:44,400 We talk about issues of scope, for instance. 1199 00:50:44,400 --> 00:50:47,730 Recall that the issue of scope means where can you use the variable? 1200 00:50:47,730 --> 00:50:50,100 And the short answer, at least in C is, if you 1201 00:50:50,100 --> 00:50:52,480 declare a variable inside of curly braces, 1202 00:50:52,480 --> 00:50:55,080 you can only use it inside of those curly braces. 1203 00:50:55,080 --> 00:50:57,510 You can't use it in some other function or file. 1204 00:50:57,510 --> 00:51:00,630 So we talk about scope before a lot with students 1205 00:51:00,630 --> 00:51:02,460 because of our discussion of memory. 1206 00:51:02,460 --> 00:51:05,940 But at that point, as well as for our solving algorithms, 1207 00:51:05,940 --> 00:51:07,500 we need to be able to-- 1208 00:51:07,500 --> 00:51:10,790 for our sorting algorithms, we need to be able to swap values. 1209 00:51:10,790 --> 00:51:13,950 So you might recall that we really focus on swapping things. 1210 00:51:13,950 --> 00:51:18,117 And this is a demo I've always liked where we actually use glasses of water. 1211 00:51:18,117 --> 00:51:19,200 We get some food coloring. 1212 00:51:19,200 --> 00:51:22,210 Just choose two different colors that ideally are visible by students, 1213 00:51:22,210 --> 00:51:23,420 especially with color blindness. 1214 00:51:23,420 --> 00:51:25,020 So you want to choose those carefully. 1215 00:51:25,020 --> 00:51:27,395 And then you can have fun with this, as you might recall, 1216 00:51:27,395 --> 00:51:29,770 like don't give the student three glasses at first. 1217 00:51:29,770 --> 00:51:30,480 Give them two. 1218 00:51:30,480 --> 00:51:31,500 See what happens. 1219 00:51:31,500 --> 00:51:32,520 One year, it was funny. 1220 00:51:32,520 --> 00:51:35,100 When I did this, the student just got a little creative. 1221 00:51:35,100 --> 00:51:38,160 And she just went like this and moved them slopping them. 1222 00:51:38,160 --> 00:51:39,450 It's not really what I meant. 1223 00:51:39,450 --> 00:51:42,490 We wanted them to, of course, pour it left and right. 1224 00:51:42,490 --> 00:51:43,990 But this is a fun example too. 1225 00:51:43,990 --> 00:51:48,280 In case your mind is racing, I also thought I'd be really clever one year 1226 00:51:48,280 --> 00:51:51,130 because it turns out-- we don't teach this now in CS50-- 1227 00:51:51,130 --> 00:51:53,500 using bitwise operators. 1228 00:51:53,500 --> 00:51:57,040 If some of you are familiar, there's an operation called XOR for exclusive 1229 00:51:57,040 --> 00:52:00,580 or, which allows you to operate in C on individual bits, 1230 00:52:00,580 --> 00:52:02,710 not just integers or chars or the like. 1231 00:52:02,710 --> 00:52:06,670 You can actually swap two values in C, if you're clever, 1232 00:52:06,670 --> 00:52:08,800 without needing a temporary variable. 1233 00:52:08,800 --> 00:52:11,830 You can use this other operator that we don't use currently in CS50, 1234 00:52:11,830 --> 00:52:13,480 but it's a pretty cool trick. 1235 00:52:13,480 --> 00:52:16,120 And so I thought, years ago, that I'd try to simulate this 1236 00:52:16,120 --> 00:52:17,860 by being very scientifically clever. 1237 00:52:17,860 --> 00:52:22,028 And so I used one glass of oil and one glass of water 1238 00:52:22,028 --> 00:52:24,070 because I vaguely remembered from chemistry class 1239 00:52:24,070 --> 00:52:25,780 that these two things shouldn't mix. 1240 00:52:25,780 --> 00:52:28,270 Of course, it mixes but messily. 1241 00:52:28,270 --> 00:52:29,685 We got some bubbles, as I recall. 1242 00:52:29,685 --> 00:52:32,560 So I was trying to prove-- to be very clever, pour one into the other 1243 00:52:32,560 --> 00:52:33,730 then dump the other out. 1244 00:52:33,730 --> 00:52:36,760 It didn't work, so sometimes these demonstrations backfire. 1245 00:52:36,760 --> 00:52:38,860 So another moment I would encourage you to do 1246 00:52:38,860 --> 00:52:42,620 is to test things in advance, not in front of your students. 1247 00:52:42,620 --> 00:52:47,020 But again, that too just lends itself all the more to a memorable moment. 1248 00:52:47,020 --> 00:52:48,640 Well, what about memory itself? 1249 00:52:48,640 --> 00:52:52,367 In the US, we very commonly have on long roads these kinds of mailboxes. 1250 00:52:52,367 --> 00:52:55,450 So they all follow a similar shape, and so it's very familiar to students. 1251 00:52:55,450 --> 00:53:00,140 And we use these as representative of how we might store values. 1252 00:53:00,140 --> 00:53:02,680 Now, these I did happen to go to the local hardware store. 1253 00:53:02,680 --> 00:53:04,930 But you could mimic this with a picture thereof 1254 00:53:04,930 --> 00:53:06,820 or just a cardboard box of the like. 1255 00:53:06,820 --> 00:53:11,080 And so we use this to give students just a more concrete visual 1256 00:53:11,080 --> 00:53:13,780 of what we mean when we say an address. 1257 00:53:13,780 --> 00:53:15,970 We can tell them it's like a mailbox address, 1258 00:53:15,970 --> 00:53:20,080 but there's a little something special or more memorable about showing 1259 00:53:20,080 --> 00:53:21,220 that actual thing. 1260 00:53:21,220 --> 00:53:26,410 And what I do too is you might have, at least in American football 1261 00:53:26,410 --> 00:53:28,720 games back home, as we discussed pointers, 1262 00:53:28,720 --> 00:53:31,240 these foam fingers tend to come out, maybe in soccer games 1263 00:53:31,240 --> 00:53:32,570 as well around the world. 1264 00:53:32,570 --> 00:53:34,030 You're like, you're a number one. 1265 00:53:34,030 --> 00:53:37,300 We just use it as a big pointer, not to say we're number one. 1266 00:53:37,300 --> 00:53:39,470 Rather, the value is over there. 1267 00:53:39,470 --> 00:53:42,010 So this is just again a silly visual that we're 1268 00:53:42,010 --> 00:53:44,470 very careful to choose our school colors and the like, 1269 00:53:44,470 --> 00:53:47,290 whereby this pointer, p, might be pointing 1270 00:53:47,290 --> 00:53:50,990 at some other value, some number, like n over there. 1271 00:53:50,990 --> 00:53:55,630 So just acting things out, taking a few moments to do exactly that same thing. 1272 00:53:55,630 --> 00:53:59,260 But at the same time-- and this might have been a discomfort for some 1273 00:53:59,260 --> 00:54:00,070 of you-- 1274 00:54:00,070 --> 00:54:02,832 would you get very low levels sometimes in CS50. 1275 00:54:02,832 --> 00:54:03,790 And this is deliberate. 1276 00:54:03,790 --> 00:54:07,600 In fact, one of the reasons why we don't use just Python in the class 1277 00:54:07,600 --> 00:54:11,140 is because I think it's a really missed opportunity for students to understand 1278 00:54:11,140 --> 00:54:14,990 at a lower level what's going on inside of a computer. 1279 00:54:14,990 --> 00:54:18,520 And if you only learn Python and that's the only language you ever 1280 00:54:18,520 --> 00:54:20,628 learn and then use, you can use a list. 1281 00:54:20,628 --> 00:54:21,670 You can use a dictionary. 1282 00:54:21,670 --> 00:54:24,040 But do you ever really understand what it is? 1283 00:54:24,040 --> 00:54:25,780 Maybe conceptually at a high level. 1284 00:54:25,780 --> 00:54:30,100 But there's something about, I think, pedagogically just showing students 1285 00:54:30,100 --> 00:54:31,660 what's going on underneath the hood. 1286 00:54:31,660 --> 00:54:34,870 It [? don't ?] abstract everything away, that they'll get it. 1287 00:54:34,870 --> 00:54:38,470 Even though it might be very technical-- and pointers are a hard topic-- 1288 00:54:38,470 --> 00:54:40,510 the result is like, wow. 1289 00:54:40,510 --> 00:54:44,170 That light bulb does go off when in one line of code in Python 1290 00:54:44,170 --> 00:54:49,390 you can re-implement the entirety of your speller problem set code in C. 1291 00:54:49,390 --> 00:54:51,790 And so that too is very deliberate to not 1292 00:54:51,790 --> 00:54:55,250 be fearful of just going into the weeds sometimes with students. 1293 00:54:55,250 --> 00:54:58,810 So for instance, here is the very technical, pictoral way 1294 00:54:58,810 --> 00:55:03,010 of describing a pointer p, storing the address of some value n, 1295 00:55:03,010 --> 00:55:04,930 storing the specific number 50. 1296 00:55:04,930 --> 00:55:07,240 But again, we can abstract that away with a number. 1297 00:55:07,240 --> 00:55:10,330 And then at that point, is when the foam finger comes out in class, 1298 00:55:10,330 --> 00:55:14,530 and I start pointing at it between those two mailboxes. 1299 00:55:14,530 --> 00:55:17,560 Later on in the class, too, you might recall this demonstration, 1300 00:55:17,560 --> 00:55:20,680 and there's so many good little videos like this on YouTube 1301 00:55:20,680 --> 00:55:22,275 and other universities websites. 1302 00:55:22,275 --> 00:55:24,400 Look for these things, and hang on to these things. 1303 00:55:24,400 --> 00:55:26,770 Share these kinds of things with each other. 1304 00:55:26,770 --> 00:55:30,490 This, of course, was Vicki, as I recall, made by a friend of ours 1305 00:55:30,490 --> 00:55:33,910 at Stanford University, like in his basement with a little cardboard box 1306 00:55:33,910 --> 00:55:39,670 and some clay that acts out of what can go wrong when you actually use pointers 1307 00:55:39,670 --> 00:55:40,870 incorrectly. 1308 00:55:40,870 --> 00:55:45,280 And then toward the end of CS50, we introduce more sophisticated topics, 1309 00:55:45,280 --> 00:55:47,060 data structures, like hashing. 1310 00:55:47,060 --> 00:55:50,290 So recall that hashing means you take as input some value, 1311 00:55:50,290 --> 00:55:54,910 maybe a person's name, and you decide what bucket it goes into. 1312 00:55:54,910 --> 00:55:57,640 Like this is the A bucket, the B bucket, the Z bucket. 1313 00:55:57,640 --> 00:56:00,400 Or what we choose is, I went online and I 1314 00:56:00,400 --> 00:56:03,220 looked for playing cards like that you might 1315 00:56:03,220 --> 00:56:06,280 gamble with that I thought it would be more fun and more visual to search 1316 00:56:06,280 --> 00:56:08,290 for jumbo playing cards. 1317 00:56:08,290 --> 00:56:11,170 And so we indeed have these 18-inch cards 1318 00:56:11,170 --> 00:56:13,322 that I can use very visibly in the class. 1319 00:56:13,322 --> 00:56:15,280 We literally went to the hardware store and got 1320 00:56:15,280 --> 00:56:17,170 some buckets that looked like this. 1321 00:56:17,170 --> 00:56:21,875 And we introduced students to hashing by literally bucketizing the values. 1322 00:56:21,875 --> 00:56:24,250 And that's a technical term a lot of engineers would use, 1323 00:56:24,250 --> 00:56:26,250 even though it's a little abstract for students. 1324 00:56:26,250 --> 00:56:28,960 But if you use actual buckets, you decrease 1325 00:56:28,960 --> 00:56:34,470 that gap between the idea and the actual incarnation thereof. 1326 00:56:34,470 --> 00:56:37,410 Lastly, among topics, maybe race conditions. 1327 00:56:37,410 --> 00:56:40,170 Now, this is where things really get sophisticated 1328 00:56:40,170 --> 00:56:41,800 in an introductory course. 1329 00:56:41,800 --> 00:56:46,440 And as we tell students, CS50 is really a combination of what in the US 1330 00:56:46,440 --> 00:56:51,840 and in many countries is called CS1 and CS2 combined because we introduce 1331 00:56:51,840 --> 00:56:53,880 students to software-based programming. 1332 00:56:53,880 --> 00:56:56,400 But we also touch on data structures and algorithms 1333 00:56:56,400 --> 00:56:59,730 quite a bit that many schools separate into two separate courses. 1334 00:56:59,730 --> 00:57:01,710 So by the end of the class, we're nonetheless 1335 00:57:01,710 --> 00:57:04,890 talking about very sophisticated topics like this 1336 00:57:04,890 --> 00:57:08,470 that often come up in databases, be it SQL-like or otherwise. 1337 00:57:08,470 --> 00:57:13,200 So here is the tiniest refrigerator we've yet found. 1338 00:57:13,200 --> 00:57:15,900 We were fortunate a couple of years ago during COVID, 1339 00:57:15,900 --> 00:57:19,650 we were collaborating with some friends at the theater on campus 1340 00:57:19,650 --> 00:57:22,350 where they had a whole warehouse of actual props 1341 00:57:22,350 --> 00:57:25,560 that were used in plays and musicals that had been used on campus. 1342 00:57:25,560 --> 00:57:29,220 So in some years we've used an actual refrigerator that was as tall as me. 1343 00:57:29,220 --> 00:57:31,260 It turns out it's a lot easier to carry around 1344 00:57:31,260 --> 00:57:36,070 a foot-tall, plastic refrigerator here so as to paint 1345 00:57:36,070 --> 00:57:37,320 the same picture for students. 1346 00:57:37,320 --> 00:57:41,970 This, recall, was the scenario in which-- what had I run out of 1347 00:57:41,970 --> 00:57:43,354 if you recall? 1348 00:57:43,354 --> 00:57:44,230 AUDIENCE: Database. 1349 00:57:44,230 --> 00:57:47,410 DAVID MALAN: Oh, database, yes, but what was I pretending to run out of 1350 00:57:47,410 --> 00:57:49,523 and I needed to go to the store to get more of. 1351 00:57:49,523 --> 00:57:49,986 AUDIENCE: Milk. 1352 00:57:49,986 --> 00:57:50,986 DAVID MALAN: Milk, yeah. 1353 00:57:50,986 --> 00:57:53,180 So I picked a beverage and said I was out of it. 1354 00:57:53,180 --> 00:57:55,470 I had to go to the store to get it. 1355 00:57:55,470 --> 00:57:59,540 But if I don't leave a note or if I don't lock the database, 1356 00:57:59,540 --> 00:58:03,200 my roommate, for instance, would come home, open the variable, if you will, 1357 00:58:03,200 --> 00:58:07,550 and inspect its value, make a decision based on the exact same value as I did. 1358 00:58:07,550 --> 00:58:11,243 And that's when a race condition arises because one of us 1359 00:58:11,243 --> 00:58:12,410 is going to come back first. 1360 00:58:12,410 --> 00:58:15,160 The other is going to then arrive, and then we have too much milk. 1361 00:58:15,160 --> 00:58:17,840 This is exactly what happens in the world of databases. 1362 00:58:17,840 --> 00:58:20,180 And in fact, I actually learned this topic myself. 1363 00:58:20,180 --> 00:58:22,940 And a former professor of mine gave us this example 1364 00:58:22,940 --> 00:58:26,360 of a refrigerator in an operating systems class that I took 20 1365 00:58:26,360 --> 00:58:27,360 some odd years ago. 1366 00:58:27,360 --> 00:58:29,780 And so here's an opportunity too, I think, 1367 00:58:29,780 --> 00:58:33,500 to not be scared of or disinclined to even introduce students 1368 00:58:33,500 --> 00:58:34,940 to advanced topics. 1369 00:58:34,940 --> 00:58:38,990 I think especially if you can base it in something metaphorical, something 1370 00:58:38,990 --> 00:58:42,630 physical, something theatrical, if you will. 1371 00:58:42,630 --> 00:58:47,795 So that's a whirlwind tour of just some select topics as to the [? line. ?] 1372 00:58:47,795 --> 00:58:48,556 AUDIENCE: No. 1373 00:58:48,556 --> 00:58:50,560 [INTERPOSING VOICES] 1374 00:58:50,560 --> 00:58:51,310 DAVID MALAN: What? 1375 00:58:51,310 --> 00:58:51,810 No? 1376 00:58:51,810 --> 00:58:52,353 No way? 1377 00:58:52,353 --> 00:58:54,844 [LAUGHTER] 1378 00:58:54,844 --> 00:58:58,498 It is so much better being a teacher than a student [INAUDIBLE].. 1379 00:58:58,498 --> 00:59:00,440 [LAUGHTER] 1380 00:59:00,440 --> 00:59:04,055 But if there's any questions on those memorable moments or the why, 1381 00:59:04,055 --> 00:59:07,940 I am presenting topics like those. 1382 00:59:07,940 --> 00:59:10,790 These are meant to just be examples to get you thinking. 1383 00:59:10,790 --> 00:59:13,620 Certainly, you've spent the past six months on all of the topics. 1384 00:59:13,620 --> 00:59:14,337 Yeah. 1385 00:59:14,337 --> 00:59:20,798 AUDIENCE: So last year my class [INAUDIBLE] 1386 00:59:20,798 --> 00:59:25,289 they thought that it would be easier [INAUDIBLE].. 1387 00:59:25,289 --> 00:59:25,956 DAVID MALAN: OK. 1388 00:59:25,956 --> 00:59:28,570 AUDIENCE: [INAUDIBLE]. 1389 00:59:28,570 --> 00:59:33,360 Right now, I'd also like [INAUDIBLE] see the [INAUDIBLE].. 1390 00:59:33,360 --> 00:59:34,912 What do you think [INAUDIBLE]? 1391 00:59:34,912 --> 00:59:37,080 1392 00:59:37,080 --> 00:59:38,580 DAVID MALAN: That's a good question. 1393 00:59:38,580 --> 00:59:41,280 For those who couldn't hear, you've started with save. 1394 00:59:41,280 --> 00:59:44,673 You then switched to Kotlin so as to introduce object-oriented programming. 1395 00:59:44,673 --> 00:59:45,840 Then you switched to Python. 1396 00:59:45,840 --> 00:59:48,570 And so the question is, should we maybe go back to C? 1397 00:59:48,570 --> 00:59:50,010 Should we continue using Kotlin? 1398 00:59:50,010 --> 00:59:51,360 I think it depends on the goals. 1399 00:59:51,360 --> 00:59:53,880 Kotlin is particularly conducive to mobile apps 1400 00:59:53,880 --> 00:59:56,218 nowadays, at least that's what Google, for instance, 1401 00:59:56,218 --> 00:59:57,510 has been pushing in that space. 1402 00:59:57,510 --> 01:00:00,870 And everything is in object, really, in that space now, unlike Java. 1403 01:00:00,870 --> 01:00:04,290 So I think that's helpful if you want your students focusing 1404 01:00:04,290 --> 01:00:05,655 on mobile in particular. 1405 01:00:05,655 --> 01:00:10,023 AUDIENCE: Yeah, because for the second year they have to [INAUDIBLE].. 1406 01:00:10,023 --> 01:00:10,690 DAVID MALAN: OK. 1407 01:00:10,690 --> 01:00:12,175 AUDIENCE: [INAUDIBLE]. 1408 01:00:12,175 --> 01:00:15,150 1409 01:00:15,150 --> 01:00:16,950 DAVID MALAN: And I think this is where I'll 1410 01:00:16,950 --> 01:00:19,825 be careful too because I think in the world of programming languages, 1411 01:00:19,825 --> 01:00:22,650 it's very much a religious debate as to which language is 1412 01:00:22,650 --> 01:00:23,940 best, which you should use. 1413 01:00:23,940 --> 01:00:27,510 But I would say that, if you introduce students first to C, 1414 01:00:27,510 --> 01:00:30,870 a very common next language would be something like C++, 1415 01:00:30,870 --> 01:00:35,160 which isn't technically a superset but does add additional features on top 1416 01:00:35,160 --> 01:00:35,700 of C. 1417 01:00:35,700 --> 01:00:40,770 So for instance, you could spend maybe less time, maybe in this first class, 1418 01:00:40,770 --> 01:00:44,213 introducing students to C. And then maybe in the last week, the last two 1419 01:00:44,213 --> 01:00:46,880 weeks, last four weeks, whatever seems appropriate curricularly, 1420 01:00:46,880 --> 01:00:50,610 you could say that, well, structs in C only 1421 01:00:50,610 --> 01:00:54,010 get us so far because there's no functions or methods built into them. 1422 01:00:54,010 --> 01:00:57,480 So it turns out you can use this other language, which is almost just like C 1423 01:00:57,480 --> 01:00:58,920 but has classes. 1424 01:00:58,920 --> 01:01:00,240 And you can make these objects. 1425 01:01:00,240 --> 01:01:02,310 So you can start to bridge one or the other 1426 01:01:02,310 --> 01:01:05,340 without completely changing syntax from one to the other. 1427 01:01:05,340 --> 01:01:08,310 Or instead, if you liked your experience with Python 1428 01:01:08,310 --> 01:01:10,710 and maybe you still start with C, you could focus more 1429 01:01:10,710 --> 01:01:12,897 on the object-oriented aspects of Python. 1430 01:01:12,897 --> 01:01:14,730 And so for instance, some of you might know. 1431 01:01:14,730 --> 01:01:19,020 We actually have a class in CS50 called CS50P, CS50's introduction 1432 01:01:19,020 --> 01:01:20,220 to programming and Python. 1433 01:01:20,220 --> 01:01:24,930 And we spend like an entire module on the object-oriented aspects of OOP 1434 01:01:24,930 --> 01:01:25,740 in that class. 1435 01:01:25,740 --> 01:01:27,810 We don't touch it in CS50. 1436 01:01:27,810 --> 01:01:31,320 So I think I would decide based on what you want-- where you 1437 01:01:31,320 --> 01:01:32,820 want your students writing the code. 1438 01:01:32,820 --> 01:01:35,980 Like if it is a mobile app, then maybe just focusing really on-- 1439 01:01:35,980 --> 01:01:36,480 Kotlin. 1440 01:01:36,480 --> 01:01:37,380 Make sense? 1441 01:01:37,380 --> 01:01:42,496 AUDIENCE: Yeah, [INAUDIBLE] and [INAUDIBLE].. 1442 01:01:42,496 --> 01:01:43,163 DAVID MALAN: OK. 1443 01:01:43,163 --> 01:01:45,628 AUDIENCE: So [INAUDIBLE] then [INAUDIBLE].. 1444 01:01:45,628 --> 01:01:49,572 They have two [? markers ?] [INAUDIBLE]. 1445 01:01:49,572 --> 01:01:52,540 So [INAUDIBLE]. 1446 01:01:52,540 --> 01:01:53,930 DAVID MALAN: Gotcha. 1447 01:01:53,930 --> 01:01:55,430 AUDIENCE: [INAUDIBLE]. 1448 01:01:55,430 --> 01:01:59,820 Right now, [INAUDIBLE] because-- 1449 01:01:59,820 --> 01:02:02,070 DAVID MALAN: I think, if there's no one right answer-- 1450 01:02:02,070 --> 01:02:04,940 and I would encourage you as a group to, like during today's breaks, tomorrow's 1451 01:02:04,940 --> 01:02:07,648 lunch, and [INAUDIBLE],, have that chat and solicit more opinions 1452 01:02:07,648 --> 01:02:08,640 than just mine. 1453 01:02:08,640 --> 01:02:12,200 But those are the kinds of thoughts that I would bring to the conversation. 1454 01:02:12,200 --> 01:02:13,050 Yeah. 1455 01:02:13,050 --> 01:02:16,956 AUDIENCE: What is the reason behind [INAUDIBLE]?? 1456 01:02:16,956 --> 01:02:22,383 1457 01:02:22,383 --> 01:02:24,258 DAVID MALAN: Well, which aspect [INAUDIBLE]?? 1458 01:02:24,258 --> 01:02:26,090 AUDIENCE: [INAUDIBLE]. 1459 01:02:26,090 --> 01:02:28,460 DAVID MALAN: Oh, the Harvard preps video. 1460 01:02:28,460 --> 01:02:32,660 OK, so you might recall in week 8 we showed the prank 1461 01:02:32,660 --> 01:02:35,360 that Yale did on Harvard by having us hold up 1462 01:02:35,360 --> 01:02:37,580 an offensive sign to all of the guests. 1463 01:02:37,580 --> 01:02:45,140 So the motivation for it really was, one, safetyschool.org recall 1464 01:02:45,140 --> 01:02:47,070 was one of the domains that we played with. 1465 01:02:47,070 --> 01:02:50,810 And I ran the command that showed us that safetyschool.org actually 1466 01:02:50,810 --> 01:02:55,010 issues an HTTP redirect to Yale.edu. 1467 01:02:55,010 --> 01:02:57,170 And that's kind of funny, I think. 1468 01:02:57,170 --> 01:02:59,660 But the catch is because we in CS50 back home 1469 01:02:59,660 --> 01:03:02,330 also had Yale students at Yale University, 1470 01:03:02,330 --> 01:03:04,580 not quite fair if we only pick on one. 1471 01:03:04,580 --> 01:03:07,520 So I looked up a similar prank, and that one 1472 01:03:07,520 --> 01:03:10,320 was maybe the best prank put on Harvard before. 1473 01:03:10,320 --> 01:03:11,842 So we introduced that as well. 1474 01:03:11,842 --> 01:03:13,550 That is certainly something you can omit, 1475 01:03:13,550 --> 01:03:16,092 especially if your students don't care about Harvard or Yale. 1476 01:03:16,092 --> 01:03:19,950 But the motivation was to make it an even playing field and picking on both. 1477 01:03:19,950 --> 01:03:20,450 Yeah. 1478 01:03:20,450 --> 01:03:26,724 AUDIENCE: Yeah, OK, [INAUDIBLE] amazingly both [INAUDIBLE] CS50 1479 01:03:26,724 --> 01:03:38,660 is [INAUDIBLE], yeah? 1480 01:03:38,660 --> 01:03:41,845 But what is the story behind the [INAUDIBLE] [? episode ?] so I am 1481 01:03:41,845 --> 01:03:42,470 so [? sorry. ?] 1482 01:03:42,470 --> 01:03:43,350 DAVID MALAN: OK. 1483 01:03:43,350 --> 01:03:48,520 AUDIENCE: I thought of the [INAUDIBLE],, and [INAUDIBLE] or [INAUDIBLE].. 1484 01:03:48,520 --> 01:03:51,970 And [INAUDIBLE]. 1485 01:03:51,970 --> 01:03:59,060 And I think, I [INAUDIBLE] it starts [? out ?] of there are a [INAUDIBLE].. 1486 01:03:59,060 --> 01:04:05,530 There are [INAUDIBLE]. 1487 01:04:05,530 --> 01:04:06,685 There are [INAUDIBLE]. 1488 01:04:06,685 --> 01:04:11,460 There are [INAUDIBLE]. 1489 01:04:11,460 --> 01:04:17,510 How is CS50 [INAUDIBLE] make a good [INAUDIBLE]?? 1490 01:04:17,510 --> 01:04:24,070 And it's [INAUDIBLE] won't be the problem. 1491 01:04:24,070 --> 01:04:25,100 DAVID MALAN: Sure. 1492 01:04:25,100 --> 01:04:31,440 AUDIENCE: No [INAUDIBLE] never has a feature [INAUDIBLE] 1493 01:04:31,440 --> 01:04:35,300 the this problem set [INAUDIBLE]. 1494 01:04:35,300 --> 01:04:38,480 DAVID MALAN: Oh, yes, of course, you can and should use-- 1495 01:04:38,480 --> 01:04:42,542 AUDIENCE: Can we adopt or take the problem set and [INAUDIBLE] 1496 01:04:42,542 --> 01:04:45,780 problem set to [INAUDIBLE]? 1497 01:04:45,780 --> 01:04:48,720 DAVID MALAN: Thank you, and yes, the answer to all questions like that 1498 01:04:48,720 --> 01:04:49,590 would be yes. 1499 01:04:49,590 --> 01:04:52,530 The material is yours to use as you see fit. 1500 01:04:52,530 --> 01:04:54,270 [APPLAUSE] 1501 01:04:54,270 --> 01:04:56,940 And what we'll discuss actually tomorrow in more detail 1502 01:04:56,940 --> 01:04:59,520 is just how many problems are available, some of which 1503 01:04:59,520 --> 01:05:01,420 are used for CS50 for teachers. 1504 01:05:01,420 --> 01:05:04,800 There are yet other labs, as we call them, or practice problems. 1505 01:05:04,800 --> 01:05:09,270 And you're free, certainly, to use some, all of those, none of those, 1506 01:05:09,270 --> 01:05:11,222 and really adapt them to your own students. 1507 01:05:11,222 --> 01:05:12,930 And in fact, Margaret, tomorrow will talk 1508 01:05:12,930 --> 01:05:15,090 about her own experience with her students 1509 01:05:15,090 --> 01:05:18,780 changing the schedule of the class, picking and choosing some 1510 01:05:18,780 --> 01:05:20,530 of the problems more so than others. 1511 01:05:20,530 --> 01:05:21,660 So more of that to come. 1512 01:05:21,660 --> 01:05:23,820 And in fact, it's a perfect segue way to what 1513 01:05:23,820 --> 01:05:26,610 I thought I'd propose is just some of the motivation behind some 1514 01:05:26,610 --> 01:05:28,920 of those problem sets that you kindly note. 1515 01:05:28,920 --> 01:05:31,320 So the very first you might remember is really 1516 01:05:31,320 --> 01:05:33,820 one of my favorite games from my own childhood, 1517 01:05:33,820 --> 01:05:36,930 even though I'm showing my age, and perhaps now yours, 1518 01:05:36,930 --> 01:05:40,170 is the fact that this is a very two-dimensional game versus what 1519 01:05:40,170 --> 01:05:41,250 kids have nowadays. 1520 01:05:41,250 --> 01:05:43,200 But Mario is with us in many forms. 1521 01:05:43,200 --> 01:05:45,750 But this is an example of a problem where 1522 01:05:45,750 --> 01:05:50,190 you have to make that half pyramid using like hashtags and ASCII marks, 1523 01:05:50,190 --> 01:05:51,100 if you will. 1524 01:05:51,100 --> 01:05:55,290 And this is an example of a problem that could very easily be very boring. 1525 01:05:55,290 --> 01:05:59,190 If you just ask students to print out a pyramid with these hashes 1526 01:05:59,190 --> 01:06:00,210 that looks like this. 1527 01:06:00,210 --> 01:06:03,240 OK, but there's something more, I think, and something 1528 01:06:03,240 --> 01:06:06,390 special about just giving them something to latch onto, 1529 01:06:06,390 --> 01:06:10,170 that it's not as simple and boring as a black and white pyramid made out 1530 01:06:10,170 --> 01:06:10,860 of hash tags. 1531 01:06:10,860 --> 01:06:14,130 But it's like the beginnings of this game that they might know 1532 01:06:14,130 --> 01:06:16,900 or already love or something familiar to them. 1533 01:06:16,900 --> 01:06:20,220 And so almost always, when Carter and I write in courses problem sets, 1534 01:06:20,220 --> 01:06:22,442 we try to find that hook. 1535 01:06:22,442 --> 01:06:24,150 It's not enough to come up with the code. 1536 01:06:24,150 --> 01:06:25,358 It's like, what is the angle? 1537 01:06:25,358 --> 01:06:28,470 What is the image we're going to put at the very top of the problem set? 1538 01:06:28,470 --> 01:06:31,380 What's the silly YouTube video that's just there for fun 1539 01:06:31,380 --> 01:06:34,770 to click on, to motivate you with some music or some TV 1540 01:06:34,770 --> 01:06:38,870 or some movie clip or the like, just something to make it very real and fun, 1541 01:06:38,870 --> 01:06:41,760 even though it's like fun for Mary Poppins. 1542 01:06:41,760 --> 01:06:44,460 A spoonful of sugar makes the medicine go down. 1543 01:06:44,460 --> 01:06:47,850 Actually, incorporating just a little bit of fun for a problem 1544 01:06:47,850 --> 01:06:50,610 set that is still just for loops, just code that 1545 01:06:50,610 --> 01:06:53,820 does this, which in and of itself might not be nearly as engaging. 1546 01:06:53,820 --> 01:06:58,230 So Mario is sort of representative exactly that mindset. 1547 01:06:58,230 --> 01:07:00,450 We also-- and not all of you might have done 1548 01:07:00,450 --> 01:07:03,360 this-- there's the more comfortable version of this problem where 1549 01:07:03,360 --> 01:07:04,477 we take the same idea. 1550 01:07:04,477 --> 01:07:07,560 And it's still going to involve some for loops and maybe some conditionals 1551 01:07:07,560 --> 01:07:09,570 that will make it a little harder. 1552 01:07:09,570 --> 01:07:12,930 But it's the type of problem where it's just 1553 01:07:12,930 --> 01:07:15,240 kind of turning the knob a little bit. 1554 01:07:15,240 --> 01:07:18,600 It's not making it crazy difficult in that week 1 of the class. 1555 01:07:18,600 --> 01:07:21,660 But it's kind of difficult for many students 1556 01:07:21,660 --> 01:07:24,420 to figure out, OK, it's very easy to do this. 1557 01:07:24,420 --> 01:07:26,310 Probably pretty easy to do this. 1558 01:07:26,310 --> 01:07:29,430 Starts to get a little annoying to do this in the middle. 1559 01:07:29,430 --> 01:07:31,020 You have to think a little harder. 1560 01:07:31,020 --> 01:07:32,530 And that's exactly the point. 1561 01:07:32,530 --> 01:07:35,370 And so this is why we have more comfortable versions of some 1562 01:07:35,370 --> 01:07:39,450 of our problems is so that students who are very uncomfortable, 1563 01:07:39,450 --> 01:07:43,170 have no prior programming experience, we want to give them a very low floor. 1564 01:07:43,170 --> 01:07:46,500 So it doesn't take much to get into the class. 1565 01:07:46,500 --> 01:07:48,855 But for students who have been programming for a while 1566 01:07:48,855 --> 01:07:50,730 or think they've been programming for a while 1567 01:07:50,730 --> 01:07:53,250 and they're just more confident, justly or not, 1568 01:07:53,250 --> 01:07:57,150 they have sort of a higher ceiling, so they don't walk into the same room 1569 01:07:57,150 --> 01:07:58,720 and have no room to grow. 1570 01:07:58,720 --> 01:08:00,870 But the ceiling is higher for them, and that's 1571 01:08:00,870 --> 01:08:03,520 what we mean by these more comfortable problems. 1572 01:08:03,520 --> 01:08:07,410 So a low floor for less comfortable, but a high ceiling for those more 1573 01:08:07,410 --> 01:08:07,920 comfortable. 1574 01:08:07,920 --> 01:08:11,610 And so Mario captures exactly that idea at the start of the class. 1575 01:08:11,610 --> 01:08:13,320 Anyone recall? 1576 01:08:13,320 --> 01:08:14,057 Very [INAUDIBLE]. 1577 01:08:14,057 --> 01:08:15,722 [INTERPOSING VOICES] 1578 01:08:15,722 --> 01:08:17,180 DAVID MALAN: We're not [INAUDIBLE]. 1579 01:08:17,180 --> 01:08:19,037 [INTERPOSING VOICES] 1580 01:08:19,037 --> 01:08:20,393 1581 01:08:20,393 --> 01:08:23,939 --CS50, but this is an example in week 2 of the class 1582 01:08:23,939 --> 01:08:29,490 where recall we introduced arrays and the beginnings of memory and data 1583 01:08:29,490 --> 01:08:30,029 structures. 1584 01:08:30,029 --> 01:08:35,399 And it's very easy to make arrays and conditionals and loops boring. 1585 01:08:35,399 --> 01:08:38,790 And I honestly daresay from my own experience textbooks are very good. 1586 01:08:38,790 --> 01:08:41,470 Many textbooks are very good at making things boring. 1587 01:08:41,470 --> 01:08:45,130 But if you contextualize that same problem and find that hook, 1588 01:08:45,130 --> 01:08:47,880 all right, well, all we want students really to practice this week 1589 01:08:47,880 --> 01:08:52,080 is strings but treating them as arrays. 1590 01:08:52,080 --> 01:08:54,450 How could we actually make those strings interesting? 1591 01:08:54,450 --> 01:08:56,399 So it occurred to us some years ago that, 1592 01:08:56,399 --> 01:09:00,000 why don't we turn it into an example of cryptography and encryption 1593 01:09:00,000 --> 01:09:03,788 and have a narrative around it and bring the excitement to students even 1594 01:09:03,788 --> 01:09:05,580 though, at the end of the day, they're just 1595 01:09:05,580 --> 01:09:07,439 writing for loops and conditionals. 1596 01:09:07,439 --> 01:09:11,460 But hopefully, they're getting better at those building blocks at the same time. 1597 01:09:11,460 --> 01:09:15,450 Now, we transition in week 4 to imagery, and you 1598 01:09:15,450 --> 01:09:18,420 can't escape the popularity of Instagram and TikTok 1599 01:09:18,420 --> 01:09:20,460 and similar platforms around the world nowadays 1600 01:09:20,460 --> 01:09:24,000 that have filters that change the colors or do fun things 1601 01:09:24,000 --> 01:09:25,359 with labels and the like. 1602 01:09:25,359 --> 01:09:27,880 And so we use this is an opportunity, of course, 1603 01:09:27,880 --> 01:09:32,550 to introduce low-level for idle IO, input and output, 1604 01:09:32,550 --> 01:09:34,620 reading a file, changing it, and the like. 1605 01:09:34,620 --> 01:09:39,090 We deliberately choose the simplest file format we can for images, like a BMP 1606 01:09:39,090 --> 01:09:42,220 file, even though no one really uses them much nowadays. 1607 01:09:42,220 --> 01:09:46,529 But a BMP file's way simpler than a JPEG or even a ping, PNG. 1608 01:09:46,529 --> 01:09:49,990 So we use bitmap because it has a very well-defined structure 1609 01:09:49,990 --> 01:09:51,240 that we introduce students to. 1610 01:09:51,240 --> 01:09:54,970 And of course, if I advanced here, now it's in black and white. 1611 01:09:54,970 --> 01:09:57,240 Now, we've detected all of the edges. 1612 01:09:57,240 --> 01:10:00,720 And even though this too is a bunch of loops 1613 01:10:00,720 --> 01:10:03,030 but it's also a bunch of functions because this 1614 01:10:03,030 --> 01:10:07,020 is one of the first problems where we now give students distribution code. 1615 01:10:07,020 --> 01:10:08,880 And so we imagine the class, [? too, ?] is 1616 01:10:08,880 --> 01:10:12,300 this notion of scaffolding, much like you're doing repairs on a building. 1617 01:10:12,300 --> 01:10:15,170 You start to build up those metal platforms or wooden platforms 1618 01:10:15,170 --> 01:10:16,920 so that the humans can go up and up and up 1619 01:10:16,920 --> 01:10:18,900 and work on the outside of the building. 1620 01:10:18,900 --> 01:10:22,320 Scaffolding, for us, really means, at the beginning of the class, 1621 01:10:22,320 --> 01:10:24,360 we really just give students an empty file 1622 01:10:24,360 --> 01:10:27,270 because we really want them to go from nothing to something. 1623 01:10:27,270 --> 01:10:31,230 But if they have to start from scratch every week-- no pun intended-- 1624 01:10:31,230 --> 01:10:35,670 there's only so far they can go in just seven day's time or maybe 14 day's 1625 01:10:35,670 --> 01:10:36,250 time. 1626 01:10:36,250 --> 01:10:41,550 So eventually, we do introduce them to library code, like the CS50 library, 1627 01:10:41,550 --> 01:10:43,650 and thereafter, distribution code, like code 1628 01:10:43,650 --> 01:10:47,070 that we write in comment that they should read and understand. 1629 01:10:47,070 --> 01:10:49,680 But then we have them start filling in blanks, 1630 01:10:49,680 --> 01:10:52,380 helping them realize how they can start to structure 1631 01:10:52,380 --> 01:10:54,900 bigger, more sophisticated programs without spending 1632 01:10:54,900 --> 01:10:56,700 a month implementing that program. 1633 01:10:56,700 --> 01:10:59,700 If we had a month, I don't think that would be a bad approach. 1634 01:10:59,700 --> 01:11:02,100 But if time is limited, we pick and choose 1635 01:11:02,100 --> 01:11:04,420 exactly where we want our focus to be. 1636 01:11:04,420 --> 01:11:07,800 So with this image problem set, so we focus 1637 01:11:07,800 --> 01:11:10,560 on exactly that, the manipulation of files 1638 01:11:10,560 --> 01:11:12,690 but still using those same primitives. 1639 01:11:12,690 --> 01:11:15,090 This demarcates the start of what kind of file? 1640 01:11:15,090 --> 01:11:16,172 AUDIENCE: [INAUDIBLE]. 1641 01:11:16,172 --> 01:11:17,130 DAVID MALAN: Say again. 1642 01:11:17,130 --> 01:11:19,060 AUDIENCE: [INAUDIBLE]. 1643 01:11:19,060 --> 01:11:20,310 DAVID MALAN: [INAUDIBLE] that. 1644 01:11:20,310 --> 01:11:20,850 AUDIENCE: [INAUDIBLE]. 1645 01:11:20,850 --> 01:11:21,725 DAVID MALAN: Not RGB. 1646 01:11:21,725 --> 01:11:22,690 AUDIENCE: [INAUDIBLE]. 1647 01:11:22,690 --> 01:11:23,940 DAVID MALAN: It's hexadecimal. 1648 01:11:23,940 --> 01:11:25,245 AUDIENCE: Hexadecimal. 1649 01:11:25,245 --> 01:11:26,550 Hexadecimal. 1650 01:11:26,550 --> 01:11:30,140 DAVID MALAN: I'm not sure I'm hearing the file format. 1651 01:11:30,140 --> 01:11:31,640 This is not a bitmap. 1652 01:11:31,640 --> 01:11:32,165 It's a? 1653 01:11:32,165 --> 01:11:32,990 AUDIENCE: JPEG. 1654 01:11:32,990 --> 01:11:34,740 DAVID MALAN: J-- oh, I heard it over here. 1655 01:11:34,740 --> 01:11:35,660 JPEG. 1656 01:11:35,660 --> 01:11:36,600 It's a JPEG. 1657 01:11:36,600 --> 01:11:39,240 So these are the first three bytes of any JPEG, 1658 01:11:39,240 --> 01:11:43,400 like a photograph that you might take and store on a digital media card, 1659 01:11:43,400 --> 01:11:45,573 much like our own recover assignment. 1660 01:11:45,573 --> 01:11:47,240 So what these numbers are-- don't worry. 1661 01:11:47,240 --> 01:11:50,330 If you've already forgotten what hexadecimal is, that's OK. 1662 01:11:50,330 --> 01:11:52,370 But the point is that-- and this honestly 1663 01:11:52,370 --> 01:11:54,500 was the best slide I can come up with for recover, 1664 01:11:54,500 --> 01:11:55,970 which is really hard because you can't see what 1665 01:11:55,970 --> 01:11:57,595 you're recovering until you recover it. 1666 01:11:57,595 --> 01:12:02,105 So this is just meant to trigger a recollection of that recover problem 1667 01:12:02,105 --> 01:12:04,640 set, which for me was actually inspired by real life. 1668 01:12:04,640 --> 01:12:08,570 So like 20 years ago, a friend of mine had a digital camera 1669 01:12:08,570 --> 01:12:10,150 before we were all carrying phones. 1670 01:12:10,150 --> 01:12:13,280 He had a proper digital camera with a compact flash part and the like 1671 01:12:13,280 --> 01:12:14,780 that somehow got corrupted. 1672 01:12:14,780 --> 01:12:18,260 Something went wrong, and he lost like 100 or 1,000 photos, something 1673 01:12:18,260 --> 01:12:19,170 significant. 1674 01:12:19,170 --> 01:12:22,310 And so he and I figured out by doing some googling 1675 01:12:22,310 --> 01:12:25,490 and poking around that we can actually write code in C 1676 01:12:25,490 --> 01:12:28,310 to do exactly what you all did with recover, which 1677 01:12:28,310 --> 01:12:31,400 was to iterate over file, top to bottom, left to right, 1678 01:12:31,400 --> 01:12:32,840 looking for that pattern. 1679 01:12:32,840 --> 01:12:35,600 And just with high probability, if you see that pattern, 1680 01:12:35,600 --> 01:12:38,990 statistically, odds [INAUDIBLE] means, oh, there's one of my friends JPEGs, 1681 01:12:38,990 --> 01:12:40,430 there's another, there's another. 1682 01:12:40,430 --> 01:12:44,600 And I think we recovered like 97% of his JPEGs this way. 1683 01:12:44,600 --> 01:12:48,110 A few years later, I took overseas CS50, and we introduced 1684 01:12:48,110 --> 01:12:49,910 exactly the same problem set. 1685 01:12:49,910 --> 01:12:52,070 And I actually tell that story to students 1686 01:12:52,070 --> 01:12:54,620 often to make the point that some of these problems 1687 01:12:54,620 --> 01:12:56,480 are actually real-world solutions. 1688 01:12:56,480 --> 01:13:00,050 And funny enough, after 16 years, I've gotten multiple emails 1689 01:13:00,050 --> 01:13:05,090 from alumni, former students, who wrote to thank us because they too 1690 01:13:05,090 --> 01:13:09,620 accidentally deleted some files, or they had their memory card get corrupted. 1691 01:13:09,620 --> 01:13:12,290 And they literally used their problem set [? for ?] code 1692 01:13:12,290 --> 01:13:14,930 to recover their own photographs, which does not 1693 01:13:14,930 --> 01:13:16,280 happen for everyone, certainly. 1694 01:13:16,280 --> 01:13:20,960 But it, again, attests to just how real world some of these problems are. 1695 01:13:20,960 --> 01:13:24,270 We try to introduce students to other domains. 1696 01:13:24,270 --> 01:13:27,050 So you might not know, and I'm not very good at biology. 1697 01:13:27,050 --> 01:13:31,680 But last time I studied biology was in ninth grade in high school. 1698 01:13:31,680 --> 01:13:32,180 [LAUGHTER] 1699 01:13:32,180 --> 01:13:35,502 So thankfully, I leaned on a former colleague, Brian, to help with this. 1700 01:13:35,502 --> 01:13:37,710 So you know from the [? Walthers, ?] this, of course, 1701 01:13:37,710 --> 01:13:39,680 is an example of our DNA problem set. 1702 01:13:39,680 --> 01:13:41,240 And this too is intentional. 1703 01:13:41,240 --> 01:13:44,330 We try as much as we can, even though we're a computer science 1704 01:13:44,330 --> 01:13:47,690 class, to intersect our ourselves with other fields. 1705 01:13:47,690 --> 01:13:50,030 And I am not an expert in most other fields, 1706 01:13:50,030 --> 01:13:53,900 but this is why I ask lots of questions of colleagues or teachers like you 1707 01:13:53,900 --> 01:13:56,973 when we do workshops like these just to get the germ of an idea 1708 01:13:56,973 --> 01:13:59,390 because odds are, if you've been teaching for a few years, 1709 01:13:59,390 --> 01:14:02,180 sometimes you don't need to hear a whole lecture, ironically. 1710 01:14:02,180 --> 01:14:04,820 You just need to hear that one sentence, that one thought, 1711 01:14:04,820 --> 01:14:06,890 that one picture, and you're like, aha, I 1712 01:14:06,890 --> 01:14:08,900 can turn that into a homework assignment. 1713 01:14:08,900 --> 01:14:12,333 And so we're constantly on the lookout for that from other fields, 1714 01:14:12,333 --> 01:14:15,000 talking to friends in the math department, chemistry department, 1715 01:14:15,000 --> 01:14:17,000 humanities, or the like. 1716 01:14:17,000 --> 01:14:19,460 And then lastly, of course, is-- 1717 01:14:19,460 --> 01:14:21,570 [LAUGHTER] 1718 01:14:21,570 --> 01:14:22,395 --problem set 9. 1719 01:14:22,395 --> 01:14:26,700 1720 01:14:26,700 --> 01:14:28,110 I actually checked. 1721 01:14:28,110 --> 01:14:32,280 If you bought Netflix stock at the moment we shipped this problem set, 1722 01:14:32,280 --> 01:14:35,142 you would have made money in the past few months. 1723 01:14:35,142 --> 01:14:36,600 And funny enough, I've looked back. 1724 01:14:36,600 --> 01:14:39,142 Years ago, we used to use what are called penny stocks, which 1725 01:14:39,142 --> 01:14:42,360 are very low-price stocks that generally mean 1726 01:14:42,360 --> 01:14:43,960 the company might go out of business. 1727 01:14:43,960 --> 01:14:46,470 But funny enough, we had this map years ago. 1728 01:14:46,470 --> 01:14:49,877 Any time you chose, not Netflix, but penny stocks, they always went way up. 1729 01:14:49,877 --> 01:14:51,960 And it would have been this fascinating experience 1730 01:14:51,960 --> 01:14:53,252 to actually buy your own stock. 1731 01:14:53,252 --> 01:14:56,010 But in this case, we got lucky again with Netflix, 1732 01:14:56,010 --> 01:14:59,530 but this is meant to be the final problem set for students 1733 01:14:59,530 --> 01:15:00,780 that serves a couple of goals. 1734 01:15:00,780 --> 01:15:03,390 One, it's meant to introduce them to web [INAUDIBLE] 1735 01:15:03,390 --> 01:15:07,770 so that at the end of the class, if they never CS again, they have the ability, 1736 01:15:07,770 --> 01:15:11,160 not just to write programs in C in a black and white terminal window, 1737 01:15:11,160 --> 01:15:15,910 but full-fledged applications using common, nowadays, technology. 1738 01:15:15,910 --> 01:15:18,450 But it also pedagogically is meant to be, 1739 01:15:18,450 --> 01:15:20,220 and as it might have been for many of you, 1740 01:15:20,220 --> 01:15:23,220 a starting point for their final project. 1741 01:15:23,220 --> 01:15:25,740 Most of our students back home in Cambridge 1742 01:15:25,740 --> 01:15:30,570 who use a web-based final project, start with their own problems 9 code, 1743 01:15:30,570 --> 01:15:32,790 or they go back to the original distribution code. 1744 01:15:32,790 --> 01:15:35,490 They delete all the stuff that's specific to finance 1745 01:15:35,490 --> 01:15:37,330 or the API and the like. 1746 01:15:37,330 --> 01:15:40,560 But they keep the overall structure and then use-- 1747 01:15:40,560 --> 01:15:41,770 they start changing things. 1748 01:15:41,770 --> 01:15:45,210 And that's exactly what a aspiring programmer should do 1749 01:15:45,210 --> 01:15:49,200 is stand on the shoulders of libraries and maybe things they've seen before 1750 01:15:49,200 --> 01:15:50,728 but start to make it their own. 1751 01:15:50,728 --> 01:15:52,770 And so for us that's really what that problem set 1752 01:15:52,770 --> 01:15:55,500 serves as is this offboarding of students 1753 01:15:55,500 --> 01:15:59,130 curricularly so that they can build something of their very own. 1754 01:15:59,130 --> 01:16:01,620 But we've given them just enough of that scaffolding. 1755 01:16:01,620 --> 01:16:05,780 This is the weak 9 of the scaffolding being built outside of the building 1756 01:16:05,780 --> 01:16:06,710 here. 1757 01:16:06,710 --> 01:16:12,470 All right, lastly, we have back home a series of events, one of which 1758 01:16:12,470 --> 01:16:15,690 you saw came in a little early, called CS50 Fair. 1759 01:16:15,690 --> 01:16:19,550 But it would probably give you a sense of some of these more unusual social 1760 01:16:19,550 --> 01:16:23,270 or cultural aspects of the class that we don't do, admittedly, via Zoom. 1761 01:16:23,270 --> 01:16:25,980 These are really meant to be done in Cambridge at Harvard, 1762 01:16:25,980 --> 01:16:30,860 in New Haven at Yale, here in Jakarta or your own towns with your own schools. 1763 01:16:30,860 --> 01:16:33,320 And the first of those, as I alluded to earlier, 1764 01:16:33,320 --> 01:16:35,300 is what we call CS50 Puzzle Day. 1765 01:16:35,300 --> 01:16:39,560 So several years ago, we decided to start our school year at Harvard 1766 01:16:39,560 --> 01:16:42,480 by distributing a packet of puzzles to students. 1767 01:16:42,480 --> 01:16:45,770 So if they sign up for this-- they don't even have to be taking CS50-- 1768 01:16:45,770 --> 01:16:49,610 they arrive in our case on a Saturday afternoon around lunchtime. 1769 01:16:49,610 --> 01:16:52,880 We then hand them a printed packet of puzzles, 1770 01:16:52,880 --> 01:16:55,253 and those puzzles are not jigsaw puzzles. 1771 01:16:55,253 --> 01:16:57,170 They are logic problems, but they have nothing 1772 01:16:57,170 --> 01:17:00,200 to do with programming and nothing to do with computer science. 1773 01:17:00,200 --> 01:17:04,730 And indeed, the messaging of the event is to come one, come all and just 1774 01:17:04,730 --> 01:17:06,500 collaborate on some fun problems. 1775 01:17:06,500 --> 01:17:09,350 Now, it helps that we typically try to find some food for them. 1776 01:17:09,350 --> 01:17:11,090 We deliver some pizzas and the like. 1777 01:17:11,090 --> 01:17:14,540 We typically have some prizes that we maybe ask a local company 1778 01:17:14,540 --> 01:17:18,770 to sponsor so that we can award to the folks who solve the most 1779 01:17:18,770 --> 01:17:20,540 puzzles over the course of three hours. 1780 01:17:20,540 --> 01:17:23,000 But really, this event is meant to send a message 1781 01:17:23,000 --> 01:17:26,150 that computer science, programming, computer science 1782 01:17:26,150 --> 01:17:27,710 is not about programming. 1783 01:17:27,710 --> 01:17:30,020 It really is about problem solving, and you don't even 1784 01:17:30,020 --> 01:17:31,820 need your laptop or your phone. 1785 01:17:31,820 --> 01:17:34,010 You just get some friends and some paper and pencil. 1786 01:17:34,010 --> 01:17:37,160 And indeed, that's what we'll do for fun tomorrow morning over breakfast 1787 01:17:37,160 --> 01:17:40,160 is just experience a little bit of that if you've not done it already 1788 01:17:40,160 --> 01:17:41,670 with us online. 1789 01:17:41,670 --> 01:17:44,690 And so in Cambridge, for instance, we're fortunate to usually get 1790 01:17:44,690 --> 01:17:48,300 300 to 600 students because we invite not just our students 1791 01:17:48,300 --> 01:17:49,560 but their friends too. 1792 01:17:49,560 --> 01:17:52,910 So this is one of my favorite memories at the end of every semester here. 1793 01:17:52,910 --> 01:17:55,160 You have a whole bunch of students looking this way 1794 01:17:55,160 --> 01:17:59,210 because on the projector here we were walking them through the solutions 1795 01:17:59,210 --> 01:18:02,750 to the problem, which we'll do tomorrow, for instance, at some point too. 1796 01:18:02,750 --> 01:18:05,060 And it's just the neatest most inspiring thing 1797 01:18:05,060 --> 01:18:07,880 to see a whole bunch of smart people delighting 1798 01:18:07,880 --> 01:18:10,730 in just solving problems together. 1799 01:18:10,730 --> 01:18:14,690 And they none of them need higher programming experience in CS. 1800 01:18:14,690 --> 01:18:16,820 What they do for the 2 and 1/2 hours prior 1801 01:18:16,820 --> 01:18:20,270 to that is just a little bit of this in a classroom, in a building, 1802 01:18:20,270 --> 01:18:22,400 anywhere on campus, inside or outside. 1803 01:18:22,400 --> 01:18:25,513 They get together in groups of two or three or four. 1804 01:18:25,513 --> 01:18:27,680 They try to give themselves a little bit of a buffer 1805 01:18:27,680 --> 01:18:29,690 so they can whisper and talk about the problems 1806 01:18:29,690 --> 01:18:31,220 to try to be the team next to them. 1807 01:18:31,220 --> 01:18:33,830 But it's just students, smart students getting together 1808 01:18:33,830 --> 01:18:37,220 trying to solve some problems that they've never seen before. 1809 01:18:37,220 --> 01:18:41,420 Toward the end of the semester, we have what we call a CS50 hackathon. 1810 01:18:41,420 --> 01:18:44,330 And a hackathon is, for us, an opportunity 1811 01:18:44,330 --> 01:18:47,150 for students to gather, in our case, overnight. 1812 01:18:47,150 --> 01:18:50,270 We start at 7:00 PM, and we end at 7:00 AM. 1813 01:18:50,270 --> 01:18:54,380 So it's a long night all together in one of the larger buildings on campus. 1814 01:18:54,380 --> 01:18:57,450 And it's an opportunity for them to work on their final project. 1815 01:18:57,450 --> 01:19:00,710 So odds are, most of you worked on your final projects at home 1816 01:19:00,710 --> 01:19:03,230 or at the office or the like alone. 1817 01:19:03,230 --> 01:19:05,630 That's fine, and you still created those final projects. 1818 01:19:05,630 --> 01:19:08,255 But wouldn't it have been nice if we could have gotten together 1819 01:19:08,255 --> 01:19:09,950 today and started working on those? 1820 01:19:09,950 --> 01:19:13,430 But that's what this event is all about just to get smart people together, 1821 01:19:13,430 --> 01:19:16,113 people who might have bugs, have questions of each other 1822 01:19:16,113 --> 01:19:18,530 and lean on each other because every student at that point 1823 01:19:18,530 --> 01:19:20,730 is pretty much doing something on their own. 1824 01:19:20,730 --> 01:19:22,730 Maybe they have a partner or two, but everyone's 1825 01:19:22,730 --> 01:19:23,880 working on something different. 1826 01:19:23,880 --> 01:19:25,130 So it really is collaborative. 1827 01:19:25,130 --> 01:19:28,070 And this is different from what industry tends to do. 1828 01:19:28,070 --> 01:19:31,040 A lot of companies sponsor hackathons, which are great too. 1829 01:19:31,040 --> 01:19:32,540 But those tend to be competitive. 1830 01:19:32,540 --> 01:19:34,830 And CS50's back home is not competitive. 1831 01:19:34,830 --> 01:19:35,720 There's no prizes. 1832 01:19:35,720 --> 01:19:36,860 Everyone gets pizza. 1833 01:19:36,860 --> 01:19:40,190 Everyone gets desserts and the like, and there's no reward at the end other 1834 01:19:40,190 --> 01:19:41,450 than you finished. 1835 01:19:41,450 --> 01:19:44,510 You took CS50 by having finished your project, 1836 01:19:44,510 --> 01:19:47,430 and not necessarily that night, but having begun or done well. 1837 01:19:47,430 --> 01:19:51,890 And here, for instance, are some students around probably midnight. 1838 01:19:51,890 --> 01:19:53,990 And here is a student around 5:00 AM. 1839 01:19:53,990 --> 01:19:56,420 [LAUGHTER] 1840 01:19:56,420 --> 01:19:59,692 And the last memory and the last tradition 1841 01:19:59,692 --> 01:20:01,400 that I thought I'd share with you is what 1842 01:20:01,400 --> 01:20:04,740 you saw playing before we began today, the CS50 Fair. 1843 01:20:04,740 --> 01:20:06,680 This is something that we put on hold back 1844 01:20:06,680 --> 01:20:08,510 home for like three years because of COVID 1845 01:20:08,510 --> 01:20:11,510 but just resumed it in December of 2022. 1846 01:20:11,510 --> 01:20:14,870 And the vision here was modeled originally on what in the US 1847 01:20:14,870 --> 01:20:18,320 is commonly like a middle school science fair where the kids get together 1848 01:20:18,320 --> 01:20:21,530 and they demonstrate something that glows or something that explodes 1849 01:20:21,530 --> 01:20:24,480 or maybe a volcano they built or something fun like that. 1850 01:20:24,480 --> 01:20:27,590 But in our case, the students bring their laptops or their phones 1851 01:20:27,590 --> 01:20:29,360 depending on what their final project is. 1852 01:20:29,360 --> 01:20:31,760 And we play fun music like we were playing earlier. 1853 01:20:31,760 --> 01:20:33,350 We inflate balloons. 1854 01:20:33,350 --> 01:20:34,850 We bring some candy and snacks. 1855 01:20:34,850 --> 01:20:38,720 And in our case, too, we try to invite companies just to be there-- 1856 01:20:38,720 --> 01:20:39,710 they have tables-- 1857 01:20:39,710 --> 01:20:43,580 just to talk to students about future opportunities in technology. 1858 01:20:43,580 --> 01:20:46,220 Maybe not so applicable for middle school students, but yes, 1859 01:20:46,220 --> 01:20:49,350 for university students and maybe for high school students too. 1860 01:20:49,350 --> 01:20:53,520 And so this too has been a secret ingredient for us over the years. 1861 01:20:53,520 --> 01:20:57,560 If you're in a town or a city where there are some technology companies 1862 01:20:57,560 --> 01:20:59,510 or if you have connections to folks who-- 1863 01:20:59,510 --> 01:21:02,060 colleagues who are now in industry, I wouldn't 1864 01:21:02,060 --> 01:21:06,520 hesitate to just ask companies for support, to have them bring the pizza, 1865 01:21:06,520 --> 01:21:08,530 to have them send over some snacks, to have 1866 01:21:08,530 --> 01:21:10,990 them send some T-shirts with their company's logo on it, 1867 01:21:10,990 --> 01:21:13,910 but things to just give students and engage them all the more. 1868 01:21:13,910 --> 01:21:16,450 And strategically, what we often do is we don't just 1869 01:21:16,450 --> 01:21:20,200 ask them to, please, provide the pizza, or please, send some T-shirts. 1870 01:21:20,200 --> 01:21:22,660 We invite them to join us at some of these events. 1871 01:21:22,660 --> 01:21:26,980 We invite them to give a Tech Talk, maybe a 20-minute or 30-minute talk 1872 01:21:26,980 --> 01:21:27,730 for students. 1873 01:21:27,730 --> 01:21:31,090 We invite them to join us for a lunch or dinner with students 1874 01:21:31,090 --> 01:21:35,150 just to chat about using technology and programming in the real world. 1875 01:21:35,150 --> 01:21:38,030 So depending on where you are and what companies might be nearby, 1876 01:21:38,030 --> 01:21:41,590 I want you to know, I think there's some really interesting opportunities 1877 01:21:41,590 --> 01:21:43,430 to collaborate in that way. 1878 01:21:43,430 --> 01:21:46,000 With that said, we don't typically invite companies 1879 01:21:46,000 --> 01:21:49,120 to our office hours or the sections or recitations 1880 01:21:49,120 --> 01:21:50,680 that we keep purely academic. 1881 01:21:50,680 --> 01:21:53,560 But for these more social, these more collaborative environments, 1882 01:21:53,560 --> 01:21:58,880 we do open the door, not only to our students, but also the bigger world 1883 01:21:58,880 --> 01:22:00,120 as well. 1884 01:22:00,120 --> 01:22:05,120 So here is just a photograph of one such fair just before the pandemic. 1885 01:22:05,120 --> 01:22:08,450 Here is exactly what students do the whole time, standing at a laptop, 1886 01:22:08,450 --> 01:22:10,040 smiling, being asked questions. 1887 01:22:10,040 --> 01:22:12,770 And just to add a little twist to things, what we do here too 1888 01:22:12,770 --> 01:22:17,960 is everyone who attends this particular event gets a blank card, a raffle card, 1889 01:22:17,960 --> 01:22:20,960 that's got like 10 unhappy faces on it. 1890 01:22:20,960 --> 01:22:25,520 But we give to all of our CS50 students little yellow smiley face stickers. 1891 01:22:25,520 --> 01:22:28,830 And the idea is that any time-- and attendee, whether it's 1892 01:22:28,830 --> 01:22:32,850 a teaching fellow or a student or another professor or a parent 1893 01:22:32,850 --> 01:22:36,420 comes by and asks the student for a demonstration of their project, 1894 01:22:36,420 --> 01:22:41,520 the social contract is that the student gives that attendee a yellow sticker. 1895 01:22:41,520 --> 01:22:45,150 And every sticker entitles you to one entry in the raffle, 1896 01:22:45,150 --> 01:22:47,310 and we typically ask some friends in industry, 1897 01:22:47,310 --> 01:22:49,770 could you give us some prizes that we can raffle off? 1898 01:22:49,770 --> 01:22:54,000 And what it really does socially is just grease the wheels, especially 1899 01:22:54,000 --> 01:22:57,150 for students who might be more introverted or less comfortable, it 1900 01:22:57,150 --> 01:23:00,760 just gives them an excuse to walk up to a stranger and say, hey, 1901 01:23:00,760 --> 01:23:01,800 can I see your project? 1902 01:23:01,800 --> 01:23:04,887 And they end up, invariably, delighting in what they're seeing. 1903 01:23:04,887 --> 01:23:06,720 They also get that sticker, and so it's sort 1904 01:23:06,720 --> 01:23:09,210 of a social greasing of the wheels. 1905 01:23:09,210 --> 01:23:12,150 So we do try to think about these things both inside 1906 01:23:12,150 --> 01:23:13,500 and outside of the classroom. 1907 01:23:13,500 --> 01:23:16,800 And this was just CS50 really in an hour and a half. 1908 01:23:16,800 --> 01:23:19,860 You, of course, have spent six months living and breathing it. 1909 01:23:19,860 --> 01:23:24,210 But our hope is that to in reviewing these problem sets, these languages, 1910 01:23:24,210 --> 01:23:27,630 these memorable moments, you just have more of a sense of the why. 1911 01:23:27,630 --> 01:23:30,240 And if you disagree with some of the why, that too is fine. 1912 01:23:30,240 --> 01:23:33,070 React to it by making something your own. 1913 01:23:33,070 --> 01:23:35,640 So allow me to flip here to our final slide, 1914 01:23:35,640 --> 01:23:40,238 and we still have a few minutes before we take a break for any questions. 1915 01:23:40,238 --> 01:23:41,280 Yeah, let's go over here. 1916 01:23:41,280 --> 01:23:42,592 I'll bounce back and forth. 1917 01:23:42,592 --> 01:23:46,840 AUDIENCE: Actually, this is a question [INAUDIBLE].. 1918 01:23:46,840 --> 01:23:52,690 Can [? we ?] deliver the [INAUDIBLE]? 1919 01:23:52,690 --> 01:23:54,430 How long does [INAUDIBLE]? 1920 01:23:54,430 --> 01:23:59,115 1921 01:23:59,115 --> 01:24:02,505 And how long [INAUDIBLE] because [INAUDIBLE].. 1922 01:24:02,505 --> 01:24:08,154 We [? want ?] [INAUDIBLE] be swept away [? without ?] [INAUDIBLE]?? 1923 01:24:08,154 --> 01:24:13,382 1924 01:24:13,382 --> 01:24:14,590 DAVID MALAN: Well, thank you. 1925 01:24:14,590 --> 01:24:16,298 You're too kind, and I-- 1926 01:24:16,298 --> 01:24:18,690 [LAUGHTER] 1927 01:24:18,690 --> 01:24:20,940 Carter can attest that they're far from perfect 1928 01:24:20,940 --> 01:24:24,870 because, in fact, one of the things he and I do and Brian and I used to do is, 1929 01:24:24,870 --> 01:24:27,810 after every lecture is painful, but we will then 1930 01:24:27,810 --> 01:24:32,170 walk through all of the slides and write down to-do's, like a to-do list 1931 01:24:32,170 --> 01:24:34,980 for all of the mistakes I made, all of the regrets I had. 1932 01:24:34,980 --> 01:24:39,780 And every week, we have a long laundry list of imperfections, if I may. 1933 01:24:39,780 --> 01:24:41,967 And some years we could rewatch the videos, 1934 01:24:41,967 --> 01:24:43,925 which is a horrible experience, to watch this-- 1935 01:24:43,925 --> 01:24:44,425 [LAUGHTER] 1936 01:24:44,425 --> 01:24:45,880 --on video [INAUDIBLE]. 1937 01:24:45,880 --> 01:24:50,250 But with that said, the way I myself prepare, 1938 01:24:50,250 --> 01:24:54,360 every term, and CS50 in particular, is I start by looking literally 1939 01:24:54,360 --> 01:24:56,880 at this list of things I wish I had done better 1940 01:24:56,880 --> 01:24:59,550 because, especially if it's been a semester or even a year 1941 01:24:59,550 --> 01:25:03,630 since I taught the class, it is so valuable to have a list of things 1942 01:25:03,630 --> 01:25:07,140 I know I want to change even if I didn't remember it. 1943 01:25:07,140 --> 01:25:11,160 Two, what I do is I look through my previous year's slides, 1944 01:25:11,160 --> 01:25:13,260 and I just start to think through, is this how I 1945 01:25:13,260 --> 01:25:15,300 would present this material this year? 1946 01:25:15,300 --> 01:25:17,970 And invariably, I start moving things around, 1947 01:25:17,970 --> 01:25:20,830 or I start hiding slides because I don't like doing that. 1948 01:25:20,830 --> 01:25:23,670 And every year, even after 16 years, if you look through the slides, 1949 01:25:23,670 --> 01:25:25,003 there's definitely similarities. 1950 01:25:25,003 --> 01:25:29,490 And like 70% of the class might stay the same, 60%, 80%, something like that. 1951 01:25:29,490 --> 01:25:33,190 But I'm constantly regretting how I taught something the previous year. 1952 01:25:33,190 --> 01:25:36,850 And so I'm striving for my white whale, so to speak, 1953 01:25:36,850 --> 01:25:39,430 trying to find the perfect version of CS50, 1954 01:25:39,430 --> 01:25:42,330 which is only to say that I very carefully think 1955 01:25:42,330 --> 01:25:44,580 through things from start to finish. 1956 01:25:44,580 --> 01:25:47,730 I then look through the source code that I wrote the past year. 1957 01:25:47,730 --> 01:25:50,190 And sometimes, with the source code, I actually 1958 01:25:50,190 --> 01:25:52,620 start that from scratch because I find, honestly, 1959 01:25:52,620 --> 01:25:54,630 even after doing this all these years, I'd 1960 01:25:54,630 --> 01:25:57,840 like to think I'm getting better even at C and certain other languages, 1961 01:25:57,840 --> 01:26:01,950 or industry trends are changing with some of the later material, 1962 01:26:01,950 --> 01:26:03,850 and so it needs to be updated. 1963 01:26:03,850 --> 01:26:06,660 But at least in my case, I don't write things down. 1964 01:26:06,660 --> 01:26:10,860 If you see me flipping here, all I have is a printout of the slides. 1965 01:26:10,860 --> 01:26:13,290 There's no notes or script or anything like that, 1966 01:26:13,290 --> 01:26:15,750 which is fine if that's the type of teacher you are and you 1967 01:26:15,750 --> 01:26:18,240 want that outline or if you want to script things out. 1968 01:26:18,240 --> 01:26:23,320 I tend to go with the flow, if you will. 1969 01:26:23,320 --> 01:26:24,780 But it's each their own. 1970 01:26:24,780 --> 01:26:27,900 Carter has a different style, Guy and Margaret have a different style. 1971 01:26:27,900 --> 01:26:29,280 I would find your own. 1972 01:26:29,280 --> 01:26:31,133 But it takes practice. 1973 01:26:31,133 --> 01:26:32,050 AUDIENCE: [INAUDIBLE]. 1974 01:26:32,050 --> 01:26:34,000 DAVID MALAN: Yeah, over here. 1975 01:26:34,000 --> 01:26:36,186 Sure. 1976 01:26:36,186 --> 01:26:42,920 AUDIENCE: In almost every known [INAUDIBLE].. 1977 01:26:42,920 --> 01:26:49,340 And we just add necessary code to [INAUDIBLE].. 1978 01:26:49,340 --> 01:26:52,430 I wonder what's the reason-- 1979 01:26:52,430 --> 01:26:54,100 which one more effective? 1980 01:26:54,100 --> 01:26:57,700 Do we give the student-- 1981 01:26:57,700 --> 01:27:01,240 we let the student code from the start to the end? 1982 01:27:01,240 --> 01:27:04,318 Or give them the template like you did, each one [INAUDIBLE]?? 1983 01:27:04,318 --> 01:27:06,110 DAVID MALAN: That's a really good question. 1984 01:27:06,110 --> 01:27:09,310 So to recap, toward the middle of the semester onward, 1985 01:27:09,310 --> 01:27:12,310 we tend to give students starter code or template code or distribution 1986 01:27:12,310 --> 01:27:13,300 code, same idea. 1987 01:27:13,300 --> 01:27:16,690 And we often have to-do's or blanks that they need to fill in. 1988 01:27:16,690 --> 01:27:17,960 Should we do that or not? 1989 01:27:17,960 --> 01:27:19,900 I think it depends partly on your students 1990 01:27:19,900 --> 01:27:22,760 and partly what you want the focus of that week to be. 1991 01:27:22,760 --> 01:27:25,720 So for me, it's important in the beginning of CS50 1992 01:27:25,720 --> 01:27:27,640 that you start with a blank file. 1993 01:27:27,640 --> 01:27:30,212 I want them to understand, from start to finish, 1994 01:27:30,212 --> 01:27:32,920 that what they see on the screen, even if it's just Hello, world, 1995 01:27:32,920 --> 01:27:39,070 is entirely of their own doing, no magic or things they don't understand. 1996 01:27:39,070 --> 01:27:41,380 But as I said earlier, especially with C, 1997 01:27:41,380 --> 01:27:45,908 it's hard to do fun, engaging homework problems in a language like C and even 1998 01:27:45,908 --> 01:27:47,950 in Python if you're only using a terminal window, 1999 01:27:47,950 --> 01:27:51,940 and still, you give students some libraries or some starter code. 2000 01:27:51,940 --> 01:27:54,520 And I would say our own view on this has been changing. 2001 01:27:54,520 --> 01:27:57,640 And just this spring, we've been going back 2002 01:27:57,640 --> 01:28:02,280 and adding least comfortable versions of some 2003 01:28:02,280 --> 01:28:05,520 of the problems which, for us, means providing a little more starter code. 2004 01:28:05,520 --> 01:28:08,400 And for us, this is an opportunity for those students 2005 01:28:08,400 --> 01:28:11,550 who are somewhat self-selecting, if they really feel uncomfortable, 2006 01:28:11,550 --> 01:28:14,910 we give them a bit more of the solution and guide them step by step through it. 2007 01:28:14,910 --> 01:28:18,090 But some other students who have either been programming for years or they 2008 01:28:18,090 --> 01:28:21,040 just they want a challenge, and then you probably have students just like that, 2009 01:28:21,040 --> 01:28:23,910 especially if they like the field, we give them less starter code. 2010 01:28:23,910 --> 01:28:27,100 And we allow them to have this higher ceiling instead. 2011 01:28:27,100 --> 01:28:29,200 So I think it depends on your students. 2012 01:28:29,200 --> 01:28:32,340 But for us, it's very important to me that our problem sets 2013 01:28:32,340 --> 01:28:34,590 get interesting or stay interesting. 2014 01:28:34,590 --> 01:28:38,580 And I don't think you can do that if you give them a blank file every week 2015 01:28:38,580 --> 01:28:40,260 to start with. 2016 01:28:40,260 --> 01:28:42,510 Other questions. 2017 01:28:42,510 --> 01:28:43,270 Let me go here. 2018 01:28:43,270 --> 01:28:44,937 Let me-- some new hands first, if I may. 2019 01:28:44,937 --> 01:28:47,520 AUDIENCE: Yeah, [INAUDIBLE] thank you for the chance. 2020 01:28:47,520 --> 01:28:48,270 DAVID MALAN: Sure. 2021 01:28:48,270 --> 01:28:52,130 AUDIENCE: I want to ask you about [INAUDIBLE] 2022 01:28:52,130 --> 01:28:55,540 if we want to [INAUDIBLE] that evening, we 2023 01:28:55,540 --> 01:29:00,000 must make the students feel comfortable and make them understand 2024 01:29:00,000 --> 01:29:03,600 what happened in their [INAUDIBLE]. 2025 01:29:03,600 --> 01:29:06,112 And I have some problem at my school. 2026 01:29:06,112 --> 01:29:06,984 DAVID MALAN: Sure. 2027 01:29:06,984 --> 01:29:10,820 AUDIENCE: VS code is too heavy to teach my [INAUDIBLE] 2028 01:29:10,820 --> 01:29:13,533 in my computer [INAUDIBLE]. 2029 01:29:13,533 --> 01:29:14,200 DAVID MALAN: OK. 2030 01:29:14,200 --> 01:29:16,330 AUDIENCE: And can you-- 2031 01:29:16,330 --> 01:29:20,960 I think if they just understand what happened [INAUDIBLE],, 2032 01:29:20,960 --> 01:29:22,393 but it's not [? grandfathered. ?] 2033 01:29:22,393 --> 01:29:23,060 DAVID MALAN: OK. 2034 01:29:23,060 --> 01:29:30,020 AUDIENCE: [INAUDIBLE] was they can't program a single [INAUDIBLE] 2035 01:29:30,020 --> 01:29:31,700 it will work like that. 2036 01:29:31,700 --> 01:29:42,095 Can you give me a citation by using another [INAUDIBLE] 2037 01:29:42,095 --> 01:29:46,290 to teach my students without the VS code? 2038 01:29:46,290 --> 01:29:49,350 DAVID MALAN: Sure, so VS code is very heavyweight [? and ?] 2039 01:29:49,350 --> 01:29:52,620 so on your school's computer lab computers. 2040 01:29:52,620 --> 01:29:55,733 So VS code itself can be downloaded for free for Mac and Windows, 2041 01:29:55,733 --> 01:29:57,150 which I think you're referring to. 2042 01:29:57,150 --> 01:30:00,940 But what Code Spaces is, code.CS50.IO, in our case, 2043 01:30:00,940 --> 01:30:03,250 it's just a browser-based version thereof. 2044 01:30:03,250 --> 01:30:07,680 And so long as the computers are within five or six years old, 2045 01:30:07,680 --> 01:30:11,340 it should be OK so long as you have a good enough internet connection, which 2046 01:30:11,340 --> 01:30:12,210 not everyone does. 2047 01:30:12,210 --> 01:30:13,990 And I do realize that's a challenge. 2048 01:30:13,990 --> 01:30:17,580 So in terms of other text editors, let me probably follow up 2049 01:30:17,580 --> 01:30:20,077 with an email with some links to something like this 2050 01:30:20,077 --> 01:30:21,660 because there are lighter weight ones. 2051 01:30:21,660 --> 01:30:24,630 Like on Windows, Notepad++ comes to mind. 2052 01:30:24,630 --> 01:30:29,010 It's not as popular nowadays as VS code, but there's others too. 2053 01:30:29,010 --> 01:30:31,945 And if I forget, just email me tomorrow to remind me of that. 2054 01:30:31,945 --> 01:30:34,320 I think we have time for maybe one or two more questions. 2055 01:30:34,320 --> 01:30:41,642 AUDIENCE: [INAUDIBLE] days ago [INAUDIBLE].. 2056 01:30:41,642 --> 01:30:42,350 DAVID MALAN: Yes. 2057 01:30:42,350 --> 01:30:43,267 AUDIENCE: [INAUDIBLE]. 2058 01:30:43,267 --> 01:30:47,805 [INAUDIBLE] I use other [INAUDIBLE]? 2059 01:30:47,805 --> 01:30:48,930 DAVID MALAN: Good question. 2060 01:30:48,930 --> 01:30:51,610 So in this class, as well as with our undergraduates back home, 2061 01:30:51,610 --> 01:30:54,680 we ask them at the start of the term to bucketize themselves 2062 01:30:54,680 --> 01:30:57,310 among those less comfortable, more comfortable, somewhere 2063 01:30:57,310 --> 01:31:00,910 in between, and in our case, most recently, least comfortable as well. 2064 01:31:00,910 --> 01:31:04,210 Generally, that's been sufficient detail for us, 2065 01:31:04,210 --> 01:31:07,540 and we don't give them a test or a quiz or any kind of assessment 2066 01:31:07,540 --> 01:31:10,160 like that because I think most students know what 2067 01:31:10,160 --> 01:31:13,510 bucket they fall into because those who are less comfortable or least 2068 01:31:13,510 --> 01:31:16,600 comfortable, they're uncomfortable just even being in the class 2069 01:31:16,600 --> 01:31:17,860 on that first day. 2070 01:31:17,860 --> 01:31:20,253 By contrast, the students who are more comfortable 2071 01:31:20,253 --> 01:31:23,170 are the kids that have been programming since they were six years old, 2072 01:31:23,170 --> 01:31:24,430 or they're highly confident. 2073 01:31:24,430 --> 01:31:26,560 And so they know who they are. 2074 01:31:26,560 --> 01:31:28,580 And our answer to the students who are like, 2075 01:31:28,580 --> 01:31:30,700 I don't know which group I'm in, by definition, 2076 01:31:30,700 --> 01:31:32,570 they are somewhere in between. 2077 01:31:32,570 --> 01:31:36,250 And so for us, we have either these three buckets or now four, 2078 01:31:36,250 --> 01:31:40,270 which can help just in our case-- and we can't do this in all classrooms. 2079 01:31:40,270 --> 01:31:42,820 It can help you group students so that they're only 2080 01:31:42,820 --> 01:31:46,092 among students who are similarly uncomfortable, similarly comfortable, 2081 01:31:46,092 --> 01:31:47,800 so they don't feel like they're competing 2082 01:31:47,800 --> 01:31:50,410 with the smarter kids or the slower kids in the class, which 2083 01:31:50,410 --> 01:31:52,560 is not healthy for anyone. 2084 01:31:52,560 --> 01:31:53,790 Other questions? 2085 01:31:53,790 --> 01:31:55,551 Yeah. 2086 01:31:55,551 --> 01:31:57,012 AUDIENCE: [INAUDIBLE]. 2087 01:31:57,012 --> 01:32:12,333 2088 01:32:12,333 --> 01:32:13,250 DAVID MALAN: OK, yeah. 2089 01:32:13,250 --> 01:32:17,460 AUDIENCE: [INAUDIBLE] all [INAUDIBLE]? 2090 01:32:17,460 --> 01:32:20,430 2091 01:32:20,430 --> 01:32:22,680 DAVID MALAN: Vis a vis a matter of academic honesty? 2092 01:32:22,680 --> 01:32:22,980 AUDIENCE: Yeah. 2093 01:32:22,980 --> 01:32:24,730 DAVID MALAN: Yeah, that's a good question. 2094 01:32:24,730 --> 01:32:27,780 So the question is about whether it's a Harvard thing or a CS50 thing, 2095 01:32:27,780 --> 01:32:29,790 this emphasis on academic honesty. 2096 01:32:29,790 --> 01:32:33,330 It is especially CS50 focused. 2097 01:32:33,330 --> 01:32:35,670 Harvard, for instance, has its own honor code 2098 01:32:35,670 --> 01:32:38,987 where across all courses and departments students are not supposed 2099 01:32:38,987 --> 01:32:40,320 to be copying each other's work. 2100 01:32:40,320 --> 01:32:42,060 They should be adhering to certain rules. 2101 01:32:42,060 --> 01:32:45,150 In CS50, we philosophically, for many years 2102 01:32:45,150 --> 01:32:47,730 since I took over and even before my time, 2103 01:32:47,730 --> 01:32:50,910 proactively look for instances of academic dishonesty 2104 01:32:50,910 --> 01:32:51,970 for a couple of reasons. 2105 01:32:51,970 --> 01:32:54,512 And the first and foremost is just fairness to other students 2106 01:32:54,512 --> 01:32:56,925 because we want them to be meeting us halfway. 2107 01:32:56,925 --> 01:32:59,550 We're fortunate back home to have a lot of teaching assistants, 2108 01:32:59,550 --> 01:33:02,620 as Carter noted, a lot of resources and support for students. 2109 01:33:02,620 --> 01:33:06,270 And if we're going to provide this, we want them meeting us halfway and taking 2110 01:33:06,270 --> 01:33:07,530 advantage of those resources. 2111 01:33:07,530 --> 01:33:10,500 Where even in a smaller class, coming to me as the teacher 2112 01:33:10,500 --> 01:33:13,380 and not turning to someone else's solution. 2113 01:33:13,380 --> 01:33:15,630 Now, with that said, what we try to teach students 2114 01:33:15,630 --> 01:33:19,110 over the course of the semester is where the line is. 2115 01:33:19,110 --> 01:33:21,810 They're absolutely should be googling for certain things. 2116 01:33:21,810 --> 01:33:25,590 They should be googling for how to write a for loop in C 2117 01:33:25,590 --> 01:33:29,400 or how to implement a conditional in Python 2118 01:33:29,400 --> 01:33:34,530 or function that makes HTTP requests in Python, like very commodity things. 2119 01:33:34,530 --> 01:33:39,180 What they shouldn't be doing is how to print a pyramid for Mario 2120 01:33:39,180 --> 01:33:40,410 or very specific things. 2121 01:33:40,410 --> 01:33:44,580 Or any time they get a search result, where clearly it's a CS50 problem, 2122 01:33:44,580 --> 01:33:46,560 and CS50 might even be mentioned somewhere 2123 01:33:46,560 --> 01:33:49,980 in the post, that's the point at which, OK, you've found your way there 2124 01:33:49,980 --> 01:33:50,850 accidentally. 2125 01:33:50,850 --> 01:33:52,470 That's when you close the tab. 2126 01:33:52,470 --> 01:33:55,900 And trying to teach students that leaning on each other for help, 2127 01:33:55,900 --> 01:33:58,320 asking questions of us and others for help is fine. 2128 01:33:58,320 --> 01:34:02,010 But copying someone else's work and presenting it as their own-- 2129 01:34:02,010 --> 01:34:07,410 and then in our case, letting 72 or more hours pass and not realizing, darn it, 2130 01:34:07,410 --> 01:34:10,830 I really shouldn't have done that even though I was very tired 2131 01:34:10,830 --> 01:34:13,440 and stressed at the time and not coming forward. 2132 01:34:13,440 --> 01:34:16,290 At that point, we take more punitive approaches 2133 01:34:16,290 --> 01:34:20,010 because if students aren't ethically meeting us that way, 2134 01:34:20,010 --> 01:34:22,410 then we try with the last measure we have. 2135 01:34:22,410 --> 01:34:25,060 And the goal ultimately, especially for an introductory course, 2136 01:34:25,060 --> 01:34:28,560 which for us at the university level is one of the first four courses 2137 01:34:28,560 --> 01:34:31,440 that many first-year, freshman students take, 2138 01:34:31,440 --> 01:34:34,750 this is where-- we're the funnel leading to other courses. 2139 01:34:34,750 --> 01:34:37,140 So we try to place a lot of that effort there. 2140 01:34:37,140 --> 01:34:39,730 And we'll talk more about this over time as well. 2141 01:34:39,730 --> 01:34:41,237 Maybe one final question, if we may. 2142 01:34:41,237 --> 01:34:44,070 Let me do one-on-one because we already chatted, but how about here? 2143 01:34:44,070 --> 01:34:45,386 [LAUGHTER] 2144 01:34:45,386 --> 01:34:46,820 AUDIENCE: [INAUDIBLE]. 2145 01:34:46,820 --> 01:34:53,574 2146 01:34:53,574 --> 01:34:55,053 So [INAUDIBLE]? 2147 01:34:55,053 --> 01:35:05,910 2148 01:35:05,910 --> 01:35:08,040 DAVID MALAN: So for the final project, we 2149 01:35:08,040 --> 01:35:12,420 encourage students to take their finance code or our starter code 2150 01:35:12,420 --> 01:35:13,710 and make it their own. 2151 01:35:13,710 --> 01:35:16,840 That's very much blessed and encouraged at that point. 2152 01:35:16,840 --> 01:35:20,130 What would be inappropriate for a final project is 2153 01:35:20,130 --> 01:35:22,860 downloading someone else's project from GitHub 2154 01:35:22,860 --> 01:35:26,160 or elsewhere and then just saying, I made this code. 2155 01:35:26,160 --> 01:35:29,430 What is OK would be to download someone's code perhaps, 2156 01:35:29,430 --> 01:35:32,242 especially if it's open source in a lab, but make clear 2157 01:35:32,242 --> 01:35:34,200 to their teaching fellow, in our case, or to me 2158 01:35:34,200 --> 01:35:37,150 as the teacher what they added to it. 2159 01:35:37,150 --> 01:35:40,050 For instance, treating it more like a library, that's reasonable. 2160 01:35:40,050 --> 01:35:43,020 And as you can imagine, the whole point of taking a class 2161 01:35:43,020 --> 01:35:45,990 or being your students is for students to learn something. 2162 01:35:45,990 --> 01:35:49,240 And it's not meant to be an exercise in simply submitting someone else's work 2163 01:35:49,240 --> 01:35:52,710 but going from some starting point to some endpoint. 2164 01:35:52,710 --> 01:35:55,470 So what we try to do with students even more so in person 2165 01:35:55,470 --> 01:35:58,170 back home is help them navigate that line. 2166 01:35:58,170 --> 01:36:01,350 And many of you have probably played with or heard about Racine's rules 2167 01:36:01,350 --> 01:36:04,350 like ChatGPT, which honestly, for us teachers, 2168 01:36:04,350 --> 01:36:06,150 is going to make things a little harder. 2169 01:36:06,150 --> 01:36:09,900 It doesn't make things fundamentally any different because there's always-- 2170 01:36:09,900 --> 01:36:13,020 whoa, there's always-- for the past 20 years there's been Google. 2171 01:36:13,020 --> 01:36:15,210 And for the past 100 plus years, there's been 2172 01:36:15,210 --> 01:36:17,040 other human beings in the classroom. 2173 01:36:17,040 --> 01:36:20,340 But it does make it easier, tools like ChatGPT, 2174 01:36:20,340 --> 01:36:23,550 to misbehave anonymously because you're just asking 2175 01:36:23,550 --> 01:36:25,500 the internet very specific questions. 2176 01:36:25,500 --> 01:36:27,300 And I hope-- and we're not there yet, but I 2177 01:36:27,300 --> 01:36:31,400 think the educational opportunity of ChatGPT, Co-pilot, 2178 01:36:31,400 --> 01:36:33,150 if you've heard these terms, is that we're 2179 01:36:33,150 --> 01:36:36,870 going to have many more virtual TAs, and not bad virtual 2180 01:36:36,870 --> 01:36:39,960 TAs where it just tries to autocomplete the answer to your question 2181 01:36:39,960 --> 01:36:46,470 in like an FAQ or a knowledge base but would be able to have students 2182 01:36:46,470 --> 01:36:50,430 highlight the starter code and have the computer explain it to them instead 2183 01:36:50,430 --> 01:36:52,757 of needing to ask me or Carter or you. 2184 01:36:52,757 --> 01:36:54,840 And so the goal there, I think for us, [INAUDIBLE] 2185 01:36:54,840 --> 01:36:57,150 of these tools over the next one to two years 2186 01:36:57,150 --> 01:37:02,205 is to actually leverage the positive aspects so that your software, your VS 2187 01:37:02,205 --> 01:37:05,550 code, your student's code can answer, let's say, 2188 01:37:05,550 --> 01:37:09,900 70% of the introductory questions so that one of you, who's 2189 01:37:09,900 --> 01:37:12,917 running around to 30 or 20 students or more in the class, 2190 01:37:12,917 --> 01:37:15,000 can focus really on the harder questions, the more 2191 01:37:15,000 --> 01:37:17,170 sophisticated questions as well. 2192 01:37:17,170 --> 01:37:19,513 So all this and more tomorrow as well. 2193 01:37:19,513 --> 01:37:21,930 But why don't we go ahead and take a 30-minute break here. 2194 01:37:21,930 --> 01:37:24,060 There's cookies outside, thanks to our hosts. 2195 01:37:24,060 --> 01:37:25,545 And we'll resume at 4:30 PM. 2196 01:37:25,545 --> 01:37:29,355 [APPLAUSE] 2197 01:37:29,355 --> 01:37:34,000