SPEAKER 1: Welcome, everyone, to our final session of the 2020 CS50 AP
Educator Workshop.
I'm going to begin by sharing my screen to give a brief overview,
and then I'm going to turn it over to our fantastic panelist teachers.
First, a reminder that if you have any feedback on any of the sessions,
here is that URL through which you can give feedback
to each of the sessions or just a few.
We-- as David is hinted at, over the coming days, some of these sessions
will be redelivered to members of the broader EdX community,
so your feedback is greatly appreciated and can
help us continue to improve the sessions and workshops for the future.
For our final session, we're going to hear from three outstanding teachers.
Each of them have prepared a bit for you all.
But broadly speaking, they're going to be going through who they are
and what they teach, how they've implemented CS50 AP curriculum,
and then what remote learning has looked like at their school.
That one is obviously a new consideration for all of us,
but hopefully they can give you insight into how they've
worked to implement it to help give you some ideas for how you might
be able to implement the CS50 AP curriculum in general and over
and via remote learning.
The three teachers are Jenny Barnes, Douglas Kiang, and Margaret Tanzosh.
I hope I did those last names OK.
And without further ado, we're going to start with Douglas,
so I'm going to turn it over to him.
And then throughout the presentation if you
have questions for that specific teacher, feel free to raise your hand,
and I can facilitate the asking of that.
Otherwise, if you have questions in general for everyone at the end,
we'll have plenty of time for that, too.
So Douglas, if you're ready, you can take it away.
DOUGLAS KIANG: Great, thank you.
Thanks so much.
I actually need to apologize in advance.
I can only stay for the first half.
I'm going to have to duck out at around 4:00.
But again, I am totally happy to take questions while I go.
Just sort of stop me.
But I asked to go first just for that reason.
The other thing is, I'm sort of partially
to blame for the new Create Tasks, since I kind of work
with the development committee.
I'm principal, so Jason and the CS50 team
had asked if I'd talk a little bit about the Create Performance
that if you teach AP, we're all going to need to do for next year.
It's a little bit different.
So I wanted to talk a little bit about that,
and then I also wanted to talk a little bit
and show you some examples of some of the stuff that our kids do.
So with that, I'm going to dive in.
Can I share my screen here?
All right, so are you looking at a slide that
says CS50 AP Create Performance Task?
SPEAKER 1: Yes.
DOUGLAS KIANG: Yes, OK, good.
So basically, the Create Performance Task is like an independent project
that you give to kids.
And generally, I think the intent is that it's done at the end of the year.
And you'll see that we actually do ours at the beginning of the year.
I do want to make a big disclaimer that I'm not speaking to you on behalf
of the college board right now.
I'm speaking to you as Douglas Kiang.
I'm a computer science teacher at Punahou School in Honolulu, Hawaii.
I'm about to move to Menlo School in Atherton, California,
but these are just some of the experiences that I've had with it.
And this is my own take on the Create Performance Tasks,
so I don't speak for the college board or for Harvard in this.
But probably, the best way to get a sense for how
are these tests going to be scored--
at the end of the year, your kids are going
to take a multiple choice exam which counts for 70% of their AP score,
and they're going to have to submit a video and a write up
of an independent project that they've done.
And if you go to the website, all of these things we're going to talk about,
specifically the scoring guidelines, which
I think is probably the most important document that you look at
and that your kids look at, these are the guidelines
and the rubric that say exactly how these projects are going to be scored.
And once you get a sense for how the new Create Task is going to be scored,
you'll get a sense for where in your school year
that best falls, and you'll talk to people
who have done all different things.
Now, I used to do it at the end of CS50.
The problem I found was that kids almost knew too much.
You'll see that it's actually a fairly simple task,
and sometimes you can really get overwhelmed with all the possibilities
for this task.
The other thing to realize is that these tests
are scored in June over a frantic seven or eight day period
by teachers from all across the country, and they are
whipping through these things quickly.
They're reading example after example after example.
It's actually a great experience.
If you are going to be teaching AP CS Principles,
get on the list to actually be a reader.
And then, you'll empathize with the fact that you've
got hundreds and hundreds of chronically under slept, over caffeinated teachers
trying to score these things quickly.
I felt that a lot of the projects that my kids did at the end of CS50,
a lot of them built off of CS50 finance, they were pretty complex.
Way more complex than most of what students were submitting to the point
where I think it almost makes it a disadvantage,
because you need to be able to write very clearly.
So a simpler task, I think, is better and will totally
satisfy everything you need to do for this particular task.
So our philosophy at Punahou has been, just get the Create Task out
of the way ahead of time and then spend the rest of the year focusing on CS50.
And then, when the kids do their independent project,
they don't have to worry about shoehorning
in any particular kinds of structures or things just
to meet the particulars of the task.
But here's the task for this year.
It's different, as I said, from how it's been typically.
But basically, if you are teaching an AP course,
you're required to give kids 12 hours of in-class time.
In-class used to be in the classroom.
Now, I'm not sure what that means, honestly.
12 hours of synchronous learning if you're doing synchronous learning.
I'm not sure.
But I would generally build in several weeks
of class time working on creating, coming up with the design,
and then coding their particular task.
And we do ours in the beginning of the year.
We use Scratch.
They need to produce a video.
What's new this year is they do not want kids audio narrating the video.
There is data that suggests that people can make inferences, correct or not,
about a child's gender or ethnicity from their voice,
and they want that to not be part of the equation at all.
And so typically, now what they're looking for
is a video with no audio at all.
And it just shows the program running.
They need to have a written response.
They need to highlight specific code segments.
And these are three of the things.
This is not an official College Board document.
This is a Douglas Kiang incomplete summary
just for the purposes of our discussion here.
So don't take this as gospel.
Look at the scoring guidelines on the website.
But basically, they're going to need to talk knowledgeably
about how their program takes in input and how it provides output.
So input could be something at the command line.
It could be data that was initialized at runtime.
It could be input coming from reading from a file.
Any of that stuff counts as input.
It could also be coming from a camera or something like that.
Could be kind of cool.
And then, the output in some way is something visually to the screen.
So the kids need to--
when they have the video, they need a written response
that goes along with the video that talks about the purpose of the program.
Plus, here's what the input is.
Here's what the output is.
And yes, I will make these slides available to people.
New this year is kids need to use a list of some sort or a collection.
So it could be a list.
Could be an array.
Could be a dictionary.
Could be a set.
Just some kind of collection type.
They need to show how data is stored in it and how it is used in the program.
And they also need to talk about how it manages complexity in the program
by making it easier to work with lots of different variables,
or it would be much harder to write this program if I didn't use the list
and this is why.
But they need to talk about that in some form.
And then finally, they need to have a procedure that
takes at least one parameter, and they need to talk about two different calls
to that procedure.
And each of those calls should execute a different portion of code.
So a great example would be like an if-else statement.
If it comes in in this range, it's going to do this thing.
Otherwise, it's going to do this completely other thing.
So that would satisfy that.
The scoring guidelines break out in great detail
with each of these rows are.
But basically, when we score the create task,
when your kids hand in an independent project, they've got the video,
they've got the write up, we basically go through a checklist like this.
There's six rows.
It's a binary rubric, so you either get one point, or you don't get a point.
And this is what each of the rows are, and the max on this is six points.
So the first row is, does the video show input how it works and the output,
and then does the write up describe those things?
And if you do both of those things, you get a point.
Row two of the rubric talks about, OK, in their response,
did they show how the data is stored?
So they can't just start with the list already pre-filled.
They have to have some examples of how does that data get stored in the list?
And then, they need to show accessing the elements of the list in some way,
and they need to talk about, OK, what do those numbers represent?
Do they represent sides of polygons?
Do they represent scores in a high score list?
They need to talk about that.
They need to talk about how the list actually manages complexity.
And as I talked about earlier, either talking about it
makes it much easier to manage or makes it easier to debug,
or it would be a lot harder to do this if I didn't have
a list, like that kind of explanation.
And again, if you go back to the website,
they've posted these nine samples.
And these are samples that students wrote,
because they piloted this last year, and these are actual student responses.
And they have graded them, and they actually
have a commentary about why those got those scores.
And so in terms of benchmarking for yourself, how much
is enough to get the point?
Looking at those nine samples will be very helpful.
Row four is your procedure with the parameter.
Row five is you have to show an algorithm that you yourself wrote,
and you have to have three things-- sequencing, selection, and iteration.
So sequencing is just following an algorithm in the or of instruction.
Selection is conditional statements, and iteration is basically
a loop of some sort.
And I believe-- and again, this is Douglas talking not College Board--
but I believe that a while loop will not count for both selection and iteration.
I think it just counts as a loop.
Even though technically a repeat until or a while loop
has an embedded selection in it, I think they
want to see something that's more explicitly like an if statement.
But I might be wrong on that.
Now, again, look at the scoring notes and the guidelines
and the samples to get ideas on that.
I also know that we have a number of people in our group
who are readers, also, so feel free to weigh in.
And again, this is just us teachers talking.
None of this stuff should be taken as official College Board word.
They have College Board forums that are online
and you can post questions there, and often the College Board folks
will answer there.
Quick question from Steve Daly.
Why did the College Board eliminate the Explore Task?
If I were-- here's what the College Board would say,
because I've heard them say this.
They are not eliminating the Explore requirement.
Explore, they still want you to talk with kids
about data, data privacy, data storage.
They still want you to talk about the harmful and beneficial effects
of computing innovations on society.
That still should be a part of your course.
They just eliminated assessing it, because it was impossible to assess.
It's basically a research paper, and just like with any rubric,
the peril of a rubric is you have responses that are beautifully written
and answer the prompt wonderfully and get like a zero,
and then you have others that are really, really terrible,
and they end up getting full points.
And I think we've tuned both rubrics the best that we could
for the previous tasks.
And we created this new Create Task specifically
to try to make it harder for really lousy clicker games and things to kind
of skate through the rubric.
But the Explore Task was a huge challenge.
And I just personally, I think it would have been really, really hard
to come up with a better rubric.
And even that was I don't think enough to really effectively objectively
compare written responses.
If somebody figures out how to do that, maybe using machine learning that,
would make a million dollars.
So anyway, I hope that answers your question.
OK, so let me talk a little bit about what we do at Punahou.
Again, I didn't have a great experience using
kids' CS50 independent projects at the end of the year as their Create Task.
And I know that it's intended to be summative,
but frankly if all you're doing is assessing these things,
it's pretty easy to meet these requirements with a Scratch project.
And because we start with Scratch anyway,
we actually spend just a little bit more time with Scratch
in the beginning of the year when we start CS50,
and we start talking about abstraction right off the bat.
So usually, what I'll do is I'll show them the cat and the stage
and have them watch David's video and then I'll say, OK,
how would you draw a square?
Actually, the first thing I would do is I
would have a kid in front of the class stand up, put a chair on the floor
and say, someone give him instructions, or her instructions,
on how to walk around the chair.
And usually, it's forward some amount, turn right.
Forward some amount, turn right.
And you do that in person.
You do it in Scratch, you have eight lines of instruction.
You get that down to three lines of instruction
by talking about a repeat, because really, you're
just looking at the same two instructions repeated four times,
so you repeat four.
Once you do that, you have the cat drawing a square,
then you create a block.
And so within half an hour on the first day of class,
I have them creating a block.
So in Scratch, you just go to Make a Block.
And essentially, they've created a function
that has an algorithm attached.
I am going to stop sharing and show you Scratch for a second.
Actually, before I do that, let me just jump over to the questions
and answer some of the questions that are showing up here.
How does Douglas or other people handle the issue
of not being able to assist with their Assess the Create Task?
I give them practice.
I give them a file that I've created, and I
tell them to write a written response as if they wrote it.
And then, I give them feedback and say, here's where you described this best.
Here's where you didn't.
Here's where you need to say more.
Because honestly, again like I said, coming up
with a task that satisfies the requirements on paper is really easy,
but explaining it is hard.
And so you have to give kids a lot of practice with writing.
And so I would give them a couple of--
have them basically write practice, practice on one that I wrote,
then have them do a simple task, and then write a response on that.
And then, I give them feedback on it or classmates give them feedback,
but they can't submit it.
It's not the Create Task.
Then, they do a third one.
And as they do that, their comfort level with programming and with using
the blocks and Scratch blocks and thinking about algorithms,
that will increase.
I get kids who are in a rush to move on from Scratch, and I tell them,
no, no, no.
Hold on.
Scratch is really, really good for teaching you how to think.
And this really is a course about learning how to think.
It's not of course about any particular language.
Students can collaborate on Create, yes, but they
do need to do their own write-up, basically.
And yes, they did--
my kids did do the Create Task in Scratch,
and we were done with the Create Task in August.
And in fact, we were done with the Explore Task in September.
This is a big secret.
I don't publicize this, and I don't tell my friends of the College Board
that I do this, because they probably would
be disappointed and chagrined, because I think they see it as a great summative
task.
But CS50 is so rigorous, and the kids are doing so much.
In April or May, there's no question in my mind
that the kids have gotten the foundations of computer science
and computational skills like debugging and thinking critically.
I know they get all that.
The Create Task is supposed to assess that.
But for many of the curricula, you need something like the Create Task
at the end of the year to make sure that they've got that stuff.
But there's never been a doubt in my mind
that kids have all of the core principles of computer science
probably by the first semester in CS50, because it
is a very rigorous curriculum.
But again, that's just my take on it.
So I'm going to share a project with you that I just
created quickly in Scratch, and this--
basically if I press the green button, this just
draws polygons of different shapes on a screen in random locations.
And some of the polygons are a little crooked,
which took me a little while to figure out why they were crooked,
until I realized that it runs off the screen, and it kind of messes stuff up.
But that's a great question to ask kids, why
do you get some of these crooked ones?
It's not that your angles are wrong.
It's just how Scratch operates with boundaries.
But basically, this is the kind of thing that within a couple of days,
I've got kids looking at and understanding this kind of code.
Like, the core selected algorithm in a sense
is essentially this idea that you have a polygon,
and I pass in a numerical value.
If that value is five or less, then I'm going to draw that shape in green.
Well, if it's greater than five, I'll draw it in red.
Anything that is less will be green.
That's selection.
So I've got my selection here.
I've got a repeat, so it's going to repeat this many times.
So if five comes in, it's going to repeat this five times.
It's going to move the same length, and it's
going to turn-- this is the interior angle calculation.
That's iteration.
If you have selection and iteration, you automatically have sequencing.
One of the requirements of the task is that they
have a selected algorithm that shows all three of those things,
but you really want to focus on selection and iteration.
So this kind of counts for that.
I've commented the code, as you can see.
And I'm calling a block, or a function, by passing in a parameter.
And so I'm going to need to talk about two different cases that
result in two different things.
So one case would probably be, I'm going to call polygon passing in five.
And it's going to hit this, and it's going
to execute the code where it draws it in green.
And then, my other test case is, I'm going to call this passing in 10,
and it's going to hit it's greater than five,
so it's going to execute a different portion of code,
and it's going to draw it in red.
Aside from that, I mean I have a reset block that kind of deletes
the entire polygons list.
When the green flag is clicked at this point when we run it,
it's going to fill the list, essentially, this list on the side,
with random numbers, so random numbers with sides from three to eight.
This is what I would talk about when they ask,
where is the data stored in the list?
I would highlight this, draw a circle around it, whatever.
This is where it's being stored.
And then, we're going to repeat it, the length of the list number of times.
And it's going to draw a polygon by passing in as a parameter
each number from the list in order and then changing the index by one.
So this is how the data is used.
So nominally, this program should satisfy the requirements of the task.
Now, the challenge is just writing the response,
because you're not automatically going to get a six on this.
You need to be able to explain how all of this stuff is being used.
But again, I would start class by walking kids
through in front of the group, this is how I build up to this point.
And then I distribute that to them.
In Scratch, you can actually go to Share,
and you can type in the URL, which I will actually
just share right now in chat so people can kind of take a look at it.
Anyway, so again, I think that's about it
in terms of what I wanted to present.
I don't know if you have specific questions, but I'd love to--
I can take a few questions if you like.
Also, I'm going to call out Lisa [? Standring, ?]
who also with me has been doing this as well.
She created some great worksheets for students
that I used when I introduced this.
Margaret has been a great--
collaborated with me as well on a lot of this stuff.
So and Dan as well.
So yeah, it's not just me.
Like, I've been able to do what I do with students because of the CS50 list,
so that email list has been a really great resource for asking
questions and talking with people and coming up with ideas
and sharing assessments and quizzes.
I actually have a quick--
yeah, and Matthew Chang shares that the Scratch submissions are problematic,
because students tend to list the event handlers as abstraction.
Yeah, that is an issue.
You've got to tell them when the green flag is clicked doesn't count
as your procedure with parameters.
But I think that's why they decided to still proceed with parameters,
because you can't choose when green flag is clicked
and satisfy the procedure with parameters requirement.
Yeah, so CSP, right now, they are way shorthanded on readers.
So if you currently teach AP CS Principles
and you apply to be a reader next year, you
have a really, really good chance of getting in.
And being a reader basically means--
at least except for this year, they would fly us out to Kansas City.
They'd put us up in a hotel, and people would read as a group.
And at night, we'd have guest speakers and go out to social events,
and you get to really meet a lot of people in person,
and it's a great way to share resources with teachers.
And it's been a great part of my professional learning.
This year was all virtual, but we still got together on Zoom calls and things
like that, just to meet each other.
So I definitely think it's a great experience.
It is right in the beginning of June.
At the very end of the year, by the way, or the very end of the calendar year,
so in December--
I know we're talking about assessments earlier.
One of the things that I wanted to share is that we actually
do a collaborative final exam.
So what we do is we have three programming questions
that we choose to have kids do.
So for instance, one of them is in C, if I put in dot slash calendar
31 and then five, 31 is a number of days in a month, and five is like the day
that Sunday falls on, or the first Sunday falls on which day in the month?
And then the idea is, the kids need to write
code that will print out at the command line
the entire calendar, with the letter headers and then the numbers
and have it all line up properly.
Another one that I did this year is I said, kids hadn't seen Sort yet,
but I said, OK.
You've got these numbers.
How would you write code that would put these numbers in order?
And we give this out about two or three weeks ahead of the exam date,
and kids can talk with each other.
They can go online.
They can do whatever they want and write out--
we encourage them to write it in their IDE
and actually write it out and plan it and come in with those three
problems essentially solved.
And then on the day of the exam, we give them a piece of paper and a pencil,
and we say, here you go, and we pick one of those three.
And they need to write it from memory.
And we don't-- you know, we grade it the way that we used to grade the old
APCSA.
We're really looking for the quality of your thinking and how you solved it.
We don't ding them on little syntax issues,
like they forgot a semicolon, or things like that.
We want to see, how did you solve that?
And of course, just like with a lot of exams,
the learning comes from the preparation and the meeting in groups
to talk through these problems.
If kids try to roll the dice and skip doing some of these,
they're short changing their own learning.
And we may or may not catch that.
You know, if they get lucky, they get one that they've prepped.
But we've done that now for a number of years,
and I've shared those resources on the list.
And when we have a resource, I'll throw those in there.
But anyway, the understanding is that they come in.
They write it from scratch.
We give them about half an hour to hand write it.
And then, what we do is we pair them up with somebody else in class,
and they switch papers.
And if you get somebody else's paper, it's going to be a different problem.
And your job is then to leave comments for them and write through and say,
this looks right.
I think you missed--
I think the for loop should iterate in the other direction.
They can circle it.
They can write notes to them.
The only thing they can't do is write code.
And then, after about 15 minutes, we switch them back again,
and you have the chance to incorporate the feedback that your classmate gave
you before you finalize it and turn it in.
And what we found was that that really captured better
the collaborative environment in our classroom.
We always thought it was a little artificial
that you have to do this really tough problem,
but either you don't have warning about what it's going to be ahead of time,
you can't use any outside resources, and you can't collaborate.
To me, that seems very artificial.
But we're trying to hold kids accountable for understanding something
at the end of the year.
So everybody knows that this final exam is coming up.
Everybody knows that however much help you've
been getting from TFs or other students, you still are going to--
some portion of it is going to be on you.
And so that's been our final.
And what I've found from doing our end of class surveys
is that kids sometimes will say that they felt more concerned about letting
another kid in class down.
Like, they got their paper, but they hadn't prepped that problem.
They couldn't give them any feedback.
Nobody wanted to be in that position, because it's embarrassing.
So they prepped harder for this exam than they
would have if they were just being assessed singly, because we
had built in the collaborative element.
So again, I'm happy to share more resources like that with people.
So anyway, thank you.
SPEAKER 1: Thank you, Douglas.
We'll give you a virtual applause.
And I do believe, it looks like Howard does have one question for you
before we transition.
SPEAKER 3: All right, quick question.
Douglas, I guess you kind of went through your thinking
in terms of how you run a class, and I just
wanted to see if you could maybe give a little bit more--
you went through a quick overview of like,
you show a video that maybe David had already given.
Just want to understand how you integrate
the material that is on CS50 into one of your classes.
Are you mainly just stopping the video and giving more background?
Are you speaking to and asking them to, like you said,
act out something that was presented?
Just trying to understand how that class collaboration is--
how you do it.
DOUGLAS KIANG: So the way I think about it is, I think about--
I see them several times a week.
I think of what I provide to them in class as being a small section.
The lecture, the large section, is David's videos.
And so in the beginning of the year, I'll actually
use my class time to show a portion of David's video,
and I'll stop at some climactic point, exciting point
and say, OK, a cliffhanger, but you need to go finish watching this.
But the way that I try to organize it is--
my expectation from the beginning of the year
is that they're watching David's lectures,
and that they're looking at the notes, because there are hyperlinked notes
for each of the lectures, and that they're
coming into class with questions.
And then, I run my class like a small section
that basically shows hands on examples of what David has talked about.
Sometimes, I'll use some of his examples and go over them
again and go more slowly and say, what questions do you have?
I will use Sandbox to kind of put up some pre problems that I've created.
Sometimes-- if I know a problem set like Vigenere is coming up,
I will create a Sandbox that has a simpler
task that some component of what I know they're
going to need to solve in Vigenere, and I'll have us all do it as a group
together in Sandbox.
And then, kids' code is already in Sandbox.
They can go back to it and refer to it when they actually
are doing the problems set.
On the days after a problem set is due, I always
take the first 10, 15 minutes of class and I have
kids pair up and pull up their code.
How did they solve that problem?
And I have them two people on one machine,
and the person who did not write the code is the one that's driving.
And the person who did write the code doesn't
have their hands on the keyboard, but the person
who's driving talks through it.
Oh, OK, I can see that you solved it this way,
or I solved it differently than you, but this looks better.
And they talk through it that way.
And the level of excitement in the class just
goes up tremendously on those days, because the kids have in many cases
really come through a pretty difficult trial.
Some of them spend hours and hours on this problem set,
and they're proud of their work, and they want to talk about it.
And then at the same time, they're fascinated
that there are all these other ways of solving the problem that
have the same Check 50 result, but the way that they were designed
was much better, or different.
And so those days we really-- those are our design days
where we talk about design.
But there was a period of time where I tried to basically look
at David's lectures, and I was saying, well, I
feel a responsibility since I'm the teacher in the classroom,
I should be lecturing on this stuff.
And I'm trying to copy it, and you know honestly,
David's better than I am at that stuff.
It's already done.
There's no point in my trying to recreate those lectures.
The content is really important.
They should be watching those lectures.
And if they come in and my TFs are working with them
and they clearly haven't watched the lecture,
or they make an appointment with me, and I say, have you watched the lecture?
And they say, I haven't watched it yet, then I say, go watch the lecture.
Because that is part of the class.
If you're not watching the lecture, you're not getting the content.
But that is one battle that I often have to fight
with kids is that they feel like they can just do section and not
do the lecture.
Or I guess maybe they think that because they think of school as the class time,
and it's not necessarily like a fourth meeting is really
sitting in Sanders Theater and watching the actual lecture.
SPEAKER 3: Thank you.
I guess, could I have a follow up question to that, Douglas?
DOUGLAS KIANG: Yeah, of course.
SPEAKER 3: So I think that's a great idea, to--
both of those ideas were really good, to give them almost
like a preview and then and hopefully catch them and make them actually
want to watch the rest of it.
I guess my question was more around the section aspect of it.
Is it something that is--
I guess you said the four classes.
I was just trying to understand your structuring.
It seems like you have--
is it an assumed, you know, one class is the pre lecture, one is the post
lecture for review questions?
Is there a structure that you have that you could recommend
or maybe take offline in terms of how you structure the classes?
You kind of implied a structure that I'm interested in understanding more about.
DOUGLAS KIANG: To be honest, Howard, all my classes are different,
and they're kind of emergent based on what
I think the kids need at that time.
But I will say that my trend overall has been to talk less.
The less I talk from the front of the room,
the better the class is, apparently, which is a blow to my ego.
But especially since the school has really
been cracking down on not giving a ton of homework,
I try to give kids as much time to work in groups on the problem sets
in class as possible, and then I circulate around the room.
And kids who won't ask questions in front of the entire class
often will say to me quietly, yeah, I'm kind of stuck here.
What would you recommend, or what can I do?
And if I get the same question a lot, sometimes I'll
go up to the front of the room and present it.
But I think it's a conceit on my part that if I hear that same question
and I realize, jeez, I should have covered,
you know, access to elements from the array,
then I go to the front of the room, and I'm like, OK, everybody stop.
Hold on a second.
I just want to take five minutes and go over this.
Everybody else-- some people might be really close to solving a problem.
Somebody might be trying to read through instructions, and all of a sudden,
I'm asking you to stop everything you're doing so that I can tell you
what I think is important.
I'm doing that far less now, because I think it's wrong.
I think my goal is to support them in their own learning.
People learn differently, and it's my job
to cue up and make available to them all the resources that they need ahead
of time and have at their fingertips so that when they get stuck,
they can choose whatever modality works best for them.
Maybe it's David's lectures.
Maybe it's a short.
Maybe it's the HTML hyperlink lecture notes.
Maybe it's me.
Maybe it's a classmate.
Maybe it's a TF.
But having all of those different support mechanisms
and really decreasing the amount of teacher instruction I think
has been what's worked well for us, what's worked best for us.
Thanks.
Good question.
SPEAKER 1: Douglas, you got the big thumbs up.
OK, I think Megan might be leaving for her anniversary celebration, so
congratulations Megan, once again.
And next we're going to.
SPEAKER 4: I'm leaving in five minutes.
SPEAKER 1: OK.
SPEAKER 4: Thank you.
SPEAKER 1: Well, you still deserve congratulations and emoji claps.
SPEAKER 4: Thank you so much.
SPEAKER 1: Next, we're going to transition to Jenny Barnes,
and I'll let her take it away.
JENNY BARNES: Hi, thanks, guys.
Man, it's kind of hard to follow you, Douglas.
I have used so much of your material, and I don't have much to add.
I love how you structure your class, and I strive
to do those same things in my class.
And I think you guys are going to see some of that in some
of how I structure my classes as well.
So I'm going to share my screen here really quick.
I think that I am the less comfortable version of the panel, as you'll see.
I started my very first class just letting my students
know that I don't know how to code.
It was a really uncomfortable experience.
Of course, I've been doing this-- this is I going to be my fifth year teaching
CS50, and I feel a lot more competent with my coding skills now,
but I learned so much from that experience
that I've really brought that idea into a lot of my teaching style.
I find it absurd how much they let me do considering that I started as a math
teacher that didn't know how to code.
I've taught in rural Alaska native villages teaching every subject.
Then, I went to a large comprehensive high school with seven class periods
and and pre-algebra, and that was when I got the opportunity
to teach computer science.
We started with the team teaching model, that we just
had so much fun getting to innovate different teaching strategies.
It was a great experience.
I moved on to a career in technical vocational school
that had kind of morphed into a college prep school.
And I'm now at the Middle College, and I worked directly with the Alaska Native
Science and Engineering Program students who are taking college and high school
classes concurrently.
I've also had a chance to teach with girls who code,
and actually I want to apologize for not being here all week.
We had our Girls Who Code summer camp this week, so we just wrapped that up.
And that was a lot of fun, though it was as much success as it was online.
We still had almost 30 girls choose to be on a computer all week.
It was amazing.
We don't get that much sunshine in Alaska, so when it's here,
it's hard to be inside.
And then, actually this year, I had a chance
to be a teaching fellow with the extension school,
so I've been teaching a section with the CS50 Harvard Extension School.
So that's a little bit about me.
This Idea of I don't know how to code was such a powerful experience
after coming as a math teacher, when I had the subject knowledge
and could answer all the extension questions
and knew where I was guiding them to and what the career options were.
This coming in so green has been really cool to just model some of these things
that we often talk about--
the bravery of failing gracefully, I think
that's one of my superhero powers.
I think it really highlights-- with First Robotics--
I'm sure a lot of you have had experience with that.
You bring everyone in, and everyone has different roles.
So not necessarily everybody on your team is coding or building robots,
a lot of them are doing social media or fundraising.
And so I like to bring that idea into my computer science classroom
with our groups and just highlighting that everyone's
contributing to the problem solving activity,
whether or not they're the ones that crack the code at the end.
And of course, just showing know how to seek help, use their resources,
collaborate, mentorship, and it really in the end
empowers students, which I think gives them that positive--
I really focus on making sure our students leave my class with a really
positive experience towards computer science,
and hopefully they'll continue their education with computer science.
Kind of a big idea how I structure my class is I keep it very low stakes
so that kids can get comfortable taking the risks that they need to take,
but I set the bar really high, because I think that creates
a really authentic learning experience.
That's why I love using the Harvard CS50 program,
is that these are actually real problems that
are really hard for Harvard students.
So when I have my eighth grader that's taking algebra
solve one of these problems, it's so powerful for them
to know that there are adult college students that
struggled with this same problem.
They have this very authentic internal reward,
and I feel like I have to work a lot less hard as a teacher
to give them carrots with grades and points and things like that.
There's a big I can do this moment for every student at some point
during the course that just brings me joy.
I love it.
Teaching this class is--
it just removes a lot of artificial barriers.
The barriers are kind of built in.
It's really hard.
The feedback is built in with the Check 50,
and I do something a little bit different with my academic honesty
policy that I'll talk about here in a little bit,
and I have a different tool that I use to kind of monitor that.
Can I get a thumbs up out there from somebody
to make sure that you guys can hear me and everything's going OK?
Great, thanks.
So I'll talk about that a little bit more
about how I do my academic honesty.
But really, I like to tell students it's very much like puzzle week.
We do a puzzle week at the beginning of the school year,
and students just use whatever resources they can to solve these puzzles.
And I take that same idea into their P-set,
is use whatever resource you can to solve this problem without cheating,
which we'll talk about in a minute.
It's very much like solving riddles.
So I kind of reveal hints in support over time to students that need them.
Giving away the answer ruins the fun.
Also, never getting to see the answer ruins the fun.
It's all about making it a positive experience and making sure
that students stay supported what they're going through these really
challenging experiences.
My academic honesty policy is, you must be
able to explain every line of your submitted code.
And what that allows my classroom to do is when they're working in groups,
they can look at each other's code and have those discussions
while they're coding.
And some of the kids that are really struggling, they get those aha moments,
and they get support they need in that capacity
when I can't be with every student.
And it helps me differentiate and create a much broader range in my classroom.
And I really just enjoy having organic collaboration.
Like Douglas said, I try to have most of my time in class
where students are working in groups and working on problems
and not listening to me talk.
We watch a lot of shorts.
I'll do demos and little sub examples that I know they'll need for the P-set,
do something similar.
I like to do live coding so they can see me making mistakes.
And then, really the first two weeks of my course are really fun.
We do a destruction day.
I get old computers, and we pull the computers apart all day
and identify all the pieces in the computer.
We do the PB&J activity, a lot of the activities that are embedded with CS50.
We do them every year so we can build that culture, and kids across grades
can have those conversations about when their class did this activity,
and they get a lot of chance to work with their peers
and create friendships and form those groups organically.
And they're not required to be in groups.
There are some students that, of course, just like to work independently.
So the way I do check my academic honesty is through postmortems,
and they used to have those built into the CS50 curriculum.
And they have a video that would explain how you solve this problem.
They don't have those anymore, so what I do is--
and it's kind of a low tech solution.
My students have a hard time sometimes jumping between different programs.
Lots of different accounts, logins.
Some of my students really struggle with that,
so we just stick with Google Classroom and Google everything.
So we use Google Slides.
And students go and they just screenshot their code and put it in a slide.
So what I do is, I'll assign a P-set on Friday or a problem on Friday.
It's due Thursday at midnight, so they have almost a full week.
And then Fridays, we also do our postmortem.
So you come in Friday morning, you're immediately
going to put your code into your slide.
It's already there in the Google Classroom for you.
And then, their task is to read through other people's code
and make three comments.
So you can see over on the side their, there are student comments on the code.
It works really well until we get to some of the larger P-sets,
and then we maybe don't do the Google Slide show so much
and we move just to the presentations.
But this piece of the puzzle, this postmortem Google Slide communication
piece, has been a real game changer for me,
because what happens is while students are reading through and making
comments, I also get to read through all of my students' code and skim through,
and I can look for some design contrast so
that we can have conversations about.
I can check in and see which students maybe need some extra support.
I can see which students don't have it done.
All those kinds of things, and I can give them
a design grade and a completion grade while the students
are doing their comments.
Super game changer.
And then afterwards, I have students present.
I have one student come up in front of the room and present their code,
and that's where that idea that they have
to be explaining every step of their code really comes into play.
They have to be ready.
And I didn't plan to do a volunteer, but all the students
want to present eventually.
Once they get comfortable, a lot of students
are excited to share their code, so I have to at least have one volunteer,
because there's usually many, many that want to share.
And then afterwards, of course, we have the discussion about design.
And it's one of my favorite days.
There's just amazing aha moments that happened between the students,
and it's not coming from me.
They're learning from each other.
Students that don't have it done or didn't get it completely done
get to have that big reveal.
They get to see the solution to the riddle.
Now, they don't necessarily get to have access to that code after the activity,
so we take that away from them, but they've seen it,
and they've come up with some ideas on how then they can go and complete
the assignment afterwards.
The students get feedback right there immediately,
and it's a check for academic honesty all in the same package.
So that's my big joy is those postmortems.
Students can still submit after the postmortem.
I just give them up to 80%.
They can't get 100% at that point.
I don't like to manage who's late and how many points, all those things.
It's very difficult for me to manage that with all of the--
computer science is a small part of what I do.
I'm actually still a math teacher.
So we keep it pretty open ended.
They can submit when they have it done, and I
have students that want to get their grade up,
and they'll go back and redo some of their early P-sets
and up their scores just a little bit.
And I'm totally OK with that.
They've learned the material, and they've demonstrated
that they've learned the material.
Fantastic.
So for my grading, this was an idea I got from the CS50 training
that I went to, is that most of the students in the class get an A or B.
So you have students coming in that have never coded before that
are so timid and scared to be there.
And you have students that are--
I've had students on their way to MIT.
They've already been accepted to the computer science program at MIT.
So I have such a huge range in my classroom
that the idea that I could grade different levels differently
within the same course was kind of mindblowing to me,
and I've had a lot of success with that.
So I really like to support my students, and I have not
just a less comfortable but a way less comfortable
category and a way more comfortable category as well for students
that really want to move on and excel.
I use a lot of P-sets that maybe we don't-- or the problems that we
don't have a chance to get to in class.
I add them as extra credit for some of the kids that are moving faster.
Yeah, it's not really graded against the content.
I really focus on having a positive experience,
their effort, participation.
So they get a lot of support with hints that kind of get revealed
over time to get those P-sets done.
So there's really no reason for students to not complete them,
especially once they get to see the postmortem.
They actually get to see the answer, and they can still submit.
We've had to kind of move towards a no homework required but at our school
as well, and actually, the only pushback I've gotten from administration,
students, the only real big push back I've
gotten in four years of doing this in a variety of schools
and environments was I've had so many parents come to me
and say, how can you assign them so much homework?
My student is staying up to 4:00 in the morning
every night working on his problems.
How can you give them so much homework?
This is terrible.
His other things are suffering.
And I have to explain, and I repeat it to students all the time,
there is no homework required.
And it's just an indication of how addictive these problems are
and how engaged they are with the content,
and so having the conversation with parents
and giving a different perspective on setting boundaries in a different way.
I don't see any questions yet, so I'll just kind of--
I don't know if you guys have any questions.
I feel like I've been talking for a long time,
but I'll give you guys kind of a brief overview of how I structure my class.
I'm sure you guys have heard a lot of this already.
Oh, there is a question.
Matthew, do you want to ask your question?
SPEAKER 6: Yes, I love the idea of growing and wanting to get better
and submitting again and again.
My question, though, is like, how long--
do you just let them--
like, I just imagine that the quarter ends,
or the grading period ends or is approaching the end,
and suddenly everyone's going back to do all this work.
Do you give a time from the day it's due?
Or what is the window?
JENNY BARNES: That's a great question.
So we have a week for each problem, and it's due for the postmortem.
So obviously, if they're going to participate, we use it in class.
So if they're going to participate in their group in their conversation,
they need to have it done.
As far as going back, I don't actually have that many students do it.
It's usually students that--
I don't know, were traveling in the beginning of school,
or they had basketball, and they were traveling a lot
in the beginning, that kind of want their grade GPA to be where they want
it, and I give them that opportunity.
I have had classes--
you know, every class is a little different.
I've had classes where they're not as high functioning,
and I need to put some boundaries on it.
So the final problem in a unit after that is complete,
they can't go back and do anymore.
So I put that cap just within the unit.
Some classes, it's within a quarter, and some classes it's within the semester.
I like to do it within the semester, because that's not
an artificial barrier.
That doesn't come from me.
That comes from our school.
We have to submit grades, and that way, it's not me creating that boundary.
SPEAKER 6: All right, thank you.
JENNY BARNES: How do you support less abled students with special education
needs?
I think the idea that I don't have to stand and deliver
gives me the opportunity to go around and work with groups individually
and students individually.
And I'm on the floor.
Like, I'm on the floor a lot.
There are times when the classroom gets really self managing,
and certain units are easier to manage than others.
But I'm on the floor.
So when I have students with special needs, a lot of times
they'll end up in a group, and their group supports them.
I quickly, pretty quickly identify which groups
are going to need that extra support.
So after the little mini lesson, like this
is how you, this is what Strings are, we have
an activity so they can engage with the concept a little bit,
and then they get to start their P-set.
There's usually a couple of groups that I'll pull aside,
and I'll go through and break down the problems into steps
and I'll say, OK, step number one, just like we did on Mario,
we had to check the user input.
So on Ceasar, what's the first thing we're going to do?
We're going to check the user input.
OK, let's get that part done.
And so you can give him that step by step structure
while the other kids that are more advanced
are just tackling this problem.
Hope that answers your question.
I don't think I do anything revolutionary with my class,
but I have been doing this for a while.
And I just love teaching it so much, so I
hope to encourage you guys to all keep teaching it.
My breakdown is, I actually picked up the idea of doing the Create Task early
from Douglas.
But I use it as my end of semester one wrap up final project,
because I tend to lose some students at semester one.
There's usually three or four students that will drop at semester one,
so it's nice to kind of give that a rounded completion.
And week two is I think where Strings get introduced,
so you have some tools that are fun.
And I don't spend that much time in Scratch I don't know--
I think at our school district, they use it a lot in middle school.
So when kids come into my classroom, they go, oh, Scratch.
And so I think in some ways, it's comforting
that they're having this transition that they're comfortable with,
but I don't think I could keep them inspired in Scratch very long.
I don't know if anyone else has that problem.
They can submit the Create Task in December.
I usually have them upload it so they can't lose it,
because they lose things.
But they don't submit it, and then right before the test,
we will do an activity where they review each other's and submit.
And they have to submit by April, and you
get a lot of emails and notifications that the due date is coming.
Let's see.
I'm trying to understand the slide.
Do you cover seven?
I think that the CS50 is so much more robust than what is required in AP CSP,
and they all are changing a little bit.
They might be growing together a little bit more,
but I know originally that was my experience and remains my experience.
I think that my CS50 students could probably do well on the final test,
on the AP test after semester one.
I think semester two, we spend a little bit more time with internet, so big
ideas about internet and data.
Some of the social issues involved in cybersecurity,
all that happens in semester two.
So because the coding, I think, in CS50 sometimes loses students
because it gets pretty advanced, so we do some of those other topics,
and we fill in the blanks in semester two.
So are there any questions about, I don't know,
the way I structure my class?
So I do Create Task in semester one.
Then, we start with the Explore Task when everyone's fresh and back
and we have discussions, but that's gone.
So we'll probably replace that with maybe a big data unit.
And sometimes, I have students that can do week four and week seven and eight.
They're usually pretty excited.
I've had a handful of students finish Finance over the years, but in general,
my classes aren't--
we're just not able to get through the whole curriculum,
because we take so much time for projects.
We do the Create Practice, the Create Task,
and we also do a final project at the end,
which we'll talk about in a little bit.
Yeah, I did not know how to code when I started.
I'm a math teacher.
That helped a little bit.
And there was-- our district decided to say yes to coding finally,
so there was four of us in our district that
were all learning how to code together.
And one of them was an English teacher, and two of them
were theater teachers, actually.
So we had two drama teachers, an English teacher, and a math teacher.
So I actually felt like I really knew what I was. doing.
I was the technical person in the group.
But we all went to the CS50 training down in San Diego,
and we worked through, I think, the first three units
before we got there and then had a chance to discuss some of that.
So I had up through Caesar completed before I started teaching.
Caesar made me cry, and I love telling my students that.
I wasn't sure I was going to be able to do it, and I think a lot of my students
have the same experience, and it's a bonding moment.
But over the years-- it has been really gratifying to learn with my students.
And I know that sometimes, that can be really frustrating for students.
But in Alaska, we're used to not having very many resources,
so it's one of those things, like, at least you
have the opportunity to learn.
At least you have the opportunity to have the space and time,
and we can do it together.
So it's been a pretty positive experience.
Eight weeks is sufficient to prepare students for AP exams.
Cool.
So let's see.
Let me jump into a unit here.
Oh, I didn't do my week one.
I make a slide for my week.
I forgot.
But here is chapter zero.
I really love this one.
This is where we have so many interactive projects and discussions.
Destruction day is always a blast, where they're pulling computers apart.
Everyday algorithms.
I also extend that into the next unit, and we do flow charts.
And so in their group, they have to make a flow chart
and present their flow chart of their own algorithm
they've created after doing everyday algorithms.
And students really seem to engage with this idea that computers are stupid,
so we just start with that.
It's so empowering for them that the computers
don't know what they're doing.
I have to tell them.
So that's my week zero.
It's just in a Google Classroom.
I post resources and assignments.
A lot of that's just pulled right from the CS50 AP Site.
And oh, I need to wrap this up.
So the last thing I want talk about is community and recruitment.
As I've had opportunity to learn more coding and I love coding,
I find myself putting more time into building access and equity
into computer science education, because I think
it's so important for just empowering--
having educated citizens and consumers that
can be a participant in our government, because our whole world is
moving digital.
So it's so important to me to make sure all kids have access
to a computer science education.
And our little cohort has really been working hard--
Alaska, you may not be surprised to find out, is a little behind the curve in CS
education.
So we've hit barriers and had to-- we just
got our standards approved last year.
We've got some legislation passed now so students get math credit or science
credit for taking this class and really providing some avenues for teachers
to entice kids to taking these classes and growing it around the state, which
has all sorts of interesting barriers being out in rural Alaska.
One of the things we do to build community and make sure we get
recruitment is just a ton of events.
So I spent a lot of my time doing events instead of learning how to code.
The puzzle week, we do a whole week instead,
and we let students take the puzzles home and make groups,
and we all meet at the end of the week to do the reveal at the Fun Center,
and they play laser tag and all those kinds of things.
We do a guest speaker every year.
We usually reach out to somebody from CS50.
A former CS50 student-- a lot of them are at Microsoft.
There used to be some links where we could go and grab that information.
We've had a lot of guest speakers Skype in.
I take a group of kids to the Harvard CS50 fair every year.
It's a 2000 mile flight.
And it's a big deal.
Our district has supported that, and kids are paying their own way to go.
We have a good time.
We do a hackathon, and at the end of the year, we do a road show.
So we actually take all the computer science students
from every high school, and we take them to every middle school.
We do like an hour and a half at each middle school,
and they present their final projects.
And it's a great recruitment tool for eighth graders
and getting the younger kids to change their perspective
of what computer science is, that it's a community,
and that we have a lot of fun, and that there are cookies.
I also do the Teaching Fellows.
The P-sets tend to be like merit badges, so as they go through,
they'll talk to former students and like, oh, Mario was so hard
and all of those things.
We definitely use food as a cultural indicator.
Would do tacos and cake.
And we do the rubber duckies and the stress balls,
just like they have in the videos, and all those kinds of things.
So that is what I do.
There is a question about how I prepare my week.
And I do a little mini lesson, a big idea on Friday,
the second half of class and assign the P-set.
They have all week to work on it, and I'll do more mini lessons
throughout the week.
But I try and give them a day or two full class
periods where they get to work on the P-set,
and they're due Thursday at midnight.
Friday, we come in, and we do the postmortem.
So it does keep us on a schedule.
Keep us moving forward.
Let me see what questions I missed here.
Distance learning.
I had some students that didn't return the way our school district did it
I did have students finish but I only had three
so I'm not sure my experiences with distance learning this last quarter
is super relevant, I wouldn't think.
I'm looking for ideas on how to do this next year as well,
so I'm excited to hear what Margaret has to say.
I don't have software for flow charts.
I went and bought two by three white boards from Costco.
I got funding from somewhere, and I have a set of 15 of those in my classroom.
So students can go grab a whiteboard anytime.
My school's a public school district.
I've taught in so many different environments for my diversity
numbers, public, private, charter, all those different things,
it's really hard to say.
We've had a lot of success increasing our enrollment
and having more classes offered.
We still have a pretty low number of women and minorities,
but I do work for the Alaska Native Science and Engineering Program,
and so once we've kind of--
now, we offer that class to them exclusively,
so I do have a class of native students every year
that that's really helped some of the diversity.
We don't have a lot of funding.
We are always going to partners in industry to look for funding.
And some years, I've had 20 students in a class.
I don't think I've ever had more than 22 students in a class in three sections.
Last year, I had one section and 10 students.
So there's just been a lot of variability.
If there's any questions, let's see.
I don't see any hands.
And I'm scanning here for more questions.
When you do the roadshow, can middle school students
register for a CS course?
I wish.
That would be amazing to have them sign up right there.
I don't think my school district is organized enough for that.
I'm going to try that.
That's a great idea.
My students have been pretty successful on the AP test, actually.
But I have a lot of students that are nervous about taking it.
They don't think they can take it, and I don't push them to take it.
That's not true.
I do.
I really like them to take the test, because I think if they pass the CS50,
they are going to be successful.
This is a really robust class.
I think it goes beyond the scope of CSP, and I
think getting those scores back builds a lot of confidence in these students
to move on, to see that they've passed the AP test.
A lot of my students just don't see themselves as computer scientists,
and so the whole point of the whole thing
is to encourage them to continue and change that perspective.
Over the years, let's see.
Cool.
I don't see any more questions, so I'm going
to stop talking here, unless somebody's got a hand.
Thank you guys for listening to me talk for so long.
You can reach out anytime if you have more questions.
SPEAKER 1: We'll give you a big round of applause, Jenny.
JENNY BARNES: Thank you.
SPEAKER 1: Next up, we have Margaret from New York.
Margaret, we'll turn it over to you.
MARGARET TANZOSH: OK, thank You.
Hi, everybody.
Gosh, I feel like I have like nothing left to say.
That was so complete and amazing.
And actually, a lot of what I do, Jenny, you'll see
is actually pretty similar to the way you structure your class.
So I teach at a public high school in New York City.
As I think I mentioned, it it's called Gifted and Talented.
It's a screened high school.
But we still have a very diverse population.
We have special ed kids along with kids that are amazing.
This was a picture--
and not that they're not all amazing.
They're all amazing.
This is a picture from last year.
We had a big hackathon--
I think David had showed a picture the first day--
the front of my school, and we had both invited the middle school.
It's a K through 12 school, so we invited
the middle school and the high school to come just
to kind of see a profile of what our school looks like.
So I teach four sections of computer science.
At least, I have the last four years.
I've been teaching computer science for the last five years.
I was a math teacher before that.
I've also taught at the Harvard Extension School,
as has Jenny had discussed.
And generally, I've had four sections of computer science
and one section of AP Computer Science Principles.
And I often have somewhere between 130 and 150 students.
So it's a lot of students.
I don't have TAs.
I think one year, I had a TA in one of my classes.
But students have a very heavy schedule.
There's eight periods a day.
They are programmed for seven classes, plus the only break they get is lunch.
So we don't have halls, and we have very,
very occasionally, there may be a senior that has all their requirements done,
so they may occasionally have a TA available.
But it only happened one year.
So what I do, the way I run the class is I
really try to keep a lot of excitement going.
I really love to stress the events.
I put pictures up in my classroom from past year's events.
We always do Puzzle Day at the beginning of the year, which
draws kids not just from my class.
I open it up to the whole school.
Kids have a lot of fun.
They look at the puzzles.
They're like, oh my god.
What am I supposed to do?
I can't do that.
But I'll walk around.
I usually have another teacher there to help me.
We'll give them hints or whatever we need
to do so that every table gets at least one problem.
And then at the end, they all take turns explaining the solution to the problem,
so we've had tremendous fun with that.
Since we're in New York City, we're about two hour bus ride away from Yale,
so I hire a big bus, and we go up to the Yale fair every year.
We usually have about 30 kids or so that choose to do that with us.
And some kids have said it was like the highlight of their year.
They love it.
In past years, we've had a hackathon in the spring,
and then we have our own CS Fair in June.
And these are just a few pictures.
These are students working at Puzzle Day.
People really-- they're really immersed in the problems.
They're really addictive, and this was from the Yale Fair.
You can see, I have a very diverse group of students.
They had an amazing time, as I said.
Many of them said it was their highlight of the year.
And these are-- this is a picture from the Computer Science Fair.
We call it our own CS50 Fair.
Since we are K through 12, I'll often have third and fourth graders
come and look at some of the projects and play some of the games
that the students create.
And the kids just have so much pride about what
they've been able to accomplish through the year,
so we have a lot of fun with that.
So for my CS Intro class, I actually use the CS50 curriculum for everything.
I go off on a little branch, as you see, semester two for my intro.
But I always start with chapters zero, one, and two.
And kind of as Jenny said, a lot of my students
also have done Scratch in middle school.
So we'll do a couple of weeks, a week or two, of Scratch.
We don't spend a huge amount of time on it.
But they usually have a lot of fun with it.
I let them work in groups, and they create a project.
And we also do a lot of the writing problems
at the very beginning of the year, you know everyday algorithms and those.
And they enjoy them.
And those are the only things that I really assign for homework.
Generally, I structure the class so that I
do a very short warm up that might have a hint as to how to program
something in a P-set to come.
A short mini lesson.
I use the CS50 slides.
I divide them up, so I might just do a lesson one day on for loops.
And then, I try to let the students have-- we only have 45 minute
periods now, so I try to give them the rest of the period
to work on their programming problems.
And then I kind of-- as Jenny had mentioned, I walk around the room.
I help them, et cetera.
Semester two, we do Homepage, which is a CS50 problem.
And they loved that this year.
Interestingly, so I use the version from CS50
where the bootstrap link is already embedded
and taught them how to use a little bootstrap with it.
And they were so impressed that they could create such professional
looking websites.
And I gave them quite a lot of time to work on it.
So we go kind of slowly in the intro class.
We then, after Homepage, we do some JavaScript.
I introduce some p5.js, and students do a final project of their choice, again,
either individually or in groups.
And I try to make it fun.
I don't have harsh deadlines.
I have very flexible deadlines, so I have a suggested deadline.
And then, the programs are definitely due at the end of the marking period.
Hopefully at the end of the unit, but for some students,
I'll give them extra time and let them move on
until the end of the marking period.
So for my AP class, since most of them have already
been through a year of the intro class, we do a little review on chapter two.
And I'll try to pull some of the alternate problems.
I'll sometimes find them on the Harvard website,
like readability or substitution.
And I always post a lot of extra problems so that the students--
I pretty much encourage them and allow them to work at their own pace.
So students that struggle do get extra time, and students that are more eager
and start doing the stuff through the night for homework
because they just love it so much, I always
have enough extra problems to post for them.
So I'll post the, as others have said, the more comfy versions
of the problems.
Or sometimes, I'll find a problem from previous years
and I'll post that up there, even from the next unit along with videos.
And so the order I've been kind of doing a bit of review in chapter two.
We do some of the--
sorry, I'm getting texts from my family right now.
Now everybody chose right now to start texting.
Of course.
OK, what was I saying?
I lost my train of thought.
Chapter three, I do the searching and sorting algorithms,
and then we move on to Python.
So since they've already done some HTML and CSS the previous year,
we don't spend a lot of time on that.
And then, they'll work on their Create Task.
I'll use that as a final assessment for semester one.
And I actually have submit it-- our semester one ends in January,
so I'll have them submit it in January, and I'll grade it as a final exam.
And so they've already had some Python under their belt.
So I allow them to do it, of course, they
can do it in any language they want.
Most of them do it in either C or in Python.
And then, when they come back in semester two,
we do a little bit of Flask in chapter seven,
and then we'll also talk about a little bit of data during that.
And we had to get ready for Explore, now, we're not going to have that.
An exam review.
And then, some students are ready for finance and some are not.
So again, everybody doesn't do finance.
Again, I allow students that are able to move more quickly,
I'm there to support them with that.
But it's not something that everybody is really able to get into.
I post assignments.
I create custom websites.
Now, I'm not sure how I'm going to do that next year, because if we're
working remote, we might be asked to do everything on Google Classroom.
But I do like an intro--
I'll escape from this.
I think you can probably.
Can people see this screen here?
So this is one of the intro websites.
I like it better than Classroom, because I can post all the assignments here
on the right.
I think it's easier to find stuff.
But so I'll pull from the CS50 materials,
and I'll put suggested due dates here often.
I also have them do a reflection after every program that they submit.
So for me, the ability to manage the academic honesty
is by asking them to write about their algorithms,
write about their development process, their aha moments in the reflections.
Because I don't have TAs and I have so many students,
I do encourage them to help each other.
Some students, I allow them to collaborate.
They'll actually develop some code together.
So I'm not looking so much to compare code but to look for understanding.
Sometimes, I do find a student where I see a submission,
and the code is way more advanced than anything I've taught, in which case,
I will sit down with that student and have a conversation with them.
And sometimes, it'll turn out that somebody helped them
with it, in which case, I'll ask them to delete the whole thing
and start it again and warn them that they can't do this anymore.
They're going to get zero.
They're going to have more issues with administration
if they continue to do that.
But generally, it doesn't--
after the first time, they sometimes get a better understanding
of what's expected.
I think at the very beginning of the year,
sometimes they don't really always understand
what it means to be able to get some help on the internet
but not get the help for a solution.
Because sometimes a student will find a code along video
for Pennies or something like that, and then they'll do that.
But then, I usually recognize pretty quickly
that there's something in it from the way they've coded that's not theirs,
so we'll have that discussion.
And I've also created, and I'll show you in a little while,
a bunch of practice labs so that students can work on their own.
So again, the way I manage the class is that I do a short mini lesson.
I give them time to code.
And since I'm often allowing them to work at their own pace, when
they need a little extra help, for instance on data types or placeholders
or operators, I'll go to a--
let's see if this comes up--
a practice lab that I've created, where they could then
read a little bit of information on the left, have some sample code over here,
and have a little bit of a problem to actually solve so they
can get some practice with this.
And I have seen students actually going through this.
And when I walk around the classroom working on it
and getting the practice before they get into their problems.
Or maybe they're working on the CS50 problem and now they're like, gee,
I forget how to use arguments.
So I'm going to go back and look at the lab,
so that it allows me to do a lot of small group work
with the struggling students.
So coming back to my presentation.
So I use the websites for links to the problems.
I post information about what we're working
on this week, where the suggested deadlines are, et cetera, et cetera.
And again, I do a lot of small group work.
So the way my classroom is set up, the computers generally
are facing the outside of the classroom around a circle,
like 30 computers around the classroom.
Very close to each other.
So it's hard for me to do--
I can't just stand up in the front of the classroom
and talk for any length of time, because they will definitely just tune out.
I also don't enforce them watching the entire lecture videos,
because at home, some students don't have regular internet or Wi-Fi
or not everybody has computers available.
Most of them do but not all of them.
So I feel like it wouldn't really be fair to ask
them to watch an hour and a half video, but I
do post all the lecture videos on the class websites,
and I highly recommend that they watch them
and even show them how they could watch a particular segment.
I also always post all the shorts.
So for instance, if I--
I'm coming back over here.
Sorry about this.
It's kind of in the way.
And coming back to the website here, I'll create labs,
and I'll have them work-- rather than working in the IDE,
I'll have them all work in a lab.
So if I could find the labs up here--
so for instance, the Fahrenheit lab.
So I've created all of the CS50 problems for semester one anyway into the labs.
So they get hints.
They get little pseudocode if they're stuck, et cetera.
They get the starter code here.
And then, they have a place that they can write some pseudocode in.
And so I allow them to do that.
It helps them to be a little bit self-sufficient.
And then, I'll grab-- we have a couple of laptops in the classroom.
So I'll take the students who are really struggling,
and we'll go around the table in the middle.
I'll get them with the laptops, and we'll open up one of the labs together,
and we'll start the problem together.
And I'll code it--
kind of as Jenny was saying, we might start coding together
a little bit of user input.
And then, we'll work out some pseudocode together as comments
so that they have a structure now.
So first you're going to use your two why-loop.
How do you do that?
You're going to declare your variable, et cetera, et cetera.
And then, we'll have the steps.
So I try to help them with that.
So my philosophy is that if anybody really wants to,
they can pretty much get close to maybe not 100,
but they can give it an A, basically a 90 or above.
They may not master one or two of the quizzes,
but in terms of the problem sets, I'll always be there to help them with it.
The important part is that they don't just get the data from a friend,
or get the code from a friend.
If they really don't understand it, they need to come to me,
and then we go through it together.
Or they need to go to a student who I might have set up as a class expert.
Students who finished their problems first,
we have charts on the wall for each problem, and then students
who have finished that feel comfortable with the material,
will put their name up on the chart as an expert
and get an extra credit point, and they'll
go around and help students as well.
So it really builds a real sense of community.
Students really feel, I think, a lot of them really do enjoy the class.
I try to make it understandable that it's a lot of hard work
but that we have a lot of fun at the same time.
And you can see in the labs, I try to use my own students
to introduce the problem sets.
So that again, I try to use a kind of diverse population
so students can see that, gee, I know him.
I used to play basketball with him, or whatever.
And that you know, gee, if my friend can do this, I can probably do this, too.
So again, just trying to communicate that.
And then finally, I've created a lot of these labs
that I was going to share with you.
So they're pretty much on everything-- all the different topics from unit zero
through unit three, I thing.
Images, I think, is unit three.
And I have a Google Doc here, a link that you can take a look at.
These are on numerous different topics.
And the way that they work is that I might have--
it looks like this expired.
I was trying to have it set up in advance.
Instructions, like what are you going to learn in this lab?
What is the main topic?
And then summarize a little bit so that there's not
too much on the screen at a time.
It's just kind of a handful of information.
And then finally, summarizing up various different ways of using operators.
And then, your turn.
And then, I have a little program that they work on
at the right, where there's already a lot of the code is supplied,
but then they just fill in a few of the pieces that are missing,
just to give them, again, a little opportunity
to look at well-structured code, hopefully,
and be able to complete it without having
to know how to start it from scratch.
And Command Line Arguments, sometimes I'll put little animated gifs in them.
And for the Command Line Arguments, a lot of students
have found this really helpful to understand the reasoning behind Command
Line Arguments.
And even for the Sorting, I have the Sorting and Searching algorithms
which I use for my AP class, and I created some little animations
to kind of give a sense of how these Sorting algorithms work.
I did require these for my AP class.
And if I refresh this, see if this comes back, I have a bit of a program
here where they have to basically complete
a function that sorts the array.
And so again, a lot of the information is there,
and then they have to complete the function at the bottom.
And the idea of this also for my AP class
is that I really stress them learning how to use functions.
In my intro class, we talk about it, but everybody does not really
become an expert at functions.
They struggle with functions often.
But in my AP class, when we review those couple of programs from chapter two,
I might just have them to Caesar with the function now.
They must use a function.
And in terms of design feedback, I mean honestly for my 120 intro students,
I generally grade it based on correctness and style.
I create a little Python script to actually use the CSV file
that I download so that I could put together
75% based on correctness, 25% on style.
And then, I tweak it depending.
But I generally don't give them all that much feedback about their code.
I will pull up errors I see, common errors, common poor design decisions,
and Will use those as part of a mini lesson.
And so that's often the way that I will kind of
communicate that information to them.
But for the AP class, we will talk more about design.
We'll talk more about decide.
How could I make the design more efficient?
Why is this not efficient?
And I'll give them specific feedback on the code.
And again, these are just a few of the--
I think about 28 labs.
I created a bunch of them.
And then this, I even made for--
since the AP exam has a section on models and modeling simulations,
I created a little lab, because I hadn't really
had too many programs to do that.
So I created a little program, which is very
similar to one of the questions I've seen on the AP exam,
where you're using a random number generator
to be able to simulate an 80% of students getting a particular grade.
And again, they get information here on how to do this,
and then they have two challenges here with hints.
And then, they have to complete the code and then
also a Monty Hall simulation, which I just thought would be fun.
And then images, I do go through with my AP class.
We do do Who Done It, at the very least.
Some students will go and do one of the other programs in that unit,
like Recover.
But really only the most advanced students that really are
into pushing themselves on their own.
I don't really go through with the whole class all of the knowledge
that you'd need to do Recover, but we do go through Images.
And I do feel that that's valuable for the AP exam,
also to have an understanding of what's inside an image, how it really works,
how pixels work.
And the great thing about-- and again, these are practice laps.
For the AP course, everybody's working in the IDE at this point,
because it's richer.
The debugging is so much better.
But to get a little practice, I still find
that the labs can be really useful, because you don't have
to download code, it's just all there.
So this is just a little exercise they're
going to do here to change some colors in a little smiley face,
basically, that is basically looking like this little BIT map.
Kind of inspired by one of the new problem
sets that Brian created this year in terms of changing colors in an image.
And you could see this here.
So all the helper files are here.
They just complete one of the functions.
And yeah, that's kind of it.
And that's basically it.
I mean, the link here will take you to all of these labs,
and then as well, all of these are going to be--
if you are interested, you're welcome to take a look at them, use them.
You could fork it if you're interested in using it for your own class.
But I have found them really helpful to help students
get the knowledge they need when I'm just not available to help them,
because it's me.
Sometimes I can have 34 students in one class and just me.
And at the beginning of the year, having everybody start out with the IDE
can be very challenging, because now students
don't know how to navigate folders, or why can't I submit my code?
It doesn't work, when you're not CD'd into the correct folder
and all that type of thing.
So I find using the labs at the beginning of the year
when they're getting started in the intro class for semester one
is really helpful to kind of have a smoother start to the year.
And I always to emphasize that persistence is key.
That it's really all about persistence, and that don't be surprised
that it's very, very common to kind of freak out at the beginning,
feeling like you have no idea what's going on,
but that is not unique to you.
That is a common experience.
That almost everybody experiences that, but just like taking a foreign language
and you walk into the classroom and you don't
know French and everybody is speaking French, it takes a little while.
But eventually, it's like learning a language.
Your eyes will get used to it.
It will begin to make more sense.
And I always love reading the students' reflections.
I'll always do Analyze This as an end of semester one reflection, which I love.
And it's just so fun to read about how many of the students
are like, oh, yeah, then I felt so proud when I completed Ceasar--
that sense of feeling really good when they complete something hard
and really feeling like they have a taste of what a computer scientist is.
Which is why I just love this curriculum so much.
At the end, I also have them to an end of the year reflection,
and some of the things I got back in my intro class
was they loved doing their own website for Homepage
and found they loved the creativity for that, but also
I always have students who love doing the website
but then others that really miss doing the algorithmic thinking
in the programs that we do coding in C and in JavaScript later on.
From my AP class this year, a number of students
really loved doing the Create Task.
They found that-- and I give them--
because to get the 12 hour in is 18 days,
which is pretty much a whole month.
And then, they always need an extra week or two after that.
And many of them really felt that it was like the highlight of the year
having to create this entire program from scratch, and they really loved--
not in Scratch, although they could use Scratch, but often in C or Python,
and they really felt good about that.
SPEAKER 1: Margaret, someone was asking how you created your animations.
MARGARET TANZOSH: How did I create the animations in the lab?
SPEAKER 1: Yeah, for the bubble start one.
MARGARET TANZOSH: I used After Effects.
I did it first just using PowerPoint, and then I decided to redo it,
because I also did animations that became a little bit more
like Merge Sort, which was a little crazy.
I wanted to kind of give a sense visually of how it worked.
And it took me a while myself to understand how
Merge Sort worked and didn't use up--
because the standard way you see it represented
is like this, which looks like you're using seven different arrays, which
is not true.
And so I was really trying hard to kind of conceptualize
how this all works by creating animation.
So in order to do these, I needed to use a little bit something
more than just using PowerPoint.
So then I redid everything in After Effects.
I hope I explained that so well.
OK, I feel like there was so much already that a lot of it
might have been repetitive, but hopefully that made some sense.
SPEAKER 1: Well, you deserve another round of applause, Margaret.
MARGARET TANZOSH: OK, thank you.
SPEAKER 1: Indeed, well first and foremost,
thank you all so much for participating and giving up
so much time over the past few days.
Hopefully, this is just the beginning of staying
in touch, not only with each other but also with us.
Allow me to call out a few of the team members
who've been both on camera and behind the scenes
listed here and then, of course, all of CS50's team
who've been creating all of this content over the past several years.
Just a few reminders.
Let me go ahead and share this URL in the chat,
but we will post this as with everything else on the website
itself so that you have access to everything.
The website, indeed, will remain up so not to worry about that.
Certificates, if helpful for you professionally
in terms of continuing ed credits, we will follow up
with a form via which to collect the requisite information from folks,
so stay tuned for an email from us on that on the so-called vault where
we store all of the staff solutions.
We will also follow up about getting you access
to that by way of your GitHub account, so keep an eye out for that.
And then in direct answer to your question about staying in touch,
you can always email us at this address.
This will go to a lot of the staff that you have met
over the course of the past few days.
As Jason mentioned, too, if you would like
to contribute back materials of your own that you would like us to then extend
and amplify to other folks and in CS50 AP's teacher network,
please just send them to us at that address,
and we'll begin to curate the materials on a repository of sorts online,
and that will evolve inevitably over time.
We will follow up with some invitations to these email lists, one of which
will be specific to teachers who are specifically teaching AP CSP
and therefore might have particular questions,
and then more broadly a teachers list for folks
teaching CS50 AP or any of CS50's courses online or locally.
And then last but not least, if you haven't added yourself
to the directory, the Google Spreadsheet I've emailed out
in the past couple of emails, please feel
free to add yourself there so that if you made a connection with someone
and you'd like to follow up on something they said or some conversation you had,
you can reach out to them directly without having
to go through the whole list as well.
I think that officially brings us to the end.
So nice to meet and re-meet everyone.
Hope to stay in touch quite regularly.
Take care.