PATRICK REBESCHINI: All right.
This is CS50, and this
is Yale University.
Welcome to the grand finale.
Really, this is the last
lecture of the course.
And I hope to interpret most of
you when I say, wow, already?
And indeed, just think where we
started off two, three months ago.
What we have achieved
is simply unbelievable.
And typically, it's a good sign.
When time flies by, it means
that we have been engaged a lot.
We have been learning a lot.
This is precisely the type of experience
that we want to give as part of CS50.
So now today's is the last
lecture, but the course
does not end here, as David
will remind all of us in a bit.
In particular, the
hackathon is coming up.
It's a great opportunity to meet
friends in Cambridge, I thought,
but while potentially working
on your final project.
And then while you're here
in New Haven, the final
CS50 [? for ?] a great
occasion to showcase
what you have achieved in these
two, three months, and to present
this type of output not
just to a friend of yours,
but really to the entire
Yale community and beyond.
So this is CS50.
Indeed, today does not
end year, but in a way,
we should start thinking
about life beyond CS50.
And well, let me tell
you, it does exist.
And so we decided to take the
opportunity of the last lecture
to invite a few friends--
faculty from Yale College--
to present some of the great resources
that Yale can offer to those of you who
want to dive more deeply into
the realm and the wonder of CS
as a discipline and related fields.
So I'm going to introduce to
you a few friends, faculty.
I would like to welcome all of
them with a big round of applause.
So please join me in this.
[APPLAUSE]
And I have the pleasure to introduce
Holly Rushmeier from the computer
science department.
Thank you, Holly.
HOLLY RUSHMEIER: So, yes,
I'm Professor Rushmeier.
I am on the computer science faculty.
I teach a variety of courses.
Right now I'm teaching
CPSC 201, Introduction
to Computer Science-- a
course that I really love,
because it has the core ideas
of computer science in it.
But another area that I really
love, and what I do my research in,
is computer graphics.
And that's what I'll spend
my few minutes here on.
And basically, what
is computer graphics?
It's using computers to make and use
images for exploration, communication,
and expression.
So exploration-- how do
we understand things?
One of the things that we can do
is read and write about things
to improve our understanding.
We also can explore things by drawing,
gathering pictures, and manipulating
images.
We use graphics a lot
for communicating ideas.
Creating a feature film--
that's communicating ideas.
That's telling a story.
Advertisements, documentaries--
all these things are using images.
And we have a part to play
in creating those images.
And then some of it is just
purely creative expression.
These images here are from
some of our research work
here at Yale, including
things like-- we're
interested in designing what makes
things look like what they look like.
And that's a combination of their
small-scale geometry-- whether they've
got little rings or bumps,
or how they're woven--
and their large-scale geometry.
We're also interested in abstract
visualizations to make things clearer.
So these strange little spheres
floating and inside the matrix
are an illustration of
a kind of calculation.
And we're interested in
systems that help people.
So these images are showing
a sculpture of the Madonna
from the Yale art gallery.
This is part of a system that
we've created for art conservators
to study works of art using data
from different imaging modalities.
And then on the bottom
is another visualization.
It's visualizing the results
of a perceptual experiment
that we did about how
things look when they move.
So just a little bit
of the span of things
we consider in computer graphics.
A little bit about-- another
way of looking at graphics
is that we observe
problems in the real world.
People want to design something new.
They want to tell something new.
They want to understand something new.
And we're going to produce
something in the real world.
We're going to make pictures.
We're going to make objects.
But what we do in computer graphics
is we get those physical things
we observe into the
computer, and then we
create the data, data structures,
algorithms, to work with those objects,
to create the solutions
that then allows us
to make those things in the real world.
So in the physical world,
we may be simply observing
shapes and forms and colors and
lights and how people perceive things.
Or we may be using instruments
to measure shapes and colors.
We may be designing new
instruments or conceiving
of new ways of putting
existing instruments together.
And we may just be observing
how people perceive things,
or we may be doing psycho-physical
experiments to figure out
how people perceive things.
So then we bring them into the computer.
We think of new ways to represent
objects, shapes, colors,
their interaction.
We've-- how people can interact with
those shapes to create new things.
What are good interfaces for
people to create new things,
to express themselves,
or to explore an idea?
And then we put things out
into the physical world.
I had sort of a-- images from my
oldest work and some of my newest.
My oldest work-- that's
from like 30 years ago--
was when we were first trying
to make images that would
be indistinguishable from real scenes.
So we were building a real
scene-- a real simple scene--
and trying to make a physical
image that looked exactly like it
and then set up an experiment
where the challenge is, well, gee,
that's a real physical box.
That's a picture of a box.
We had to come up with the
solution to overcome that.
So here at Yale, you
have graphics courses.
You can take straight-up the
standard computer graphics,
some special topics--
including a new one
that we have in computational
issues in design and fabrication.
And we have a wide range of
projects that people can work on,
including-- in particular,
in my work-- I'm
very interested in digital
humanities and analyzing
the shape and form, materiality,
of things like manuscripts.
Cultural heritage-- maybe you want
to get out in the cemetery at night
and take data and start
examining old stones.
Or we have more hardcore
computer graphics--
new methods for sketching, extracting,
and reusing textures and building
new scanning systems.
So those are some ideas.
So thank you very much.
PATRICK REBESCHINI: Wonderful.
Our second guest today is Amin Karbasi,
from the computer science and the EE
department.
So Amin, all yours.
AMIN KARBASI: Hello.
So I thought today that I'm
going to talk about sensing data.
So basically, my work
is about, in the realm
of big data, how we can
actually reason about-- how
we can pick and reason
about very uncertain data
and get useful information.
And in particular, I'm going to talk
about three very specific applications.
The first one is the
video summarization.
So what it means is that it would be
really cool if instead of listening
to the whole CS50 lectures, there
would be an algorithm that tells us
these parts are the most
important part to look at.
The second application is going
to be about automated teaching.
So instead of Patrick
and David teaching you,
it would be really cool if a
machine can teach you new concepts.
And the third one is about whether a
robot can actually learn and reason
about the environment.
OK.
So the first application
that I'm going to talk about
is the video summarization.
I'm going to show you a very
short clip, and the idea here
is that we have an algorithm that
picks frames of this short clip such
that if you look at these frames--
here are four-- you can basically
understand what is happening.
OK, so we can put these frames
together and it tells a story.
OK, so that is one application,
and we had worked on this one.
The second application that I'm going
to talk to is about automated teaching.
So here the idea is
that instead of-- so I
want to teach you a new
concept without telling you
how to learn this new concept.
I am just going to
show you some examples.
And so in particular, I
made some imaginary insects.
I even called them vespula and weevils.
You have not seen them before.
And I'm going to show you examples.
I need you to cooperate.
And then you have to tell me
whether this is a vespula or weevil.
In the beginning, you
may not have any idea.
But you're smart-- I hope that after a
few examples you can actually tell OK.
Ready?
Good.
OK.
So that is the first example.
Who thinks that's a weevil?
Raise your hand.
Who thinks that's a vespula?
OK.
So that is a vespula.
OK.
Good.
Now, how about the second one?
Who thinks that's a weevil?
Who think that's a vespula?
OK, that's a weevil.
OK.
How about the third one?
Weevil?
Vespula?
Very good.
OK.
And the last one.
Weevil?
Vespula?
Excellent.
I didn't tell you how to
distinguish between them.
Somehow, you actually
figured it out, right?
So that is the main idea of
automated teaching through examples.
And then we also-- the question
is, among all possible examples
that I could show you, I chose
them very specifically such
that you basically get the concept
and then generalize it in your head.
And the last example that I'm
going to show you is about the work
that we did on a real robot.
So here the idea is that
there is a robot that
has to open the door of a microwave.
It has a visual sensor, but the
sensor is not actually very good.
So the robot doesn't know
exactly where the door is.
It might be a little bit
high, low, it might be tilted,
rotated-- so the robot has to
make sense of the environment.
How does it do it?
Well, by basically touching different
points and reducing the uncertainty.
The question is, among all possible
positions that the robot can touch,
which ones are going to give the
robot the most amount of information?
So let's look at how a robot
does that and how we actually
taught the robot to do it.
So this is the uncertainty
that the robot has.
In the beginning, it is very uncertain.
It touches one point.
Some of the uncertainty collapses.
Some remains, so the robot has to make
more interactions with the environment.
It touches another point.
Now there are less
uncertainty, more information,
but it doesn't exactly
know where the button is.
And then finally, it's going
to touch another point.
And now it is very certain where
the button of the microwave door is.
And now it's going to open it.
Good.
So basically, I talked about
three different problems,
and in all these problems,
the question was,
which frame we should pick,
which example we should show,
which position we have to touch.
These are very different
applications, but it turns out
that they have exactly
the same framework.
And this is what they work on.
So if you want to know more, well,
you can come to the CS or EE.
[APPLAUSE]
Our And our next friend
is Sahand Negahban
from the statistics department.
Please, Sahand.
SAHAND NEGAHBAN: So, hello.
I don't have pretty slides, but
instead I made a little demo
because I really like this example.
And so this is about life
after CS50 and you guys
have learned a lot of nice tools.
You've built a web server, I
guess, you played around with API.
So now you can go on the internet
and extract a ton of data.
The problem is a lot of times
on the internet data is noise
and you need to deal with it.
And so I really like this example.
This is an example a lot of people
use in machine learning classes.
And it's the example of where you
have sort of a couple audio signals,
and you want to decouple them.
So-- the audio works, right?
The audio signal that I have-- play.
[AUDIO PLAYBACK]
[INTERPOSING VOICES]
SAHAND NEGAHBAN: It's
basically the combination--
[INTERPOSING VOICES]
[END PLAYBACK]
SAHAND NEGAHBAN: OK.
So what that was, if
you're not aware, it
was two sports announcers,
soccer announcers,
broadcasting the World Cup, where
Argentina was playing England.
And so it was a British
commentator commenting
on Maradona scoring
against England, and then
an Argentinian commentator commenting
on Maradona scoring against England.
Now, you guys, your brains
could have figured that out.
If you could speak
Spanish, I'm sure you could
have figured out what he was saying.
If you speak English--
I think you all do--
you know exactly what the
British commentator was saying.
But we'd want a computer
to be able to do that, too.
So using something called
independent component analysis,
which we taught in the course that
I'm teaching with Dan Spielman called
Computational Tools in
Data Science-- that's
CPSC 262-- you can kind of
tease apart the two signals
and figure out what
they were individually.
[AUDIO PLAYBACK]
- [SPEAKING SPANISH]
SAHAND NEGAHBAN: So this is
just the Spanish broadcaster.
- [SPEAKING SPANISH]
[END PLAYBACK]
SAHAND NEGAHBAN: So he's very happy.
The British commentator is--
[AUDIO PLAYBACK]
- If we hadn't been able to
control the play mid-field,
the way that Maradona
has been able to do--
[INAUDIBLE] There's no
doubt about that one.
[END PLAYBACK]
SAHAND NEGAHBAN:
[INAUDIBLE] the position,
because these are two signals that
kind of happened at the same time.
I mixed them together
artificially, but now we
wanted an algorithm to sort of
understand how to split it up.
So another setting that I also like,
and I encourage you to maybe take
other computational classes
also related to statistics
is, you might go online
now you might want to say,
I want to find data that's
related to each other.
Say you have some crazy new
idea for tracking the S&P 500
and you want to use it to trade.
And so that's great.
You can find a lot of
signals to help you predict,
but you could run into some problems.
And so now I'm going to shamelessly
steal somebody else's-- this website
called Spurious Correlations, which
I personally, I love as an example.
The basic idea here, it's going to have
signals that look like they're related.
You've all heard the whole notion
correlation is not causation.
If two things are correlated, it doesn't
actually mean they're linked together.
It doesn't mean that
one implies the other.
Well, in fact, a lot
of times correlation
doesn't even mean
correlation in a sense.
So these are a bit macabre.
So warning, I guess.
But here's an example.
So this is the trend of US spending
on science and space and technology
versus this suicides by hanging.
These shouldn't be related.
This is Tyler Vigen's website,
Spurious Correlations.
I think it's pretty nice.
There are a lot of weird
ones that he talks about,
per capita cheese consumption, this one.
[LAUGHTER]
These aren't even just restricted.
So Google actually has a really
nice thing called Google Correlate.
So you can actually
put trends-- you guys,
I'd encourage you to check out the
paper that they have associated with it.
It's really nice.
But you could put something
in here and see links.
So I could say maybe put weight,
and then you'll see trends.
Like OK, low calorie, low calorie
snacks, weight loss, good diet.
That makes sense.
But you could put maybe a
weirder search like this.
And you get some things that don't--
Nissan Centra's up there with a 0.95
correlation.
You just get some interesting things.
So the point is I'd encourage you
to take your computational tools
and play around, and look
at the classes in computer
science, electrical engineering stats,
and dealing with machine learning.
Thanks.
PATRICK REBESCHINI: Thank you, Sahand.
Great.
And finally, Mahesh Balakrishnan,
from the computer science department.
MAHESH BALAKRISHNAN: Is this working?
OK, so I'm going to talk about systems.
So what are systems?
Computer science is typically
partitioned into a few areas.
You have programming
languages, AI, graphics.
Those are the guys who come
up with these very cool ideas,
and you saw some of these
pretty pictures and so on.
In systems, we are the
guys who make it work.
OK.
So when you type in
Facebook.com or Google.com,
and the page loads instantly.
An enormous amount of
code goes into that.
Actually, I don't know why my
slide title isn't showing up,
but that's fine.
If you go to Google, there
are maybe tens of millions
of lines of code that go into showing
you this web page and ensuring that
when you type in google.com,
and you hit Enter,
that you see this web page within
something like 200 milliseconds
because that's the amount of time
beyond which users can perceive delay.
And also ensuring that 99.9999% of
the time when you go to this website,
it's up and running.
And this is an enormous amount of code.
And so when somebody has
a new search algorithm,
or somebody has some kind of a
new virtual reality application,
you need a pretty big and
complex system to make it work.
But it turns out that
people who work in systems
don't really spend their time
writing enormous amounts of code.
That's not where the
intellectual effort is.
The intellectual effort is in
something called an abstraction.
How do you make it easy to build
some kind of a computer system
that consists of millions
of lines of code?
And the answer turns out to be that
you try to identify these abstractions.
To give you an example of
what an abstraction is,
a file is an abstraction.
I'm guessing you guys have all
interacted with file systems.
You have saved files, loaded files.
So a file is something that
allows you to save data
without having to worry about how
many hard discs, or RAM, or SSDs you
have on your machine, without worrying
about whether your data is local
or it's in the cloud.
So that's an example of an abstraction.
And part of what we do in systems is
we come up with these abstractions
to make it easy for other people
to realize these cool applications
that they dream up.
And so we focus a lot on
building real systems.
And we are really interested
in end-to-end metrics.
You build a real system,
and then you access it,
and you see how reliable
it is, how fast it is.
If you look at the actual technical
content of this, what this involves--
it typically involves coming up the
new obstructions and implementing them.
And often we are the
customers of EE people.
So when somebody invents
some kind of new hardware--
and this could be
virtual reality glasses,
it could be some new kind of
architecture, a new kind of memory--
we are the ones who build
the software layer that
knows how to use this kind of hardware.
So for example, if you have
a new virtual reality app
and now you have something
like the Oculus Rift
coming out that Facebook's
selling these goggles,
we are the ones who would produce
this intermediate level of code that
makes it easy for you to build your
new application on top of the hardware,
without having to understand the
nuances and the idiosyncrasies
of that hardware.
And so a lot of what we do, though,
is to enable new applications.
So things that augmented
reality, virtual reality.
10 years back, social networks
were a new application.
15 years back, search engines
were a new application,
and making these applications
ubiquitous involved
a tremendous amount of system building.
And so the internet of things is another
example that's very common right now.
I teach a class at Yale.
This is a senior level class on
building distributed systems,
where we kind of walk you through
what it takes to build something
like Google or Facebook.
And I'm going to give you a
very quick example of the kind
of intellectual problems we deal with.
So let's say you come up
with an example of a service,
and you want to run it online.
Well, you can run it
on a single machine.
This is probably similar to the kinds
of applications you've been working on.
But your problem now is, if
you run it on a single machine,
that machine can crash.
So you need some kind of disk there
so that when the machine reboots,
your data is still there.
You still have a problem that
there's only one machine here.
If it crashes and doesn't come
back up, Facebook.com is down.
So you need to replicate data,
and this is the kind of thing
that we do all the time.
We replicate data so that
the service never goes down.
You still have a problem, which is
that, all of Facebook.com cannot live
on three machines.
And so we have this thing where we
partition data across sets of machines.
And finally when you partition
data across machines,
you have to deal with the fact that
these machines are in different places
so moving things between
them is difficult.
This is just a very quick
summary of the kinds of things
that it's taken engineers
at Facebook and Google,
say, 10 to 20 years, to solve.
And this is sort of the technical
content we have in systems.
So if you stay in computer science, I
hope that you look at computer systems
as a friendly, exciting area
with a lot of opportunities.
We build real stuff and we need
people to build these things.
Thank you.
[APPLAUSE]
PATRICK REBESCHINI: All right, great.
So this is just a snapshot of
what life after CS50 might entail.
For those of you, again, who want to
engage more deeply with the field of CS
and related.
But now, let's go back to the
present and let us finish with style.
It is my greatest
pleasure and honor, once
again, to introduce and to
welcome here in New Haven, David
Malan and the Harvard team.
It has been a great year together,
our second year of this joint course.
Let me say, the cross-fertilization
that came out in both campuses
when it comes to improving and
pushing the boundaries, terrific.
So I couldn't be more happy to
welcome him on a stage again.
David Malan, please, big
round of applause for David.
[APPLAUSE]
DAVID J. MALAN: Thank
you so much to Patrick.
It's really nice to see everyone again.
I know it's been some time,
and I know tensions are high
going into this weekend.
In fact, we just ducked down here
and we're heading right back.
I'm guessing many of
you might be joining us
up in Cambridge this weekend.
But I just wanted to
emphasize, really right
at the start here, what a special
collaboration this has been,
both last year and this.
Bringing these two campuses together,
of all the campuses in the world
to bring together, I think has been
this really special, really interesting,
and really challenging experiment.
And thanks to Patrick and Jason
and Andi and Summer and Stelios,
and the whole team
here and in Cambridge,
we think it's really
been going well and we
hope that you'll give
us all the feedback you
can over the next few weeks so
that we can continue to build
on this and last year's foundation.
And I have a little bit of a confession.
I don't normally lift up my
shirt when I'm in Cambridge,
but I just wanted you to
know that underneath--
[APPLAUSE]
--underneath all those black
sweaters, all this time.
Why don't we begin on just a
sentimental note, thanks to a video
that CS50's production team has put
together over the past few months,
in shooting some footage and
stills both here and in Cambridge.
This then is a look back at
some of the past several weeks.
[VIDEO PLAYBACK]
[MUSIC - GALANTIS, "GOLD DUST"]
- (SINGING) You're like gold dust.
It rains over me.
- This is CS50.
- A foreign sun, my eyes
thought I'd never see.
You're like gold dust.
Keep coming down that street.
There's a hollow in this
house whenever you go.
[END PLAYBACK]
DAVID J. MALAN: So you'll
appreciate perhaps,
that this course has been
entirely about problem solving.
And especially given the
timing of this coming weekend,
it felt particularly appropriate to look
a few years further back, back in 2004,
which if unfamiliar, was perhaps
one of the best Harvard-Yale pranks
in history.
At which time we Harvard folks
learned, well, that we suck.
But I thought I'd play a video.
If you're unfamiliar with
this-- and even if you are,
it's great fun to look back
on, again, one of the best
pranks at Harvard/Yale's past.
Let's take a look.
[VIDEO PLAYBACK]
- We're headed up to Boston.
Checking out the stadium for the prank.
A few years ago, I was
at a math conference.
And I was sitting around the table at
dinner with a few other mathematicians.
And one of them went
to Harvard and started
telling the story of this amazing
prank that was against Harvard.
And at that point, I
felt I had to interrupt
and said, well, actually I can
tell you a lot more about that.
OK?
DAVID J. MALAN: OK.
- The idea was perfected in a dorm room.
- We came up with the idea
actually to prank them
with signs at the football game.
We threw some ideas out there as
far as what the signs would say.
We eventually settled on "we suck."
- And my immediate reaction was,
no, this will never work However,
the problem solver in
me started thinking,
well, maybe we can make this work.
- The problem?
They had to infiltrate Harvard
stadium without getting caught,
sneak in 1,800 placards, distribute
them to unsuspecting Harvard fans,
and then convince those
fans to prank themselves.
- That's great.
We thought about basically every
possible thing that could go wrong
and tried to come up
with a solution for it.
- And then you put
two reds on top of it.
- They made fake Harvard IDs and fake
back stories, fake placard designs,
and a 28-member fake pep squad.
On November 20, 2004,
the fake Harvard students
smuggled the placards into the game.
- What do you think of Yale, sir?
- They suck.
- It's not going to say
something like Yale sucks, is it?
- It says, go Harvard.
- But then, trouble.
- What houses are you guys in?
- [INAUDIBLE]
- How many extra are there?
- [INAUDIBLE]
- I just showed him the front
of this ID, and all of a sudden
he just ran away, and
he felt so embarrassed.
- Having escaped one confrontation,
they couldn't risk another.
It was time.
- This just looks like a total mess.
We have absolutely no idea
if this is going to work.
- What was once a prank became a legend.
We We [BLEEP] did it!
We [BLEEP] did it!
- And immediately we started hearing
chants from the other side, you suck.
- You suck, you suck, you suck.
- And I think it was that point in
time that we knew we had pulled it off.
- One more time!
Come on, Harvard!
There it goes again.
- I really think it didn't matter that
Harvard won, because of the prank.
For a lot of Yale students and
alumni, we definitely won that year.
[END PLAYBACK]
DAVID J. MALAN: All right.
So if we come back then
to the present, I just
wanted to remind you of
this quote with which we
began the semester, because we are here
now in week 11, some 12 weeks later.
And what ultimately matters
in this course is not
so much where you end up
relative to your classmates,
but where you end up now, relative
to yourself way back in week 0.
And you'll recall perhaps, that in week
0 we looked at computational thinking,
we introduced scratch.
Your first problem, set
0, was to do exactly that.
Build most anything of interest to you.
And one of the traditions we have in
the class, is to ask of the staff,
let me first disclaim, we
love all projects equally.
We do have a few favorites,
and we've plucked out a few
that we thought it would be fun just
to play here all these weeks later
to show just how far we have come.
If someone might like to volunteer and
play a few scratch-- that was fast.
Come on up.
OK, what's your name?
BILLY: Billy.
DAVID J. MALAN: Billy,
come on up, Billy.
You are clearly from Yale.
All right.
Come on over.
So one of our first of many staff
favorites was this one here,
Bob the Bear, by Mandy Lee YP.
And I will go ahead and
open this one on my machine
here so that we can see the first of 3.
So Bob the bear has some instructions
with which we're going to begin here.
I'll full screen this, and it's perhaps
among the most adorable as well.
[MUSIC PLAYING]
So click Bob.
[MUSIC PLAYING]
Very nice.
Notice we have two variables up top.
One is points, one is timer.
You have 32 seconds to get
as many points as you can.
Think of course, of all the
programming constructs underlying this.
We've got some loops, for instance,
an event listener with the keystrokes.
Apparently some animation,
which is doing move,
move move, move, in some kind of loop.
A GIF that makes the
bear eventually stop.
I'm really just trying to
justify playing this game.
He's only got 6 seconds left.
6 points, nice.
Very well done.
That's all they gave us.
OK, congratulations.
Thank you to Billy.
Can we get one other
volunteer up here for Cat
goes 2 Yale, final, which was
their final submission, it seems?
Volunteer here, OK, come on up.
All right.
Joey's coming on up to play
JP Bosco's Cat goes 2 Yale.
All right.
This one too felt particularly apt.
Let me just get it full screened.
Uh-oh, spoiler.
Stand by.
This is how we solve problems.
Come on.
Come on.
There we go.
All right.
Cat goes 2 Yale, final.
Press the space bar.
So you have to grab those three things,
so a book, a medal, and a piano.
And apparently avoid sleeping,
playing games, or exercise.
[MUSIC - TOBY FOX, "IT'S SHOWTIME"]
Nice.
Notice the score goes up
and down, plus 1 or minus 1.
Nice.
Nice.
Only level, 1.
No, I think it's an
infinite loop forever.
There you go, you won.
Very nicely done.
Nicely done.
And can we get one final volunteer?
One final volunteer?
[INAUDIBLE] Come on up, come on up.
All right, so here is Spot the
Freshman, Star Wars Edition.
And this one is by Justin CS-24.
What's your name?
JAY: Jay.
DAVID J. MALAN: Jay, all right.
Nice to see you.
Come on up.
And once full-screen
co-operates, here we go.
[MUSIC - STAR WARS, "IMPERIAL MARCH"]
[MUSIC - STAR WARS, "IMPERIAL MARCH"]
Click on the student first.
Nice.
Caught one freshman.
You can click on --
[MUSIC - STAR WARS, "IMPERIAL MARCH"]
Well done nonetheless, nicely done.
So you'll recall, we'll
post these links all online
if you'd like to play as well.
So you'll recall too,
that in problem set 4,
there was a bit of a
scavenger hunt at the end.
So after recovering a
whole bunch of the JPEGs
from the recovered image,
the forensic image,
you were challenged to find
as many computer scientists
as you clued on campus.
And we're very happy to say that
Theodore found the most teaching
fellow TAs and CAs here on campus.
So Theodore will be receiving a
fabulous prize for his section
and all the students in that section.
So stay tuned for a
note from Jason on that.
Also, in problem set 5 you'll
recall we had some misspellings
and there was a so-called big board
here and a competition across campus
with the here TAs here, the
TFs at Harvard, all of the CAs,
as well as all of the students.
And while usually a student
does actually top the big board,
it's actually CS50's own Shreyas who's
the top of this year's big board.
So congratulations to him
and several other staff
that spent quite a while
on this problem set.
But he too will be receiving a
fabulous prize from us as well.
You'll recall later in the
term we had a CS50 coding
contest, which coincided with break.
And we had a number of folks both here
and in Cambridge participate in this.
And it was a number of challenges
that all had to be solved in C.
And we wanted to acknowledge that the
top Yale performer was Julia, a.k.a.
@apple_cider, who will similarly
be receiving a fabulous prize.
So congratulations to Julia as
well for ranking atop the list.
I wanted to acknowledge now, just a few
folks before we take another look back,
as well ahead.
CS50s production team.
So a curious evolutionary treat
of this experiment with Yale,
has actually been that the course is
now pretty much equivalently offered
in Cambridge.
Whereas last year, we had a lot
more live lectures in Cambridge,
this year have they been pre-produced,
as you know, a few days in advance.
So functionally, the
students in Cambridge
are having pretty much
the exact same experience.
We might shoot most of the lectures
there, but literally in parallel,
each week are students
looking at the course's videos
online, attending sections
in person office hours,
and the weirdest one is that
literally every week at 1:00 PM,
we have students sitting down
here at SITAR and in Cambridge
at Chang-Sho or in other restaurants.
Sort of dining in parallel, this
sort of strange bizarro world
where the exact same thing is going
on in two different places at once.
But it's testament, I think,
to just how accessible
what the team's work has now
become from the production team.
So our many thanks to them for that.
And wanted to give you
a glimpse and perhaps
an explanation of what all of those
outros are at the end of the videos.
Most any time I sit down
at one of our CS50 lunches,
the question always comes
up, so what's with the videos
at the end of the lectures?
And if you may have noticed,
at the end of every video
this year has there been a little
vignette, inspired by the film
Citizen Kane, if you're familiar.
And if you're not, do check
that out at some point.
And CS50's team in
Cambridge over the summer
decided to write their own
narrative inspired by that.
Completely scripted by
the team, completely
produced and edited, and
ultimately acted by the team,
and wanted to show you today what
will be appended to today's video
so that you needn't
actually tune in online
to what is happening right here today.
So this is week 11's, and there's going
to be one more part released on Monday.
[VIDEO PLAYBACK]
[MUSIC PLAYING]
- Any updates on the mailing case?
People are getting
desperate for some answers.
- No.
I mean, I've been all over town and
just haven't found anything new.
I feel like I might as well
just stay here at my desk
and stare at the ceiling.
- Well, what about your Rosebud lead?
Nothing there?
- No.
Total dead end.
I feel like we may never know who
or what this Rosebud really is.
- I don't think any word
can explain a man's life.
Try not to be too hard on yourself.
Get some sleep.
I'm sure you'll come up
with something tomorrow.
[END PLAYBACK]
DAVID J. MALAN: That there is CS50's
own Lauren Scully, as well as Christian.
And fun fact that we like
to joke about, Christian
was supposed to be wearing
a fedora from wardrobe,
but that day we could
only find a cowboy hat,
I believe, which is why he's
dressed like that instead.
But wanted to acknowledge as
well the team here in New Haven--
Patrick and Stelios and Summer
and Andi and Jason, without whom,
certainly, the course
wouldn't be possible.
And it's really so much behind the
scenes that goes on between the two
campuses in Cambridge and New Haven.
Thanks to our team back home as well.
And we couldn't be more grateful to
all of the efforts they put in here.
We wanted to take a special moment
to call out one fellow in particular.
While shopping today, we also
picked up a little something,
as Patrick is about to become a
father as well, So congratulations.
Here you go.
Everyone on the internet knows now.
We also wanted to certainly call
a screen full of team members who
can just barely fit
on the screen, and we
hope that many of these faces and
names will soon be you indeed.
We'll be following up
before long about how
you too, can get involved as
a TA or a CA this coming year
and really be part of this.
And indeed, this too has
been a very special thing.
As you may know,
two-plus years ago there
were no undergraduate learning
assistants or TAs on campus,
leading their own
sections and responsible
for their own groups of students.
And now, not only is CS50 in its
second year of this tradition,
now is that same feature possible in
CS courses here at Yale more broadly.
So being part of that too, is one of
the unique opportunities perhaps ahead,
and we'll continue to publicize this
URL here that you'll see in the days
to come.
We, in particular,
too, wanted to call out
to one fellow who used to
go by the email address,
essentially, pumpkin@cs50.yale.edu.
And that was for some
time because he used
to dress like this when he led
his own sections at Harvard.
So no joke, this was one year,
some five or six years ago,
where Jason led his section roughly
around Halloween, I believe.
In subsequent years, I believe at least
one other year, he wore this outfit.
But it's very much deflated because
I think the pump broke, the air pump.
But he continued to wear it, and it
became known for us as our pumpkin.
And it was really special honestly,
because then upon graduating,
of course, he came here to Yale and has
been here for the past year and a half
or so now.
And truly, without Jason, would
CS50 at Yale not have been possible.
It was him and it was Professor
Brian Scassellati last year,
and last year's team as well that
really stood up this whole operation.
And so one of the
things Jason used to do
for us when he was with us in
Cambridge is start every staff meeting
with a joke.
And these jokes over time just got
better, and better, and longer,
and longer.
And literally today did
Facebook remind me that one,
they care about me and
the memories that I share,
but two, one of those
memories, five years ago today,
starred CS50's own Jason Hirschhorn at
one of our grading parties for a quiz.
And so I thought I would
play for you this film, shot
before I knew that vertical videos
were bad, and a look back at the joke
Jason told to us some time
ago as our thanks to him.
Here.
[VIDEO PLAYBACK]
- Whoo!
[APPLAUSE]
- I have to say, this is totally
unexpected, I didn't prepare anything.
Just go with a joke that comes to mind.
Some of you might have heard this,
but if you have, just bare with me.
So, there's this moth.
No, I'm just kidding.
That's a really good one, though.
I usually tell people that.
It's funny.
It's about a Cheerio.
And not just any Cheerio, a
really sad and lonely Cheerio.
Because every day, this Cheerio goes
to school and it sees all the friends,
and the friends don't
want to hang out with it.
In recess, it sits by itself while
all its friends are playing handball.
I know we all played that
game in like fifth grade.
So the Cheerio doesn't have any
friends, and he's really lonely.
And so he goes home one night,
and he gets on his knees
and he prays to God to not be a
Cheerio anymore because you realizes he
has any friends because of the Cheerio.
If we need to stop every couple
seconds to talk about a Cheerio then
we're not going anywhere.
Bear with me.
I don't know, whatever.
Imagine, use your imagination.
So anyway, a trip.
So, it wakes up the next morning
and it's not a Cheerio anymore.
It looks at its side and realizes
it's a Honey Nut Cheerio.
And it's so happy.
It's like, oh my god, this
is exactly what I wished for.
This is going to be a
great day at school.
So it goes to school.
And it shows up, and everybody
gives him some looks as he walks in.
He's like, yeah, as he's
walking down the hallway.
Or he or she.
I don't want to be gender-normative.
As the Cheerio's walking down the
hallway, everybody gives it looks.
And it's like, this is so much better.
I'm getting so much more attention.
But at recess, it realizes that
everybody's just making fun of it
and they don't actually
think it's cooler,
they think it's even more lame
than before as a Honey Nut Cheerio.
So that night it gets home and it gets
on its knees again and prays to God,
once again, to not be a Honey
Nut Cheerio, because life
is miserable as a Honey Nut Cheerio.
So it wakes up the next day.
And it looks at its side, and it
realizes, oh my goodness, I have color.
And it has now become--
what's the knockoff--
- Froot Loops!
- No, what's the knockoff Froot Loops?
- [INAUDIBLE], maybe.
- Tootie Fruitie.
- Tootie Fruitie.
He becomes a Tootie Fruitie.
And it's like, oh my
goodness, I have color now.
I have some personality,
some flair, some pizzazz.
Everybody's going to like me now.
- What color was it?
- It's purple.
Thanks for asking that.
It goes to school.
And once again, everybody's
giving it looks, and he's like,
finally, being a purple Tootie Fruitie,
everybody's going to like me now.
So at recess, once again,
everybody's playing handball.
He goes up, says, like,
hey, can I play handball?
And they're like, no.
And once again, nobody wants to
play with him or hang out with him
or hang out with him because nobody
likes a purple Tootie Fruitie.
Everybody likes Marshmallow Mateys.
But anyway, he goes home,
gets on his knees once again,
and prays to God, please,
none of this worked.
Please don't let me be a Tootie Fruitie
or a Honey Nut Cheerio or a Cheerio
again.
I don't know what it is,
but I can't be one of these.
Nobody wants to be my friend at school.
So it wakes up the next morning.
And it realizes, oh,
it's name-brand now.
It's an actual Froot Loops.
It's like, finally.
This must have been what I'm missing.
I'm not one of those off-brand crappy
things, I'm a name-brand Froot Loop.
- As opposed to Cheerios?
- A name-brand food with color.
I have everything I need
to be popular at school.
But it's Friday, so they had school
off and there's a big party that night.
And it's like, it's been
invited to this party.
We'll call it semi-formal is the party.
It doesn't have a date, but
it's really excited to go.
All the other cereals have dates,
and they're all really excited.
The Marshmallow Mateys
look particularly good.
But it goes to semi-formal,
and it's at the party.
And it goes up to the bar
and asks for some water.
And they're like, sorry,
we don't have any water.
So he walks down to another bar.
And he's like, OK, can
I have a Shirley Temple?
But he's like, sorry, you got to wait.
There's a long line.
So it can't get water,
can't get a Shirley Temple.
And it sees across the way,
there's some milk at the table.
So it's really excited
to go get some milk,
but right as somebody gets in right
before it-- not to eat itself,
I just thought of that.
That's weird.
So right as the Froot Loop's
about to get some milk,
somebody gets in front of it
and takes the last bit of milk.
So there's no milk.
There's been long lines for
things, they've been out of things.
He hasn't been able to get a drink.
Finally, at the far end of the table,
he sees this giant bowl of punch.
And he's really excited
because there's no one there.
It's a clear shot between
him and the punch bowl.
So he can finally now get a sip of
punch because there's no punch line.
[LAUGHTER]
That's all.
- Wow.
[END PLAYBACK]
DAVID J. MALAN: All right.
All right.
I forgot how long that was.
We're just about out of
time, but CS50 ultimately
is of course about problem solving.
And we did want to leave you with
one, particularly high-level message
before we dive into one last bit of fun.
Which is that we began this
semester looking at this.
Most any problem set that we did, most
any test question or quiz question,
really can be reduced to the
simple picture, this simple idea,
problems are just things that
take inputs and your goal
is to produce outputs.
And of course, the thing
in the middle, we claimed,
were those things called algorithms.
And that's where the sort of interesting
thoughts and the problem solving
actually comes into play.
And so even as you advance to some
of the higher level CS courses
that you heard about today,
or any other courses,
or generally realize that
at the end of the day,
this really is the mental model with
which to exit a class like this.
Hopefully, we've helped clean up
your thought in a bit of a way.
Hopefully we've given you
a more methodical approach
to solving problems.
But at the end of the day,
even if the material is new
and those inputs are new,
the fundamental process
is ultimately going to be the same.
And there's a few ways then to tackle
what problems remain in this semester.
Of course there's just
now the final project.
And so coming up soon is the
so-called CS50 hackathon,
to which you are all cordially invited.
This is an opportunity to
arrive in Cambridge via buses
that we'll provide around 7:00 PM.
We'll serve first dinner around 9:00 PM.
We'll serve second
dinner at around 1:00 AM.
And then if you're still
awake, on the bus ride home
we'll stop at a really big
IHOP for breakfast as well.
And in between meals will you
work on your final projects.
So these are just some of the photos
with which some of our Yale students
arrived last year.
Some of them toting pillows and
really hunkering down for the evening,
as you may recall.
Signing in, meeting some
of their classmates.
And this really is just meant to be one
of those few collegiate opportunities
that you really we hope
remember for some time
and certainly get a bit
of work done that evening,
but bringing the two
campuses together as well,
is one of the overarching goals.
And ultimately, it's a room
full of people, and food,
and places to solve problems like
your final project with one meal,
another meal-- Shreyas again.
You'll notice that even the TFs
last year solved a lot of problems.
They built this apparently.
There was a lot of candy,
and they built this.
They spelled that.
There's a little something
for everyone, this is to say.
So you'll see this URL on
the course's website as well,
but do sign up there to sign
up for a shuttle bus ride.
And then thereafter, is
the climax of the course.
Many years ago in Cambridge,
we used to end the course
with a pretty traditional
approach to final projects.
Students would submit
their final projects,
everyone could convene
in one last section,
and then everyone would present
their projects one at a time.
And frankly, it's not a
particularly enthralling way
to see what your classmates have
done everyone just kind of there
out of obligation.
And so we tried to transform
that thing on its head
a few years ago with the
first-ever CS50 fair.
And now we're coming
up on the ninth CS50
fair that will happen
both in Cambridge, as well
as here at Yale for all students,
faculty, and staff here to attend.
And this will be an
event in commons that
looks a little something like
this, with students like you now,
presenting your projects on laptops
with food, and popcorn, and music,
and recruiters from industry,
and friends ultimately,
delighting hopefully in the kinds of
things that you have accomplished,
and as well will there be
some cotton candy here.
Now we need, as we close things up
here for fall 2016 for our student
volunteers, if I may.
One in back.
Two in way back.
Come on up.
Can we get someone
from the side, anyone?
Anyone?
Billy, again?
Billy, come on up.
OK.
Yes, right in the middle.
Come on down.
Come on down, all four of you, and
then back middle as well, I think.
Yes.
Back middle, come on down.
And if you guys want to
take the side of the-- that
was the opposite of dramatic-- students.
If you'll take your four seats
here, we have little Easy buttons
via which we'll be able to--
EASY BUTTON: That was easy.
DAVID J. MALAN: --buzz in.
But now we need four
staff members, if I may.
Oh my god, yes, come on down.
Another staff member here,
way in back and a fourth.
A fourth, yes, come on down.
We got the microphones as well.
OK, so we have our four
staff members here.
Going to go ahead and give each
member of the table this microphone.
Be sure to speak in your answer.
We'll do our best to adjudicate
who has actually buzzed in first,
but this is our opportunity
for our second annual family
feud of students versus staff.
And you'll recall, just a few days
ago when you submitted problems,
did we ask you a few
questions just for fun,
so that we would have
actual answers based
on the most popular 100 responses.
So CS50's own Colton here is
going to help me run the board.
We have time for just a
couple of rounds of this.
And then actually, can
we get you to come on up
and run the scoreboard up top?
We just need math on the board,
depending on who has scored best here.
So the first question we're
going to answer-- and let's see,
we'll do this control of the board
kind of thing here in the middle.
And would everyone first like
to introduce him or herself?
ADAM: Hi, I'm Adam.
I'm a TA.
SAM: Hi, everyone.
I'm Sam.
I'm an office hours lead, CS major.
I don't know if we should say that.
ANNIE: I'm Annie, I'm a TA.
BRAM: I'm Bram.
I'm also an office hours lead with Sam.
DAVID J. MALAN: Wonderful.
IVY: I'm Ivy, I'm a student
DAVID J. MALAN: I think we just
need to turn up on our end.
It'll record.
IVY: I'm Ivy, I'm a student.
DAVID J. MALAN: Nice to meet you.
CLAY: Clay, Davenport 2020.
SHU: Shu, freshman in Pearson.
DAVID J. MALAN: Wonderful.
And of course.
BILLY: Billy, also Davenport 2020.
Right there.
DAVID J. MALAN: Wonderful.
So let's go ahead and give the mic
to our innermost team members here.
One of you has to buzz in first
to take control of the board
or pass to the other team.
So family feud is going
to work as follows.
I'm going to ask you a question, and
if you think you have the answer,
you're going to hit
the Easy button first,
and then you'll have a chance
to answer that question.
And if you get answer it correctly on
the board, your team will take control.
If yours is the top answer or
the other team can take control.
I'll guide us through
this if that's unclear.
So I'm about to ask you
a question and you're
about to hit that button
if you have an answer.
All right.
Colton, name your favorite algorithm.
Graham.
GRAHAM: Bubble Sort.
DAVID J. MALAN: Show us Bubble Sort.
That was the number one answer.
So staff has control.
You'll have up to three strikes
to mess up, at which point
control goes to the other team.
So Annie, name your favorite algorithm.
No need to buzz in.
ANNIE: Binary search.
DAVID J. MALAN: Binary?
ANNIE: Search.
DAVID J. MALAN: Binary search.
Number 2, very popular algorithm.
Sam, it's going to get
a little harder now.
SAM: It's true, it's true.
I'm going to go with merge sort.
DAVID J. MALAN: Show us merge sort.
Number 3, Adam.
Name your favorite algorithm.
ADAM: My personal
favorite, selection sort.
DAVID J. MALAN: Selection sort.
Show us selection sort.
First strike.
Some 100 other people
disagreed with you.
You have two more chances.
Bram, back to you.
Name your second favorite algorithm.
BRAM: Breadth first search.
DAVID J. MALAN: Show us
breadth first search.
Second strike.
Annie?
ANNIE: Linear search?
DAVID J. MALAN: Linear search.
So now students, if you answer
this question in such a way
that your answer appears on the
board, you take all of the points
into your category and then
we'll proceed to the next round.
CLAY: All right, David, we're
going to do insertion sort.
DAVID J. MALAN: Show us insertion sort.
And the students take control.
If you want to just jot down all 4
of those numbers and then tally it,
that's the student's current score.
So 41, 25, 22.
Write down 41, 25--
SAM: No, no we have 41.
DAVID J. MALAN: No students.
No, you lost.
No, you lost.
41, 25, 22, and 11, and we have
time now for just one more round.
All right.
SAM: Wait, you can yield and
then you get the points you have?
DAVID J. MALAN: Yes, because
they stole the points from you.
You lost.
OK.
So now, we're going to
do one more round here.
So if you will have a chance now to buzz
in because we have another face off,
and with Annie over here as well.
The next question, and the last
question is going to be actually,
let's-- Name your favorite language.
Students.
CLAY: Python.
DAVID J. MALAN: I heard Python.
66 classmates agree with you.
Name your favorite language.
IVY: C.
DAVID J. MALAN: Show
us C. 14, very nice.
Billy, what's your favorite language?
BILLY: JavaScript.
DAVID J. MALAN: JavaScript.
On the board with 14.
SHU: HTML.
DAVID J. MALAN: HTML.
Not on the board.
Two more chances.
You're out of languages.
CLAY: SQL
DAVID J. MALAN: SQL.
Three languages still on the board.
These are answers from
actual classmates,
top 100 answers on the board.
IVY: I'm just going to try
to scratch, even though--
DAVID J. MALAN: You and everyone
else would like to try scratch.
OK.
No, not on the list of actual answers.
Billy, it is on you.
We need your favorite language.
Be ready to steal, staff.
Do you want to add those up for us?
Yeah.
Yeah, let's add these up.
They have an unlimited amount of time.
BILLY: CSS.
DAVID J. MALAN: CSS.
All right, staff.
So let's go ahead and
tally what we have here.
Those numbers stay,
they have those points.
No, they keep those points.
Add those up.
99.
All right, so, if the staff get any
of the three answers on the board,
they're going to get
66, plus 14, plus 14,
and probably we should
give them some multiplier.
But no, we'll see what
the other answer is.
Give us your favorite language to steal.
ANNIE: English.
[CHEERING]
DAVID J. MALAN: Two
students actually did that.
Let's see what number 4 would have been.
Java, three people said.
And lastly, number 6,
actual answer, Spanish.
One person.
Thank you to our participants here.
We have time now for some concluding
remarks from the whole staff for you.
Thank you to both of our teams here.
This now, is the final
message from the staff
who will join us in just a few
minutes out back for some cake.
So we will finish CS50 where we began.
Thank you to these up
here, participants.
[VIDEO PLAYBACK]
- I'm Ana Leah, and this is CS50.
[MUSIC PLAYING]
- Thank you so much
to this year's staff,
without whom the course really wouldn't
be what it ultimately is for students.
Indeed, more than just videos and
problem sets, and tests, and quizzes.
CS50 really is about the
interpersonal experience
that students have with the course,
and the connection that they
make the whole teaching staff.
- So as a student, I really
struggled to learn pointers.
But I have a great TF and
he was just so inspiring
that I really wanted to
join the team myself.
- When I applied to Yale, I was an
English/Sociology prospective double
major, and now I'm a
computer science major.
So if that's a little bit
about how much CS50 changed me.
- You can come in, take
the class, do well,
and even know the material so well
that you're teaching the next year.
- CS50 is one of the
best opportunities you're
going to have here while
you're an undergraduate
to teach a course to your peers and to
really be a leader amongst your peers.
- When you teach something, you are able
to gain like 10 times as much knowledge
as when you just learn it.
- I've become much more comfortable
with computer science fundamentals
just by teaching them, rather
than taking classes on them.
- It's really amazing to watch
these incredibly bright-eyed,
incredibly enthusiastic, just
fresh out of high school students,
learning about CS and
asking these really intense,
really detailed questions in section
and just getting really excited about
the material with me.
- It's for that aha moment when you're
helping a student in office hours
and they've been struggling for hours,
and all of a sudden they get it.
And it's that moment that
I think is really special.
- We are super, super
excited every year when
we have new people apply for CAs, and
TFs, and graders, and being on staff
is like the most fun part of CS50
and it has been super, super defining
of my whole experience at Harvard.
- To my students, I'd like to say--
- You're alive.
- I love you all.
- You guys are great.
- And comment your code.
- You should be a TF for CS50 to
be able to empower other people.
It's as simple as that.
[MUSIC PLAYING]
[END PLAYBACK]
DAVID J. MALAN: This was CS50.
Cake is now served.
[APPLAUSE]
[VIDEO PLAYBACK]
[MUSIC PLAYING]
- Any updates on the mailing case?
People are getting
desperate for some answers.
- No.
I mean, I've been all over town,
and just haven't found anything new.
I feel like I might as well
just stay here at my desk
and stare at the ceiling.
- Well, what about your Rosebud lead?
Nothing there?
- No.
Total dead end.
I feel like we may never know who
or what this Rosebud really is.
- I don't think any word
can explain a man's life.
Try not to be too hard on yourself.
Get some sleep.
I'm sure you'll come up
with something tomorrow.
[END PLAYBACK]
