GUY WHITE: Hello, Indonesia.
[CHEERING AND APPLAUSE]
It's so good to see all my friends here.
So many of you come from such a long way away.
How many of you walked here?
How many walked here?
[LAUGHTER]
How many of you took a plane?
How many were on a plane?
Oh, my gosh.
I want to say from the bottom of our heart here at CS 50.
We are so thankful for you.
And please, tonight we want you to contact your family, and we want--
[LAUGHTER]
Seriously.
I'm serious.
I want you to contact your family, and please,
extend our thanks to them for allowing you
to come here this distance to be away from your family and to work.
[CHEERING AND APPLAUSE]
It takes such a commitment to have done what you have done.
But today, is not the end of your journey.
This weekend is not the end of your journey.
This weekend is just the start of something.
[CHEERING]
So I want to see who has traveled the longest way.
So the way we're going to do this is let us stand up.
All of you stand up, please.
Thank you.
Stand up, please.
All right, so if you have come less than five kilometers, please, sit down.
Five kilometers?
10 kilometers or less sit down.
How about 50 kilometers or less, go ahead and sit down.
Thank you, 50 kilo-- oh, there we go.
Got some movement.
[SIDE CONVERSATIONS]
OK, if you had come more--
less, if you've come less than 100 kilometers, go ahead and sit down.
Sit down.
How about 300, less than 300, please, sit down.
Less than 300?
Oh, it's the longest.
It's--
[SIDE CONVERSATIONS]
I'm going to have to make it higher.
How many of you have come from less than 1,000?
Go ahead and sit down.
Oh.
How many of you have come less than 1,500?
Go ahead and sit down.
OK, all right, now let's look around.
Let's look around and look at these people.
How many people have come less than 2,500?
Go ahead and sit down.
Less than 2,500?
Oh, one?
Wait, oh, we have two?
We have two?
OK, those people stand back up.
Stand back up.
I did it again.
OK, not a good--
OK, so let's try this again.
2,200.
If you have travelled-- if you traveled more than 2,200, stand up.
OK, now, let's try here.
If you traveled less than 2,300, sit down.
2,300.
2,300?
AUDIENCE: Whoa.
GUY WHITE: Oh, look at--
OK, so sir, please, where are you from?
AUDIENCE: [INAUDIBLE].
GUY WHITE: Wonderful, give him a round of applause.
[APPLAUSE]
Thank you.
And right here.
My friend, where are you from?
AUDIENCE: Oh, oh.
[SIDE CONVERSATIONS]
AUDIENCE: I'm Indonesian but based on [INAUDIBLE]..
[CHEERING AND APPLAUSE]
GUY WHITE: And how about you?
AUDIENCE: I'm from London.
GUY WHITE: Wonderful.
How many kilometers?
AUDIENCE: [? 234. ?]
GUY WHITE: Wonderful.
AUDIENCE: [INAUDIBLE].
GUY WHITE: Wonderful.
[APPLAUSE]
And up here.
AUDIENCE: I'm from [INAUDIBLE].
GUY WHITE: Wonderful.
[CHEERING AND APPLAUSE]
Thank you.
And did I see--
I see a face over here.
Excellent.
I'm going to go this way and not get injured.
[LAUGHTER]
And let's pass the mic up, but I want it back.
OK.
AUDIENCE: I come from the western of Indonesia
at the end of Sumatra and Aceh province.
[APPLAUSE]
AUDIENCE: Thank you.
I'm from [INAUDIBLE],, around [? 3,000 ?] kilometers.
AUDIENCE: Wow.
[APPLAUSE]
GUY WHITE: So not only is your family proud of you,
but your city, you province is proud of you.
Last night the minister visited you and the school.
You're part of the reason--
you are the reason this is all happening.
We are so happy to be here with you today.
So we're going to play is we're going to play a game really quick to get
us started called counting to 23.
But we can do it in Bahasa.
So how do you say the number one in Bahasa?
AUDIENCE: [SPEAKING BAHASA]
GUY WHITE: [SPEAKING BAHASA]
AUDIENCE: Yes.
GUY WHITE: [SPEAKING BAHASA].
[LAUGHTER]
OK, so we're going to count.
In a minute, we're going to hand of the mic.
We're going to go 1, 2, 3 in [? Bahasa. ?]
AUDIENCE: [SPEAKING BAHASA].
GUY WHITE: And 123.
[LAUGHTER]
AUDIENCE: [SPEAKING BAHASA].
GUY WHITE: 21.
AUDIENCE: Yeah!
AUDIENCE: [SPEAKING BAHASA].
[CHEERING AND APPLAUSE]
AUDIENCE: [SPEAKING BAHASA].
AUDIENCE: [INAUDIBLE].
[CHEERING AND APPLAUSE]
AUDIENCE: [SPEAKING BAHASA].
[LAUGHTER]
AUDIENCE: [SPEAKING BAHASA].
[LAUGHTER]
AUDIENCE: [SPEAKING BAHASA].
GUY WHITE: And remember your number.
[LAUGHTER]
AUDIENCE: [SPEAKING BAHASA].
[SPEAKING BAHASA]
[LAUGHTER]
AUDIENCE: [SPEAKING BAHASA].
GUY WHITE: Is that it?
Yay!
[APPLAUSE]
And now we will spend the entire weekend making a better algorithm for that.
[LAUGHTER]
All right.
It is so awesome to be with you here today.
I'm so honored to be part of this.
We're so happy to be joined by the Harvard team today to be here
and just to be here with you.
So please, do send our thanks to your family.
To get us started, we need to make some noise to bring on Dr. David Malan.
[CHEERING AND APPLAUSE]
DAVID MALAN: Thank you so much to CS50 [INAUDIBLE]..
This is a very hard act to follow.
And in fact, he was kind enough to pass the applause off to me.
But I think we should give it back to him.
[CHEERING AND APPLAUSE]
And allow me to begin this way, if we may.
This is--
AUDIENCE: CS50!
DAVID MALAN: So nice to have all of you here with us this weekend.
And welcome to CS50's full community.
We thought we-- before we dive into the behind the scenes of CS50's pedagogy,
let's do a bit of a pop quiz of sorts.
Could we get eight brave volunteers to come on down?
We need eight volunteers.
1, 2, 3, 4, 5.
Let me go over here.
No hands over here?
OK, 6, 7, 8.
Come on down.
And if you can form a line right here in the middle.
Come on down [INAUDIBLE].
AUDIENCE: All right.
DAVID MALAN: Thank you.
All right, here comes number eight, so 1, 2, 3, 4, 5, 6, 7, 8.
OK, from left to right, do you want to introduce yourself to the group?
AUDIENCE: I'm [INAUDIBLE].
My name is [INAUDIBLE] from [INAUDIBLE].
AUDIENCE: Hello, welcome.
My name is [? Zach. ?]
[LAUGHTER]
I'm mathematics teachers from South Sulawesi.
AUDIENCE: Hi, my name is [? Luth ?] from [INAUDIBLE],, Jordan.
AUDIENCE: Hello, everyone.
My name is [INAUDIBLE].
I'm from West Sumatra.
AUDIENCE: Hello, everyone.
My name is Diana, and I am from Pocasi, West Java.
AUDIENCE: Hi, guys.
My name's [INAUDIBLE].
I'm [INAUDIBLE].
[LAUGHTER]
AUDIENCE: Hello, everyone.
My name is [INAUDIBLE],, and I'm an [? MS ?] teacher,
and I'm from [INAUDIBLE].
Thank you.
AUDIENCE: Hello, guys.
My name is [INAUDIBLE].
I come from Aceh.
AUDIENCE: Hello, my name is [INAUDIBLE] [? Sandy, ?] and [INAUDIBLE]..
DAVID MALAN: Thank you so much to our nine volunteers.
[APPLAUSE]
So what's your name again?
AUDIENCE: [? Sandy. ?]
DAVID MALAN: [? Sandy. ?] OK, let's have you step--
step this way.
You're going to help me with this algorithm.
[CHEERING AND APPLAUSE]
All right, volunteers now could reveal by turning around their pieces of paper
what number they are.
So show your number to the audience.
You'll see that, unfortunately, they're unsorted.
And so I think our first question for the volunteers
here is, please, sort yourselves.
[LAUGHTER]
OK, [? Sandy, ?] what algorithm was that?
[LAUGHTER]
Unclear, unclear, so let's rewind.
Randomize yourself, different order, any order is fine.
All right, and now, why don't we propose to have just our volunteers--
Sandy will give you the third algorithm.
[LAUGHTER]
[INAUDIBLE] volunteers, could you bubble sort?
[LAUGHTER]
Starting from left to right, bubble sort yourselves.
[SIDE CONVERSATIONS]
[? Sandy, ?] what algorithm was that?
[LAUGHTER]
Hopefully, that was the bubble sort.
I know.
Sorry.
Let's run the randomizer.
[LAUGHTER]
[SIDE CONVERSATIONS]
[? Sandy ?] and I [INAUDIBLE] out with this.
So now they're unsorted.
Now, [INAUDIBLE] the bubble sort has us go left to right,
left to right, left to right, swapping elements that are out of order.
So accordingly, at the 6 and 7 are OK.
So [? Sandy ?] look over here.
7 and 3 are out of order.
So what should they do, [? Sandy? ?]
[INTERPOSING VOICES]
[CHEERING]
OK, [? Sandy, ?] 7 and 4?
AUDIENCE: Yeah!
DAVID MALAN: 7 and 8?
AUDIENCE: No!
DAVID MALAN: [INAUDIBLE].
AUDIENCE: [INAUDIBLE].
DAVID MALAN: Yeah, 8 and 1?
AUDIENCE: Yeah!
DAVID MALAN: 8 and 2?
AUDIENCE: Yeah!
DAVID MALAN: Are we done?
AUDIENCE: No!
DAVID MALAN: OK, again, [? Sandy, ?] you take it from here.
6 and 3?
[INTERPOSING VOICES]
[CHEERING]
[INTERPOSING VOICES]
DAVID MALAN: Are they done?
AUDIENCE: No!
DAVID MALAN: 3 and 4, 4 and 6, 6 and 5.
[INTERPOSING VOICES]
DAVID MALAN: 6 and 1.
AUDIENCE: Yeah!
DAVID MALAN: 6 and 2.
AUDIENCE: Yeah!
DAVID MALAN: 6 and 7?
AUDIENCE: No!
DAVID MALAN: 7 and 8.
AUDIENCE: No!
DAVID MALAN: Are they done?
AUDIENCE: No!
DAVID MALAN: 3 and 4, 4 and 5, 5 and 1.
AUDIENCE: Yeah!
DAVID MALAN: 5 and 2.
AUDIENCE: Yeah!
DAVID MALAN: 5 and 6.
AUDIENCE: No!
DAVID MALAN: 6 and 7.
AUDIENCE: No!
DAVID MALAN: 7 and 8.
Are they done?
AUDIENCE: No!
DAVID MALAN: 3 and 4, for 4 and 1.
AUDIENCE: No!
DAVID MALAN: 4 and 2.
AUDIENCE: Yeah!
DAVID MALAN: 4 and 5.
5 and 6.
6 and 7.
7 and 8.
AUDIENCE: No!
DAVID MALAN: Are we done?
AUDIENCE: No!
DAVID MALAN: 3 and 1.
AUDIENCE: Yes!
DAVID MALAN: 3 and 2.
AUDIENCE: Yes!
DAVID MALAN: 3 and 4.
1 and 5.
[INAUDIBLE]
[CHEERING AND APPLAUSE]
Round of applause for [? Sandy. ?]
[CHEERING AND APPLAUSE]
Thank you so much to our volunteers.
Please, have a seat.
All right, so that you can keep this [INAUDIBLE]..
So that then was bubble sort.
Well, then the next two days are meant to be about CS50.
It's meant to be not what is CS50 and what is computer science,
but really why is CS50?
Among our goals for today and tomorrow are
to look initially at the pedagogy behind CS50 itself,
looking at why we teach things the way we
do so that you can decide for yourselves as a teacher, do you agree?
Do you disagree?
Do you want to adopt the class for your own students?
Do you want to adapt the class for your own students?
So there is no one way to teach certainly computer science and even
CS50.
Both back home and around the world, teachers
like you really modified it as they see fit for their students.
And what you'll find typically is that when
you're teaching computer science or CS50 for the first time,
you might indeed want to adopt the class, lean on us.
So have your students watch, for instance, my videos or some
of our shorts online until you get comfortable yourselves
with the material.
And then maybe later in the year or a year or two later
you can adapt the class and make it your own doing what you agree with,
not doing what you don't disagree with.
And instead of having your students watch the videos,
maybe just you watch the videos and then bring the same material
to life yourself in the classroom.
But before we dive into the why, allow me to thank all of our amazing hosts
here at JIS.
You met some of the Ministry last night.
And a round of applause if we could for everyone who's made this [INAUDIBLE]..
[APPLAUSE]
Allow me to take a moment to in that same microphone
to introduce, not just Guy and myself, but more of CS50's team,
including CS50's own, formerly JIS's own Bernie Longboy.
[CHEERING AND APPLAUSE]
BERNIE LONGBOY: [NON-ENGLISH SPEECH]
AUDIENCE: [NON-ENGLISH SPEECH]
BERNIE LONGBOY: Is it [NON-ENGLISH].
AUDIENCE: [NON-ENGLISH SPEECH]
BERNIE LONGBOY: I could never get that one right.
[NON-ENGLISH SPEECH].
Welcome, so happy to have you all here.
We waited for what?
Six months, and super excited to have you all here today.
So I'm Bernie, and I'm in charge of-- what do I do?
outreach and partnerships.
So really this big event is something that we all worked on,
and we're really excited to kick off today.
So again, welcome.
And if you have any questions or anything, just look out for any of us,
and we're happy to answer them.
[CHEERING AND APPLAUSE]
DAVID MALAN: And we next introduce CS50's own Carter Zenke,
who has the distinction of running CS50 itself back home
at Harvard with our 600, 700 students over the course of the year.
Carter.
[CHEERING AND APPLAUSE]
CARTER ZENKE: Hello, everyone.
It's so good to see you again.
My name is Carter.
And I [? lead ?] the courses lectures.
I lead our sections, our recitations, our [INAUDIBLE] hands-on [INAUDIBLE]
classes.
I also get to work with our 80 teachers that we have at Harvard College who
help teach the class.
It's a big group.
We are a big group here.
And I love being part of that community.
So it's exciting being part of that community.
You all as teachers can grow in that way.
So thank you [INAUDIBLE] here in [INAUDIBLE]..
[APPLAUSE]
DAVID MALAN: Allow us to next introduce all the way
from New York City, Margaret Tanzosh who teaches her own classes of computer
science for high schools.
And has been wonderfully working with CS50 for years,
adopting and adapting the class as she sees fit too.
MARGARET TANZOSH: Hi, so nice to meet all of you.
I am so excited to share what I've been doing in my classroom in CS50
for the past eight years.
I was actually one of the first high school teachers to take on the course
and do a combination of adopting and adapting and everything in between.
So I'll be talking to you tomorrow a little bit
about what I do my class like.
And I'm [? asking ?] if you can now visualize
how you want to run your class as well [INAUDIBLE] discussion.
[CHEERING AND APPLAUSE]
DAVID MALAN: I daresay he needs no reintroduction,
but for those of you who [INAUDIBLE]--
[LAUGHTER]
--allow us to ask Guy to introduce himself [INAUDIBLE]..
[CHEERING AND APPLAUSE]
GUY WHITE: Hello, I'm Guy White from Portland, Oregon--
[CHEERING AND APPLAUSE]
--where are the weather is a lot like this today.
It's raining there right now.
I just want to say again, it is my pleasure to have worked with you.
Truly, please, thank your family.
You've just filled my heart.
This such a blessing.
Thank you so much, everyone.
And I look forward to working with you over the next two days.
[CHEERING AND APPLAUSE]
DAVID MALAN: And we don't want to give them the mic
because otherwise we'll stop recording everything.
But not only are we joined by JIS's video team here,
we also have Max, and Xochi and Rongxin.
[CHEERING AND APPLAUSE]
So indeed, the videos that we film this weekend we'll
make available ultimately online.
All of the photos that we've been taking out in the photo booth,
we'll follow up with the URL so you can get our versions thereof.
And all of the materials today and onward will be available on this
website here, CS50.ly/indonesia, which will give you links to the slides,
any code that we distribute, the agenda itself.
So this is the URL that you should keep in your phone today and tomorrow,
but perhaps after the workshop as well.
As we forge ahead today, please, do interject at any point
if you have questions and also during the breaks or lunch time tomorrow.
Please, feel free to ask any of us questions that you might have.
But thought I'd give you an overview of what we hope to do over
the next couple of days as follows.
So today, we are at that first white bullet, CS50 explained,
behind the pedagogy.
Between now and 4:00 PM, what we'll do is focus on that line
of teaching CS50 the way that we do.
We'll then take a 30-minute break.
And at 4:30 PM we'll resume focusing on what we call back
in Cambridge microteaching, giving everyone an opportunity
to very comfortably, very safely, very experimentally teach something
to some of your fellow teachers.
And we'll explain after the break what that will involve.
No prior preparation is expected.
Maybe we should do this.
Maybe we should teach bubble sort in all of the individual [INAUDIBLE]
you can do that.
[INAUDIBLE] explain what that's all about it.
It's meant to really help you get any of the nerves you
have out now because, especially if you're teaching CS50 for the first time
or will have been a few months since you've seen your own students,
it will be a much safer space, much more comfortable space
to be nervous in among your colleagues than necessarily
feeling that way in a few weeks or month's time in your classes.
Tomorrow, meanwhile, we'll get started early.
And over breakfast, we'll distribute a packet of puzzles.
Some of you might know online that we have a tradition of CS50 Puzzle Day.
More on that in a bit.
So upon arrival tomorrow, you'll be provided
with some food as well as some puzzles.
Now, you don't have to solve all of the puzzles.
You'll find that they're somewhat easy or medium or hard.
But the goal is just to enable you to chat with more teachers
than you came into this workshop knowing so you hopefully
make a few new connections and friends and colleagues
while having some fun solving the very types of problems
that we'll make available to you in the coming year
if you to run a similar event for your students.
We'll then focus on teaching CS50 itself and actually experimenting with
and talking about methodologies thereof.
Managing a CS50 classroom, really a computer science
classroom more generally, focusing thereafter on comfort levels.
As you might know, within CS50, certainly back home where we
have a lot of undergraduate students, we have
problems for those less comfortable and more comfortable
and somewhere in between too.
And so what we'll discuss is exactly how you too,
having students who might have been programming since
they were six years old, and some students who don't even have access
to computers outside of school, but you can balance those two
different types of demographics.
We'll take a break and do a working lunch with some Q&A followed
by a hands-on opportunity to actually-- and this will be much more fun than
being graded by the teaching fellows--
actually grading some sample work so that you'll get a sense of what is a 5
out of 5 for correctness, at least as we view it, or design, or style,
and getting you to think about the teacher
perspective of what you've just experienced for months as the students
as well.
We'll then have a round two of microteaching, an opportunity
to improve on however later today goes.
And ultimately, we'll be giving you an overview
at the end of tomorrow, all of the resources
that will be available to you from CS50's team,
both now and in the coming months and years.
And then we'll conclude with a presentation of your very own CS50
certificates and congratulate you and acknowledge you [INAUDIBLE]..
[APPLAUSE]
I do think the right way to think about CS50 as being OpenCourseWare,
freely available open concept, is that you can indeed adopt it or adapt it.
And to reiterate, adopt in our mind means lean on us heavily.
Have your students watch me, watch Doug in the shorts,
use our problem sets as is, use all our [? grading ?] as is until such time
as you just feel more comfortable maybe making some changes
or creating your own problems or presenting material your own way.
Now, you could certainly do that from day one if you're already comfortable.
But in general, adapting the course would be just that.
Like any good teacher, using what you like or what you don't like
or changing what you don't like in order to really make the class
and your students' experience your own.
And so that's generally how we frame the course.
It's not some curriculum.
It's not some textbook that you have to either use or not use.
So do know that first and foremost.
And those of you who have never taught CS before,
are maybe coming from another field, maybe it's math.
Maybe it's something completely unrelated.
Realize and know that it is perfectly OK,
and I would encourage you to just learn along with your students,
especially those kids who are already a little more comfortable, maybe
have been programming even longer than you.
They're going to catch on if you're just pretending
to know what you're talking about.
And so no good will come from that.
So I would encourage you to be comfortable
feeling uncomfortable at times.
And if you don't know some topic or some answer, just offer,
well, we'll figure it out together.
And indeed, that plays into really something
that's a little unusual within CS50 or at least certain courses
back at Harvard is consider, if you so can with your schools,
using students as your own teaching assistants or teaching fellows,
as we call them, or TAs.
And by this I mean, if you already have that one or a few students who probably
don't really need to be taking the class,
but maybe it still fills in gaps in their knowledge,
so it's not pointless for them to be taking the class formally.
But if you already know that they're going to be the kid with their hand up
or they're going to be the one getting 100% on the assignments already,
consider, if you can, deputizing them, so to speak, so as
to be in addition to you one of the humans walking
around helping their classmates.
For instance, we give some of our staff little lanyards
that say CS50 that make clear that they are part of the team.
So little touches like that, or name tags,
or just knowing that this person or that is
the teaching assistant for the class.
That's an invaluable resource, truly, especially
if your class is somewhat larger.
You now had two humans or three instead of just one.
So here we go.
CS50 explained, behind the pedagogy.
This is the why.
Please, interject at any point.
And of course, we'll make these slides available for reference thereafter.
Thought we would present to you a few types of answers to why, namely
on the courses languages, on the courses lectures,
or really classroom curriculum, and finally,
focusing too on some of the courses problem sets.
So this is an image you might recall.
It might still feel this way.
This is a photograph of a [? half ?] down the road from Harvard and MIT,
where some industrious students connected a fire hose and fire
hydrant to a water fountain.
And pictured on that sign there, even though it's very pixelated,
is a the statement along the lines of, getting an education from MIT
is like drinking from a fire hose, which is
to say there's no way you're going to absorb or swallow
all of the information at once.
And it is a little bit forceful.
But the point though, is that to expect this
from the get go means that you can indeed be comfortable feeling
uncomfortable throughout the course.
It is not the expectation, even of our own students
back home, that they'll master each and every topic,
but that they'll have that exposure.
CS50 is indeed meant to be this foundation for, this introduction
to computer science, not necessarily something that's
going to come naturally to all students the very first time
that they dive into it.
So with that said, why do we use the languages that we do?
Because CS50, as you might have gleaned, is already a little different from many
introductory courses, most introductory courses,
which are typically a Java class or a Python class or a C++ [INAUDIBLE]..
They are very language centric.
And we're not, because over the course of 12 or so weeks we, of course,
go from Scratch to C to Python to SQL to HTML, CSS, Java.
It's very fire hose, right, on my fingers.
It's a lot.
But what's the point?
Well, very early on when I actually started teaching CS50,
the course was pretty much only taught in SQL.
Though there's a little bit of a language called Ruby at the end.
But students would exit the class, even when
I took it 20 years ago, with the mindset that they learned how to program in C.
And so it was rather exclusionary to them understanding or diving
into other courses or other languages because they had learned C.
They hadn't learned computer science, and they
hadn't learned how to program period.
And so among our goals with this suite of languages is twofold.
One, to make sure that students do feel that they learned how
to program period.
Or if we want to qualify it, they learned how to program procedurally.
So not so much object-oriented stuff, not so much functional stuff,
if you're familiar with these terms, procedurally programming.
And this is the type of languages we've generally introduced.
But beyond that, among our goals in CS50,
is to ensure that it's a foundation for students taking
computer science for the very first time before they go on to higher level
classes and more computer science and programming so they're prepared for it.
But at least back home at Harvard, half of our students
never take another CS course before.
And we know that going into it.
And for those students we felt that it's very important
that they not only have the conceptual mindset of a computer scientist,
they know how to process information and think about problem solving more
effectively, but they also have some practical skills that they can bring
back to the arts, humanities, social sciences, physical sciences,
medical sciences, and the like.
They just have some practical programming techniques.
And so while we start with this terminal window using C,
and we end with more of a familiar paradigm, namely of course,
web programming that's also increasingly used--
thanks to HTML, CSS, and JavaScript in the mobile world as well.
So the students are prepared to never again take a CS class,
but at least to continue to teach themselves new languages.
So why Scratch?
So back in 2007, one of the first changes
we made when I took over the class was changed the class from introducing--
no joke-- assembly language in the first week of the class to Scratch, which is
dare say the complete opposite.
And even though you might not know much assembly yourself,
if you think back to week two, we talked about this.
And we showed the very scary looking code that wasn't even 0s and 1s.
It was almost scarier and more cryptic.
But that's still with us today, and that's
a worthy topic for computer science or engineering students
to learn but maybe not on the first day of class.
So Scratch, for us, is really meant to introduce these ideas, these building
blocks to students.
By the way, this is fun, and better yet, in a way
that they can share it with their roommates
or send a link back to their parents back home and delight in what they've
created very visually, very graphically, without the stupidity of semicolons
and parentheses and curly braces and stuff
that is just not intellectually interesting.
Certainly, something you have to get over eventually, but again,
not on the first day of the class.
And so it's very deliberate, as you might recall, from our own week
0 and week 1, that when we introduce this as the first program
that someone could write in Scratch, we then
tease students with this code, which, my god, that escalated quickly.
But then if you think about what you can do with these visuals,
we briefly color code it.
So now, everything that's orange has to do with the green flag being clicked.
Everything that's purple has to do with the save block.
And yes, it looks ridiculous.
It's not going to be obvious what most of those symbols do.
But that's not the point, certainly on the first day.
This program, of course, still just prints out, Hello, world.
And then of course, we translate it to the actual Scratch blocks
so that in the subsequent week 1, as we call it,
now students hopefully have a mental model
where they're comfy with the idea of functions and conditionals
and loops and maybe a few other ideas like variables and more.
Now we can literally side by side compare the two
so that if you're comfy with the program you
wrote just having the task say, Hello, world, OK, it
looks a little harder to master now on the right, but it's just the same idea.
So the syntax will come, but the ideas are the same.
Same thing here.
On the left here, we have an if, else if, else statement in Scratch.
And of course, it looks much scarier to a student unfamiliar with textual code,
but it's the same idea.
And so pedagogically the motivation is to really assure students
that it's fine if you don't quite get all the syntax
or you make stupid typographical errors.
What's important is that you understand this,
and you'll get, with practice, more comfort with this.
And of course, we can do this with loops,
and we can do this with so many other different features, including
transitioning.
And this too is delivered mid-semester in week 6 from C to Python.
You might recall that we use the same kinds of slides
where I pulled out the exact same pictures of Scratch blocks
but then showed students how we would translate it to Python as well.
And this [? isn't ?] very intentional.
Among our goals with CS50 too in teaching
these different languages is to show students
that you don't need to take a whole course on Python to learn Python.
Now, that might accelerate your learning,
and there is something to be said for learning
from an expert in the field who might be able to structure your lessons.
But in reality, they're probably not going to take courses endlessly
in the future.
And so all the better if we can give them
some discomfort now looking some things up online, looking at some
slides, googling for some answer as to how to do the syntax,
but making clear to them that, even after three, after six months of CS50,
you've seen most of the ideas out there.
And you just now need to translate them to some different syntax as well.
We introduce beyond those languages, of course, SQL for databases.
And here is where I think teachers, among them Margaret and others,
have made different decisions as how to structure their classes.
So SQL we introduce so that students have a real-world database that they
can rely on.
And nowadays, data science and statistics are increasingly popular.
So this is just a really useful tool, especially for those students
who never take CS again.
And we use it so that at the end of the term, especially when we introduce
web programming, students just don't have
to use a CSV file, which would work for small websites.
You could read and write data, but it's not
the right way to do things for any decent number of users.
So we introduce students to at least the simplest flavor
of SQL, so not my SQL anymore or [INAUDIBLE] or, god forbid,
Oracle or the like, but rather just SQL lite,
which shows all of the ideas of the language
but also helps students get the job done on the web or in mobile environments
too.
We introduce HTML, right?
This isn't going anywhere.
Like it or hate it, it's being used now for the web,
of course, but also for mobile applications increasingly,
especially since in this room some of you might have iPhones.
Some of you might have Android devices.
That means twice as much labor for a company or an individual developer
to make if they want to have an app that is cross-platform.
So increasingly, you're seeing, even though we
don't talk about this in CS50 much, but you're seeing HTML, CSS, and JavaScript
being used.
So you write the code once, and then you just
put it in a different type of rectangular window, if you will,
so that it works on both Android and iOS as well.
So we introduce this though, again, so that we
could off-board students at the end of the semester to an environment
that they can actually build real world tools with.
Of course, we introduce Flask, which I think
is probably the simplest of the Python frameworks
that doesn't abstract too much, doesn't get especially bloated,
like I think Django gets, especially if we just
have a week or two to introduce it.
And this of course, is how we introduce students then
to writing code but now interacting with users via HTTP and the like.
And as for tools, of course, we've introduced, over the past two
years now, Visual Studio code, implemented by way
of GitHub code spaces in the cloud.
For us, this too is very deliberate.
Code.org has their own platform.
Many of you might have used Replit or certain other platforms
out there or even client side IDEs, like Eclipse or NetBeans or the like.
It's deliberate that we use VS Code insofar as it's a very general purpose
solution.
It's not one language specific.
It's also free, which is great.
It's also very popular nowadays.
And certainly among US tech companies and increasingly internationally,
it's just VS code [INAUDIBLE] development environment of choice
because it's so extensible by having extensions and plugins and the like.
And so this is deliberate too that we want students
not using a toy CS50 specific environment such
that when they finish the class they have no idea how to write code.
But rather, they use this in the cloud.
And then at the end of our term, we try to off-board as many of our students
as we can by giving them instructions and videos
for learning how to install Python and VS Code and anything else
they want on their own Mac or PC.
It's still a headache even a few months into the class,
but it's not like a barrier on day one when they just
want to write Hello, world, but they can't
get Python working in their Windows path or something like that.
So it's literally start in the cloud but try to end in the local Macs and PCs.
Any questions now on this whirlwind tour of our use of languages and tools
and why?
AUDIENCE: Questions [INAUDIBLE].
DAVID MALAN: Yeah.
AUDIENCE: [INAUDIBLE] about [INAUDIBLE]?
DAVID MALAN: Ah, sure try me and I'll defer it if its two specific.
AUDIENCE: I was thinking about [INAUDIBLE]..
Is it like [INAUDIBLE]?
Or is it [INAUDIBLE]?
And then [INAUDIBLE]
DAVID MALAN: Sure, a really good question
about the capacity of a SQL-like database as it
relates to something like Google Drive.
The capacity of a SQL-like database completely depends on the device
that your storing the database on.
As you might recall from the end of the class,
a SQL-like file is usually [INAUDIBLE] in something like dot dB
or even dot SQL lite.
And that's literally just a file, a binary file made with 0s and 1s
that might be 0 bytes if there's nothing in it yet.
That could be a megabyte if you've got a few tables and rows.
Could be 100 megabytes if you've got a lot of data.
So the only limiting factor is what's available on your own Mac or PC
or Android or iOS device.
AUDIENCE: I have a question.
DAVID MALAN: Other questions on languages.
AUDIENCE: [INAUDIBLE] to make SQL [? lite ?] by sending some
[? technical ?] [INAUDIBLE] as easy to write code [INAUDIBLE]..
And can we use [INAUDIBLE] for our student [INAUDIBLE]??
DAVID MALAN: Yes, absolutely.
So you can, in fact, use code.CS50.IO, which
will lead you to the same environment that you've all been using
as students the past several months.
Your own students can use the same.
There are also other ways you can use code spaces even independent of CS50.
And what we'll do in the coming weeks is we
hold a Zoom-based tutorial for those who want to see
other ways of using these same tools.
You can actually use code spaces itself as a teacher for free because of grants
that Microsoft and GitHub provide that essentially it gives you more
control over the student's experience.
Whereas, code.CS50.IO automates a lot of things right now.
So both options.
AUDIENCE: Including all the [INAUDIBLE] class.
DAVID MALAN: Yes.
AUDIENCE: In C or Python.
DAVID MALAN: There is nothing you have just experienced in the past six months
that you will not continue to have access to.
[CHEERING AND APPLAUSE]
So allow me to transition now to the more curricular side of things.
And as you might know from the videos, we
tried within CS50 on that beautiful stage
that in Sanders create as many memorable moments for students as possible.
And what this means is just trying to bring the material to life in ways
that PowerPoint slides do not belong or just talking about the material
or having students read a textbook.
It doesn't necessarily mean that these memorable moments
and these physical demonstrations are showing or introducing any more
material that you couldn't introduce via those other technologies
and techniques, but that you're creating, hopefully,
this visual, like the eight or nine of you who came up.
You will never again forget how not to do bubbles sort perhaps,
like [? leading ?] that demonstration.
Until then, we actually did it with the one final way.
And so the goal is just to give that visual
that persists long after term's end for many more months, maybe even years.
And we don't do that for every topic, of course.
Otherwise, we'd be here forever.
But we try to do it for some of the most difficult topics
or at least those topics that lend themselves to theatricality,
so to speak.
And so I thought I'd share with you a few screenshots in a few slides that
explain why we did things this past year the way we did.
So with that said, the first and foremost,
maybe most memorable for students, tends to be
our implementation of binary search at the very beginning of the class.
So here is me in a very awkward screenshot, tearing that phone
book, which admittedly are getting very hard
to find, so much so we tried to find one here in Indonesia, and we could not.
[LAUGHTER]
But they're even hard to find back home too.
But this is an example that, honestly, after 16 years of teaching
CS50, some students, alumni still come up to me
and mention, oh, I still remember when you tore that phone book.
[LAUGHTER]
There's something to be said for certainly the memories that
instills but also just the idea.
Those students, hopefully, will never forget the essence of binary search.
They forget the term, the essence of dividing and conquering
a problem by dividing and dividing and dividing again.
And so when you have access to props like this or anything,
any collection of paper that you can tear this way,
consider doing it to bring that material to life.
Vary it up.
Sometimes I have students come up onto the stage,
and I have to whisper into their ear that you have
to want them to tear the phone book.
But for now, that just allows you to create
all the more visuals for your students to latch on to even as they
might struggle with those same topics.
Something like Scratch, meanwhile, so Scratch
has been meant again to be this practical, fun, accessible opportunity
to bring material to life.
And even though some of your students might have already used
Scratch or Scratch Junior as kids in school or at home,
it's still an opportunity to elevate it intellectually to make clear
that it's not just a game or something to poke around with.
It is computer science.
It is an example of programming, certainly,
that's much more accessible than what they're about to see weeks later.
And here too, we have fun, especially in that first class,
where if you're trying to convince students who might not necessarily
even consider computer science for them demographically, academically,
or otherwise, Scratch is just a nice way to put everyone on the same playing
field.
And you might remember from week 0, it's great
when you can get students literally jumping on stage and implementing this.
Recall that I think he was trying to hit the Whack-a-mole, so
to speak, as we say in English, where the thing was moving up,
down, left, and right.
So just this idea too.
It's not maybe as high information content
as something like tearing the phone book for binary search.
But it's just fun.
It makes students want to be there.
It makes them want to come back the next day,
and we particularly do these kinds of things at the beginning of the class
as students are trying to figure out if this is indeed a world for them.
With that said, binary itself, of course,
is something we talk about early on.
And this too is an opportunity to bring students up on stage.
So here, for instance, didn't have paper.
We actually had found plastic numbers with light bulbs that lighted up.
And we had our students represent the 1s place, 2s place, 4s place, and 8 place
in a way that just allows us to get some audience participation.
And really, pedagogically, for the students in the audience or the puppets
in the audience--
[LAUGHTER]
--to see the students on stage as themselves
sort of imagining what would I do in that student's position?
So they're engaging a little more actively within than in just
listening to someone like me talk about these kinds of ideas.
So debugging, we quickly transition to now our week 2,
and we tell students about print f and print later in Python.
We introduce them to debug50, which is CS50 specific, but all it does
is automatically open the built-in Visible Studio Code debugger.
So that too is not CS50 specific, but we make it a little easier to use.
And then of course, we introduce them to, in our case,
a seven-foot rubber duck standing on stage, an inflatable duck in this case.
These are sometimes-- well, actually, they've
gotten very hard to find at that scale.
But we also have, of course, these tinier little ducks that we actually
give out to students.
And they don't even have to be that big.
You can find online or you can make ones [? own ?] out of paper
or the like, tiny little ducks.
The goal is to give students recall some inanimate objects, something cute,
something memorable just to put on their shelf
so when they don't have a friend or roommate or teacher
available to answer questions, they can just start talking through their ideas.
And there's a reason that we do this to steer into this.
And this is kind of ridiculous that we have this seven-foot duck among all
our teaching supplies.
But the goal is to just normalize this, not just
to tell students, hey, go find something inanimate to talk to.
But to say, hey, if I can stand there for three hours in front
of this goofy duck, you can certainly try it as a debugging technique.
And some students do take that to heart and indeed attest
that this little guy proves helpful for them
sometimes because they just hear the illogic in something they're saying,
and the proverbial light bulb goes on.
How about now arrays?
So arrays are one of the first data structures that we introduce students
to, specifically in C in our case.
And we introduced them initially in the abstract like this.
And you might recall too that [INAUDIBLE]
even more of the computer's memory.
But we try to focus on just a few bytes at a time left to right.
And from this though, we try to connect it to something metaphorical,
like closed doors.
Like in the US, it's very common to have hallways
filled with lockers, where the kids can put their books
and their backpacks and the like.
And so we try to give them that mental model
to latch onto like they used to have maybe in middle school or high school.
And now some years, most recently this year,
we were fortunate to find, let's see, seven actual lockers.
These aren't even the big ones, though they're not
fun to move across campus, seven big lockers.
But the point is that the door is closed.
You can't see all of the numbers at once with this bird's-eye view.
You have to deliberately index into it one at a time.
And this too, of course, involves not just me
but a student potentially coming on up to act this out,
lending itself to that memorable moment.
But this is the perfect example, too, of things where it doesn't
need to be as high budget as this.
The fact that I brought paper today with those numbers
is exactly what we used to do back in the day.
We might just have the students turn it around.
When it's closed, they turn it this way.
So even though we're fortunate in Cambridge sometimes
to have seven-feet ducks and seven of these red lockers,
paper and pencil and tape is all we used in my first several years of teaching
CS50 because that's what I had in home or we had there on campus.
So all of these examples are meant to be quite accessible.
Now, they didn't know we were going to do that demo at first.
So here's a discussion of bubble sorted selection sort.
Here, of course, we have those same plastic numbers that we used back home,
but paper certainly suffices for this too.
But this is an opportunity, again, to get the audience viewing themselves
as maybe thinking, my god, thank god I'm not up there on stage doing this.
[LAUGHTER]
But they think to themselves, how would they do that?
Or just like you all were wonderfully yelling
like a game show up here, just rooting for the participants
to actually sort themselves properly.
That is probably a memory that will not leave you,
will not leave them for some time.
And I daresay, it's a lot more fun to have that memory about something
as arcane as bubble sort or selection sort.
These are not topics that you go home and tell
mom and dad about all that commonly.
But you might tell mom and dad and your friends
about what you did in your CS class today
when this sort of hilarity but educational presentation
came to life in this way.
Now, merge sort, recall, was harder than those two algorithms too.
And it's especially harder for students to wrap their mind
around what's going on.
And we often try different techniques.
So while I talk about it, for instance.
And I might show the pseudocode.
I might then pull up one of those web-based animations with the graphics
or the YouTube video that's showing it.
That's deliberate too because some students are very visual learners.
Some are very audible.
Some are very intellectual about it.
And so by just trying 1, 2, 3 different approaches, hopefully,
we're getting most of the students on board.
With this example here, this is just a metal shelf we put together.
This allows us to convey very visually the merge sort
that the key to its speed is you have more space.
And bubble sort and selection sort just use in-place swapping here.
We only need as many bytes if we had people.
But merge sort, you need at least twice as much space.
Now, just for convenience, I actually use four times as much space
in this demo.
But I could go down, up, down, up as I do those merging.
So this too, having a couple of shelves is certainly
something that should be discoverable most anywhere.
We talk about issues of scope, for instance.
Recall that the issue of scope means where can you use the variable?
And the short answer, at least in C is, if you
declare a variable inside of curly braces,
you can only use it inside of those curly braces.
You can't use it in some other function or file.
So we talk about scope before a lot with students
because of our discussion of memory.
But at that point, as well as for our solving algorithms,
we need to be able to--
for our sorting algorithms, we need to be able to swap values.
So you might recall that we really focus on swapping things.
And this is a demo I've always liked where we actually use glasses of water.
We get some food coloring.
Just choose two different colors that ideally are visible by students,
especially with color blindness.
So you want to choose those carefully.
And then you can have fun with this, as you might recall,
like don't give the student three glasses at first.
Give them two.
See what happens.
One year, it was funny.
When I did this, the student just got a little creative.
And she just went like this and moved them slopping them.
It's not really what I meant.
We wanted them to, of course, pour it left and right.
But this is a fun example too.
In case your mind is racing, I also thought I'd be really clever one year
because it turns out-- we don't teach this now in CS50--
using bitwise operators.
If some of you are familiar, there's an operation called XOR for exclusive
or, which allows you to operate in C on individual bits,
not just integers or chars or the like.
You can actually swap two values in C, if you're clever,
without needing a temporary variable.
You can use this other operator that we don't use currently in CS50,
but it's a pretty cool trick.
And so I thought, years ago, that I'd try to simulate this
by being very scientifically clever.
And so I used one glass of oil and one glass of water
because I vaguely remembered from chemistry class
that these two things shouldn't mix.
Of course, it mixes but messily.
We got some bubbles, as I recall.
So I was trying to prove-- to be very clever, pour one into the other
then dump the other out.
It didn't work, so sometimes these demonstrations backfire.
So another moment I would encourage you to do
is to test things in advance, not in front of your students.
But again, that too just lends itself all the more to a memorable moment.
Well, what about memory itself?
In the US, we very commonly have on long roads these kinds of mailboxes.
So they all follow a similar shape, and so it's very familiar to students.
And we use these as representative of how we might store values.
Now, these I did happen to go to the local hardware store.
But you could mimic this with a picture thereof
or just a cardboard box of the like.
And so we use this to give students just a more concrete visual
of what we mean when we say an address.
We can tell them it's like a mailbox address,
but there's a little something special or more memorable about showing
that actual thing.
And what I do too is you might have, at least in American football
games back home, as we discussed pointers,
these foam fingers tend to come out, maybe in soccer games
as well around the world.
You're like, you're a number one.
We just use it as a big pointer, not to say we're number one.
Rather, the value is over there.
So this is just again a silly visual that we're
very careful to choose our school colors and the like,
whereby this pointer, p, might be pointing
at some other value, some number, like n over there.
So just acting things out, taking a few moments to do exactly that same thing.
But at the same time-- and this might have been a discomfort for some
of you--
would you get very low levels sometimes in CS50.
And this is deliberate.
In fact, one of the reasons why we don't use just Python in the class
is because I think it's a really missed opportunity for students to understand
at a lower level what's going on inside of a computer.
And if you only learn Python and that's the only language you ever
learn and then use, you can use a list.
You can use a dictionary.
But do you ever really understand what it is?
Maybe conceptually at a high level.
But there's something about, I think, pedagogically just showing students
what's going on underneath the hood.
It [? don't ?] abstract everything away, that they'll get it.
Even though it might be very technical-- and pointers are a hard topic--
the result is like, wow.
That light bulb does go off when in one line of code in Python
you can re-implement the entirety of your speller problem set code in C.
And so that too is very deliberate to not
be fearful of just going into the weeds sometimes with students.
So for instance, here is the very technical, pictoral way
of describing a pointer p, storing the address of some value n,
storing the specific number 50.
But again, we can abstract that away with a number.
And then at that point, is when the foam finger comes out in class,
and I start pointing at it between those two mailboxes.
Later on in the class, too, you might recall this demonstration,
and there's so many good little videos like this on YouTube
and other universities websites.
Look for these things, and hang on to these things.
Share these kinds of things with each other.
This, of course, was Vicki, as I recall, made by a friend of ours
at Stanford University, like in his basement with a little cardboard box
and some clay that acts out of what can go wrong when you actually use pointers
incorrectly.
And then toward the end of CS50, we introduce more sophisticated topics,
data structures, like hashing.
So recall that hashing means you take as input some value,
maybe a person's name, and you decide what bucket it goes into.
Like this is the A bucket, the B bucket, the Z bucket.
Or what we choose is, I went online and I
looked for playing cards like that you might
gamble with that I thought it would be more fun and more visual to search
for jumbo playing cards.
And so we indeed have these 18-inch cards
that I can use very visibly in the class.
We literally went to the hardware store and got
some buckets that looked like this.
And we introduced students to hashing by literally bucketizing the values.
And that's a technical term a lot of engineers would use,
even though it's a little abstract for students.
But if you use actual buckets, you decrease
that gap between the idea and the actual incarnation thereof.
Lastly, among topics, maybe race conditions.
Now, this is where things really get sophisticated
in an introductory course.
And as we tell students, CS50 is really a combination of what in the US
and in many countries is called CS1 and CS2 combined because we introduce
students to software-based programming.
But we also touch on data structures and algorithms
quite a bit that many schools separate into two separate courses.
So by the end of the class, we're nonetheless
talking about very sophisticated topics like this
that often come up in databases, be it SQL-like or otherwise.
So here is the tiniest refrigerator we've yet found.
We were fortunate a couple of years ago during COVID,
we were collaborating with some friends at the theater on campus
where they had a whole warehouse of actual props
that were used in plays and musicals that had been used on campus.
So in some years we've used an actual refrigerator that was as tall as me.
It turns out it's a lot easier to carry around
a foot-tall, plastic refrigerator here so as to paint
the same picture for students.
This, recall, was the scenario in which-- what had I run out of
if you recall?
AUDIENCE: Database.
DAVID MALAN: Oh, database, yes, but what was I pretending to run out of
and I needed to go to the store to get more of.
AUDIENCE: Milk.
DAVID MALAN: Milk, yeah.
So I picked a beverage and said I was out of it.
I had to go to the store to get it.
But if I don't leave a note or if I don't lock the database,
my roommate, for instance, would come home, open the variable, if you will,
and inspect its value, make a decision based on the exact same value as I did.
And that's when a race condition arises because one of us
is going to come back first.
The other is going to then arrive, and then we have too much milk.
This is exactly what happens in the world of databases.
And in fact, I actually learned this topic myself.
And a former professor of mine gave us this example
of a refrigerator in an operating systems class that I took 20
some odd years ago.
And so here's an opportunity too, I think,
to not be scared of or disinclined to even introduce students
to advanced topics.
I think especially if you can base it in something metaphorical, something
physical, something theatrical, if you will.
So that's a whirlwind tour of just some select topics as to the [? line. ?]
AUDIENCE: No.
[INTERPOSING VOICES]
DAVID MALAN: What?
No?
No way?
[LAUGHTER]
It is so much better being a teacher than a student [INAUDIBLE]..
[LAUGHTER]
But if there's any questions on those memorable moments or the why,
I am presenting topics like those.
These are meant to just be examples to get you thinking.
Certainly, you've spent the past six months on all of the topics.
Yeah.
AUDIENCE: So last year my class [INAUDIBLE]
they thought that it would be easier [INAUDIBLE]..
DAVID MALAN: OK.
AUDIENCE: [INAUDIBLE].
Right now, I'd also like [INAUDIBLE] see the [INAUDIBLE]..
What do you think [INAUDIBLE]?
DAVID MALAN: That's a good question.
For those who couldn't hear, you've started with save.
You then switched to Kotlin so as to introduce object-oriented programming.
Then you switched to Python.
And so the question is, should we maybe go back to C?
Should we continue using Kotlin?
I think it depends on the goals.
Kotlin is particularly conducive to mobile apps
nowadays, at least that's what Google, for instance,
has been pushing in that space.
And everything is in object, really, in that space now, unlike Java.
So I think that's helpful if you want your students focusing
on mobile in particular.
AUDIENCE: Yeah, because for the second year they have to [INAUDIBLE]..
DAVID MALAN: OK.
AUDIENCE: [INAUDIBLE].
DAVID MALAN: And I think this is where I'll
be careful too because I think in the world of programming languages,
it's very much a religious debate as to which language is
best, which you should use.
But I would say that, if you introduce students first to C,
a very common next language would be something like C++,
which isn't technically a superset but does add additional features on top
of C.
So for instance, you could spend maybe less time, maybe in this first class,
introducing students to C. And then maybe in the last week, the last two
weeks, last four weeks, whatever seems appropriate curricularly,
you could say that, well, structs in C only
get us so far because there's no functions or methods built into them.
So it turns out you can use this other language, which is almost just like C
but has classes.
And you can make these objects.
So you can start to bridge one or the other
without completely changing syntax from one to the other.
Or instead, if you liked your experience with Python
and maybe you still start with C, you could focus more
on the object-oriented aspects of Python.
And so for instance, some of you might know.
We actually have a class in CS50 called CS50P, CS50's introduction
to programming and Python.
And we spend like an entire module on the object-oriented aspects of OOP
in that class.
We don't touch it in CS50.
So I think I would decide based on what you want-- where you
want your students writing the code.
Like if it is a mobile app, then maybe just focusing really on--
Kotlin.
Make sense?
AUDIENCE: Yeah, [INAUDIBLE] and [INAUDIBLE]..
DAVID MALAN: OK.
AUDIENCE: So [INAUDIBLE] then [INAUDIBLE]..
They have two [? markers ?] [INAUDIBLE].
So [INAUDIBLE].
DAVID MALAN: Gotcha.
AUDIENCE: [INAUDIBLE].
Right now, [INAUDIBLE] because--
DAVID MALAN: I think, if there's no one right answer--
and I would encourage you as a group to, like during today's breaks, tomorrow's
lunch, and [INAUDIBLE],, have that chat and solicit more opinions
than just mine.
But those are the kinds of thoughts that I would bring to the conversation.
Yeah.
AUDIENCE: What is the reason behind [INAUDIBLE]??
DAVID MALAN: Well, which aspect [INAUDIBLE]??
AUDIENCE: [INAUDIBLE].
DAVID MALAN: Oh, the Harvard preps video.
OK, so you might recall in week 8 we showed the prank
that Yale did on Harvard by having us hold up
an offensive sign to all of the guests.
So the motivation for it really was, one, safetyschool.org recall
was one of the domains that we played with.
And I ran the command that showed us that safetyschool.org actually
issues an HTTP redirect to Yale.edu.
And that's kind of funny, I think.
But the catch is because we in CS50 back home
also had Yale students at Yale University,
not quite fair if we only pick on one.
So I looked up a similar prank, and that one
was maybe the best prank put on Harvard before.
So we introduced that as well.
That is certainly something you can omit,
especially if your students don't care about Harvard or Yale.
But the motivation was to make it an even playing field and picking on both.
Yeah.
AUDIENCE: Yeah, OK, [INAUDIBLE] amazingly both [INAUDIBLE] CS50
is [INAUDIBLE], yeah?
But what is the story behind the [INAUDIBLE] [? episode ?] so I am
so [? sorry. ?]
DAVID MALAN: OK.
AUDIENCE: I thought of the [INAUDIBLE],, and [INAUDIBLE] or [INAUDIBLE]..
And [INAUDIBLE].
And I think, I [INAUDIBLE] it starts [? out ?] of there are a [INAUDIBLE]..
There are [INAUDIBLE].
How is CS50 [INAUDIBLE] make a good [INAUDIBLE]??
And it's [INAUDIBLE] won't be the problem.
DAVID MALAN: Sure.
AUDIENCE: No [INAUDIBLE] never has a feature [INAUDIBLE]
the this problem set [INAUDIBLE].
DAVID MALAN: Oh, yes, of course, you can and should use--
AUDIENCE: Can we adopt or take the problem set and [INAUDIBLE]
problem set to [INAUDIBLE]?
DAVID MALAN: Thank you, and yes, the answer to all questions like that
would be yes.
The material is yours to use as you see fit.
[APPLAUSE]
And what we'll discuss actually tomorrow in more detail
is just how many problems are available, some of which
are used for CS50 for teachers.
There are yet other labs, as we call them, or practice problems.
And you're free, certainly, to use some, all of those, none of those,
and really adapt them to your own students.
And in fact, Margaret, tomorrow will talk
about her own experience with her students
changing the schedule of the class, picking and choosing some
of the problems more so than others.
So more of that to come.
And in fact, it's a perfect segue way to what
I thought I'd propose is just some of the motivation behind some
of those problem sets that you kindly note.
So the very first you might remember is really
one of my favorite games from my own childhood,
even though I'm showing my age, and perhaps now yours,
is the fact that this is a very two-dimensional game versus what
kids have nowadays.
But Mario is with us in many forms.
But this is an example of a problem where
you have to make that half pyramid using like hashtags and ASCII marks,
if you will.
And this is an example of a problem that could very easily be very boring.
If you just ask students to print out a pyramid with these hashes
that looks like this.
OK, but there's something more, I think, and something
special about just giving them something to latch onto,
that it's not as simple and boring as a black and white pyramid made out
of hash tags.
But it's like the beginnings of this game that they might know
or already love or something familiar to them.
And so almost always, when Carter and I write in courses problem sets,
we try to find that hook.
It's not enough to come up with the code.
It's like, what is the angle?
What is the image we're going to put at the very top of the problem set?
What's the silly YouTube video that's just there for fun
to click on, to motivate you with some music or some TV
or some movie clip or the like, just something to make it very real and fun,
even though it's like fun for Mary Poppins.
A spoonful of sugar makes the medicine go down.
Actually, incorporating just a little bit of fun for a problem
set that is still just for loops, just code that
does this, which in and of itself might not be nearly as engaging.
So Mario is sort of representative exactly that mindset.
We also-- and not all of you might have done
this-- there's the more comfortable version of this problem where
we take the same idea.
And it's still going to involve some for loops and maybe some conditionals
that will make it a little harder.
But it's the type of problem where it's just
kind of turning the knob a little bit.
It's not making it crazy difficult in that week 1 of the class.
But it's kind of difficult for many students
to figure out, OK, it's very easy to do this.
Probably pretty easy to do this.
Starts to get a little annoying to do this in the middle.
You have to think a little harder.
And that's exactly the point.
And so this is why we have more comfortable versions of some
of our problems is so that students who are very uncomfortable,
have no prior programming experience, we want to give them a very low floor.
So it doesn't take much to get into the class.
But for students who have been programming for a while
or think they've been programming for a while
and they're just more confident, justly or not,
they have sort of a higher ceiling, so they don't walk into the same room
and have no room to grow.
But the ceiling is higher for them, and that's
what we mean by these more comfortable problems.
So a low floor for less comfortable, but a high ceiling for those more
comfortable.
And so Mario captures exactly that idea at the start of the class.
Anyone recall?
Very [INAUDIBLE].
[INTERPOSING VOICES]
DAVID MALAN: We're not [INAUDIBLE].
[INTERPOSING VOICES]
--CS50, but this is an example in week 2 of the class
where recall we introduced arrays and the beginnings of memory and data
structures.
And it's very easy to make arrays and conditionals and loops boring.
And I honestly daresay from my own experience textbooks are very good.
Many textbooks are very good at making things boring.
But if you contextualize that same problem and find that hook,
all right, well, all we want students really to practice this week
is strings but treating them as arrays.
How could we actually make those strings interesting?
So it occurred to us some years ago that,
why don't we turn it into an example of cryptography and encryption
and have a narrative around it and bring the excitement to students even
though, at the end of the day, they're just
writing for loops and conditionals.
But hopefully, they're getting better at those building blocks at the same time.
Now, we transition in week 4 to imagery, and you
can't escape the popularity of Instagram and TikTok
and similar platforms around the world nowadays
that have filters that change the colors or do fun things
with labels and the like.
And so we use this is an opportunity, of course,
to introduce low-level for idle IO, input and output,
reading a file, changing it, and the like.
We deliberately choose the simplest file format we can for images, like a BMP
file, even though no one really uses them much nowadays.
But a BMP file's way simpler than a JPEG or even a ping, PNG.
So we use bitmap because it has a very well-defined structure
that we introduce students to.
And of course, if I advanced here, now it's in black and white.
Now, we've detected all of the edges.
And even though this too is a bunch of loops
but it's also a bunch of functions because this
is one of the first problems where we now give students distribution code.
And so we imagine the class, [? too, ?] is
this notion of scaffolding, much like you're doing repairs on a building.
You start to build up those metal platforms or wooden platforms
so that the humans can go up and up and up
and work on the outside of the building.
Scaffolding, for us, really means, at the beginning of the class,
we really just give students an empty file
because we really want them to go from nothing to something.
But if they have to start from scratch every week-- no pun intended--
there's only so far they can go in just seven day's time or maybe 14 day's
time.
So eventually, we do introduce them to library code, like the CS50 library,
and thereafter, distribution code, like code
that we write in comment that they should read and understand.
But then we have them start filling in blanks,
helping them realize how they can start to structure
bigger, more sophisticated programs without spending
a month implementing that program.
If we had a month, I don't think that would be a bad approach.
But if time is limited, we pick and choose
exactly where we want our focus to be.
So with this image problem set, so we focus
on exactly that, the manipulation of files
but still using those same primitives.
This demarcates the start of what kind of file?
AUDIENCE: [INAUDIBLE].
DAVID MALAN: Say again.
AUDIENCE: [INAUDIBLE].
DAVID MALAN: [INAUDIBLE] that.
AUDIENCE: [INAUDIBLE].
DAVID MALAN: Not RGB.
AUDIENCE: [INAUDIBLE].
DAVID MALAN: It's hexadecimal.
AUDIENCE: Hexadecimal.
Hexadecimal.
DAVID MALAN: I'm not sure I'm hearing the file format.
This is not a bitmap.
It's a?
AUDIENCE: JPEG.
DAVID MALAN: J-- oh, I heard it over here.
JPEG.
It's a JPEG.
So these are the first three bytes of any JPEG,
like a photograph that you might take and store on a digital media card,
much like our own recover assignment.
So what these numbers are-- don't worry.
If you've already forgotten what hexadecimal is, that's OK.
But the point is that-- and this honestly
was the best slide I can come up with for recover,
which is really hard because you can't see what
you're recovering until you recover it.
So this is just meant to trigger a recollection of that recover problem
set, which for me was actually inspired by real life.
So like 20 years ago, a friend of mine had a digital camera
before we were all carrying phones.
He had a proper digital camera with a compact flash part and the like
that somehow got corrupted.
Something went wrong, and he lost like 100 or 1,000 photos, something
significant.
And so he and I figured out by doing some googling
and poking around that we can actually write code in C
to do exactly what you all did with recover, which
was to iterate over file, top to bottom, left to right,
looking for that pattern.
And just with high probability, if you see that pattern,
statistically, odds [INAUDIBLE] means, oh, there's one of my friends JPEGs,
there's another, there's another.
And I think we recovered like 97% of his JPEGs this way.
A few years later, I took overseas CS50, and we introduced
exactly the same problem set.
And I actually tell that story to students
often to make the point that some of these problems
are actually real-world solutions.
And funny enough, after 16 years, I've gotten multiple emails
from alumni, former students, who wrote to thank us because they too
accidentally deleted some files, or they had their memory card get corrupted.
And they literally used their problem set [? for ?] code
to recover their own photographs, which does not
happen for everyone, certainly.
But it, again, attests to just how real world some of these problems are.
We try to introduce students to other domains.
So you might not know, and I'm not very good at biology.
But last time I studied biology was in ninth grade in high school.
[LAUGHTER]
So thankfully, I leaned on a former colleague, Brian, to help with this.
So you know from the [? Walthers, ?] this, of course,
is an example of our DNA problem set.
And this too is intentional.
We try as much as we can, even though we're a computer science
class, to intersect our ourselves with other fields.
And I am not an expert in most other fields,
but this is why I ask lots of questions of colleagues or teachers like you
when we do workshops like these just to get the germ of an idea
because odds are, if you've been teaching for a few years,
sometimes you don't need to hear a whole lecture, ironically.
You just need to hear that one sentence, that one thought,
that one picture, and you're like, aha, I
can turn that into a homework assignment.
And so we're constantly on the lookout for that from other fields,
talking to friends in the math department, chemistry department,
humanities, or the like.
And then lastly, of course, is--
[LAUGHTER]
--problem set 9.
I actually checked.
If you bought Netflix stock at the moment we shipped this problem set,
you would have made money in the past few months.
And funny enough, I've looked back.
Years ago, we used to use what are called penny stocks, which
are very low-price stocks that generally mean
the company might go out of business.
But funny enough, we had this map years ago.
Any time you chose, not Netflix, but penny stocks, they always went way up.
And it would have been this fascinating experience
to actually buy your own stock.
But in this case, we got lucky again with Netflix,
but this is meant to be the final problem set for students
that serves a couple of goals.
One, it's meant to introduce them to web [INAUDIBLE]
so that at the end of the class, if they never CS again, they have the ability,
not just to write programs in C in a black and white terminal window,
but full-fledged applications using common, nowadays, technology.
But it also pedagogically is meant to be,
and as it might have been for many of you,
a starting point for their final project.
Most of our students back home in Cambridge
who use a web-based final project, start with their own problems 9 code,
or they go back to the original distribution code.
They delete all the stuff that's specific to finance
or the API and the like.
But they keep the overall structure and then use--
they start changing things.
And that's exactly what a aspiring programmer should do
is stand on the shoulders of libraries and maybe things they've seen before
but start to make it their own.
And so for us that's really what that problem set
serves as is this offboarding of students
curricularly so that they can build something of their very own.
But we've given them just enough of that scaffolding.
This is the weak 9 of the scaffolding being built outside of the building
here.
All right, lastly, we have back home a series of events, one of which
you saw came in a little early, called CS50 Fair.
But it would probably give you a sense of some of these more unusual social
or cultural aspects of the class that we don't do, admittedly, via Zoom.
These are really meant to be done in Cambridge at Harvard,
in New Haven at Yale, here in Jakarta or your own towns with your own schools.
And the first of those, as I alluded to earlier,
is what we call CS50 Puzzle Day.
So several years ago, we decided to start our school year at Harvard
by distributing a packet of puzzles to students.
So if they sign up for this-- they don't even have to be taking CS50--
they arrive in our case on a Saturday afternoon around lunchtime.
We then hand them a printed packet of puzzles,
and those puzzles are not jigsaw puzzles.
They are logic problems, but they have nothing
to do with programming and nothing to do with computer science.
And indeed, the messaging of the event is to come one, come all and just
collaborate on some fun problems.
Now, it helps that we typically try to find some food for them.
We deliver some pizzas and the like.
We typically have some prizes that we maybe ask a local company
to sponsor so that we can award to the folks who solve the most
puzzles over the course of three hours.
But really, this event is meant to send a message
that computer science, programming, computer science
is not about programming.
It really is about problem solving, and you don't even
need your laptop or your phone.
You just get some friends and some paper and pencil.
And indeed, that's what we'll do for fun tomorrow morning over breakfast
is just experience a little bit of that if you've not done it already
with us online.
And so in Cambridge, for instance, we're fortunate to usually get
300 to 600 students because we invite not just our students
but their friends too.
So this is one of my favorite memories at the end of every semester here.
You have a whole bunch of students looking this way
because on the projector here we were walking them through the solutions
to the problem, which we'll do tomorrow, for instance, at some point too.
And it's just the neatest most inspiring thing
to see a whole bunch of smart people delighting
in just solving problems together.
And they none of them need higher programming experience in CS.
What they do for the 2 and 1/2 hours prior
to that is just a little bit of this in a classroom, in a building,
anywhere on campus, inside or outside.
They get together in groups of two or three or four.
They try to give themselves a little bit of a buffer
so they can whisper and talk about the problems
to try to be the team next to them.
But it's just students, smart students getting together
trying to solve some problems that they've never seen before.
Toward the end of the semester, we have what we call a CS50 hackathon.
And a hackathon is, for us, an opportunity
for students to gather, in our case, overnight.
We start at 7:00 PM, and we end at 7:00 AM.
So it's a long night all together in one of the larger buildings on campus.
And it's an opportunity for them to work on their final project.
So odds are, most of you worked on your final projects at home
or at the office or the like alone.
That's fine, and you still created those final projects.
But wouldn't it have been nice if we could have gotten together
today and started working on those?
But that's what this event is all about just to get smart people together,
people who might have bugs, have questions of each other
and lean on each other because every student at that point
is pretty much doing something on their own.
Maybe they have a partner or two, but everyone's
working on something different.
So it really is collaborative.
And this is different from what industry tends to do.
A lot of companies sponsor hackathons, which are great too.
But those tend to be competitive.
And CS50's back home is not competitive.
There's no prizes.
Everyone gets pizza.
Everyone gets desserts and the like, and there's no reward at the end other
than you finished.
You took CS50 by having finished your project,
and not necessarily that night, but having begun or done well.
And here, for instance, are some students around probably midnight.
And here is a student around 5:00 AM.
[LAUGHTER]
And the last memory and the last tradition
that I thought I'd share with you is what
you saw playing before we began today, the CS50 Fair.
This is something that we put on hold back
home for like three years because of COVID
but just resumed it in December of 2022.
And the vision here was modeled originally on what in the US
is commonly like a middle school science fair where the kids get together
and they demonstrate something that glows or something that explodes
or maybe a volcano they built or something fun like that.
But in our case, the students bring their laptops or their phones
depending on what their final project is.
And we play fun music like we were playing earlier.
We inflate balloons.
We bring some candy and snacks.
And in our case, too, we try to invite companies just to be there--
they have tables--
just to talk to students about future opportunities in technology.
Maybe not so applicable for middle school students, but yes,
for university students and maybe for high school students too.
And so this too has been a secret ingredient for us over the years.
If you're in a town or a city where there are some technology companies
or if you have connections to folks who--
colleagues who are now in industry, I wouldn't
hesitate to just ask companies for support, to have them bring the pizza,
to have them send over some snacks, to have
them send some T-shirts with their company's logo on it,
but things to just give students and engage them all the more.
And strategically, what we often do is we don't just
ask them to, please, provide the pizza, or please, send some T-shirts.
We invite them to join us at some of these events.
We invite them to give a Tech Talk, maybe a 20-minute or 30-minute talk
for students.
We invite them to join us for a lunch or dinner with students
just to chat about using technology and programming in the real world.
So depending on where you are and what companies might be nearby,
I want you to know, I think there's some really interesting opportunities
to collaborate in that way.
With that said, we don't typically invite companies
to our office hours or the sections or recitations
that we keep purely academic.
But for these more social, these more collaborative environments,
we do open the door, not only to our students, but also the bigger world
as well.
So here is just a photograph of one such fair just before the pandemic.
Here is exactly what students do the whole time, standing at a laptop,
smiling, being asked questions.
And just to add a little twist to things, what we do here too
is everyone who attends this particular event gets a blank card, a raffle card,
that's got like 10 unhappy faces on it.
But we give to all of our CS50 students little yellow smiley face stickers.
And the idea is that any time-- and attendee, whether it's
a teaching fellow or a student or another professor or a parent
comes by and asks the student for a demonstration of their project,
the social contract is that the student gives that attendee a yellow sticker.
And every sticker entitles you to one entry in the raffle,
and we typically ask some friends in industry,
could you give us some prizes that we can raffle off?
And what it really does socially is just grease the wheels, especially
for students who might be more introverted or less comfortable, it
just gives them an excuse to walk up to a stranger and say, hey,
can I see your project?
And they end up, invariably, delighting in what they're seeing.
They also get that sticker, and so it's sort
of a social greasing of the wheels.
So we do try to think about these things both inside
and outside of the classroom.
And this was just CS50 really in an hour and a half.
You, of course, have spent six months living and breathing it.
But our hope is that to in reviewing these problem sets, these languages,
these memorable moments, you just have more of a sense of the why.
And if you disagree with some of the why, that too is fine.
React to it by making something your own.
So allow me to flip here to our final slide,
and we still have a few minutes before we take a break for any questions.
Yeah, let's go over here.
I'll bounce back and forth.
AUDIENCE: Actually, this is a question [INAUDIBLE]..
Can [? we ?] deliver the [INAUDIBLE]?
How long does [INAUDIBLE]?
And how long [INAUDIBLE] because [INAUDIBLE]..
We [? want ?] [INAUDIBLE] be swept away [? without ?] [INAUDIBLE]??
DAVID MALAN: Well, thank you.
You're too kind, and I--
[LAUGHTER]
Carter can attest that they're far from perfect
because, in fact, one of the things he and I do and Brian and I used to do is,
after every lecture is painful, but we will then
walk through all of the slides and write down to-do's, like a to-do list
for all of the mistakes I made, all of the regrets I had.
And every week, we have a long laundry list of imperfections, if I may.
And some years we could rewatch the videos,
which is a horrible experience, to watch this--
[LAUGHTER]
--on video [INAUDIBLE].
But with that said, the way I myself prepare,
every term, and CS50 in particular, is I start by looking literally
at this list of things I wish I had done better
because, especially if it's been a semester or even a year
since I taught the class, it is so valuable to have a list of things
I know I want to change even if I didn't remember it.
Two, what I do is I look through my previous year's slides,
and I just start to think through, is this how I
would present this material this year?
And invariably, I start moving things around,
or I start hiding slides because I don't like doing that.
And every year, even after 16 years, if you look through the slides,
there's definitely similarities.
And like 70% of the class might stay the same, 60%, 80%, something like that.
But I'm constantly regretting how I taught something the previous year.
And so I'm striving for my white whale, so to speak,
trying to find the perfect version of CS50,
which is only to say that I very carefully think
through things from start to finish.
I then look through the source code that I wrote the past year.
And sometimes, with the source code, I actually
start that from scratch because I find, honestly,
even after doing this all these years, I'd
like to think I'm getting better even at C and certain other languages,
or industry trends are changing with some of the later material,
and so it needs to be updated.
But at least in my case, I don't write things down.
If you see me flipping here, all I have is a printout of the slides.
There's no notes or script or anything like that,
which is fine if that's the type of teacher you are and you
want that outline or if you want to script things out.
I tend to go with the flow, if you will.
But it's each their own.
Carter has a different style, Guy and Margaret have a different style.
I would find your own.
But it takes practice.
AUDIENCE: [INAUDIBLE].
DAVID MALAN: Yeah, over here.
Sure.
AUDIENCE: In almost every known [INAUDIBLE]..
And we just add necessary code to [INAUDIBLE]..
I wonder what's the reason--
which one more effective?
Do we give the student--
we let the student code from the start to the end?
Or give them the template like you did, each one [INAUDIBLE]??
DAVID MALAN: That's a really good question.
So to recap, toward the middle of the semester onward,
we tend to give students starter code or template code or distribution
code, same idea.
And we often have to-do's or blanks that they need to fill in.
Should we do that or not?
I think it depends partly on your students
and partly what you want the focus of that week to be.
So for me, it's important in the beginning of CS50
that you start with a blank file.
I want them to understand, from start to finish,
that what they see on the screen, even if it's just Hello, world,
is entirely of their own doing, no magic or things they don't understand.
But as I said earlier, especially with C,
it's hard to do fun, engaging homework problems in a language like C and even
in Python if you're only using a terminal window,
and still, you give students some libraries or some starter code.
And I would say our own view on this has been changing.
And just this spring, we've been going back
and adding least comfortable versions of some
of the problems which, for us, means providing a little more starter code.
And for us, this is an opportunity for those students
who are somewhat self-selecting, if they really feel uncomfortable,
we give them a bit more of the solution and guide them step by step through it.
But some other students who have either been programming for years or they
just they want a challenge, and then you probably have students just like that,
especially if they like the field, we give them less starter code.
And we allow them to have this higher ceiling instead.
So I think it depends on your students.
But for us, it's very important to me that our problem sets
get interesting or stay interesting.
And I don't think you can do that if you give them a blank file every week
to start with.
Other questions.
Let me go here.
Let me-- some new hands first, if I may.
AUDIENCE: Yeah, [INAUDIBLE] thank you for the chance.
DAVID MALAN: Sure.
AUDIENCE: I want to ask you about [INAUDIBLE]
if we want to [INAUDIBLE] that evening, we
must make the students feel comfortable and make them understand
what happened in their [INAUDIBLE].
And I have some problem at my school.
DAVID MALAN: Sure.
AUDIENCE: VS code is too heavy to teach my [INAUDIBLE]
in my computer [INAUDIBLE].
DAVID MALAN: OK.
AUDIENCE: And can you--
I think if they just understand what happened [INAUDIBLE],,
but it's not [? grandfathered. ?]
DAVID MALAN: OK.
AUDIENCE: [INAUDIBLE] was they can't program a single [INAUDIBLE]
it will work like that.
Can you give me a citation by using another [INAUDIBLE]
to teach my students without the VS code?
DAVID MALAN: Sure, so VS code is very heavyweight [? and ?]
so on your school's computer lab computers.
So VS code itself can be downloaded for free for Mac and Windows,
which I think you're referring to.
But what Code Spaces is, code.CS50.IO, in our case,
it's just a browser-based version thereof.
And so long as the computers are within five or six years old,
it should be OK so long as you have a good enough internet connection, which
not everyone does.
And I do realize that's a challenge.
So in terms of other text editors, let me probably follow up
with an email with some links to something like this
because there are lighter weight ones.
Like on Windows, Notepad++ comes to mind.
It's not as popular nowadays as VS code, but there's others too.
And if I forget, just email me tomorrow to remind me of that.
I think we have time for maybe one or two more questions.
AUDIENCE: [INAUDIBLE] days ago [INAUDIBLE]..
DAVID MALAN: Yes.
AUDIENCE: [INAUDIBLE].
[INAUDIBLE] I use other [INAUDIBLE]?
DAVID MALAN: Good question.
So in this class, as well as with our undergraduates back home,
we ask them at the start of the term to bucketize themselves
among those less comfortable, more comfortable, somewhere
in between, and in our case, most recently, least comfortable as well.
Generally, that's been sufficient detail for us,
and we don't give them a test or a quiz or any kind of assessment
like that because I think most students know what
bucket they fall into because those who are less comfortable or least
comfortable, they're uncomfortable just even being in the class
on that first day.
By contrast, the students who are more comfortable
are the kids that have been programming since they were six years old,
or they're highly confident.
And so they know who they are.
And our answer to the students who are like,
I don't know which group I'm in, by definition,
they are somewhere in between.
And so for us, we have either these three buckets or now four,
which can help just in our case-- and we can't do this in all classrooms.
It can help you group students so that they're only
among students who are similarly uncomfortable, similarly comfortable,
so they don't feel like they're competing
with the smarter kids or the slower kids in the class, which
is not healthy for anyone.
Other questions?
Yeah.
AUDIENCE: [INAUDIBLE].
DAVID MALAN: OK, yeah.
AUDIENCE: [INAUDIBLE] all [INAUDIBLE]?
DAVID MALAN: Vis a vis a matter of academic honesty?
AUDIENCE: Yeah.
DAVID MALAN: Yeah, that's a good question.
So the question is about whether it's a Harvard thing or a CS50 thing,
this emphasis on academic honesty.
It is especially CS50 focused.
Harvard, for instance, has its own honor code
where across all courses and departments students are not supposed
to be copying each other's work.
They should be adhering to certain rules.
In CS50, we philosophically, for many years
since I took over and even before my time,
proactively look for instances of academic dishonesty
for a couple of reasons.
And the first and foremost is just fairness to other students
because we want them to be meeting us halfway.
We're fortunate back home to have a lot of teaching assistants,
as Carter noted, a lot of resources and support for students.
And if we're going to provide this, we want them meeting us halfway and taking
advantage of those resources.
Where even in a smaller class, coming to me as the teacher
and not turning to someone else's solution.
Now, with that said, what we try to teach students
over the course of the semester is where the line is.
They're absolutely should be googling for certain things.
They should be googling for how to write a for loop in C
or how to implement a conditional in Python
or function that makes HTTP requests in Python, like very commodity things.
What they shouldn't be doing is how to print a pyramid for Mario
or very specific things.
Or any time they get a search result, where clearly it's a CS50 problem,
and CS50 might even be mentioned somewhere
in the post, that's the point at which, OK, you've found your way there
accidentally.
That's when you close the tab.
And trying to teach students that leaning on each other for help,
asking questions of us and others for help is fine.
But copying someone else's work and presenting it as their own--
and then in our case, letting 72 or more hours pass and not realizing, darn it,
I really shouldn't have done that even though I was very tired
and stressed at the time and not coming forward.
At that point, we take more punitive approaches
because if students aren't ethically meeting us that way,
then we try with the last measure we have.
And the goal ultimately, especially for an introductory course,
which for us at the university level is one of the first four courses
that many first-year, freshman students take,
this is where-- we're the funnel leading to other courses.
So we try to place a lot of that effort there.
And we'll talk more about this over time as well.
Maybe one final question, if we may.
Let me do one-on-one because we already chatted, but how about here?
[LAUGHTER]
AUDIENCE: [INAUDIBLE].
So [INAUDIBLE]?
DAVID MALAN: So for the final project, we
encourage students to take their finance code or our starter code
and make it their own.
That's very much blessed and encouraged at that point.
What would be inappropriate for a final project is
downloading someone else's project from GitHub
or elsewhere and then just saying, I made this code.
What is OK would be to download someone's code perhaps,
especially if it's open source in a lab, but make clear
to their teaching fellow, in our case, or to me
as the teacher what they added to it.
For instance, treating it more like a library, that's reasonable.
And as you can imagine, the whole point of taking a class
or being your students is for students to learn something.
And it's not meant to be an exercise in simply submitting someone else's work
but going from some starting point to some endpoint.
So what we try to do with students even more so in person
back home is help them navigate that line.
And many of you have probably played with or heard about Racine's rules
like ChatGPT, which honestly, for us teachers,
is going to make things a little harder.
It doesn't make things fundamentally any different because there's always--
whoa, there's always-- for the past 20 years there's been Google.
And for the past 100 plus years, there's been
other human beings in the classroom.
But it does make it easier, tools like ChatGPT,
to misbehave anonymously because you're just asking
the internet very specific questions.
And I hope-- and we're not there yet, but I
think the educational opportunity of ChatGPT, Co-pilot,
if you've heard these terms, is that we're
going to have many more virtual TAs, and not bad virtual
TAs where it just tries to autocomplete the answer to your question
in like an FAQ or a knowledge base but would be able to have students
highlight the starter code and have the computer explain it to them instead
of needing to ask me or Carter or you.
And so the goal there, I think for us, [INAUDIBLE]
of these tools over the next one to two years
is to actually leverage the positive aspects so that your software, your VS
code, your student's code can answer, let's say,
70% of the introductory questions so that one of you, who's
running around to 30 or 20 students or more in the class,
can focus really on the harder questions, the more
sophisticated questions as well.
So all this and more tomorrow as well.
But why don't we go ahead and take a 30-minute break here.
There's cookies outside, thanks to our hosts.
And we'll resume at 4:30 PM.
[APPLAUSE]