1 00:00:00,000 --> 00:00:01,982 2 00:00:01,982 --> 00:00:04,190 MARGARET: Everybody, it's so really nice to meet you. 3 00:00:04,190 --> 00:00:11,350 I'm here from New York City, and I've been part of the kind of CS50 community 4 00:00:11,350 --> 00:00:13,850 f back from when they first made it available as high school 5 00:00:13,850 --> 00:00:15,860 curriculum, back in 2015. 6 00:00:15,860 --> 00:00:19,727 And, as was some of the presenters yesterday, we've 7 00:00:19,727 --> 00:00:20,810 been doing it for a while. 8 00:00:20,810 --> 00:00:23,280 And so I've been really thinking a lot over this last year, 9 00:00:23,280 --> 00:00:31,580 particularly as the AP assessments have changed for the AP CSP performance 10 00:00:31,580 --> 00:00:33,980 task and multiple choice exam. 11 00:00:33,980 --> 00:00:37,860 You know how to best fit in the CS50 curriculum to really support students. 12 00:00:37,860 --> 00:00:44,030 So, I'm going to share some slides and then feel free to ask questions 13 00:00:44,030 --> 00:00:46,040 as I go along. 14 00:00:46,040 --> 00:00:47,240 All right. 15 00:00:47,240 --> 00:00:50,640 But just to talk a little about who I am. 16 00:00:50,640 --> 00:00:55,670 I have been teaching computer science, actually, for the past six years, 17 00:00:55,670 --> 00:00:58,580 out of a school called NEST+m in New York City. 18 00:00:58,580 --> 00:01:03,320 And I teach, generally, four sections of computer science, like an intro class-- 19 00:01:03,320 --> 00:01:07,310 and I use CS50, actually, for all of my classes-- 20 00:01:07,310 --> 00:01:10,430 and one section of AP CSP. 21 00:01:10,430 --> 00:01:12,350 I have a lot of students. 22 00:01:12,350 --> 00:01:16,040 In New York, we generally have anywhere from, in my intro classes, 23 00:01:16,040 --> 00:01:20,400 usually about 33 students in the class, and in my AP class, around 25. 24 00:01:20,400 --> 00:01:22,160 So there's a lot of students. 25 00:01:22,160 --> 00:01:25,790 I've also been teaching CS50 at the Harvard Extension School, Summer 26 00:01:25,790 --> 00:01:29,700 School, and I've been AP CSP reader and table leader for the last many years. 27 00:01:29,700 --> 00:01:32,750 So although I still admit I still have a lot to learn, 28 00:01:32,750 --> 00:01:36,260 and I'm hoping that we can have some collaborative sessions here as 29 00:01:36,260 --> 00:01:41,030 well, where everybody can share some of their thoughts on all of this. 30 00:01:41,030 --> 00:01:44,960 So the school I'm at, NEST+m is short for New Explorations into Science, 31 00:01:44,960 --> 00:01:46,360 Technology, and Math. 32 00:01:46,360 --> 00:01:47,945 It's a New York City Public School. 33 00:01:47,945 --> 00:01:48,820 It's kind of unusual. 34 00:01:48,820 --> 00:01:51,580 It's a K-12, what they call gifted and talented public school. 35 00:01:51,580 --> 00:01:55,385 One of the only ones, really, attracts students from all five boroughs. 36 00:01:55,385 --> 00:01:57,260 And it's on the Lower East side of Manhattan. 37 00:01:57,260 --> 00:01:59,718 This is a picture of the courtyard in front of this school. 38 00:01:59,718 --> 00:02:02,450 And the next slide is actually my favorite picture. 39 00:02:02,450 --> 00:02:05,830 This is a picture from a hackathon that we hosted at our school 40 00:02:05,830 --> 00:02:07,900 a couple of years ago, before COVID. 41 00:02:07,900 --> 00:02:12,100 David came, we had our middle school and our high school students show up, 42 00:02:12,100 --> 00:02:13,750 and we just had a blast. 43 00:02:13,750 --> 00:02:18,310 And it was just a Saturday afternoon, as David talked about yesterday, 44 00:02:18,310 --> 00:02:22,180 not an all night hackathon, but during the daytime hours. 45 00:02:22,180 --> 00:02:24,970 The students had an opportunity to really spent more 46 00:02:24,970 --> 00:02:28,540 than their normal short classroom period working with their peers, 47 00:02:28,540 --> 00:02:30,740 learning new stuff, and experimenting. 48 00:02:30,740 --> 00:02:34,410 And so it was just a really fun day. 49 00:02:34,410 --> 00:02:37,440 So my students are really quite diverse. 50 00:02:37,440 --> 00:02:40,320 I have students that come into my classes that absolutely nothing 51 00:02:40,320 --> 00:02:41,880 about programming. 52 00:02:41,880 --> 00:02:43,980 They might know a little bit of HTML, from a web 53 00:02:43,980 --> 00:02:45,990 page they created in the past. 54 00:02:45,990 --> 00:02:49,253 Some of them are extremely experienced. 55 00:02:49,253 --> 00:02:52,170 Some of them want to major in CS, think they might want a major in CS, 56 00:02:52,170 --> 00:02:54,330 want to find out if they like CS. 57 00:02:54,330 --> 00:02:59,350 And the level of the students basically can be in the same classroom. 58 00:02:59,350 --> 00:03:03,157 Students who struggle with Algebra 1, all the way through to Calc 59 00:03:03,157 --> 00:03:04,240 BC students. 60 00:03:04,240 --> 00:03:06,190 So it's a very diverse group of students. 61 00:03:06,190 --> 00:03:10,950 And so I've been able to use the CS50 curriculum and all the support tools 62 00:03:10,950 --> 00:03:13,708 to really be able to differentiate, and I 63 00:03:13,708 --> 00:03:15,750 don't think I couldn't have done it without CS50, 64 00:03:15,750 --> 00:03:18,930 to keep everybody engaged and everybody working at the level 65 00:03:18,930 --> 00:03:20,370 exactly where they're at. 66 00:03:20,370 --> 00:03:22,680 My students are usually 11th and 12th graders. 67 00:03:22,680 --> 00:03:24,750 I occasionally have a ninth or 10th grader. 68 00:03:24,750 --> 00:03:28,140 In my school, basically, the computer science courses are electives, 69 00:03:28,140 --> 00:03:30,900 and so there are so many other courses they're taking. 70 00:03:30,900 --> 00:03:32,452 They're programmed pretty tight. 71 00:03:32,452 --> 00:03:35,160 From 9th and 10th grade, they don't even have room for electives. 72 00:03:35,160 --> 00:03:38,498 So 11th grade is the first opportunity for them to take an elective, 73 00:03:38,498 --> 00:03:41,040 and at my school, they usually want students to take an intro 74 00:03:41,040 --> 00:03:42,870 class before an AP class. 75 00:03:42,870 --> 00:03:46,960 So we structured it so that they take the introduction I'll show in a moment 76 00:03:46,960 --> 00:03:49,170 the first couple of weeks of the CS50 curriculum, 77 00:03:49,170 --> 00:03:50,520 as part of the intro curriculum. 78 00:03:50,520 --> 00:03:53,340 And then we take it on from there for the second year, 79 00:03:53,340 --> 00:03:58,400 when they do the full AP curriculum and take the AP assessments. 80 00:03:58,400 --> 00:03:59,570 So I adapt. 81 00:03:59,570 --> 00:04:00,820 I use a lot of it as is. 82 00:04:00,820 --> 00:04:04,960 I also add to it, tweak it, and change it around a lot. 83 00:04:04,960 --> 00:04:07,570 For the intro classes, I've been using the CS50 84 00:04:07,570 --> 00:04:09,880 Labs for the entire first semester. 85 00:04:09,880 --> 00:04:12,280 And if you're watching recorded sessions from last year, 86 00:04:12,280 --> 00:04:14,672 last summer I presented a lot on how the labs could work. 87 00:04:14,672 --> 00:04:17,589 And if anybody has questions, I'm happy to share with you a little bit 88 00:04:17,589 --> 00:04:18,800 about that today as well. 89 00:04:18,800 --> 00:04:24,070 But basically I use the material from week 0, which is Scratch. 90 00:04:24,070 --> 00:04:34,090 Week 1, which is programs like Mario, sometimes in the AP curriculum there 91 00:04:34,090 --> 00:04:37,900 may be ISBN, or more sophisticated programs like credit. 92 00:04:37,900 --> 00:04:42,760 And then week 2, which is about strings, where we have Caesar, maybe Viginere, 93 00:04:42,760 --> 00:04:45,550 and some of the newer programs like substitution. 94 00:04:45,550 --> 00:04:47,020 And then, so that's semester one. 95 00:04:47,020 --> 00:04:49,228 Now the great thing is that, because of all materials 96 00:04:49,228 --> 00:04:54,040 I have available through CS50, for students that are more experienced, 97 00:04:54,040 --> 00:04:56,200 or just catch onto it, or fall in love with it-- 98 00:04:56,200 --> 00:04:57,850 there are some students who have never programmed, 99 00:04:57,850 --> 00:05:01,100 and once they start doing the problems they just they just want more and more. 100 00:05:01,100 --> 00:05:04,450 So I'll use the more comfortable versions of the programs, 101 00:05:04,450 --> 00:05:08,590 or give them materials and videos to either work at their own pace in weeks 102 00:05:08,590 --> 00:05:10,390 three, and sometimes even four. 103 00:05:10,390 --> 00:05:13,308 So nobody ever has to get bored. 104 00:05:13,308 --> 00:05:15,100 But that's kind of the minimum requirements 105 00:05:15,100 --> 00:05:17,950 I have students work through, and then for semester two 106 00:05:17,950 --> 00:05:20,073 there is a problem set called home page, where 107 00:05:20,073 --> 00:05:21,490 they make a website of four pages. 108 00:05:21,490 --> 00:05:24,790 I always use that is the introduction to HTML, CSS, and JavaScript. 109 00:05:24,790 --> 00:05:28,720 And then I introduce a little bit of game design using p5.js. 110 00:05:28,720 --> 00:05:31,600 And I've actually picked up a lot of the conceptual stuff 111 00:05:31,600 --> 00:05:33,100 from the CS50 game design class. 112 00:05:33,100 --> 00:05:35,800 I don't use the programming languages they, do LOVE and Lua, 113 00:05:35,800 --> 00:05:38,080 because I really need to use a web-based environment, 114 00:05:38,080 --> 00:05:40,700 because everybody doesn't have computers they can install software on. 115 00:05:40,700 --> 00:05:41,867 So that's some of the stuff. 116 00:05:41,867 --> 00:05:42,880 We've done Pong. 117 00:05:42,880 --> 00:05:47,680 We've done platformer games, getting a lot of the concepts from CS50. 118 00:05:47,680 --> 00:05:52,060 And then for the AP CSP class, I continue with the weeks, 119 00:05:52,060 --> 00:05:53,920 do a little summary again of week 2. 120 00:05:53,920 --> 00:05:55,120 Then go into week 3, 4. 121 00:05:55,120 --> 00:05:55,810 I skipped 5. 122 00:05:55,810 --> 00:05:59,860 I don't do Speller or memory allocation for my high school, 123 00:05:59,860 --> 00:06:02,005 as there's just too many students to support. 124 00:06:02,005 --> 00:06:04,130 Even though some of them could certainly handle it, 125 00:06:04,130 --> 00:06:05,922 I always felt I just have too many students 126 00:06:05,922 --> 00:06:08,650 to really be able to individually help students in the way 127 00:06:08,650 --> 00:06:10,150 they might need to get through that. 128 00:06:10,150 --> 00:06:12,790 And then 6, we do Python. 129 00:06:12,790 --> 00:06:17,140 And then we do a little bit of Flask and SQL. 130 00:06:17,140 --> 00:06:22,450 And basically I use a combination to help prepare students 131 00:06:22,450 --> 00:06:26,980 with various different resources, some resources from AP Classroom, et cetera. 132 00:06:26,980 --> 00:06:30,610 My classes are normally five days a week, 45 minutes a period. 133 00:06:30,610 --> 00:06:32,370 And this last year, we had only 30. 134 00:06:32,370 --> 00:06:35,560 We were totally remote for the instructional part of our day, 135 00:06:35,560 --> 00:06:37,520 and we only had 30 minute periods. 136 00:06:37,520 --> 00:06:40,450 So we weren't able to get quite as far, but it was still 137 00:06:40,450 --> 00:06:41,665 a very productive year. 138 00:06:41,665 --> 00:06:42,790 My own personal background. 139 00:06:42,790 --> 00:06:45,820 I've been teaching for 11 years, and I first 140 00:06:45,820 --> 00:06:48,790 took CS50 on edx.org, which was amazing. 141 00:06:48,790 --> 00:06:52,570 I was looking for a curriculum to use as I started teaching at the SQL, 142 00:06:52,570 --> 00:06:55,330 started teaching computer science, looking for something, 143 00:06:55,330 --> 00:06:58,420 and just happened to find CS50 at the right time. 144 00:06:58,420 --> 00:06:59,870 I did take CS courses in college. 145 00:06:59,870 --> 00:07:02,890 I worked as a programmer the first few years of my working life, 146 00:07:02,890 --> 00:07:06,250 and after that worked with various software vendors. 147 00:07:06,250 --> 00:07:08,427 I was involved with a graphic design startup. 148 00:07:08,427 --> 00:07:09,760 I taught myself some web design. 149 00:07:09,760 --> 00:07:13,640 Did some early HTML stuff when HTML was really ugly. 150 00:07:13,640 --> 00:07:15,340 But it was a real experience. 151 00:07:15,340 --> 00:07:19,690 And I was really interested, from that point on, to delving back in 152 00:07:19,690 --> 00:07:22,700 and learning more programming, particularly more modern languages. 153 00:07:22,700 --> 00:07:25,197 And so I often tried to take various CS courses online, 154 00:07:25,197 --> 00:07:27,280 but quite frankly, I just couldn't stay with them. 155 00:07:27,280 --> 00:07:31,342 I just found them to be not very exciting. 156 00:07:31,342 --> 00:07:32,550 I just couldn't stay with it. 157 00:07:32,550 --> 00:07:34,918 So when I found CS50, I just fell in love with it. 158 00:07:34,918 --> 00:07:35,710 It was so engaging. 159 00:07:35,710 --> 00:07:36,877 I just couldn't put it down. 160 00:07:36,877 --> 00:07:40,250 So I've always taken that excitement with me, I think, in the classroom. 161 00:07:40,250 --> 00:07:42,430 So what I wanted to talk a little about today 162 00:07:42,430 --> 00:07:46,240 were the AP CSP assessments, particularly some thoughts I had, 163 00:07:46,240 --> 00:07:46,990 some ideas. 164 00:07:46,990 --> 00:07:50,620 And I'm always interested in seeing who else down the road 165 00:07:50,620 --> 00:07:54,100 might want to collaborate on some of these different programs 166 00:07:54,100 --> 00:07:58,520 that I've been tweaking to help make them work with the AP curriculum. 167 00:07:58,520 --> 00:08:02,770 So I wanted to start with the Create Performance Task. 168 00:08:02,770 --> 00:08:07,360 So as those of you who are involved in the AP end of things, as you know, 169 00:08:07,360 --> 00:08:10,690 there's the new requirements this past year. 170 00:08:10,690 --> 00:08:13,780 Programs have to have an array or list, a dictionary, 171 00:08:13,780 --> 00:08:17,110 some of the kind of collection type, function with a parameter. 172 00:08:17,110 --> 00:08:20,140 But the function also has to include iteration and selection, 173 00:08:20,140 --> 00:08:23,020 and the iteration, or rather the selection, 174 00:08:23,020 --> 00:08:25,885 has to be involving the parameter. 175 00:08:25,885 --> 00:08:27,760 So there's some really specific requirements, 176 00:08:27,760 --> 00:08:29,552 and I found sometimes it wasn't really that 177 00:08:29,552 --> 00:08:31,720 easy to come up with an idea of a program that 178 00:08:31,720 --> 00:08:34,299 satisfied all those requirements. 179 00:08:34,299 --> 00:08:36,470 And then the written responses. 180 00:08:36,470 --> 00:08:40,450 There's only a rubric of 6 rows, as you've probably seen. 181 00:08:40,450 --> 00:08:43,192 And having been an AP reader this year, I mean, 182 00:08:43,192 --> 00:08:45,400 there are many, many, many, many things that students 183 00:08:45,400 --> 00:08:47,390 need to do just to get one point. 184 00:08:47,390 --> 00:08:50,740 So you can have everything perfect, and as we'll see in a moment, 185 00:08:50,740 --> 00:08:53,490 you talk about the function instead of the purpose of the program, 186 00:08:53,490 --> 00:08:55,150 you lose the entire point for row one. 187 00:08:55,150 --> 00:08:58,170 And I know somebody pointed that out of the chat window yesterday. 188 00:08:58,170 --> 00:09:02,750 So just please note, I'm going to try to open my chat window. 189 00:09:02,750 --> 00:09:04,790 It's hard for me to see all the chat messages. 190 00:09:04,790 --> 00:09:08,137 191 00:09:08,137 --> 00:09:09,970 Oh nice, I see somebody is in New York City. 192 00:09:09,970 --> 00:09:10,940 That would be great. 193 00:09:10,940 --> 00:09:12,820 I'd love to connect with people and just stay 194 00:09:12,820 --> 00:09:16,660 in touch throughout the course of the year, so please feel free to do that. 195 00:09:16,660 --> 00:09:19,390 And please note it's not always easy for me to see the chat 196 00:09:19,390 --> 00:09:21,280 window when I'm sharing my screen. 197 00:09:21,280 --> 00:09:22,300 OK. 198 00:09:22,300 --> 00:09:25,930 So some of the thoughts I had was that it 199 00:09:25,930 --> 00:09:28,960 would be really nice, as I'm going through the CS50 curriculum, 200 00:09:28,960 --> 00:09:33,640 to have students work on a program that satisfied 201 00:09:33,640 --> 00:09:37,285 the Create requirements in Scratch, in C, and in Python, 202 00:09:37,285 --> 00:09:38,410 with the written responses. 203 00:09:38,410 --> 00:09:40,600 So Doug kind of touched on that a little bit 204 00:09:40,600 --> 00:09:46,270 yesterday, in having students work together with him in his building 205 00:09:46,270 --> 00:09:49,890 a birdhouse, I guess, part of his curriculum, to do a Scratch program. 206 00:09:49,890 --> 00:09:53,140 And then he had them write up a response to it, which I think is a great idea. 207 00:09:53,140 --> 00:09:54,550 I came up with a very-- 208 00:09:54,550 --> 00:09:56,860 not a very good, very simple Scratch program, 209 00:09:56,860 --> 00:09:59,980 which barely meets the requirements, but just to be able to demonstrate. 210 00:09:59,980 --> 00:10:03,250 I had one student who really struggled this year, 211 00:10:03,250 --> 00:10:05,530 and wanted to do his Create test in Scratch. 212 00:10:05,530 --> 00:10:08,500 And so I came up with it quickly, and I'll share it with you, 213 00:10:08,500 --> 00:10:13,240 but you all probably have much better ideas to really have students, 214 00:10:13,240 --> 00:10:16,420 maybe, even have a program specification, where they're actually 215 00:10:16,420 --> 00:10:19,600 creating a program in Scratch, and then writing up the sample 216 00:10:19,600 --> 00:10:23,590 Create test responses, which are, as Doug mentioned yesterday, 217 00:10:23,590 --> 00:10:25,663 the part they're really being graded on. 218 00:10:25,663 --> 00:10:27,580 But then I thought would be really interesting 219 00:10:27,580 --> 00:10:33,190 if, once they get to C, maybe in Unit 1 one of the programs that they complete 220 00:10:33,190 --> 00:10:36,190 has also that requirement, particularly a list and a function. 221 00:10:36,190 --> 00:10:38,170 And maybe when they get to Unit 2, and they're 222 00:10:38,170 --> 00:10:42,040 working the strings, one of the programs that they work on 223 00:10:42,040 --> 00:10:48,353 has a list or some kind of a dictionary, and a function with the parameter 224 00:10:48,353 --> 00:10:50,770 et cetera, so that by the time they get to the Create test 225 00:10:50,770 --> 00:10:54,440 they really know what they need to do. 226 00:10:54,440 --> 00:10:56,590 So I started to kind of come up with some things 227 00:10:56,590 --> 00:11:00,280 I'll share with you in a few moments, but as I mentioned the program 228 00:11:00,280 --> 00:11:02,800 specs can be very confusing. 229 00:11:02,800 --> 00:11:05,230 I found them to be-- 230 00:11:05,230 --> 00:11:09,110 or rather, the requirements for Create I found to be pretty confusing. 231 00:11:09,110 --> 00:11:12,820 I spent a good amount of time on the AP discussion board just trying 232 00:11:12,820 --> 00:11:15,740 to really clarify exactly what they were looking for. 233 00:11:15,740 --> 00:11:17,890 So I thought it would be really interesting if we 234 00:11:17,890 --> 00:11:21,280 had actual program specs, maybe something I would write up. 235 00:11:21,280 --> 00:11:24,385 I don't know if Carter or Bernie would be involved, or maybe some of you, 236 00:11:24,385 --> 00:11:26,260 but we had program specs to complete programs 237 00:11:26,260 --> 00:11:30,100 that have that function with the parameter and a function call, 238 00:11:30,100 --> 00:11:32,950 that the function has a loop that a conditional, and that different 239 00:11:32,950 --> 00:11:34,700 branches of that conditional would execute 240 00:11:34,700 --> 00:11:37,120 depending on the argument being passed. 241 00:11:37,120 --> 00:11:41,350 And also that the program, the array or the list, has to be purposeful. 242 00:11:41,350 --> 00:11:44,747 And again, the written response would be included as part of that problem, 243 00:11:44,747 --> 00:11:47,080 so that by the time they actually get to the Create test 244 00:11:47,080 --> 00:11:48,430 they're really familiar with it. 245 00:11:48,430 --> 00:11:49,870 And I guess I was thinking this could be-- 246 00:11:49,870 --> 00:11:52,953 because I had them do a practice Create test this year, where they created 247 00:11:52,953 --> 00:11:54,460 their own program from scratch. 248 00:11:54,460 --> 00:11:55,340 It took forever. 249 00:11:55,340 --> 00:11:56,537 It just took so much time. 250 00:11:56,537 --> 00:11:59,620 So I thought, maybe it would be more productive to have them actually work 251 00:11:59,620 --> 00:12:02,950 on a problem specification where they now have gone through it, 252 00:12:02,950 --> 00:12:05,620 we go through the solution, they write everything up, 253 00:12:05,620 --> 00:12:07,240 and we could be very, very clear. 254 00:12:07,240 --> 00:12:12,100 So the types of possible sample programs I came up with. 255 00:12:12,100 --> 00:12:18,490 I came up with for instance, in Scratch and C And Python, just a grade 256 00:12:18,490 --> 00:12:20,560 calculator, where you put in a number of grades, 257 00:12:20,560 --> 00:12:24,790 and you would then, for instance, be told, 258 00:12:24,790 --> 00:12:27,610 did that equate to an A or B or a C or D or whatever? 259 00:12:27,610 --> 00:12:30,110 So this is the simple little Scratch program I put together. 260 00:12:30,110 --> 00:12:31,818 And again, I did this for the one student 261 00:12:31,818 --> 00:12:34,180 who was trying to figure out what exactly he 262 00:12:34,180 --> 00:12:36,310 needed to do to have the requirements. 263 00:12:36,310 --> 00:12:37,340 And very simple. 264 00:12:37,340 --> 00:12:41,658 And I have a Google Drive folder that I'm 265 00:12:41,658 --> 00:12:44,200 going to share with you all in a bit that has all this in it, 266 00:12:44,200 --> 00:12:45,860 that you can see the link to this. 267 00:12:45,860 --> 00:12:47,860 But basically, you know, I have an input here. 268 00:12:47,860 --> 00:12:49,840 The input is a list. 269 00:12:49,840 --> 00:12:52,900 The list has all the grades, and depending on the average 270 00:12:52,900 --> 00:12:56,320 you generate an A, B, C, D, or an F. Again, 271 00:12:56,320 --> 00:12:59,230 not very exciting, but kind of a minimal program that 272 00:12:59,230 --> 00:13:00,440 satisfies the requirements. 273 00:13:00,440 --> 00:13:02,398 So I guess what I was thinking is that maybe it 274 00:13:02,398 --> 00:13:04,780 would be nice to have samples, like before students even 275 00:13:04,780 --> 00:13:07,330 start on the problem spec to solve the problem, 276 00:13:07,330 --> 00:13:09,350 they could actually look at existing code, 277 00:13:09,350 --> 00:13:12,100 to really understand it and break it down so that they really have 278 00:13:12,100 --> 00:13:14,050 a good idea of what they need to do. 279 00:13:14,050 --> 00:13:17,200 This one is an example of a C program that I created 280 00:13:17,200 --> 00:13:19,420 that does the same thing, basically. 281 00:13:19,420 --> 00:13:22,810 So we have a list, and we have-- 282 00:13:22,810 --> 00:13:24,610 or an array in C-- 283 00:13:24,610 --> 00:13:29,920 and then we have a calculate function that, similar to the Scratch program, 284 00:13:29,920 --> 00:13:33,940 calculates an A, B, C, D or F. And it should have all the requirements, 285 00:13:33,940 --> 00:13:38,620 because you have different branches that execute depending on what the input is. 286 00:13:38,620 --> 00:13:39,550 The input is a list. 287 00:13:39,550 --> 00:13:40,390 It has to be a list. 288 00:13:40,390 --> 00:13:41,290 Why does it have to be a list? 289 00:13:41,290 --> 00:13:44,780 Because you can't really have a variable number of grades without having a list. 290 00:13:44,780 --> 00:13:48,850 So in my estimation, it kind of satisfies what you need to do. 291 00:13:48,850 --> 00:13:50,440 And then the same thing in Python. 292 00:13:50,440 --> 00:13:52,870 And What I did this year is that I actually 293 00:13:52,870 --> 00:13:54,400 went over this with the students. 294 00:13:54,400 --> 00:14:00,940 I created an exemplar using this Python program for them to use, 295 00:14:00,940 --> 00:14:03,940 with an exemplar a written response-- which, quite honestly, 296 00:14:03,940 --> 00:14:08,050 after being an AP reader, I probably wouldn't got 100, or 6 out of 6 297 00:14:08,050 --> 00:14:12,250 anyway, because of the difference between function and purpose. 298 00:14:12,250 --> 00:14:16,840 But, so those what I was thinking in terms of the samples. 299 00:14:16,840 --> 00:14:17,770 So we have a program. 300 00:14:17,770 --> 00:14:19,020 We can show it to the student. 301 00:14:19,020 --> 00:14:23,110 We could go through it, and explain what parts of this 302 00:14:23,110 --> 00:14:28,160 would be necessary in order to have the function and the list that 303 00:14:28,160 --> 00:14:29,588 satisfy the requirements. 304 00:14:29,588 --> 00:14:31,630 And then I was thinking, it might be nice to have 305 00:14:31,630 --> 00:14:35,890 problem sets that the students do, or maybe just sometimes a tweaked problem 306 00:14:35,890 --> 00:14:38,330 set, that satisfies all the requirements. 307 00:14:38,330 --> 00:14:41,440 So some of the things I was thinking about. 308 00:14:41,440 --> 00:14:46,067 At Harvard last year they did labs with each unit, which were really great. 309 00:14:46,067 --> 00:14:48,400 They were more practice problems that students worked on 310 00:14:48,400 --> 00:14:50,110 before they got to their problem sets. 311 00:14:50,110 --> 00:14:54,667 And one of the labs for the Week 1 was called Scrabble. 312 00:14:54,667 --> 00:14:56,500 And what Scrabble does-- and I could show it 313 00:14:56,500 --> 00:14:59,830 to you just a moment-- what Scrabble does is it 314 00:14:59,830 --> 00:15:04,150 tells you the points, basically, for a word, like a Scrabble word. 315 00:15:04,150 --> 00:15:06,550 And what I was thinking with a minor change 316 00:15:06,550 --> 00:15:10,240 to the existing-- there actually is a CS50 problem spec that 317 00:15:10,240 --> 00:15:13,640 was used at Harvard last year-- with a minor change, 318 00:15:13,640 --> 00:15:18,380 it could be a problem a Unit 1 problem that satisfies the criteria. 319 00:15:18,380 --> 00:15:20,780 So I'm going to stop sharing this just for a moment, 320 00:15:20,780 --> 00:15:23,740 and I'm going to go to my IDE, and I'll show you a little bit more what 321 00:15:23,740 --> 00:15:25,460 I'm talking about. 322 00:15:25,460 --> 00:15:27,150 So I'm just refreshing my IDE. 323 00:15:27,150 --> 00:15:30,600 It kind of times out. 324 00:15:30,600 --> 00:15:34,280 Does anybody have any questions in the meantime, or any comments? 325 00:15:34,280 --> 00:15:35,600 BERNIE: Margaret, let me-- 326 00:15:35,600 --> 00:15:37,650 I'll read one of the questions that came up. 327 00:15:37,650 --> 00:15:43,100 So have you found the same issues Douglas did yesterday about students 328 00:15:43,100 --> 00:15:46,200 doing better earlier in the year? 329 00:15:46,200 --> 00:15:47,120 And that's from-- 330 00:15:47,120 --> 00:15:52,310 MARGARET: In terms of working on Create really early in the year? 331 00:15:52,310 --> 00:15:54,357 BERNIE: I believe so. 332 00:15:54,357 --> 00:15:56,440 MARGARET: You know, that's a really good question. 333 00:15:56,440 --> 00:16:00,560 So my AP students have already done some coding in C 334 00:16:00,560 --> 00:16:03,680 by the time they take my AP class, and to be honest, most of them 335 00:16:03,680 --> 00:16:06,800 don't want to go back to Scratch. 336 00:16:06,800 --> 00:16:09,860 I have always a couple of struggling students in that class that 337 00:16:09,860 --> 00:16:12,380 prefer to use Scratch, but for the most part, most of them 338 00:16:12,380 --> 00:16:14,922 really want to learn how to program more sophisticated stuff. 339 00:16:14,922 --> 00:16:18,420 And they enjoy the challenge of writing a more sophisticated program. 340 00:16:18,420 --> 00:16:21,590 So I've done it more halfway through the year. 341 00:16:21,590 --> 00:16:25,640 I don't wait until the end, because, as I'll talk about in a moment, 342 00:16:25,640 --> 00:16:30,110 it always seems to be-- they overcomplicate it. 343 00:16:30,110 --> 00:16:34,070 And probably like, the more we did, the more complicated the program would be, 344 00:16:34,070 --> 00:16:36,060 and the longer it takes to program. 345 00:16:36,060 --> 00:16:38,810 So I'm going to show you in a moment, I've come up with some ideas 346 00:16:38,810 --> 00:16:42,140 on even putting together some guidelines on how 347 00:16:42,140 --> 00:16:46,180 to approach the Create task, to really try to help students realize that they 348 00:16:46,180 --> 00:16:48,680 shouldn't be spending-- because the Create performance test, 349 00:16:48,680 --> 00:16:51,020 we have to give them 12 hours. 350 00:16:51,020 --> 00:16:54,035 In my case, with 45 minute periods, it's almost a month of class time 351 00:16:54,035 --> 00:16:56,600 where I'm not really allowed to help them one on one. 352 00:16:56,600 --> 00:16:57,667 It's a lot of time. 353 00:16:57,667 --> 00:17:00,750 And so, I try to give them advice in terms of how to structure their time. 354 00:17:00,750 --> 00:17:02,600 Of course, many of them don't listen to it, 355 00:17:02,600 --> 00:17:06,060 and they usually take the majority of time to work on the program. 356 00:17:06,060 --> 00:17:10,160 So in any case, I don't know if that answers your question. 357 00:17:10,160 --> 00:17:12,140 So I usually do it halfway through the year. 358 00:17:12,140 --> 00:17:14,750 What I did, in the last few years-- 359 00:17:14,750 --> 00:17:17,452 and I'm totally changing my thoughts on it this year-- 360 00:17:17,452 --> 00:17:19,369 was that I thought it would be easier for them 361 00:17:19,369 --> 00:17:21,650 to write their program in Python, because Python 362 00:17:21,650 --> 00:17:23,390 is such a powerful language. 363 00:17:23,390 --> 00:17:27,109 But I think now, for next year, I'm going to highly recommend 364 00:17:27,109 --> 00:17:28,880 that they write their program in C. 365 00:17:28,880 --> 00:17:32,570 And part of the reason is that Python is so powerful, 366 00:17:32,570 --> 00:17:38,148 it's hard to write a function that has to do all those things without writing 367 00:17:38,148 --> 00:17:39,440 a really sophisticated program. 368 00:17:39,440 --> 00:17:43,760 Because in C, If you write a linear search function, that function-- 369 00:17:43,760 --> 00:17:48,260 and you give it an input of a target value, maybe, and an array-- 370 00:17:48,260 --> 00:17:53,510 the linear search function satisfies the function requirements for Create. 371 00:17:53,510 --> 00:17:57,200 And do you need to write a linear search function in Python? 372 00:17:57,200 --> 00:18:00,290 I mean, you could, but it's kind of writing bad Python, 373 00:18:00,290 --> 00:18:03,200 because Python does it for you automatically. 374 00:18:03,200 --> 00:18:05,330 So for those reasons, next year, I'm going 375 00:18:05,330 --> 00:18:08,790 to highly recommend that students do their Create tests in C, earlier 376 00:18:08,790 --> 00:18:09,290 in the year. 377 00:18:09,290 --> 00:18:13,580 Like, before we get to-- or maybe just introduce a tiny bit of Python, 378 00:18:13,580 --> 00:18:17,180 and then have them do their Create task after that. 379 00:18:17,180 --> 00:18:18,103 So that students who-- 380 00:18:18,103 --> 00:18:20,270 there are some students that come in knowing Python, 381 00:18:20,270 --> 00:18:22,700 and love Python, and want to work in Python, 382 00:18:22,700 --> 00:18:25,953 but I think that for the majority of students 383 00:18:25,953 --> 00:18:28,370 that are not experienced in Python, I'm going to recommend 384 00:18:28,370 --> 00:18:31,820 C. I hope I answered your question. 385 00:18:31,820 --> 00:18:35,720 So I'll probably do it like in the end of the fall semester 386 00:18:35,720 --> 00:18:39,060 in this coming year, sometime around that time. 387 00:18:39,060 --> 00:18:41,210 Other questions? 388 00:18:41,210 --> 00:18:43,280 BERNIE: We have another one from Esther, here. 389 00:18:43,280 --> 00:18:46,940 If you have 10 set of 90 minute classes-- 390 00:18:46,940 --> 00:18:51,500 and she's speaking about summer class, I guess-- 391 00:18:51,500 --> 00:18:54,815 how would you create the curriculum module while teaching them? 392 00:18:54,815 --> 00:18:57,560 393 00:18:57,560 --> 00:19:00,773 MARGARET: If I have 10 set of 90 minute classes. 394 00:19:00,773 --> 00:19:02,190 I'd have to really think about it. 395 00:19:02,190 --> 00:19:04,190 In other words, how to break down the curriculum 396 00:19:04,190 --> 00:19:08,885 to get everything done in 10 times 90 minutes? 397 00:19:08,885 --> 00:19:12,500 10 90 minute classes? 398 00:19:12,500 --> 00:19:16,172 I mean, I would guess that they would have to have a lot more homework than I 399 00:19:16,172 --> 00:19:16,880 give my students. 400 00:19:16,880 --> 00:19:19,850 I love my students to work on their problems-- most of the class time 401 00:19:19,850 --> 00:19:22,615 is them doing their coding problems, so that I'm there, 402 00:19:22,615 --> 00:19:24,240 so they're there to support each other. 403 00:19:24,240 --> 00:19:27,198 But I would think when you have such a limited amount of time to do it, 404 00:19:27,198 --> 00:19:30,860 they'd really have to complete a lot of their programs for homework. 405 00:19:30,860 --> 00:19:35,103 And maybe even use the lectures, assign them as homework, 406 00:19:35,103 --> 00:19:38,270 so that they watch the lectures, and then maybe could come in with questions 407 00:19:38,270 --> 00:19:42,260 and review the key points, and really use that class time. 408 00:19:42,260 --> 00:19:45,140 Have them, maybe, do a good amount of their programming for homework, 409 00:19:45,140 --> 00:19:47,390 and then coming in and doing a lot of problem solving, 410 00:19:47,390 --> 00:19:50,810 debugging, clarifying questions, things like that, 411 00:19:50,810 --> 00:19:54,350 to really get the most-- because the most valuable part of you, 412 00:19:54,350 --> 00:19:59,570 right, is going to be helping them with the problems that they encounter. 413 00:19:59,570 --> 00:20:01,010 That's my experience also, right? 414 00:20:01,010 --> 00:20:02,780 Because they could get a lot of information from videos, 415 00:20:02,780 --> 00:20:04,580 but there's also going to be confusion. 416 00:20:04,580 --> 00:20:08,160 I don't quite understand this, or I don't know how to fix this bug. 417 00:20:08,160 --> 00:20:11,660 And so I think having you be present with them 418 00:20:11,660 --> 00:20:14,685 to help them with that is probably going to be one 419 00:20:14,685 --> 00:20:16,310 of the more valuable uses of your time. 420 00:20:16,310 --> 00:20:19,550 421 00:20:19,550 --> 00:20:22,857 I'm looking at another question, here. 422 00:20:22,857 --> 00:20:24,940 I don't know if it's a question, or just a comment 423 00:20:24,940 --> 00:20:27,190 that you were making to each other? 424 00:20:27,190 --> 00:20:28,580 So, Bernie, any other questions? 425 00:20:28,580 --> 00:20:29,122 BERNIE: Sure. 426 00:20:29,122 --> 00:20:30,430 This is from Miguel. 427 00:20:30,430 --> 00:20:34,840 So after the question I just read, this is another one from Miguel. 428 00:20:34,840 --> 00:20:37,930 Margaret, considering classes five times a week, 429 00:20:37,930 --> 00:20:41,770 you do each course week in how much time? 430 00:20:41,770 --> 00:20:44,935 And then, I guess, one week class per course a week? 431 00:20:44,935 --> 00:20:47,440 432 00:20:47,440 --> 00:20:52,990 MARGARET: Right, so I don't strictly map one week to one 433 00:20:52,990 --> 00:20:59,270 CS50 week, because my students also are often taking, like, five AP classes. 434 00:20:59,270 --> 00:21:01,330 They have a lot of stresses in their life, 435 00:21:01,330 --> 00:21:05,980 and computer science is an elective. 436 00:21:05,980 --> 00:21:08,900 They don't need it to graduate, where they do need other things. 437 00:21:08,900 --> 00:21:14,050 So my philosophy, I don't want to stress them out that much. 438 00:21:14,050 --> 00:21:16,250 And they're very competitive. 439 00:21:16,250 --> 00:21:20,090 They're really always looking to get into the high ranking colleges. 440 00:21:20,090 --> 00:21:23,360 And so it kind of depends on the group of students. 441 00:21:23,360 --> 00:21:25,340 So it's not like I have a totally-- 442 00:21:25,340 --> 00:21:25,840 it depends. 443 00:21:25,840 --> 00:21:28,303 Like, sometimes I go slower than other times. 444 00:21:28,303 --> 00:21:30,220 But at the beginning, for my AP class, they've 445 00:21:30,220 --> 00:21:32,440 already seen most of the work in Unit 2. 446 00:21:32,440 --> 00:21:36,400 So I may have them finish that up in a week, and then move on. 447 00:21:36,400 --> 00:21:38,320 Unit 3 is around algorithms. 448 00:21:38,320 --> 00:21:40,040 And I'll also introduce other programs. 449 00:21:40,040 --> 00:21:42,437 So I don't just do the programs that are done 450 00:21:42,437 --> 00:21:45,520 at the Harvard level, which are just a couple of problems with the problem 451 00:21:45,520 --> 00:21:46,448 set. 452 00:21:46,448 --> 00:21:48,490 I'll have them do search and sorting algorithms-- 453 00:21:48,490 --> 00:21:50,080 and I'll show that in a moment-- 454 00:21:50,080 --> 00:21:52,330 and other programs as well, to make sure they really 455 00:21:52,330 --> 00:21:55,840 understand the algorithmic issues. 456 00:21:55,840 --> 00:21:59,370 And then for images, I might help them with some of the stuff in Unit 4 457 00:21:59,370 --> 00:22:00,200 around that. 458 00:22:00,200 --> 00:22:06,580 So basically, I don't have an exact map from one week 459 00:22:06,580 --> 00:22:09,760 of CS50 to one week of what I'm doing. 460 00:22:09,760 --> 00:22:13,690 It would probably be-- because basically, we do, for the AP class, 461 00:22:13,690 --> 00:22:20,470 it's, what did I say, 2, 3, and 4 is really going to-- or at least 2 and 3, 462 00:22:20,470 --> 00:22:22,840 before doing the Create task. 463 00:22:22,840 --> 00:22:28,008 And then there's a whole month I have to give them to do the Create task. 464 00:22:28,008 --> 00:22:29,800 And then we'll come back and we'll continue 465 00:22:29,800 --> 00:22:33,153 to do-- because I don't need them to do the image stuff before Create. 466 00:22:33,153 --> 00:22:35,570 Anyway, this year I'm going to do it a little differently. 467 00:22:35,570 --> 00:22:38,787 So I'm still thinking a little bit about the structure of it, 468 00:22:38,787 --> 00:22:41,870 because I'm going to be pushing C a lot more than I did this current year. 469 00:22:41,870 --> 00:22:43,660 This current year, we were totally remote, 470 00:22:43,660 --> 00:22:46,760 the students didn't even really finish the year before. 471 00:22:46,760 --> 00:22:48,370 Many of them dropped off the spectrum. 472 00:22:48,370 --> 00:22:50,590 You know, they just barely came to class. 473 00:22:50,590 --> 00:22:53,890 So I knew that they didn't really have as much experience coming 474 00:22:53,890 --> 00:22:58,180 into the AP class, so I kind of started it pretty early on in Python. 475 00:22:58,180 --> 00:23:00,430 But I'm going to do it a little differently this year. 476 00:23:00,430 --> 00:23:03,580 How do I engage students online? 477 00:23:03,580 --> 00:23:09,400 Well, what I've done online, again, is that in the past I never really 478 00:23:09,400 --> 00:23:13,420 assigned the CS50 lectures to watch for homework, because I didn't really-- 479 00:23:13,420 --> 00:23:18,010 I knew that all students didn't, at that time, have computers available to them 480 00:23:18,010 --> 00:23:18,970 at home. 481 00:23:18,970 --> 00:23:21,010 Most of them did, but there were always a few that didn't, so I 482 00:23:21,010 --> 00:23:22,240 didn't think that was fair. 483 00:23:22,240 --> 00:23:24,820 I would make it optional, but it wasn't required this year. 484 00:23:24,820 --> 00:23:27,070 When we were remote, everybody had a computer at home, 485 00:23:27,070 --> 00:23:29,890 so I assigned to watch some of the CS50 lectures. 486 00:23:29,890 --> 00:23:33,432 Portions, like two chapters, for homework, and then 487 00:23:33,432 --> 00:23:35,140 I would do a couple of warm up questions, 488 00:23:35,140 --> 00:23:39,113 just at the beginning of class, to see who was familiar with that material. 489 00:23:39,113 --> 00:23:41,530 And then I would pretty quickly have them working together 490 00:23:41,530 --> 00:23:42,500 in breakout rooms. 491 00:23:42,500 --> 00:23:44,680 So for the most part, most of the class time 492 00:23:44,680 --> 00:23:46,900 was the students working together in breakout rooms, 493 00:23:46,900 --> 00:23:49,287 solving problems, collaborating, and then I 494 00:23:49,287 --> 00:23:51,370 would pop around and visit all the breakout rooms. 495 00:23:51,370 --> 00:23:52,750 And I'd let them work with their friends, 496 00:23:52,750 --> 00:23:54,500 because they didn't really have the chance 497 00:23:54,500 --> 00:23:56,390 to socialize like they normally would. 498 00:23:56,390 --> 00:24:01,390 So I would pop into the various breakout rooms and have conversations with them 499 00:24:01,390 --> 00:24:05,740 and just try to keep the excitement going. 500 00:24:05,740 --> 00:24:09,720 So that was basically what I did. 501 00:24:09,720 --> 00:24:14,360 So I'm seeing children 10, 12 years old, Python first? 502 00:24:14,360 --> 00:24:15,570 You know, whatever. 503 00:24:15,570 --> 00:24:18,600 I think that C with the training wheels. 504 00:24:18,600 --> 00:24:23,100 Just-- I mean, I would never do the more advanced Units, 505 00:24:23,100 --> 00:24:32,040 but I think certainly Week 1 in C can be done by middle school kids well. 506 00:24:32,040 --> 00:24:34,200 I think it's pretty straightforward, and the syntax 507 00:24:34,200 --> 00:24:37,500 is really beneficial, because it's so similar to JavaScript or Java, 508 00:24:37,500 --> 00:24:42,090 once you get familiar with the curly braces and the semicolons. 509 00:24:42,090 --> 00:24:44,670 But I think there's so many different ways to start teaching. 510 00:24:44,670 --> 00:24:46,587 You could just do simple stuff in Python, too, 511 00:24:46,587 --> 00:24:49,508 and that may be a little less frustrating for kids. 512 00:24:49,508 --> 00:24:51,300 They don't have to compile, they don't have 513 00:24:51,300 --> 00:24:52,925 to worry about data types and all that. 514 00:24:52,925 --> 00:24:55,050 So all right. 515 00:24:55,050 --> 00:24:57,180 OK, so I was going to go on, if that's OK, 516 00:24:57,180 --> 00:25:02,670 I was going to show one of the problems and how I tweaked it 517 00:25:02,670 --> 00:25:05,385 to basically satisfy the Create task. 518 00:25:05,385 --> 00:25:07,260 All right and then feel free, also, just feel 519 00:25:07,260 --> 00:25:11,490 free to ask more questions when they come up. 520 00:25:11,490 --> 00:25:15,510 So this is my IDE, and this is a version of Scrabble. 521 00:25:15,510 --> 00:25:19,980 So Scrabble, as I said, there's a CS50 problem spec for it. 522 00:25:19,980 --> 00:25:22,607 It was done at Harvard last year as a lab. 523 00:25:22,607 --> 00:25:24,690 Not in the lab environment, but basically practice 524 00:25:24,690 --> 00:25:27,990 problem before getting into the Unit 1 problems. 525 00:25:27,990 --> 00:25:32,760 And what it is, it assigns points to each letter in a word. 526 00:25:32,760 --> 00:25:35,887 And so an array is necessary, or certainly 527 00:25:35,887 --> 00:25:37,720 makes the coding much more efficient, right? 528 00:25:37,720 --> 00:25:40,928 Because without an array, you would have to have like if-else statements that 529 00:25:40,928 --> 00:25:42,810 go, like, a chain of 26 statements, which 530 00:25:42,810 --> 00:25:45,750 would be really inefficient coding. 531 00:25:45,750 --> 00:25:50,860 And the problem spec itself does have you make a function. 532 00:25:50,860 --> 00:25:52,890 So they really give you the function prototype, 533 00:25:52,890 --> 00:25:56,490 and you're basically getting two words, two strings, 534 00:25:56,490 --> 00:25:59,970 and you're using the compute_score function to calculate the score. 535 00:25:59,970 --> 00:26:03,380 And then this part would be the part that would be part of the problem 536 00:26:03,380 --> 00:26:04,380 that you would complete. 537 00:26:04,380 --> 00:26:06,250 You would just say who wins. 538 00:26:06,250 --> 00:26:07,710 And then you have the score. 539 00:26:07,710 --> 00:26:09,820 So, normally you would just need to do this. 540 00:26:09,820 --> 00:26:15,300 You would just need to iterate through every letter in the word, 541 00:26:15,300 --> 00:26:19,530 and then add up the points depending on what letter it is, right? 542 00:26:19,530 --> 00:26:23,190 You're using the ASCII code, making it uppercase, subtracting capital A, 543 00:26:23,190 --> 00:26:25,680 so it's going to correspond from 0 to 25, 544 00:26:25,680 --> 00:26:28,980 and then that's going to correspond to an index in the points array. 545 00:26:28,980 --> 00:26:35,130 And so using that array is not the only way to write the program, 546 00:26:35,130 --> 00:26:39,450 but tremendously more efficient than not using an array. 547 00:26:39,450 --> 00:26:43,200 But this, I mean, barely doesn't really satisfy that criteria that much, 548 00:26:43,200 --> 00:26:45,690 because there's no if statement in there. 549 00:26:45,690 --> 00:26:48,810 So what I thought is if we just have one little statement here 550 00:26:48,810 --> 00:26:52,860 that says if-- in Scrabble, you're not allowed to have a word with one letter 551 00:26:52,860 --> 00:26:53,670 on it, right? 552 00:26:53,670 --> 00:26:55,680 There's no points for a one letter word. 553 00:26:55,680 --> 00:26:59,160 So I just added this one little thing, if the length of the word 554 00:26:59,160 --> 00:27:01,200 is just one character wrong, return zero. 555 00:27:01,200 --> 00:27:07,140 Now you have your selection, and if you put in a word of one letter, 556 00:27:07,140 --> 00:27:10,170 you have a whole different branch of this function 557 00:27:10,170 --> 00:27:12,720 that you're going to complete than if you 558 00:27:12,720 --> 00:27:14,320 have a letter of multiple characters. 559 00:27:14,320 --> 00:27:18,960 So in my thinking, this would really satisfy the criteria for the Create. 560 00:27:18,960 --> 00:27:21,850 There's already a problem spec written for it. 561 00:27:21,850 --> 00:27:26,820 And the only, only difference-- the check50 would have to be tweaked-- 562 00:27:26,820 --> 00:27:29,680 the only difference is adding this one little criteria here. 563 00:27:29,680 --> 00:27:33,487 So that was one thing I thought could work pretty well. 564 00:27:33,487 --> 00:27:34,570 And it's a Unit 1 program. 565 00:27:34,570 --> 00:27:36,695 It's not that hard, and it's kind of a fun program. 566 00:27:36,695 --> 00:27:38,020 You're thinking about a game. 567 00:27:38,020 --> 00:27:40,740 And so what I was thinking is that-- and I haven't done this yet. 568 00:27:40,740 --> 00:27:43,110 Again, I'm going to plan on doing this next year, 569 00:27:43,110 --> 00:27:48,690 have students do this in unit 1 as one of the problems sets. 570 00:27:48,690 --> 00:27:52,630 And then have them write up the response to Create based on this. 571 00:27:52,630 --> 00:27:59,460 Another thing I thought for Unit 2 could be a modification of Substitution. 572 00:27:59,460 --> 00:28:02,460 So Substitution is a CS50 problem where you're 573 00:28:02,460 --> 00:28:09,577 using at the command line a jumbled up alphabet that you substitute, 574 00:28:09,577 --> 00:28:11,910 depending on the position of the letter of the alphabet, 575 00:28:11,910 --> 00:28:15,090 you substitute that letter for the letter in the plaintext. 576 00:28:15,090 --> 00:28:20,760 And so there's various uses of arrays. 577 00:28:20,760 --> 00:28:23,640 578 00:28:23,640 --> 00:28:26,790 I created a tweaked version of this for the problem spec. 579 00:28:26,790 --> 00:28:31,590 I made sure there was a function that returned true or false in order 580 00:28:31,590 --> 00:28:33,090 to validate the key. 581 00:28:33,090 --> 00:28:38,290 And then there is an array, also, that's used, 582 00:28:38,290 --> 00:28:45,360 which makes it is it possible to save the letters that are going 583 00:28:45,360 --> 00:28:48,700 to be printed out in the ciphertext. 584 00:28:48,700 --> 00:28:52,230 So what I did, basically, which is a little bit different, 585 00:28:52,230 --> 00:28:55,020 is that I created a function. 586 00:28:55,020 --> 00:28:58,980 And we have here another array, that just tells if the letter was used 587 00:28:58,980 --> 00:29:02,520 or not, which is similar to the way you might do it with the standard problem 588 00:29:02,520 --> 00:29:04,608 spec, but it's not required to have a function. 589 00:29:04,608 --> 00:29:06,900 So I thought this would be great to have my students do 590 00:29:06,900 --> 00:29:10,420 this, requiring the function, tweaking the problem spec. 591 00:29:10,420 --> 00:29:15,000 And then over here, if they validate the key 592 00:29:15,000 --> 00:29:18,660 in a function, if they find one letter in the key that's 593 00:29:18,660 --> 00:29:21,540 not an alphabetic character, or if they find one of the letters 594 00:29:21,540 --> 00:29:25,195 was already used, a repeated letter, you return false. 595 00:29:25,195 --> 00:29:27,570 And if you don't return false, you go through everything, 596 00:29:27,570 --> 00:29:32,010 and there's nothing wrong with anything in that key, you return true. 597 00:29:32,010 --> 00:29:36,880 So again, two different branches and the key-- 598 00:29:36,880 --> 00:29:39,510 depending on what the key is, the key with repetitive letters, 599 00:29:39,510 --> 00:29:43,200 or key with a letter that's not alphabetic, 600 00:29:43,200 --> 00:29:45,160 will return a different branch of the function. 601 00:29:45,160 --> 00:29:47,350 So it seems to me this could work as well. 602 00:29:47,350 --> 00:29:51,330 And in addition, there is a requirement of having an array, 603 00:29:51,330 --> 00:29:54,600 and you do have to have an array in order 604 00:29:54,600 --> 00:29:57,780 to have a place to store the letters in a meaningful way, 605 00:29:57,780 --> 00:30:01,510 to be able to output them when you're outputting the ciphertext. 606 00:30:01,510 --> 00:30:06,300 So again, I am not sure if CS50 wants to kind of tweak the problem spec, 607 00:30:06,300 --> 00:30:09,120 if Bernie or Carter would want to do that, 608 00:30:09,120 --> 00:30:11,200 or I'm happy to do that and share that. 609 00:30:11,200 --> 00:30:17,130 But I thought that would be really beneficial to use problems like that 610 00:30:17,130 --> 00:30:19,820 in the course of teaching the material. 611 00:30:19,820 --> 00:30:20,820 Do you know what I mean? 612 00:30:20,820 --> 00:30:24,060 Not just when we're ready for the Create test, now, 613 00:30:24,060 --> 00:30:27,990 but as we're going through the material with every unit, we have a function, 614 00:30:27,990 --> 00:30:31,492 we have parameter, we have selection, we have iteration. 615 00:30:31,492 --> 00:30:32,700 We have all the requirements. 616 00:30:32,700 --> 00:30:36,240 At the time, after the students get even, 617 00:30:36,240 --> 00:30:39,385 just, done with, maybe, the Scratch project and unit 1, 618 00:30:39,385 --> 00:30:41,010 they're ready to write the Create test. 619 00:30:41,010 --> 00:30:42,870 They don't even need unit 2. 620 00:30:42,870 --> 00:30:46,230 But maybe, I was thinking of having them do it like Unit-- 621 00:30:46,230 --> 00:30:50,700 maybe the little Scratch thing, for practice, Unit 1, Unit 2. 622 00:30:50,700 --> 00:30:52,170 Maybe at that point, we'll see. 623 00:30:52,170 --> 00:30:56,490 Or maybe not have them do the Create test. 624 00:30:56,490 --> 00:30:58,770 Also in Unit 3 there already is a problem 625 00:30:58,770 --> 00:31:01,990 called Plurality, a voting problem. 626 00:31:01,990 --> 00:31:04,080 And in that problem there's a linear search, 627 00:31:04,080 --> 00:31:07,350 and so that also could function as a pre-test. 628 00:31:07,350 --> 00:31:10,620 Although it's probably a much more complicated program than most students 629 00:31:10,620 --> 00:31:13,787 are going to actually write on their own, in that you're really just writing 630 00:31:13,787 --> 00:31:14,910 two functions. 631 00:31:14,910 --> 00:31:19,355 And the other thing I thought was really important was to have students-- 632 00:31:19,355 --> 00:31:21,840 let me find my slides again here-- 633 00:31:21,840 --> 00:31:25,560 to have students actually write the function call. 634 00:31:25,560 --> 00:31:27,595 I've had a lot of problems with my students. 635 00:31:27,595 --> 00:31:30,720 I just find one of the hardest things for them sometimes- not all students, 636 00:31:30,720 --> 00:31:34,540 but some students-- is to really understand the idea of a function. 637 00:31:34,540 --> 00:31:38,190 And since they have to have a screen capture of the function call, 638 00:31:38,190 --> 00:31:41,820 and a screen capture the function itself. 639 00:31:41,820 --> 00:31:45,210 Also, to be honest, online some students were a little checked out. 640 00:31:45,210 --> 00:31:47,460 So it was hard to know if they just weren't listening, 641 00:31:47,460 --> 00:31:50,560 or if it just was a very difficult concept to understand. 642 00:31:50,560 --> 00:31:53,837 But I think what I'm going to do with these programs this year is not give 643 00:31:53,837 --> 00:31:56,670 them the function definition, and just have them complete the to do, 644 00:31:56,670 --> 00:31:58,540 but actually make them write the whole function, 645 00:31:58,540 --> 00:32:01,040 including the function definition, including the parameters, 646 00:32:01,040 --> 00:32:02,560 and including the function call. 647 00:32:02,560 --> 00:32:06,030 So that it's very clear to them, by the time they get finished with Unit 2, 648 00:32:06,030 --> 00:32:08,948 or Week 2, that this is how you write a function, 649 00:32:08,948 --> 00:32:11,490 this is what a function call is, this is what a parameter is. 650 00:32:11,490 --> 00:32:14,098 This is what we mean also by iteration and selection, which 651 00:32:14,098 --> 00:32:16,140 is a little bit of a different terminology there. 652 00:32:16,140 --> 00:32:18,015 We might just use a loop and an if statement. 653 00:32:18,015 --> 00:32:21,990 But just to make sure that it's totally, totally familiar. 654 00:32:21,990 --> 00:32:26,220 So that was what I was thinking for C. And I said anything 655 00:32:26,220 --> 00:32:28,380 with a linear search function. 656 00:32:28,380 --> 00:32:31,450 And then in Python, I wrote a program. 657 00:32:31,450 --> 00:32:33,060 I don't a program spec for it. 658 00:32:33,060 --> 00:32:35,710 I used it as a demo program again. 659 00:32:35,710 --> 00:32:38,880 And so what that was was-- 660 00:32:38,880 --> 00:32:43,830 if I can find it here, I think it it's in my IDE under Create, Scramble-- 661 00:32:43,830 --> 00:32:48,390 I made a program where they had to-- 662 00:32:48,390 --> 00:32:50,680 I had this simple little list-- 663 00:32:50,680 --> 00:32:51,180 where is it? 664 00:32:51,180 --> 00:32:56,040 Word list-- that I imported as a CSV file, or as a text file. 665 00:32:56,040 --> 00:33:02,320 And then I scrambled up, using Python, I scrambled the letters in that word. 666 00:33:02,320 --> 00:33:08,670 And then I created a function, check_word, where-- 667 00:33:08,670 --> 00:33:12,390 I found, in Python, that it was quite difficult to come up 668 00:33:12,390 --> 00:33:18,840 with meaningful ways of using iteration and a conditional without sometimes 669 00:33:18,840 --> 00:33:20,670 using bad Python. 670 00:33:20,670 --> 00:33:26,430 So in any case, I put the selection in here 671 00:33:26,430 --> 00:33:29,730 by checking if the length of the guess wasn't equal to the length of the word. 672 00:33:29,730 --> 00:33:32,650 I put a lot of comments in here to make it clear this is selection, 673 00:33:32,650 --> 00:33:36,460 this is iteration, and letter by letter. 674 00:33:36,460 --> 00:33:38,070 So why did I have iteration? 675 00:33:38,070 --> 00:33:41,370 In Python, I could have just compared one word to the other are very easily, 676 00:33:41,370 --> 00:33:46,740 but in order to have the iteration, I ended up creating a loop. 677 00:33:46,740 --> 00:33:54,470 So again, I felt that in Python, because of the power of Python, 678 00:33:54,470 --> 00:33:59,450 it was a little bit more challenging to come up with a good program that 679 00:33:59,450 --> 00:34:00,740 wasn't bad Python. 680 00:34:00,740 --> 00:34:03,240 Because as I said, I-- 681 00:34:03,240 --> 00:34:05,450 let me go back to my slides, hang on-- 682 00:34:05,450 --> 00:34:09,170 in Python, I felt that it's just so powerful 683 00:34:09,170 --> 00:34:12,469 that it was hard, sometimes, to do it. 684 00:34:12,469 --> 00:34:14,510 I ended up teaching my students bad Python. 685 00:34:14,510 --> 00:34:18,440 Like, don't just say if something in a list, 686 00:34:18,440 --> 00:34:21,469 because the AP reader may not recognize that that's iteration, 687 00:34:21,469 --> 00:34:23,510 that's a linear search. 688 00:34:23,510 --> 00:34:24,780 And then also substitution. 689 00:34:24,780 --> 00:34:28,429 You could do it in Python, create a converted program spec, as well, 690 00:34:28,429 --> 00:34:32,219 if you wanted to stress Python with students. 691 00:34:32,219 --> 00:34:34,850 So some of the areas where I found students struggling, also, 692 00:34:34,850 --> 00:34:38,179 as an AP reader, and I saw somebody mentioned this, yesterday, also, 693 00:34:38,179 --> 00:34:41,449 where students lost points. 694 00:34:41,449 --> 00:34:43,860 There were a lot of lost points on the Create test. 695 00:34:43,860 --> 00:34:47,812 So when I was grading the Create test, I very rarely gave anybody 6 points. 696 00:34:47,812 --> 00:34:50,270 And again, a lot of them were done in block based programs. 697 00:34:50,270 --> 00:34:52,070 A lot of them used the same-- 698 00:34:52,070 --> 00:34:54,530 they must have had, in one of the curriculums, 699 00:34:54,530 --> 00:35:00,478 the same exact sample problems, where they got a little bit of sample data, 700 00:35:00,478 --> 00:35:03,270 and they got a column from it, and they got another column from it, 701 00:35:03,270 --> 00:35:07,340 and then they had indices of the arrays that corresponded to each other. 702 00:35:07,340 --> 00:35:09,720 And they did a linear search to find something, 703 00:35:09,720 --> 00:35:13,340 found the item in the other list, over and over and over again. 704 00:35:13,340 --> 00:35:16,910 But the idea where a lot of points were lost was purpose versus function. 705 00:35:16,910 --> 00:35:19,940 And quite honestly, I would have lost a point on that, too. 706 00:35:19,940 --> 00:35:21,680 I should have seen it, but I just didn't. 707 00:35:21,680 --> 00:35:28,320 So purpose really had to be regarding the user. 708 00:35:28,320 --> 00:35:32,030 So if I had this grading program, right, if I said the purpose 709 00:35:32,030 --> 00:35:34,550 was to calculate a letter grade-- 710 00:35:34,550 --> 00:35:36,522 that's what the program does-- 711 00:35:36,522 --> 00:35:38,480 I would have to say something like, the purpose 712 00:35:38,480 --> 00:35:41,960 was to help a teacher easily find the letter 713 00:35:41,960 --> 00:35:43,940 grade for a series of number grades. 714 00:35:43,940 --> 00:35:47,330 So the semantics, the little bit of language, 715 00:35:47,330 --> 00:35:49,762 was enormously made a big difference in that point. 716 00:35:49,762 --> 00:35:52,220 And it's kind of a shame, because there were so many things 717 00:35:52,220 --> 00:35:53,540 students had to do for that row, right? 718 00:35:53,540 --> 00:35:54,680 They had to make a video. 719 00:35:54,680 --> 00:35:58,050 They had to talk about what the program did in more detail. 720 00:35:58,050 --> 00:36:01,820 And yet many, many, many students lost a point on that, 721 00:36:01,820 --> 00:36:04,520 because they simply didn't talk about the purpose 722 00:36:04,520 --> 00:36:08,750 as the purpose of the program from the user's point of view. 723 00:36:08,750 --> 00:36:12,890 Also, a list has to be purposeful, so some students have a list, 724 00:36:12,890 --> 00:36:15,350 but didn't really have a list that did very much, 725 00:36:15,350 --> 00:36:18,150 or was necessary to the program. 726 00:36:18,150 --> 00:36:22,880 Another area points were often lost were how the list manages complexity. 727 00:36:22,880 --> 00:36:27,630 Basically, not really giving a good rationale for why there was a list. 728 00:36:27,630 --> 00:36:30,410 So that was really necessary. 729 00:36:30,410 --> 00:36:33,980 Also, noting that the iteration of the list has to be purposeful. 730 00:36:33,980 --> 00:36:37,760 So you could have a function that has iteration, 731 00:36:37,760 --> 00:36:40,640 but if the iteration doesn't really result in anything, 732 00:36:40,640 --> 00:36:43,220 it doesn't really do anything, you lose the point on that. 733 00:36:43,220 --> 00:36:45,607 Another big area for students losing points 734 00:36:45,607 --> 00:36:48,440 was describing how the function contributed to overall functionality 735 00:36:48,440 --> 00:36:49,710 of the program. 736 00:36:49,710 --> 00:36:53,660 A lot of people describe what the function did, but didn't really connect 737 00:36:53,660 --> 00:36:55,352 it to the whole program. 738 00:36:55,352 --> 00:36:56,060 And it's a shame. 739 00:36:56,060 --> 00:36:59,670 A lot of these programs could have been really great programs, 740 00:36:59,670 --> 00:37:03,680 but again, because of the way the response was written up, 741 00:37:03,680 --> 00:37:05,410 they lost the point. 742 00:37:05,410 --> 00:37:08,400 A lot of confusion about two hypothetical function calls. 743 00:37:08,400 --> 00:37:11,062 So the last of the questions, for row 6, they 744 00:37:11,062 --> 00:37:12,770 asked about two different function calls. 745 00:37:12,770 --> 00:37:16,040 A lot of people interpreted that as two calls in the program. 746 00:37:16,040 --> 00:37:19,130 It was really just too hypothetical calls 747 00:37:19,130 --> 00:37:24,040 with different arguments passing the function, 748 00:37:24,040 --> 00:37:25,790 and then write about how each one of those 749 00:37:25,790 --> 00:37:28,340 causes a different branch of your iteration 750 00:37:28,340 --> 00:37:30,715 to execute a different branch of the function to execute. 751 00:37:30,715 --> 00:37:33,715 There was a lot of confusion about the function call versus the function 752 00:37:33,715 --> 00:37:34,530 definition. 753 00:37:34,530 --> 00:37:37,940 So these were things that I plan on, again, 754 00:37:37,940 --> 00:37:41,780 by allowing them to not just do like one practice test that takes almost 755 00:37:41,780 --> 00:37:44,760 a month, but really just have them work on problem specs, 756 00:37:44,760 --> 00:37:48,540 now, where they're doing these things as part of the curriculum, 757 00:37:48,540 --> 00:37:49,860 and then having them write up-- 758 00:37:49,860 --> 00:37:52,610 I usually have them write a reflection, as Doug was talking about. 759 00:37:52,610 --> 00:37:55,812 And I got that idea from Doug in year one that I was doing this. 760 00:37:55,812 --> 00:37:58,770 I usually have them write a reflection about their development process. 761 00:37:58,770 --> 00:38:03,980 So instead, I'm going to have them write up the responses to the Create task. 762 00:38:03,980 --> 00:38:10,040 So other issues that came up was that the written response asks 763 00:38:10,040 --> 00:38:13,580 you to describe, of course, what your procedure does, 764 00:38:13,580 --> 00:38:17,090 and how it contributes to the program, and that whole response 765 00:38:17,090 --> 00:38:20,060 is supposed to be in enough detail for somebody else to recreate it. 766 00:38:20,060 --> 00:38:22,800 That whole response is supposed to be done in 200 words. 767 00:38:22,800 --> 00:38:24,800 I mean, of course you could go a little over 200 768 00:38:24,800 --> 00:38:29,490 if the whole response was supposed to be for the entire written response, 750 769 00:38:29,490 --> 00:38:31,490 line, but they give you the extra 100 as leeway. 770 00:38:31,490 --> 00:38:33,830 But after that, they cut off typing words 771 00:38:33,830 --> 00:38:35,750 into these little boxes they give you. 772 00:38:35,750 --> 00:38:38,480 So it's just another thing to keep in mind, 773 00:38:38,480 --> 00:38:42,230 when students are trying to create that's too complicated, it becomes 774 00:38:42,230 --> 00:38:45,240 difficult to do that in such a short period of time, 775 00:38:45,240 --> 00:38:46,740 such a short number of words. 776 00:38:46,740 --> 00:38:51,230 So Yeah, I'm looking at some of the comments here. 777 00:38:51,230 --> 00:38:53,820 778 00:38:53,820 --> 00:38:57,540 Yeah, so I'm looking at someone commenting that-- 779 00:38:57,540 --> 00:39:00,830 Matthew said, I don't think you can do the Performance task too early. 780 00:39:00,830 --> 00:39:03,330 [INAUDIBLE] your students not sophisticated enough to answer 781 00:39:03,330 --> 00:39:03,840 questions. 782 00:39:03,840 --> 00:39:06,750 Yeah, no, I do tend to agree. 783 00:39:06,750 --> 00:39:10,260 I don't wait until the end, though, because I have mostly 784 00:39:10,260 --> 00:39:13,470 seniors in my AP class, and quite honestly, toward the end of the year, 785 00:39:13,470 --> 00:39:16,498 they were already admitted to college, they're half checked out. 786 00:39:16,498 --> 00:39:19,290 The first year I did this, I had them do it at the end of the year, 787 00:39:19,290 --> 00:39:25,680 and there was already a waning enthusiasm for school. 788 00:39:25,680 --> 00:39:26,880 Senioritis and all that. 789 00:39:26,880 --> 00:39:31,050 So I really need to do it, I think, at the end of the fir-- this year 790 00:39:31,050 --> 00:39:34,065 I did it at the beginning of second semester, 791 00:39:34,065 --> 00:39:36,690 because I was teaching them Python, and Python was new to them. 792 00:39:36,690 --> 00:39:37,940 And we had such short classes. 793 00:39:37,940 --> 00:39:38,732 They weren't ready. 794 00:39:38,732 --> 00:39:40,773 But this year I'm going to, I think, I'm probably 795 00:39:40,773 --> 00:39:43,350 going to do it as part of what we do in semester one. 796 00:39:43,350 --> 00:39:46,630 Because I think by that time, they should have enough experience, 797 00:39:46,630 --> 00:39:48,450 particularly if we do these problems. 798 00:39:48,450 --> 00:39:51,180 With problem specs and written responses, 799 00:39:51,180 --> 00:39:57,600 they should have enough time to do it by the end of semester one. 800 00:39:57,600 --> 00:39:59,768 So, yeah, the function has to be on the simple side, 801 00:39:59,768 --> 00:40:01,560 but yet, it has to have these requirements. 802 00:40:01,560 --> 00:40:03,310 And again, as I was saying before, I think 803 00:40:03,310 --> 00:40:06,900 I just found it much harder to come up with an appropriate function in Python 804 00:40:06,900 --> 00:40:11,160 than in C. Because Python you don't even have to have a lot of code 805 00:40:11,160 --> 00:40:14,040 to iterate through something, to get a max or a min or an average. 806 00:40:14,040 --> 00:40:18,150 I mean, you can but it's not really good Python, right? 807 00:40:18,150 --> 00:40:20,250 And I remember in one of the programs-- 808 00:40:20,250 --> 00:40:23,030 I was converting Plurality to have them-- 809 00:40:23,030 --> 00:40:25,530 I thought it's a great program, so I converted it to Python. 810 00:40:25,530 --> 00:40:28,237 I rewrote the program spec to do it in Python. 811 00:40:28,237 --> 00:40:30,570 And then I got to the vote function, and I was thinking, 812 00:40:30,570 --> 00:40:32,040 Oh it should be "if name in names". 813 00:40:32,040 --> 00:40:37,257 You're looking to see if the name of the candidate is in the names-- 814 00:40:37,257 --> 00:40:39,340 I forget what it is, I guess the names dictionary. 815 00:40:39,340 --> 00:40:40,922 So, "if name in names". 816 00:40:40,922 --> 00:40:42,630 That's how you would do it Python, right? 817 00:40:42,630 --> 00:40:43,338 And what is that? 818 00:40:43,338 --> 00:40:44,250 It's a linear search. 819 00:40:44,250 --> 00:40:47,490 But when I posted that question on the AP discussion board, 820 00:40:47,490 --> 00:40:52,850 I was told that the reader may not recognize that as a loop, 821 00:40:52,850 --> 00:40:55,430 so you better not teach them very sophisticated way to do it. 822 00:40:55,430 --> 00:40:56,490 Do it very simple. 823 00:40:56,490 --> 00:41:00,530 So here I am having to teach my students to say, for name in names, 824 00:41:00,530 --> 00:41:02,360 if name equals equals whatever. 825 00:41:02,360 --> 00:41:04,700 The name that's given, return true. 826 00:41:04,700 --> 00:41:08,400 So whereas in C, you're forced to do it that way. 827 00:41:08,400 --> 00:41:12,740 So that's why I'm more convinced this year than in past years 828 00:41:12,740 --> 00:41:17,450 that it may be easier to come up with a simple function in C 829 00:41:17,450 --> 00:41:20,215 than trying to do something in Python. 830 00:41:20,215 --> 00:41:21,590 So again, these were some of my-- 831 00:41:21,590 --> 00:41:23,960 I just already said this, some of their own personal experiences 832 00:41:23,960 --> 00:41:25,490 that I give in the short classes. 833 00:41:25,490 --> 00:41:28,070 I started the year, pretty much, with Python, 834 00:41:28,070 --> 00:41:32,120 and ended up teaching in bad Python for this task, which I really 835 00:41:32,120 --> 00:41:33,690 felt terrible about. 836 00:41:33,690 --> 00:41:37,310 And I also made a bunch of different slides and videos guiding students 837 00:41:37,310 --> 00:41:37,850 to Create. 838 00:41:37,850 --> 00:41:39,230 I put that in a Google folder. 839 00:41:39,230 --> 00:41:40,340 I'll share that with you. 840 00:41:40,340 --> 00:41:48,650 And because some of the things I found students doing was just 841 00:41:48,650 --> 00:41:49,890 taking way too much time. 842 00:41:49,890 --> 00:41:51,770 So I'll just share that with you quickly. 843 00:41:51,770 --> 00:41:54,500 I'm running out of time, I realize I'm talking a lot. 844 00:41:54,500 --> 00:41:57,080 So I did this type of thing, and I shared it in here. 845 00:41:57,080 --> 00:42:02,057 Some of this really needs to be tweaked, but just really taking a look at all 846 00:42:02,057 --> 00:42:04,640 the different steps you need for the Create Performance Task-- 847 00:42:04,640 --> 00:42:07,432 because a lot of students think it's just about writing a program-- 848 00:42:07,432 --> 00:42:09,020 that you have to do all this. 849 00:42:09,020 --> 00:42:12,350 And coding the program, troubleshooting, testing, refining, repeating, 850 00:42:12,350 --> 00:42:14,060 that's just a little part of the process. 851 00:42:14,060 --> 00:42:15,330 That's not the whole thing. 852 00:42:15,330 --> 00:42:18,170 And so I also tried to clarify College Board terms, 853 00:42:18,170 --> 00:42:21,770 and that your program has to have all these things in it. 854 00:42:21,770 --> 00:42:24,200 Some reasons why students may want a list. 855 00:42:24,200 --> 00:42:26,540 Some ideas on why you might want a dictionary if you're 856 00:42:26,540 --> 00:42:29,240 doing it in Python, et cetera. 857 00:42:29,240 --> 00:42:32,810 So those were some of the things that I did, and everything 858 00:42:32,810 --> 00:42:34,430 is in the Google folder that I shared. 859 00:42:34,430 --> 00:42:37,400 So moving on, I think I pretty much finished this. 860 00:42:37,400 --> 00:42:40,370 That just too much time-- and even with all of that, I made videos, 861 00:42:40,370 --> 00:42:43,820 I explained it all, I walked through stuff, I walked through my samples, 862 00:42:43,820 --> 00:42:48,480 and still students spend most of their time coding their programs. 863 00:42:48,480 --> 00:42:52,040 So I'm hoping this year, having more familiarity with what these functions 864 00:42:52,040 --> 00:42:54,350 are going to look like, and simple programs that 865 00:42:54,350 --> 00:42:57,560 could satisfy the criteria, it'll be a little more straightforward. 866 00:42:57,560 --> 00:43:01,940 Some of the things I did to augment the curriculum for the multiple choice exam 867 00:43:01,940 --> 00:43:06,560 is that I created a series of searching and sorting labs, 868 00:43:06,560 --> 00:43:09,530 doing linear search, binary search, bubble sort, selection sort, 869 00:43:09,530 --> 00:43:11,960 even merge sort, which I never really assigned 870 00:43:11,960 --> 00:43:15,200 because it's a little more difficult. If one or two students are curious, 871 00:43:15,200 --> 00:43:18,350 I had them work on that, optionally. 872 00:43:18,350 --> 00:43:20,330 And those were labs in the lab environment, 873 00:43:20,330 --> 00:43:23,533 with the specs on the left, so that they could work on their own. 874 00:43:23,533 --> 00:43:26,450 And I assigned those for homework, and then we went over them together 875 00:43:26,450 --> 00:43:27,050 in class. 876 00:43:27,050 --> 00:43:32,540 I also created some labs-- and I shared all of these in the Google Doc folder-- 877 00:43:32,540 --> 00:43:33,920 using a simulation. 878 00:43:33,920 --> 00:43:38,720 So when you get far enough into the CS50 curriculum, into SQL, 879 00:43:38,720 --> 00:43:42,230 you start to see some ideas of cleaning data, et cetera, 880 00:43:42,230 --> 00:43:44,080 to be able to do data analysis. 881 00:43:44,080 --> 00:43:46,080 But I also wanted them to see programs that used 882 00:43:46,080 --> 00:43:49,010 a random function to do simulation. 883 00:43:49,010 --> 00:43:53,540 And so I created a lab that does that, including a simple little program, 884 00:43:53,540 --> 00:43:55,580 similar to the AP problems, where you want 885 00:43:55,580 --> 00:43:58,460 to simulate 80% of the students getting a particular grade using 886 00:43:58,460 --> 00:43:59,630 a random function. 887 00:43:59,630 --> 00:44:01,205 And then also the Monty Hall problem. 888 00:44:01,205 --> 00:44:04,010 889 00:44:04,010 --> 00:44:08,090 Which again, it's in the lab with the specifications on the left. 890 00:44:08,090 --> 00:44:10,790 And then I, also, to help students understand more 891 00:44:10,790 --> 00:44:15,110 about cleaning data and visualization, I created a program, 892 00:44:15,110 --> 00:44:21,170 a COVID analysis program, where students had to actually clean data 893 00:44:21,170 --> 00:44:23,150 and in Python. 894 00:44:23,150 --> 00:44:26,900 There is a GitHub repo, and The New York Times 895 00:44:26,900 --> 00:44:29,420 has that, making it publicly available, of all the state 896 00:44:29,420 --> 00:44:30,960 data from the beginning of time. 897 00:44:30,960 --> 00:44:34,920 And so, I think it's over here, it's a link. 898 00:44:34,920 --> 00:44:39,200 So over here I made a Python program that-- 899 00:44:39,200 --> 00:44:40,940 using plotly, which is amazing-- 900 00:44:40,940 --> 00:44:46,130 a fairly simple program that outputs a graph like this. 901 00:44:46,130 --> 00:44:47,300 It creates an HTML file. 902 00:44:47,300 --> 00:44:50,150 You could then open it up with HTTP server in the IDE. 903 00:44:50,150 --> 00:44:51,980 And students really enjoyed this. 904 00:44:51,980 --> 00:44:55,010 And then I also gave them a file with the number 905 00:44:55,010 --> 00:44:59,420 of people at each state, which a file that had data that had to be cleaned. 906 00:44:59,420 --> 00:45:00,410 And so we worked on it. 907 00:45:00,410 --> 00:45:03,110 We cleaned the data together, and then completed this. 908 00:45:03,110 --> 00:45:06,770 And I have to say they really found it very relevant, obviously. 909 00:45:06,770 --> 00:45:08,280 They really enjoyed doing this. 910 00:45:08,280 --> 00:45:13,160 So that was something I did for the COVID analysis. 911 00:45:13,160 --> 00:45:16,040 And then for the internet part of the test 912 00:45:16,040 --> 00:45:20,660 I use some of the code.org videos, AP Classroom videos, et cetera, et cetera. 913 00:45:20,660 --> 00:45:26,300 And some ideas I had that I would be happy to share with people, 914 00:45:26,300 --> 00:45:29,840 or, again, if any other teachers would like to work on this, 915 00:45:29,840 --> 00:45:31,820 is that I thought it would be great to have-- 916 00:45:31,820 --> 00:45:35,600 you know how the AP Classroom has all these sample questions in it? 917 00:45:35,600 --> 00:45:40,730 I thought it'd be really nice to have a little quiz that goes with each unit, 918 00:45:40,730 --> 00:45:44,240 but the quiz also incorporates some of the pseudocode 919 00:45:44,240 --> 00:45:49,280 like sample questions that involve loops, or involve conditionals, 920 00:45:49,280 --> 00:45:50,900 or if else statements. 921 00:45:50,900 --> 00:45:53,690 And actually have students do these as quizzes 922 00:45:53,690 --> 00:45:57,860 with each week of the curriculum, so that it's not just doing-- 923 00:45:57,860 --> 00:46:00,500 up to now, I've mostly just done that type of test prep 924 00:46:00,500 --> 00:46:03,230 at the end of the year, before the multiple choice exam, 925 00:46:03,230 --> 00:46:07,490 but I think would be really effective to integrate it more as we go along. 926 00:46:07,490 --> 00:46:09,060 And I'd love to see that-- 927 00:46:09,060 --> 00:46:11,102 I don't know if Bernie and Carter are open to it, 928 00:46:11,102 --> 00:46:14,348 maybe even linked those little quizzes that use some of the AP questions, 929 00:46:14,348 --> 00:46:16,640 maybe linked-- and maybe it could be teacher resources, 930 00:46:16,640 --> 00:46:20,747 I don't know-- but linked to each week in the AP curriculum. 931 00:46:20,747 --> 00:46:23,330 And also just making sure to introduce some of the terminology 932 00:46:23,330 --> 00:46:27,270 that they use on the AP, procedure, selection, iteration, 933 00:46:27,270 --> 00:46:31,310 which is a little bit different than functions, if statements, and loops, 934 00:46:31,310 --> 00:46:35,140 which I tend to use with CS50. 935 00:46:35,140 --> 00:46:39,070 And again, also make sure they get more practice writing functions and function 936 00:46:39,070 --> 00:46:45,400 calls from earlier on, because I do find that's an area they always 937 00:46:45,400 --> 00:46:46,090 struggle with. 938 00:46:46,090 --> 00:46:47,230 And then just also using-- 939 00:46:47,230 --> 00:46:49,780 CS50 had some great labs they used last year 940 00:46:49,780 --> 00:46:53,470 as preparatory problems for their problem sets, 941 00:46:53,470 --> 00:46:55,900 and possibly incorporating more of those as well. 942 00:46:55,900 --> 00:46:59,470 Just to have more practice problems. 943 00:46:59,470 --> 00:47:03,990 So that's kind of it for my presentation. 944 00:47:03,990 --> 00:47:05,000