[APPLAUSE]
MARGARET TANZOSH: Hello, everybody.
Can everybody hear me OK?
Yes?
All right, wonderful.
So I'm here today just to share with you a little bit about what
I do in my classroom.
So of course, we're all going to do our own thing.
We all have our own styles.
But I thought you might like to hear a little bit about how I organize my class
and how I learned to teach this curriculum over many years.
So just a little bit about who I am, right?
So I teach computer science at a high school in New York city
called New Explorations Into Science, Technology, and Math.
That's the name of the school.
It's a K to 12 school.
It's kind of unusual.
It's a public school in New York.
And this is the ninth year that I'm there.
And the whole time I've been there, I've been teaching CS50 computer science
classes.
I also teach at a Harvard Extension School.
And as you know, I've taught some of you on zoom as well, which I love doing.
So the school itself is kind of a fabulous school.
It's a gifted and talented they call it.
So the kids are ready to go on to college for the most part.
It's on the lower east side of Manhattan.
This is a picture of the school.
And my students are a very diverse group, which I'm sure many of you
have as well.
I have some students who come in being afraid of taking computer science.
They know nothing about it.
They feel like, this is really not my thing.
My guidance counselor wanted me to take this or my parents
wanted me to take the class.
I have other students who have been coding since the seventh grade, right?
So it's a real mix.
And some of them want a major to computer science in college.
Some of them just want to sample a little bit to see,
is this something they might be interested down the road.
So most of them have very, very little experience.
But again, some of them have a lot of experience.
So one of the things I love about this particular curriculum
is that it offers something for everybody.
My philosophy is that everybody should be engaged
all the time so that nobody gets bored.
My students are mostly 11th and 12th graders.
I have a few 10th graders as well.
So that's just a little bit about what my school looks like.
This is a picture.
We had a hackathon a few years back.
And this was kind of a mix of some of the middle school and high school
students.
We had a lot of fun.
We spent all Saturday programming and learning new skills and all of that.
So I would say that I'm a teacher who adapts the CS50 curriculum.
I use a lot of the problem sets.
I make a few of my own.
And I've tried to teach it in different ways over the years.
One of the things I've found was very useful,
which I'll talk about more in a few moments, is scaffolding.
Do we know what scaffolding is, right?
Helping students kind of get to the next level a little bit.
Maybe building in some hints.
Giving them a little bit of pseudo code sometimes.
Because my philosophy is I want everybody to be able to feel successful.
I don't want anybody to be afraid to take my class because they're
afraid they're not going to pass.
I want them to know, it's going to be hard work.
And I think you all know that, right?
But if you work hard and you ask questions
and you ask me for the support, you can get help from other students,
it is always very possible to succeed.
All right, so that's the way that I run my class.
The classes I have are every day of the week, five days a week,
45 minute periods.
My classes are pretty large.
I have up to 34 students in one class.
So in a given year, I might have 100 to 150 students.
Sometimes they're a little smaller, but there's always a real mix, right?
So I've been doing this at my high school.
This is my ninth year.
And what happened is that I was brought on board to teach computer science,
but the school had no curriculum.
They had no money for a curriculum.
There were no books.
They didn't even know what they wanted.
They just knew that there were some students.
They wanted to be able to teach students how to code.
And so I looked online for various curriculums, right?
Because I had not taught computer.
I had known a little--
I had done a little coding in a very past life, but not for many, many years.
So I was looking for something to help guide me.
And I saw some curriculums and I tried to contact them.
They didn't really get back to me.
And then, I saw a video of Professor Malan.
[APPLAUSE]
And from that moment on, I knew that that
was the curriculum I was going to use.
So I got into a program and connected with other teachers as well.
And it was just a fabulous opportunity for me.
I took the course online myself because there were so many resources, so
many tools that we have the opportunity to do that, right?
So how did I get started?
So one of the things I loved about CS50 and the way
that David actually teaches the material is that he breaks it down and explains
it so well, right?
With so much drama.
It stays interesting, right?
So I watched the lecture videos my first couple of years over and over
and over again to learn how to talk about using the right terms, right?
Learning how to break it down and how to make sure it's
understandable to somebody who might have no computer science experience.
So that was just one of the things I did.
And I tried to use the ideas that you see in the Harvard videos
with my students to keep it interactive, keep people engaged, make it fun.
So again, I always wanted it to be a rigorous class.
But also, we're going to work hard, but we're going to have fun, right?
I had students act out algorithms kind of like you've seen on stage, right?
So for instance, we acted out Bubble Sort and Selection Sort, right?
And so it kind got the kids up and it just kind of kept it interesting
so they weren't just sitting there.
Now, the way that I would run my class is that I don't lecture for a long time.
I take some of the slides.
I use some of the slides from the Harvard lectures.
You can download them, right?
And I use a few of them every day.
Sometimes, I make my own to supplement.
I don't go through an entire two hour lesson, right?
I can't do that.
I have 45 minutes.
I try to keep my lessons to maybe 10 minutes, maybe a new concept, right?
And then, I let the students do most of their coding in class.
Because another thing is I don't want them to be home at night frustrated.
Now, when I started there was no duck, right?
We only had the physical rubber ducks.
There was no AI duck.
So they didn't have that tutor right next to them.
But the idea was that I didn't want students to be frustrated,
working, being afraid they're not going to get the program set in on time.
I wanted them to have the support.
So I let them do most of their programming in class.
And we have a certain amount-- we always encourage collaboration.
So students are allowed to help each other out.
And I'll talk about some problems I consider practice problems where
they can collaborate.
And then, for the major p set problems, the ones that you have done,
I count those as a graded assessment for them.
And so I let them spend most of their time
in the class doing these programming problems, right?
And I stay fresh because I resolve the problems pretty much every year,
especially the first few years.
Because I found by myself resolving the problem,
I would remember the bugs that they're going to find, right?
Because if I don't do it for a while it's like, oh yeah, it's easy.
You kind of forget.
But once you do it it's like, oh yeah, that kind of happens.
This comes up, right?
So I like to kind of keep myself fresh, resolve the problems.
And then, what I do in the classroom, when they're coding, I'm walking around.
I'm helping students debug, right?
I'm giving them a little hints maybe, something like that, right?
So it really helps a lot to be able to know in advance what kind of problems
they're going to have.
So that's why it's so important to really solve
the problems yourself before you assign them to a student, OK?
So again, I also want to make sure they're doing their work.
Because when students are on computers, you can imagine,
they're often tempted to do different things.
So I'm also just keeping an eye on them in that way as well.
And the other thing I like to do is because CS50
has so many wonderful resources.
And sometimes, students forget that they're there.
There's all the shorts, right?
The problem sets have the video walkthroughs.
Some of the practice problems, like Scrabble, if you look hard enough,
the whole solution is in there, right?
Have a hard time solving this problem, you pulled out another arrow
and you get a whole solution.
Others have little hints.
So sometimes students forget about that and they just
read the little instruction and they get confused and they don't know what to do.
So I want to make sure to point them in the right direction.
And to be honest, pretty much at the beginning of the year,
I let them know we always start with Scratch, right?
Everybody loves Scratch.
It's one of the ways that kids get excited, right?
They do their Scratch projects.
I give them time.
I give them usually--
I might give them two weeks to do something.
They will have a gallery walk through.
They'll look at each other's projects and write up what they liked
and what they learned from it.
So yeah, I like to make sure that they're aware of all the resources
there.
And if they finish a problem early, I don't make them sit and wait.
I let them move on to the next problem, right?
Or maybe move on, even sometimes, to the next unit.
I've had a couple of students in the years
that I've been doing this that just fall in love with the curriculum so much.
That's all they do.
They go home and they're just working on the problems the whole time.
And that actually went through the entire curriculum on their own
in a few months.
But the nice thing is there's other CS50 courses they can also take.
So I'll point them in those directions.
So pretty much that's kind of what I do in the classroom.
I'm walking around, I'm helping them debug, make
sure they're on task doing their work.
Explain what they need to do.
And then, I'll often, sometimes, pull together
a small group of students that might still be struggling.
So I like to do a lot of small group work.
So I'll notice that maybe a student here,
a student there isn't sure how to get started,
sometimes-- especially when it's new.
The first few weeks or the first month or two,
I always warn my students that it's OK to feel confused, right?
It's like learning a new language.
You're walking into a room.
And everybody's speaking a language and you don't speak that language.
And so I like to let them know it's OK.
Everybody feels freaked out at the beginning, right?
It's like, oh my God, this is so overwhelming.
I don't know what this syntax is.
And I just kind of--
I talk about it so much so that when they get that,
they understand that's part of the process.
I also make sure that they're really comfortable making mistakes, right?
That is part of the process.
That nobody creates a whole big program from Scratch
and doesn't make any mistakes, right?
That's why I like to let them know, there's
a special word for it, debugging, right?
So it's something that's just natural.
And some students are afraid to start because they're
afraid to make a mistake, right?
They just don't know what to do.
So if a student is really struggling, I'll pull together a few of them
and put them at one table.
I'm lucky I have tables in my classroom.
Bring them together.
And I'll do a little small group work with them.
We might kind of read through the problem spec together.
I might develop a little code, a little pseudo code,
maybe we'll start the first couple lines of the program together, right?
Then maybe we work through a little of the logic, a little pseudo code,
we'll make comments in the code.
And so I like to give them those advantages
because I do want everybody, again, to feel that they can do this, right?
They might decide to go on or not.
But in any case, I want them to know that if you work hard,
you don't give up, you just have to keep trying, right?
Everybody knows that.
We've all experienced that ourselves.
Another thing that was very valuable to me, especially when I first started,
was learning from other teachers.
So I very much encourage you to make sure to get
contact information from each other so that you
could stay in touch with each other.
Maybe make a group on some social media platform
or collect each other's emails or phone numbers
or whatever so that you can share ideas, right?
So some of the ideas that I never thought
of that I got from other teachers that were using the CS50 curriculum
were to have students write reflections after they finish a problem.
To write a little bit--
kind of a metacognitive thing.
Like, how did I do this problem?
What happened?
What struggles did I have?
What aha moments did I have?
And some students like doing that, some don't.
It depends on the student.
But I think it's sometimes helpful for them
also to kind of go back and think about the process.
And it's helpful for me to get an understanding
of how much they're learning, right?
What I actually did this year for the first time,
because the AI duck is so good at explaining the code,
it explains it better than any human, I think, could explain the code, right?
That I actually had students do a video walkthrough on one of their projects
like Caesar.
So I made them make a recording on Zoom and attach it to Google Classroom.
I don't know if you know--
something like Google Classroom.
And it was great because I have too many students
to do walkthroughs-- code walkthroughs with everybody would take me weeks.
But this way, I was really able to get a sense of what they understood.
And some of them wrote scripts for it.
They kind of used the duck to figure out what the code was doing.
But I feel like, at the end of the day, they learned.
They really understood what this code was doing.
They had a point to the line.
They had to have their video in the corner
so I knew it wasn't a brother or sister that
might be majoring in computer science making the video for them, right?
But it was just another tool for assessment that I've done.
And I like to make the whole class really a fun experience.
So I've taken away-- and also heard from other teachers
right that Puzzle Day could be helpful or maybe a CS50 Fair.
And so I do a Puzzle Day in the fall and invite students
from all over the school.
And we get together in the library.
We bring in some pizza.
And kind of like the puzzles.
We'll spend maybe two hours.
The students really get into it.
And I'll give them hints if they get stuck so everybody
solves at least one problem, right?
And these are some of my students working on their puzzles.
So again, just to kind of-- to create like a sense of community
and a sense of work and fun.
And I think, really, being able to start to feel
the satisfaction of problem solving.
Because I don't know about you, but for me, it's so satisfying, right?
When you're working out a problem and finally you get it to work.
Isn't that the most satisfying feeling?
And I like to instill that in my students as well.
You got to keep with it.
And then, when it works and they do the Check50
and they see all the green happy faces, the students are so happy.
So I like to just keep that code feeling of that going as well.
So this was Puzzle Day.
We also do, at the end of the year in June,
when we finish our school year, our CS50 Fair.
So what I do, we grab a bunch of laptops so we go down to the lobby in my school
by the front door where everybody could see what we're doing.
And because we also have little kids in the school, elementary school.
So we invite them to look at some of the projects and some of the games
some of the websites the students have created.
And I think also they have a real sense of pride that I've created this.
And now, look, this person is enjoying something that I made.
So it's a really fun, satisfying experience.
So I do encourage, if it's possible, to kind of have
these special events to make it special and to make
it a different kind of class.
So my very first year when I was teaching CS50,
honestly, I had no idea what I was doing.
I didn't want to just show the videos in class
because I thought my principal would think, well, I'm not teaching anything.
I'm just showing a video.
So I thought, I better do some teaching.
I'm new here, they're going to look at-- want to see me teaching.
So what I did, again, watched the videos over and over
and I tried to kind of teach like little sections every day.
The first few years, students didn't all have Wi-Fi at home or computer
availability at home.
So I couldn't assign watching the lecture videos for homework
because I couldn't know that everybody would have access.
Now they do.
Because after COVID, they all had to get technology at home.
So now, I do assign that they watch a couple chapters, maybe
10, 15 minutes a night.
Because the lectures are so valuable.
But of course, not two hours at one time.
10 minutes.
And then, I'll reteach.
I'll still talk about the material, kind of
like when you would do section, right?
You delve into the material in a little bit more detail.
So I'll go through it again.
I'll answer questions.
But my first year, I didn't know what I was doing.
So I would try to create a little bit of the lesson.
And then, I would just give them the p set problem to do with no help.
Oh, you read it, it's all in that whole problem spec, right?
But students-- it was probably not the best way to do it
because they needed extra support.
So as I learned, I went around, right?
So one thing I started to do was maybe at the beginning of class
create a little warm up problem or a starter problem.
I'd have on the board when they come in, there's something for them to do.
And it might be something like explain what this snippet of code does.
Explain how the for loop works.
What is this code going to print out?
Just little bits to force them to think about what the code is doing.
Maybe write a line of code to do something, right?
So I do that--
I don't do it every day, but I do it a lot of days.
And a lot of students have said that that helps them,
sometimes, kind of thinking through what the coding is actually doing.
So I like to do that as well.
For experience, as I mentioned, I started to bring together
small groups of struggling students.
And particularly for those students, I will work
through some pseudo code with them.
So we'll put in-- and sometimes you see that
in the hints when you pull down the little arrows, right?
That wasn't always there.
It's gotten a little bit more helpful.
So I will develop code like that with them.
Even if the hints are there, I might say,
let's write these hints in our code.
And then, let's start to think about what that's doing.
And even break it down a little bit more,
particularly with the students that need extra support, all right?
I want everybody in my class to pass.
Everybody to do really well.
And everybody to know that they can do this if you work on it,
you ask questions, you get support.
So sometimes it's a little tricky because students
are encouraged to collaborate, but sometimes they
collaborate so much, right?
Like almost too much.
[LAUGHS]
So sometimes you go, is that really their code?
Especially with the duck now.
Because sometimes, the duck gives different kind of code.
But at the end of the day, that's why I did the video walkthrough
to have them actually explain what they're
doing so I know that they're understanding what their code is all
about.
But sometimes, I'll even create my own walkthrough
for a problem that may not have a walkthrough.
As you'll see also there were a number of practice problems that are available.
I created some a few years ago.
I'll show you the links to those.
And then, there are some older CS50 problems
that I reformatted so that there are more problems
to have students so they don't have to go from Hello to Mario.
Because for my students, that's a little too quick, right?
They need some other little programs to get used to the syntax
because they also--
they have seven classes they're taking, right?
They're writing college applications.
They have a lot going on.
They're working a part time job or have family responsibilities.
So I want to get them moving a little slower,
but have interesting problems for them to continue
to work and learn as they go.
So I've slowed down the pace a lot.
I have an example here in a moment.
I'll show you what it might look like once I get to unit 1 or unit 2.
So again, I might assign a couple of chapters of a lecture video
for homework.
And then, the practice problems.
So there are a number of practice problems.
And I'll assign those to students-- not the p set problems you did,
different problems.
I'll let them do them collaboratively.
Maybe struggle with it for a day or two and see if they
could figure out what to do with it.
And then, eventually, I'll give them some pseudo code.
And then, I'll give them a little more help.
And then, at the end of the day, I'll actually
walk through the solution with them so that the practice problem some of them
can help prepare you for the next p set problem.
So they have some idea now of how to start a problem
and that maybe iterates through a string.
Or how to solve a problem that looks character by character through a name
or something like that, right?
And so these code-alongs I use with these practice problems
and I think that they've worked out pretty well.
So again, you could adopt it, you could adapt it.
There's so many different ways to do this.
I would say I'm kind of a little adop--
kind of adapter, really.
Also, I allow students to have a lot of choice
because there's the more comfy and the less comfy programs.
So I find that to be really valuable, right?
So the students that have been coding since the seventh grade can come in
and they'll just do the more advanced problems.
And they like that, right?
They'll do credit instead of cash and they'll be challenged by that.
So that's really worked out well.
Because I like to give students choice.
I want them to take ownership of this.
And again, I never want students to get bored.
So if they need extra time, they need an explanation,
again, I might point them to a chapter of the lecture video
if I don't have chance to do it that day in class.
I'll point them to a short, right?
So there are so many resources out there.
They could look at the notes from the lecture.
They could look at the source code that David used in lecture that week, right?
You can download all the source code or teach students
how to do that so they have little examples of different codes
that they could use to learn from and to use as an example for the next program
that they're going to work on.
So again, it works for me because, with so many students
and with such a wide range of abilities, all of these resources
and the large selection of problems really
means there's something there for everybody, OK?
So the practice problems, there's about three practice problems--
short practice problems per unit.
And I'll show you a little bit where you'll find them in a moment, right?
And each one is really about one particular topic.
So there's one just very simple one on how to debug.
You just have to practice taking code that's not syntactically correct
and figure out what's wrong with it and how do you debug it, right?
And again, to demonstrate new concepts.
So there's a program for unit 2 called Password,
which is determining if a password has a number, a letter, a lowercase letter,
a symbol.
And so that's been really helpful for students
to understand how to do readability.
Because now they need to understand, how do I
check if something is uppercase or lowercase
or if it's a digit or et cetera, right?
So it gives them those ideas of, where do I find those functions?
Where do I find like--
is alpha, how do I figure that out?
So by doing some of these practice problems, that it kind of sets them up,
I feel, for success so they have a model now, all right?
And so they're available.
I will show you where they are in a few moments.
And they come with the Check50 so that you could use it
and also to have students check for their own correctness.
There's no Submit50 because they are practice problems.
But we can figure that out, all right?
So I teach the very short lesson after they watch
a little bit of the lecture video.
I'll do the code-alongs.
I'll allow them to collaborate on the practice problems.
I'll help the struggling students by going through pseudo code
with them, maybe even a little starter code,
maybe the do while loop at the beginning of the program
to validate the user input.
We may do that together.
And then, let them take over from there.
So again, for some of the practice problems we'll do that.
So for unit 1, this is kind of the way that I will do unit 1.
So unit 0, we do Scratch.
Now, unit 1, this is the first time for most students
that they're seeing a text-based programming
language with semicolons and curly braces,
having to use a compiler to compile the programs.
So the bold ones, Hello, Mario, Cash or Credit,
those are the problems you've already done, all right?
So I'll share with you some of these others.
So I have these listed on another page.
So debug and half and prime are practice problems.
So those are problems that are there just to allow-- so you could use them
or not.
They're just another resource, right?
So if you want to have maybe a code along with a student.
Let me code with you.
Let's code it together.
Maybe you don't want to do the full code along for Mario or for Cash.
You want them to think about that.
But maybe you want to do a couple of programs and code with them.
A couple of these programs, like Fahrenheit and ISBN,
are actually older CS50 problems that I still use.
And I've reformatted.
I give you links to all of these, all right?
So the idea with those, again, they're like Fahrenheit, just
converts a temperature from Celsius to Fahrenheit.
It's about three lines of code.
But students are very satisfied when they get it to work.
It doesn't sound like much now that you've all done finance, right?
You could go back and think, oh my gosh, this is simple.
But for a brand new student, after they do Hello and it's pretty basic.
We do a lot of it together.
A little bit of a temperature conversion.
It's like, I made it work.
They have that sense of success, right?
So for me, a lot of the key is really allowing them to feel success.
Because I feel like that's going to allow them to feel like I can do this.
It's going to give them the encouragement to keep trying.
And who knows?
And I do have a number of students that ends up
wanting to major in computer science when
they get to college that knew nothing about it and just fall in love with it.
Really loved the algorithmic thinking.
Loved the challenge.
And even we'll share sometimes that it's helped them in other subjects
learning how to break down and solve problems, right?
And not being afraid to take on a hard problem knowing
that you could look at a problem and start feeling like,
I have no idea how to solve this.
But if I think about it and work through it, I can get a plan together
and I can do it.
So I think even if the students never take another computer science
course after your course, it's so valuable
to feel comfortable getting a hard problem
and figuring out how to solve it.
So all of that problem solving, algorithmic thinking,
it's going to benefit them in any walk of life, right?
So this is kind of how I pace unit 1.
And I might take a month or 2 to do it, right?
I don't do it in one week.
Because also we have short periods.
I don't want them to have to do a lot of programming for homework.
I'll let them do it in class.
Sorry.
So I might take a number of weeks to do this.
And every year is a little different.
Students go fast.
Actually, this year they went faster because of the Duck.
The Duck helped them so much.
They were getting through with their program so much faster.
It's like, what do I do now?
And then, in unit 2, I kind of pace it like this.
So again, initials, old friends, and calc and visionaire
are all older CS50 problems and I've given you links to all of these, OK?
Are we good so far?
And password no vowels are some of the practice problems.
Scrabble I think you've all seen, right?
So Scrabble is a nice little--
I'd probably use that as a practice problem.
Yeah, so I really like to have the ability,
particularly here now, they're working with strings, we're working with arrays.
And so there's a number of things here that I
allow them to kind of get comfortable with the material
before they get into doing what I call the performance-based assessments,
the ones that count towards their grade.
So the practice problems right now are on this site.
So you have access to these slides.
And when you go here, see how this opens, right?
So you'll see there's practice problems after week one after, week two.
So you have links to these problems on the CS50 X site.
Let me make this full screen.
And the past problems, I have links directly in here.
So the problem specs, I rewrote them to be a little more current and formatted.
And you're welcome to use them if you want.
Also you're welcome to write your own programs eventually, right?
Maybe you make your own ideas on what would be a good program for a student.
So what I love about this is once you get comfortable taking the class
and you're teaching it, maybe not the first year or the second year.
But eventually, you come up with your own ideas, right?
And maybe you and you're in touch with other teachers here,
you maybe share your resources now and have a nice community say,
gee, it would be nice to have a little program.
Let's write up a little problem spec to be
able to ask students to create this type of a problem, all right?
So anyway, I find all of these additional problems for me very helpful
to give the students some time to get used to everything,
get used to the algorithmic thinking, and we take it a little at a time.
Now, I do have some students who totally finish the entire CS50 curriculum.
I had one student, I think, finished it in two months.
Just did everything.
Two months.
Faster than they do at Harvard even.
I mean, crazy, right?
He just fell in love with it.
And that's all he did at night.
He would just work out all the programming problems.
So eventually, I do have those kind of students.
And again, the nice thing about this is that I just let them move ahead
or I point them to the resources.
Just keep going do what you can.
I'm there to support you.
And now that you've taken the course, you're there to support them, right?
But there's also other CS50 courses in this CS50 world, right?
So there's a Python course.
There's an artificial intelligence course.
And there's others.
Now there's a SQL course.
A new R course that's coming out.
So there's all these other CS50 courses that I point my students
to to keep them going because the format they're
familiar now with how the format works.
These use the same coding--
code space, the same coding environment.
And so I'll point them towards this to kind of keep them engaged,
keep them learning to see if they can get as much out of it as possible.
Now, what I do-- and I also have students that finish up more quickly--
is that I do make them into class experts, right?
So sometimes, I'll have a poster on the wall for each problem.
I might have readability and Caesar and substitution.
And then, when a student finishes early, I'll
offer them an extra credit point to put their name on the poster
and to be a helper to other students.
Because especially if you have a very large class, as you can imagine,
it's very helpful to have your own experts, or we could say TAs, right?
And sometimes in my school, I do get a TA--
rarely, but sometimes, that took my class
that the school lets them come back and be a TA.
So I occasionally, not often, have a TA as well, right?
But I like to encourage them to be experts.
They feel good about that.
And also, they're explaining to somebody else,
they get to learn it better as well, right?
I think it's a really great process.
So again, I've mentioned this before where
the scaffolding has been just huge in terms of getting students
to have that sense of success, OK?
So again, breaking it down.
I'll work with them.
We'll code.
We'll put comments in the code-- the starter code together, right?
Maybe little snippets developed together or something
like that and allow them to--
I encourage them to pseudo code together.
Work with your table Mates and figure out the pseudo code together.
I always say that's certainly allowed, even on the graded problems, right?
And on the others, allow them to struggle through it
and see what they can figure out.
I always find it so nice when two students are struggling together
to get through it and they're learning together.
And then, they have a peer, they have a friend.
And I think it just makes it more fun for them as well.
So again, my goals for my computer science class
is I want them to get comfortable with the idea of programming, right?
It's not about learning to program and being an expert in C,
but learning about how programming works, right?
That there's syntax rules you have to follow.
There sometimes are strange symbols, and it takes time.
But basically, it's about learning how to break down and solve a problem.
So again, feel that sense of confidence, that I know I can do this, right?
I just have to keep asking for help.
I need to stick with it and I can get there.
And keeping beginners and more advanced students engaged at the same time.
So it's a little challenging sometimes.
I'm not going to lie.
There's challenges.
But using CS50 allows me to do it in a way
that I feel a lot of other curriculums just wouldn't, right?
So it's been really very successful like that.
Knowing that they are--
there's a sense of satisfaction, like you said,
when you solve a really hard problem.
You can kind of get that-- that light bulb goes off.
And eventually, my goal is that they can become
independent in learning how to figure out what they need to do, right?
Because especially when you finish--
C is a little harder to look up sometimes.
But once you get to Python and HTML and CSS,
there are so many wonderful resources now, they can easily go out in Google.
They can find resources on W3 schools.
That they don't need just the CS50 resource.
They can go out now to the internet and Google
and find all these great ways of figuring out how to do that.
So I really-- my goal, again, for them is to become independent learners.
To know that we have a start now.
I know how to break that problem down.
And now, I just need to figure out my approach to this problem.
So I really want them to be able to do it more like on their own
by the end of the year.
So who has questions?
Any questions?
You see a lot of questions.
Thank you.
That would be great.
Let's start up here.
AUDIENCE: Thank you, Miss Margaret for your clear explanation
about your journey in teaching computer science.
So as you said that you like-- the students comfortable to make mistakes,
right?
And I believe it's a long way to make the students become
comfortable for their mistakes.
So how you handle that kind of situation when the students feel stressful, even
frustrated?
Like us here when we are finishing the problem set.
So how to make them keep like, OK, I can do this.
I can finish this.
Yeah, maybe you can share with us the solution.
Because I think our students will have that kind of condition too.
Thank you.
MARGARET TANZOSH: No, absolutely.
I agree with you.
Well, a couple of things.
So I try to get them excited at the beginning.
I'll start my year also by showing them some
of the previous years' final projects.
And just letting them know that most of these students
knew nothing about programming when they started.
And if you stay with it that, eventually, you
could do something like this too.
Just to kind of show them what the ends of it could look like, right?
So I will do that.
And then, a lot of it is just to--
I put up anchor charts in my room with a little bit of syntax
where I'll have this is what a for loop looks like.
This is what a do while loop looks like, something like
that so they have those references.
And there is-- and I do stress over and over again that it's totally normal
to have that sense of that--
[LAUGHTER]
That it's totally normal to have that sense of frustration.
When I'm demonstrating little bits of code, I'll often make mistakes too.
Sometimes on purpose, sometimes not on purpose, right?
And so I want them to see that we all make mistakes, right?
That it's normal.
And I'll help them.
If they're so frustrated that they don't know what to do next,
I'll give them a hint.
I might give them one line of code, right?
And now with the CS50 Duck, they have that as a resource too.
That's been a massive help, as I said.
Beginning of the year, the programs were being finished like this.
And it's like, oh my gosh.
Were you cheating?
How did you do it so fast?
We asked the Duck.
It was like, got it.
OK, good.
Again, just to keep stressing, we all make mistakes.
That's why there's something called debugging.
That it's going to take time.
It's like learning a new language, all right?
So who else has a question?
Over here, Ika.
AUDIENCE: OK, thank you.
My name is Ika.
I'm from [INAUDIBLE] Java.
So first of all, I would like to say thank you for Margaret
for assisting me during this course.
Yeah, I like the way how you explain material, especially
for me who has no computer science background.
And so what I want to ask you is how to enhance
the student's active engagement, especially in the computer science
class for beginners.
I mean, here for both the teachers and students.
For example, like me, I just learned about computer science
for the first time here in CS50.
But I want to make my students interested and motivated in it.
But sometimes, when my student--
when I ask my students, for example, do you have any questions?
They just keep silence.
And there's just two choices in my mind, whether they have understood all of them
or whether they know nothing about it.
Yeah, that's what I want to ask you.
Maybe you have some suggestions, especially for computer science.
Because this is-- it's not my field.
But I want to try to practice in my classroom.
OK, thank you.
MARGARET TANZOSH: That's a great question.
I have the same thing happens to me all the time.
I'm not going to lie.
It happens like all the time.
And one thing I try to make sure because I've had some students sometimes
that ended up sitting next to a very advanced student.
Like a real beginner next to a very advanced student.
And then, often a girl sitting next to a guy sometimes, I'm going to say, right?
And a very confident guy.
He knows he's been coding forever.
And it makes her feel like she's not good enough sometimes.
So I try to be very careful about that and make sure
that those arrangements don't happen.
That people sit with people they can struggle together with
and they can have fun with it together.
Well, certainly, we do the Scratch project.
I give them some extra time.
We might take a couple of weeks to do the Scratch project just
to get used to the concept of these different computing
structures like loops and conditional statements, variables.
So I don't rush through it.
I mean, that is another thing I do.
I just don't rush through it.
I actually often give them extra time for their problems if they need it.
Because I don't want them to feel like, oh my God, it's due tomorrow.
I don't know what to do.
I better copy a friend's program or I'm going to fail.
I don't want them to have that feeling.
So I let them come to me and I'll usually give them a little extra time.
Ask them to come see me during their lunch period
and maybe we'll take a look together and walk through it a bit together.
So it's a process.
It's a process.
I think it's hard sometimes--
I do the same thing.
Who has questions?
What questions do you have?
Silence, right?
Nobody says anything, right?
So sometimes, I'll try to ask a little more specific question.
Instead of just questions.
Who could answer like, what is this for loop doing or something like that.
Or what is this little snippet of code going to print to try to get something.
Because I think, very general-- and I fall into it all the time myself.
Very general questions sometimes like people
are afraid to sound like they don't know anything,
like they're embarrassed to ask a question, right?
And then, sometimes, I end up having the most advanced students say something
that sounds so smart that everybody else feels like they're not up for it, right?
So I think it's just a matter of finding your own way and trying to encourage.
What did you think about this?
I'll have students also sometimes talk at their table groups.
So here's a question.
I want you to talk about this together.
And then, I'll share out like for each table have something
that somebody talked about that problem to try
to get everybody engaged in talking.
OK, other questions?
OK, over here.
OK, thank you.
Thank you, Carter.
AUDIENCE: Hello, Miss Margaret.
I am Lily from [INAUDIBLE].
MARGARET TANZOSH: Hey, guys.
I think we can help each other.
We all have questions that are good for each other as well.
AUDIENCE: Coincidently, I also teach software engineering.
And I want to ask, what if my student lack of interest
to read the error message?
How to improve their interest to--
for them to able to read that message?
Because every time their program give error, they always ask the teacher?
But actually, the error, especially in Word line or in Word file,
it's already written in their terminal.
MARGARET TANZOSH: But you're saying when they
get an error, rather than looking at it and trying to understand it,
AUDIENCE: Rather than look at it, they directly ask the teacher.
How to improve that so they can read it their own.
Thank you.
MARGARET TANZOSH: Sure.
Now, that happens to me too.
Well now, to be honest with the AI Duck, it helps a lot.
[LAUGHTER]
I'll have them paste their error message.
You could just paste the whole error message, right?
It explains to you a little more what it means.
I'll try to go around.
I mean, I will try to go and I'll say, oh look, it's saying it's on line 19.
Let's look at 19.
What is that telling us?
Oh, it looks like there's a semicolon over here.
It's giving us a hint, right?
So I try to help them interpret the error messages.
But again, it takes time.
It doesn't happen like overnight.
And it's interesting, a couple of months into the class,
I see most students at that point are getting more comfortable
and they're so proud of it.
It's like, I didn't know what I was doing.
Now, I did Caesar all by myself and I didn't need any help.
So but it takes time.
And so I do try to explain the error codes a bit.
I try to ask them to decipher it.
But honestly, this year, we have taken a lot of advantage of the Duck.
So the Duck explains it pretty well.
And I'll just have them paste and paste the whole error message in the Duck.
So I think that's a tool that's going to be extremely helpful for you
all as well.
So let's take a question.
Any questions at the back?
I see a bunch of hands in the back over here.
We'll go over there next, OK?
We'll take up here.
Thank you.
Here and here and I think that's probably all we have time for.
So let's do one here then one here.
Yes.
AUDIENCE: Miss Margaret.
My name is Anne.
I'm from [INAUDIBLE].
MARGARET TANZOSH: I want to make sure I can hear, please.
Thank you.
AUDIENCE: Yeah, I'm from [INAUDIBLE].
I teach in vocational school.
I want to ask you how about--
how can you evaluate your students whether they are success in this field
or not in the future?
I mean, are they failed or not like that?
MARGARET TANZOSH: So I want to understand your question.
How to direct them in the future?
AUDIENCE: How can you evaluate your students
that they are going to be success in this field in the future?
Or they can just move to another field not in CS like that.
MARGARET TANZOSH: Right, so how do I encourage them.
So again, I kind of feel like it's, in some sense,
they're going to want to go into this or not.
I can't force them to go into computer science.
I do try to make the material and I do think the CS50 problem sets.
Make the material pretty interesting and rewarding
and just, occasionally, we'll have speakers come in
and talk about opportunities in the field of computer science.
We'll have people who work.
I have somebody maybe recently who works for Facebook came in
and talked about a little bit of what their day looks like
or somebody who works--
actually, not even a programmer, but more
in like English in kind of the interpreting
language for their AIs with Google.
So I sometimes we'll have different industry people come in and talk.
I don't know if you have access to any parents or people in the community
or maybe you could reach out.
Create like a you know a community here of each other of people
that you can share like what they were able to do
with a degree in computer science or with having studied computer science.
Sometimes, I'll have old students come back
that will decided to take computer science in college.
And they could talk to the class and say--
and a lot of them will say, gee, taking CS50 here in high school
was so helpful for me because it allowed me
to have a better sense of what was happening when I got to college.
So that's actually a great thing to have students--
if you have contact with some old students maybe that have graduated
and have taken the courses and they could come and talk to your students
as well.
So some of those ideas.
I said I know we're almost out of time.
Can we take one more question?
How about up here in the back?
We have kind of been ignoring the back up here.
AUDIENCE: Thank you so much.
Well, my name is [INAUDIBLE].
Just call me Dang.
I have two very simple question, though, but I need more details
about-- you just already explained about ongoing teacher communication helpful.
And then, this is basically was related to what
we were talking in the small discussion in those window shopping like activity
or something when we were talking about how can you make the students excited
about computer science.
And then, I called it like-- provide a help desk or something.
And then, got this term like ongoing teacher communication helpful.
So how do you think about that one?
I mean, would you like to suggest us what kind of activity
that we-- that you think can be implemented for the senior high school
students, especially for us?
Because sometimes, let's see, if we come to the real classroom,
like me, I don't have any like--
how do you call it?
Like office hour.
We don't provide that kind of things.
And then, I think that office hours really help
the students to solve their problems.
So would you like to suggest us or any kind of activities that you can--
that you can recommend us that we can implement in order
to help the students for their project or something.
Thank you.
MARGARET TANZOSH: So my class, about a good half of my class every day
is like office hours.
That's what my class is, all right?
So again, I teach a very short, little bit every day.
Sometimes I don't at all.
Sometimes I don't even teach a new lesson.
I might just have a question I ask, a little discussion.
And then, everybody is just moving on and working on their programs.
So a good chunk of my class most days, allowing
them to do the programming in class is really kind of like office hours.
So rather than just teaching all day, lecturing
all day where they're going to fall asleep,
they're not going to half of them may not understand what I'm saying.
I also bring a lot of enthusiasm.
Because I really like the curriculum so much myself.
I still feel-- I was so happy to find this when I was looking for a way
to teach.
I'm so excited about watching even still now the lecture videos that
get better and better every year.
David does a better job of presenting the material.
But honestly, my class every day, almost half of it is like office hours.
And unless you have to do it in a particular way, what a better way where
they're going to learn when you're helping them
get past that to the next step, right?
So that's my goal.
All right, so I think we're good.
Yeah.
Anyway, thank you all.
CARTER: Margaret.
A round of applause.
[APPLAUSE]