[MUSIC PLAYING]
SPEAKER 1: All right, this
is CS50, and this is week 11.
Before we begin today, I thought
we'd make some changes in light
of the competition on the horizon.
First and foremost, this
is perhaps in order.
And I was down the street
just earlier, and I
got my shirt for the weekend,
which I gather means 900.
So good luck this weekend.
And before we proceed further, a big
thanks to the whole team, honestly,
that made this semester possible--
Natalie, in particular,
who I'm sure you've
gotten to know over time, of
course, Benedict with whom I
went to college some years ago.
You recall this picture from week
0, and then of course [? Stelios ?]
and [? Anusery ?] and the
whole team of TAs and CAs here.
And, indeed, this is actually
a pretty novel thing.
If you haven't quite
realized it, especially
if you're first year, having
undergraduate ULAs [CRASH] or tada.
[LAUGHS]
That's anticlimactic.
OK, so we will tend to this later.
So this is actually
a pretty novel thing,
that there are undergraduates teaching
assistants, that you guys can actually
teach your own classes,
hold office hours, and more.
And this was actually initiated
just a few years ago by way
of CS50's first class of TAs and CAs.
So here's a [INAUDIBLE]
article from back in 2015.
In fact, this is the very
first team of undergraduate CAs
who first TAed CS50 itself.
And in fact, this is now an opportunity
that has extended beyond CS50 itself.
So if you're thinking about computer
science or really any related field
and you might like to start teaching--
which frankly is by far the best
way to actually learn and
absorb this kind of material--
realize that CS50 itself will soon start
recruiting, and we and the whole team
would indeed love to
have you on the team.
And even if you are among or were
among those less comfortable,
keep in mind that's what we
said in the first lecture still
holds true here on out.
What really matters
ultimately in this class,
even if it might not quite feel
like this-- it's just what?
Four hours after the quiz was due--
that what really matters in
this course is not so much
where you end up relative
to your classmates,
but where you end up
relative to yourselves.
And that's something
we have and will keep
in mind, especially when it comes time
for final projects, grades, and beyond.
And in fact, these were
the percentages broken down
in the very first lecture based
on problem set zero of this year.
So those of you who have
been feeling that you
are among those less comfortable realize
that it's no longer by definition
the case.
Everyone's been upgraded to
somewhere in between or among those
more comfortable, and
realize this is perhaps
just the first such stepping stone.
So this has been a tradition of having
undergrads TA the class for years
up in Cambridge.
And in fact, the team there put
together with our production team
a little invitation for you
to consider joining us here
in New Haven among our CAs
and TAs for the coming year.
So allow me to dim the lights and
have our team in Cambridge say hello.
[VIDEO PLAYBACK]
- I'm Elsiah.
- My name is Nenia.
- I'm Athena Braun.
- I'm a sophomore.
- I'm a senior.
- I'm a junior studying in
computer science and linguistics.
- I'm concentrating in [? CSL. ?]
- CS50 is always just
because it's changed my life.
It made me a computer
science concentrator.
- I'm a TF for CS50.
- Course assistant.
- This is my second year TFing now.
- This is my third year being
a teaching fellow for CS50.
- Becoming part of CF's staff
helped empower me so so so much.
- I was a total beginner, never
anticipated programming beyond CS50.
But here I am.
This is something I
never thought I would do.
I think it's just been really
exciting going from being a beginner
to being comfortable
enough to TF this class.
- Everything that has
come out of this has
helped me grow so much as
a teacher, as a student.
- Also the culture and the
environment of it is also pretty.
- I've definitely found a community
of friends within the CS50 staff.
- Be prepared to have
students who look up to you
and really appreciate the
work that you're doing.
And just realize that you're
not just a teaching fellow.
You're not just this person
behind the whiteboard.
You're like a student
who took this, too,
and can really level with
other people in your section
and figure out what's going on and
make it a good experience for them.
- I decided that I can get
the best of both worlds.
I can get to teach
about computer science.
And those are two are my passions.
- I just really love teaching
computer science to beginners.
CS50 is where all that
beginner energy is,
and it's where I can make a real
impact on the students' careers in CS.
- It's amazing to see how much this
course can do in just a semester
and how, from September until
December, students learn so much
and gain so much
experience and knowledge.
And watching that and working
with them in that process
has always been really,
really inspiring.
- It's been so so wonderful
getting to see these people grow,
just like I did myself.
- One of the most rewarding
things I've done here.
So that's why I keep coming back.
- Going to office hours and helping
people out, it makes you feel good.
And it makes other
people feel good as well.
- My name is Brian.
- I'm Thomas Lively.
- I'm Allison.
- I'm Maria.
And this is CS50.
[END PLAYBACK]
SPEAKER 1: So realize, here in
New Haven and also in Cambridge,
we're fortunate to have
quite a few resources,
both in terms of the place that we're
in and the people that we're around.
And one of the focuses of CS50
for years now with its staff
has been on something called open
courseware, whereby we've long
made the courses, videos, and problem
sets and software freely available
to everyone around the world.
And just a couple of
years, too, did we start
to focus, not just on
students who wanted
to tune in in any country and
any city, have we also started
focusing on teachers as well so that
they needn't rely only on the textbooks
that their schools provide but too
can get on the internet and tune into
and use in their own
classrooms, adapting or adopting
this particular curriculum and
tools for their own students.
And if curious, for instance,
every red dot on this map
actually represents some
cohort of high school students
and high school teachers teaching
introductory [? CFs ?] via CF50AP
as it's called, and every one
of the blue dots on the screen
represents a university with whom
we've been collaborating in some form,
either formally with some
of the faculty or less
formally with some of
the student groups there.
And so if you're interests in
education and in computer science
extend beyond, by all
means consider applying,
not only to TA or SA the
class, but to get involved
in these other outreach efforts
creating curricula, working on tools,
and really making an impact.
In fact, the communities
beyond Cambridge and New Haven
include Miami Dade in Florida.
This is Chile.
This is our team in London.
Here in Burma.
Here in Ukraine.
Here in Cairo.
Here in Bolivia and Nicaragua, and
then lastly back home in Cambridge.
This was our very first
cohort of high school teachers
who came to town in order to
bring a little something back
to their own classrooms and
teach and adapt as well there.
And in fact, just a
few years ago, apropos
of the event on our own horizon, this
was the very first CF50AP hackathon,
whereas instead of getting
together at 7:00 PM To 7:00 AM,
we got together like 10 AM to 2 PM
during the high school schedule.
And we had eight public
and private high schools
in the New York City area come together
to work on their own problems sets
and final projects and the like.
So again, if of interest, do
you feel welcome to engage
with us and so many people
around the world in that way.
So what have we actually done in the
classroom and in the problem sets?
So at the end of the day, it's
all about problem solving.
And hopefully, if you
attended CF50 Puzzle Day
or certainly engaged in the problems
over the past several weeks,
you realize that the goals of this class
are not so much to teach you C per se,
and it doesn't really
matter some of the finer
implementation details of
a lot of the problem sets,
but how you went about
solving those problems.
And we claimed early on
that there is a methodology,
and there's techniques with
which you can solve problems.
And indeed, we hope what you exit
the course with is sort of an ability
now to recognize patterns and other
problems you might encounter, not
just in CS, but in other fields too.
If curious as to how
some of your classmates
perceived this year's problem
sets, we took a look at the data
that you kindly provided
in problems set eight.
This is a bar chart of what
everyone thought of the problem set.
So purple is hate.
Blue is love.
So it's hate on top down
to love on the bottom.
And so what you can see here is
that love was kind of invariant,
though there was even more liking
of problem sets 6 over here.
No one really hated
problems set 1, which
is fantastic, with Mario and the likes.
So perhaps you're
somewhere in that spectrum.
A little more telling was this.
How difficult were the problem sets?
And these numbers varied a lot more.
[? P ?] said 0 and 1 were very
blue because blue is easy,
green meanwhile on the
top would represent hard.
So there's definitely
some fluctuation based
on expectations of the problem sets and
which one were newer or in progress.
But problem set 5--
so misspellings, the spellcheckers--
it's probably pretty fair to say it's
pretty orange and a bunch
of green, whereas pset
6 kind of went the other direction,
where you had the ability
to port some of our
programs from C to Python
and implement some document similarity.
When did you start problem sets?
More telling.
So [INAUDIBLE] called that they are
released way over here on a Friday,
but the most common day seems to be
Wednesday followed by Friday, followed
by Thursday.
Thankfully zero people said they
started it the morning of it being due.
So that's a little something.
And then lastly, when
did you watch lectures?
So it seems that Monday
was the common case.
Some folks tuned in live on Friday
or watched it on demand thereafter,
Saturday, Sunday being common.
And then there's perhaps
correlation between the blue Sunday
and the blue Sunday for
problem sets as well.
So just to give you a sense
of your own patterns as well.
So where did we begin?
So you recalled that we came
on up here some 12 weeks ago
and played this, IVs hardest game,
which was a game written in Scratch
but was all about trying
to solve some problem.
And we distilled this notion of problem
solving really into this black box.
At the end of the day, all problem
solving is is you've got some input--
and we happen to represent them
in so many different ways, zeros
and ones, letters of the alphabet,
colors and files, and web requests,
and more.
But at the end of the day, what
you care about is the outputs.
And the secret sauce in the
middle, we've kept calling what?
OK, you're wearing the I took CF50
shirt, so you better have an answer.
What's inside the box?
Grhythms, exactly.
Yeah, algorithms is this
sort of fancy sounding term
that really is just these step by step
instructions for solving some problems.
And whether we've solve these problems
in Scratch or in C or in Python
or in [? Secord ?] or in JavaScript,
these really are just tools.
And hopefully you found,
albeit with deliberately
a bit of frustration
in recent weeks where
you had to Google a bit more on your
own or you had to ask more questions,
hopefully you felt--
though perhaps not
pleasurably at the time--
that the training wheels were
really starting to come off
and that the expectations were more on
your end to sort of figure something
out.
But hopefully, we hope you had
the right mental model with which
to figure out what resources to use and
how to go about solving those problems.
And so indeed, allow us
to propose to you what you
can do after CF50, very pragmatically.
If your interest lies specifically
in software development,
you'll hear at the end
of today's lecture,
too, a number of other directions you
can go, particularly by way of classes
but with j term on the horizon
and summer on the horizon
and perhaps jobs on
some of your minds, we
thought we'd give you a glimpse of
just some of the practical things
that you might want to keep
in mind that will generally
be assumed by some other
high level systems classes.
But just how can you write
code and solve problems
without CS50, without CS50 [? ide, ?]
and certainly without a problem
set specification that
just tells you what to do?
So learning git.
This is something you've used underneath
the hood for some amount of time,
and there's many
different implementations
of this notion of version control.
And git is not the only one.
It's perhaps the most
popular these days.
So many of the things
we'll suggest here you
could absolutely sub
out for something else.
But this certainly is
very much in vogue.
And so if you go to this
URL here at some point,
CF50 own Brian or
[? Hadeie ?] in Cambridge
did a fantastic seminar
on how to learn git.
We'll post all these slides on
the website after today as well.
And here's Brian from
that very same thing.
If you want to keep your own projects,
whether academically or professionally
private, GitHub's great about
giving you free access to this.
So even though all your work thus
far has been in CF50's account,
our organization called [INAUDIBLE]
50, you can head here and actually
sign up for free accounts
to continue using that,
and you'll see a little
screen a bit like this.
Installing git on your
own Mac or PC-- and this
is where really you can
force yourself to take off
some of the training wheels.
CF50 ide is meant to be pretty
representative of a real world software
development environment.
But it's of course, cloud based.
And even I get annoyed if I'm taken
Amtrak down here from Cambridge trying
to use it because of the latency
or weak internet connection,
and I don't necessarily have as much
control as I might on my own Mac or PC.
And so among the options, of course, are
to install these very same tools there,
among them a text editor.
There's dozens of these if
not hundreds over the years.
One of the most popular perhaps
is called Sublime Text, which
you can download at this URL here.
And this would be the equivalent
of the little tab code
windows that just come with CF50 ide.
But you can use it on your own computer.
And you'll see a little something
like this with nice and fancy features
that are intellectually
interesting but just
save you time at the end of the day.
Atom is a very popular one as well,
which you can take a look at online,
too.
It, too, is freely available.
And then Vim and more
command line based tools.
Actually, to this day
I still use Vim myself.
If you've ever seen me in lecture
open a black and white window that
isn't the tabbed code window
but via plug-ins and the like,
can you make this type of tool and
others like it, [? EMAX ?] and beyond,
ever more versatile as well.
Besides that, in FAQ, apropos
of final projects coming up,
is that many students end up
doing mobile applications,
even though we don't teach it per se,
web applications, which we introduce
you to by way of pset 7 and pset 8.
So a very common approach as you're
thinking about over Thanksgiving
and beyond your final projects
is that, if you actually
want to put these
things out there and not
think of it as just meeting the
course's own expectations but something
you really want to build
on and it's something
you want to do for your student group
or your own entrepreneurial effort
or for some other class for what
you want to solve some problem using
software, realize you can put these
things out there using CF50 ide.
For instance, if you go to the
Share button in our own ide,
you'll see an interface like this.
And so long as you make the
so-called application public,
then anyone on the
internet can visit that URL
and try out your CF50 finance or your
mashup or now your final project.
Of course, with these
free accounts, they
tend to shut off after some
number of hours of idleness.
So it's not the way to run
a website that you actually
want friends to use for some time.
So using things like [INAUDIBLE]
is a very popular service.
And ask any of the TAs
or staff over time,
and we'll post some links online
as well to get started on this.
AWS, Amazon's cloud service,
and Microsoft has one,
and Google has one as well.
Can you sign up for free accounts there.
And you can actually get
your own free domain names.
If this is of interest
and you don't want
it to be some cryptic
sounding domain name,
you can actually get them from free from
companies like namecheap and the like,
leveraging your student
status for the next few years
to take advantage of all
these resources for free.
And this one in particular
at GitHub's address
gives you access to a lot
of tools that you might
want to experiment with and try out.
So where will we head
in the coming days?
The sort of hardest parts, perhaps, are
behind us, with the test and the quiz
and all of the problem sets, and all
that remains now is the final project.
And the hope here really is to
take all of the training wheels
off and give you a
chance to sort of build
something that's genuinely of interest.
Hopefully it will solve
some problem of interest
to you or, again, your student group,
or something you're working on.
And you'll have 12 hours if you'd
like to join us in Cambridge, just
as your predecessors did last year, to
hop on a bus in just a couple of weeks
time.
Come on down to Cambridge
for a 7:00 PM or so start.
Upon arrival, you'll be greeted by
the staff from Cambridge and New Haven
alike.
You'll get settled down
and grab a name tag
and find a place to sit
and work on your laptops
for pretty much throughout the night.
The goal is to actually
get something useful done.
Ideally it is now to
start your final project,
since starting it at
the middle of the night
is probably not the best strategy.
And in fact, if you take nothing
else away in the way of advice today,
get something done over
Thanksgiving truly,
even if it's just hello world,
if you're making an iOS app,
or hello world if you're making
Android, or copying problem set 7
or problem set 8 and
then building upon it
or starting to for your final project.
Just like give yourself
that base layer on top
of which you can build when you actually
arrive at an event like this or dive
in on your own.
The evening will be punctuated by
opportunities to ask the staff help.
But it won't be like 12
hours of office hours.
The staff will be there, but generally
working on their own projects
and there to advise you
or point you at things,
but not necessarily to solve
problems in the same way,
since your projects will be as
unfamiliar to us as they are to you.
But we'll point you
at what we might know.
And it'll be an opportunity
really just to have
what we hope is a pretty memorable
collegiate experience, working
on final projects, having some Mexican
food around 9 PM, pizza around 1:00 AM.
And then if beyond the photo
booth and other distractions,
if you need a little break
here and there, including
a therapy dog this year--
Milo-- and naps throughout the
evening, as happened last year as well,
if you make it all the way
to 5:00 AM, one of the buses,
if you're still up for it, I'm
on the way back to New Haven.
We'll stop off at IHOP for
breakfast for those still awake.
And if you're too tired at that
point, one of the other shuttles
will head back in a different
direction altogether.
And then the CF50 fair, which is here
in New Haven for all Yale students
and faculty and staff to come to.
This is meant to be
an opportunity really
to delight in what you pull off over
the remaining weeks of the class
and really what you accomplished over
the course of the semester since week
0.
Last year's event was in Commons,
which is currently offline, but has
over 1,000 people of students
and staff and faculty
coming by to really see
what you've worked on.
And it's a very casual environment.
There's music, and there's
friends from industry and alumni
there to chat up everyone is well.
And here's a group of students
presenting their final project
last year, the same kind
of thing happening here,
and then even some hardware
demonstrations like this one
involving VR.
So it's really just a fun opportunity
to get everyone together before break
to see what everyone has accomplished
over the course of the term.
And alumni, indeed, come
back from Facebook and Google
and the like to chat up folks about
opportunities in the real world
as well.
And at the end of it all, in
addition to cotton candy, as you'll
see we have we have
and before then, your I
took CF50 t-shirt to claim
hopefully proudly exactly that.
An invitation though
is certainly warranted.
This year's event will be in a fairly
special place, no longer in Commons,
but in the Peabody Museum,
if you've ever been there.
So in addition to the very modern
things like laptops and apps, well
you'll also see some
things from yesteryear.
Let's take a look, in fact, what awaits.
Thanks to [? Stelios ?]
and [? Inusery. ?]
[VIDEO PLAYBACK]
- Join us at the CF50 fair.
[BABY SOUNDS]
[END PLAYBACK]
SPEAKER 1: So at the very end of today's
lecture, after we take a look at some
follow on classes and CS, you'll
be joined, as is our tradition,
by the staff for some cake in back.
So do join us and the faculty you
were with us today for exactly that.
I thought we'd conclude our beginning
portion of the lecture 2 with a look
back at this semester, but again, in
addition to this very practical advice
in these next steps that we've offered,
do keep in mind that we hope ultimately
that, since week 0 now
here in week 11, you really
do feel empowered and
all the more equipped
to explore other fields of
other areas of computer science.
But even if you choose for CS50
or any other science classes
to be your last, that you can now
bring to bear some of these concepts
and these practical skills back
to the arts and the humanities,
social sciences, and beyond to actually
solve problems using computing and data
all the more effectively.
So in a final sentimental note, a
look back at CF50 this past year
starring you.
[VIDEO PLAYBACK]
[MUSIC - BIRDY, "KEEP YOUR HEAD UP"]
Times that I've seen you lose your way,
not in control, and you won't be told.
All I can do to keep you safe
is hold you close, hold you
close till you can breath on your
own, till you can breath on your own.
Hold tight.
You're slowly coming back to life.
I'll be keeping your head up.
I'll be keeping your head up, darling.
Let go of all your
haunted dreams tonight.
I'll be keeping your head up.
I'll be keeping your head up, darling.
Hold tight.
You're slowly coming back to life.
I'll be keeping your head up.
I'll be keeping your head up, darling.
Let go of all your
haunted dreams tonight.
I'll be keeping your head up.
I'll be keeping your head up.
And I won't let you down.
[END PLAYBACK]
SPEAKER 1: Thank you so much.
Let me turn things over to Benedict,
and I'll see you in a bit for cake.
BENEDICT: Thank you, of course, to
David and Doug and the whole CS50
team at Harvard for a fabulous semester,
to all of you for a fabulous semester,
to Natalie and the rest
of our staff here at Yale,
and also to Judy Page and Sue
Hurlburt who you don't see but,
Natalie and I work closely
with, to make this class happen.
We're really excited by how well it's
been going, how well you guys have all
been doing.
And we really want to see you
all around the department.
So I'm going to talk for a little
bit about some of the classes
that we're offering in the spring
that we think you should all consider
and that you're all ready to take.
And then I'm going to pass it
off to some of my colleagues
who are also teaching
classes this spring, that you
may want to consider taking.
And again, that you
can jump right into--
great ways to explore different aspects
of computer science, or to know you
love this, and you want to
dive right into the major.
So the list here is the classes
in the spring that do not
have any prerequisites beyond CF50.
And we'll talk in just a
few minutes about each one
of those and also about 223, which would
be the logical thing to take after 201.
So two of these o35 and 078.
These are freshmen seminars.
If you're not a freshmen,
when we talk about these,
you should put your fingers in
your ears and go la la la la,
because the university will
not allow you to take them,
and there's nothing that
we can do about that.
But that doesn't make
them any less cool.
If you are a freshmen, pay attention
because you get one shot at this
and then hopefully you're no longer
a freshmen and you're out of luck.
We have 200 and 201, which
are some of our core sequence
and an entrepreneurship class
and a digital humanities class,
and then of course data structures
that is kind of, after that,
all of our upper level classes open up.
So we also have a bunch of majors.
And this is something that
you may or may not realize.
We are not just a peer
computer science major.
That's a great thing to do.
I did that.
I survived I enjoyed it.
But there's also ways to do a computer
science plus math or psychology
or engineering major,
electrical engineering, where
you take roughly the same number
of classes as a single major,
but you split them
between two disciplines.
And those ones are pretty
natural combinations,
but we also have a computing
in the arts major, which is
a little different than a joint major.
It's its own distinct major, which
means it has its own distinct director
of undergraduate studies.
But here you combine about six
classes in computer science
with about six classes in
one of the arts disciplines.
So that could be architecture or
fine arts or history of art or music
or theater, and these are all areas
where Yale is also really strong.
And its a great way to look at ways that
you can use computer science together
with other disciplines and also ways
that you can pursue multiple interests.
Students graduate out of this and go
on to get all sorts of jobs, including
all of the same jobs
that you typically think
of a computer science major getting.
But it opens the door to other things as
well and to exploring other interests.
So the computing in the arts major--
just a little bit more about it.
This is an interdepartmental major.
We've got these different groups set
up, where you take six computer science
courses, including the core, and
then you take about six classes
from one of the other
departments, and that way you
get the grounding in computer science
and the experience with that, and then
a discipline.
And then you start to think about
how you can apply them together.
So architecture of course
is building things,
and that's becoming very
computational using computer science
to develop new structures--
art as well.
Art history-- this is an area--
I work a lot with conservators
and archaeologists,
and I'll be talking about that.
And music-- and we'll have
Scott Peterson talk to you some
about computer music.
And theater, and again
these people go off
and work at all sorts of cool places.
You're not jeopardizing money.
You don't have to make
money you don't want to.
I did, after all go into academia.
But if you have further
questions, the person to contact
is Professor Dorsey, who is
unfortunately out of town today.
So she couldn't be here.
She will also be teaching one
of these freshmen seminars
in the spring on essentially 3D design.
In some sense, you don't
need a technical background.
But it is a somewhat technical course.
So you guys are well-prepared
for it, and you'll
be talking about 3D scanning, to
measure shapes of existing objects,
how to model on the computer new
shapes, how to modify 3-D models,
how to produce them using things like 3D
printing and milling and laser cutting.
Some of those are things
we have in the department.
We have 3D printers.
In CEID, which you can
also sign up for, there's
a whole suite of these
tools for making things.
And, again, you don't need
any programming experience.
All of you have it.
You should have essentially high
school math, high school trigonometry,
and you have to be a
freshmen and you have
to pre-register through the freshman
seminar lottery for which, if you're
curious, you may also want
to talk to your college dean
and make sure that you
understand the process for that.
And then it goes into a lottery.
And if you're lucky, you get in.
So these classes are small.
They're limited.
The level of math that would
be involved in this class
would be, for example, when
you're doing 3D scanning,
you end up having two cameras, and
you know the way they're oriented
and you know, for instance, that
they maybe 10 centimeters apart.
So if both of them are seeing
the same point on an object,
that forms a triangle and you
want to know the distance from one
of your cameras to the objects.
So you can find out how far away it is.
And from that, you get shape.
And basically, you look at this and
you say, well, I know the angle alpha,
I know the angle beta, I know
this distance 10 centimeters.
I can apply the angle
side angle theorem to know
that I can calculate this point.
In particular, there is a law of
signs that you plug this formula in,
and you find out that if these two
points are 10 centimeters apart,
you're looking at something
that's 13.7 centimeters away.
So there's not going
to be more than that.
We're not talking about
advanced calculus.
We're not talking about knowing
all sorts of programming skills
or how 3D models actually work.
And it's going to be a combination
of lectures and labs and discussions.
Again, it will be a limited
size class as a seminar.
There will be some guest lectures.
You'll take a field trip to blue
sky that makes the Ice Age movies.
They're a big East
coast animation studio.
Again, if you have
questions about that, talk
to Professor Dorsi, who's teaching it.
And I definitely encourage you, if
you're a freshman, to check it out.
There's another one
that all of you can take
that I will be teaching which
is a course on applications
in the digital humanities.
And this is a brand new course.
And so it will adapt
a little bit depending
on exactly who is in the class and
how many of you are in the class.
I hope there's plenty.
And the idea is to talk
about different ways
to use computer science
in the humanities,
and then to work in groups on
projects, on different projects
in the digital humanities.
And so I'm having discussions
right now with faculty
all over campus about interesting
projects in their domain
so that we'll have a range
of ideas to start with.
But we'll do about half
the semester talking
both about application digital
humanities, but also about web
application development.
So these are sort of
continuing from pset 8--
how do you program in JavaScript,
how do you write Flask applications
and go a little more advanced
than we've done in CS50.
How do you write richer web applications
with richer client side interfaces?
And then how do you apply those?
It turns out there's all sorts
of applications in the humanities
where you want to
build databases and can
start to ask questions about your data
and look for connections between things
once you have the tools to assemble
all of that data and to visualize it.
And so there will be
different kinds of things.
Some of the ones that
I have lined up already
will be to detect the
meter in poetry and build
a database of meter and different
poems by different authors
and start to look at things like
is there a particular style of how
one poet may play with meter or
similarities between different poets
that you might be able to classify,
but also as a tool to do this detection
and help the process along
a good interface for it.
There is one with the Yale
Babylonian collection,
to build a really good database,
not just for saying let a search
a cylinder seal and see
a pretty picture of it
and see all of the
data we have about it,
but also see context, see
relationships to other cylinder seals,
be able to say, ah, this one
has a carving of a stag on it.
Let me find the other ones that
have carvings of stags on them
and try and find relationships
and connections between them
that can be useful for research.
Another interesting one that
I learned about yesterday is
potentially to curator essentially
the public art on campus--
so all of the stone
carvings on buildings,
all of the paintings
hanging in buildings,
and understand what we
have on campus, what
we know about the provenance and
history and state of preservation,
what things we should really take down.
And then how do we present
those and contextualize them?
So I took this picture yesterday.
You may have seen a similar
picture in the newspaper.
This is a carving that was on
the outside of Sterling Library
right near the entrance to the CTL.
And somebody noticed I
think last summer that there
was this carving on a back entrance
of a pilgrim shooting an Indian.
And you stop and scratch
your head and say,
there's nobody that really thinks
that's in good taste any longer.
And so maybe we should
not put it somewhere
that is now becoming a prominent
entrance to the library.
So it's sitting on West Campus in
the conservation lab at the moment.
But these are sorts of questions that
you might be looking into and asking.
Working with me on ways
to look at potential
matches between fragments
of ancient wall paintings.
These are fragments of wall
paintings from Roman times,
from about 2000 years ago for example.
So a range of different sorts
of projects, some with music,
and that's what--
I'm hoping to then bring in
some computer scientists,
some people interested
in computer science,
some are interested in
computer and the arts,
some interested really in just in
the applications to their domains
to get a dynamic atmosphere where
you're learning from each other
and about the kinds of
questions you can ask.
And again, if you have
any questions, you
can always feel free
to email me about them.
And then I want to move on.
Scott is another lecturer in
the computer science department
and specializes in computer music.
SCOTT: Awesome, hello.
I'm Scott Peterson.
I'm a lecturer in computer science.
I joined the department
last year after serving
a number of years in
the music department,
doing sort of various
technological things.
I teach four classes, CPSC 035,
which I'll talk about at some length
in a little bit, 134, 431, 432.
And I'm also the director of the
Yale Open Music initiative, which
I don't know if you've heard about.
But I'll also talked
about in just a bit.
Before I do that, I'll talk very
briefly about classes that you probably
can't take yet, although maybe.
And those are 431 and 432.
They are algorithmic and heuristic
composition, and sound synthesis
respectively.
And they have prerequisites,
which are 202 and 223, I think.
And essentially, they
are together a sort
of complete look at computer
assisted music composition and sound
synthesis together-- so
using a high level language,
and we use supercollider
for all of these classes,
looking at ways that the machine can
help us both organize notes, think
about music in different
ways, and then also sort
of delve into how sound is
constructed from the very lowest
level of digital representations
inside the machine.
Before I talk about 35 and
134, I'll talk very briefly
about the Yale Open Music initiative.
So this is not a class.
This is just something that you can
join or attend workshops that we give.
So this is a sort of loose group of
people who are interested in everything
at the intersection of
music and technology.
So this might mean computer
music programming outside
of the sort of classroom setting.
It could mean putting
together machines that
have arrays of sensors that
then send sensor data back
to a laptop that asks it
for said data and then does
some sort of sonification with it.
And it's generally informal.
We've been the recipient
of a couple seed grants
that have allowed us to buy some cool
stuff, our arduinos and Raspberry Pis
and put some of these machines together.
And we've given at least one of
these workshops in conjunction
with the new center for
collaborative arts and media,
which is another place
that you should check out
if your interests sort of intersect
computer technology and anything
sort of artistic.
So 134 also has no prerequisites.
It uses the same high level
language, which is supercollider,
to investigate how the machine can
help us compose music, also sound
synthesis, and also interaction.
So this is a quick shot from the
music studio in computer science
where students of 134 were just
working with arduinos and sensor arrays
to input incoming sensor data
into laptops and supercollider
and then sonify that data and some
sort of hopefully meaningful way.
The enrollment is generally
small for these classes.
So if you like small classes and
a lot of time that sort of seminar
feel that you might not get
in a class of this size,
then this class may be for you.
And this is offered in the fall.
So the next course is CPSC 025.
So this is a freshmen seminar.
This is where you plug yours
if you're not a freshmen.
And this class is divided
into generally three parts.
The first part is music production.
And so we spend a lot of time talking
about how we can capture sound
in the real world, represent that
sound in the machine and software,
and then investigating digital audio
workstations for sound production,
processing, etc.
The second part of the class is
programming and supercollider,
again-- so sort of all the
stuff that I talked about.
It's a gentle introduction.
It doesn't assume that you have any
programming, but obviously you do.
And then the third part--
sort of my favorite part--
is this intersection
of the real world and the machine.
This is physical computing
and sensors, and this
is where the wheel meets the road.
And we have a lot of projects that
work with real world sensor data, that
work with human movement, that can sense
ambient light, that can sense motion.
And then we talk about some of
the issues of converting that
into meaningful musical information.
So if you have any questions about--
pardon me-- any questions about any
of these or the Open Music initiative
or you want a a tour of the music
studio in computer science, please
feel free to email me.
Thanks so much.
[APPLAUSE]
KYLE JENSEN: Hi, I teach a class that
helps you use your computer science
knowledge from CS50 to build startups.
That could be nonprofits.
That could be some scalable software
startup like Facebook or Snapchat.
The class is computer science 213.
It's also management 659.
My name is Kyle Jensen.
I'm Associate Dean at the
Yale School of Management.
And this is one of my favorite classes.
The class is essentially 50% web
application development, full stack,
and 50% class that you might find
at the business school teaching
an introduction to entrepreneurship.
Fundamentally, the
class helps you identify
customers, people whose lives
you can change in some fashion,
to verify to yourself that those
people have some problem that you think
they have, to build a
business around that,
and the technology skills
you need in order to do that.
I think you should take the class.
It's fantastic.
Again, my name is Kyle Jensen.
You can easily find me on the interwebs.
Thank you.
[APPLAUSE]
STEPHEN SLADE: So I think I have slides.
Let's see if this works.
Yeah, look at that.
OK, I'm Stephen Slade.
And I teach both CS200 and 201.
And who am I?
I am a hybrid.
I am both theory and practice.
So I was a Yale undergraduate.
I majored in music, and
I study computer science.
I came back here to graduate school.
I got a master's in PhD
in computer science.
In the meantime, I worked
in presidential campaigns
at the White House designing computer
systems, management information
systems.
I also taught in the
business school at NYU.
And from there, I
migrated to Wall Street.
I worked in finance and risk
management for many years.
So I've looked the world
from both sides now,
from both the practical
and the theoretical.
And in theory, there's no difference
between theory and practice.
But in practice, there is.
I've written three books.
They were all dedicated to
Yale alumni, namely my family.
So my wife went to Yale.
My three children went to Yale.
I have two daughters who
majored in computer science,
and they both work at Google.
I'm a big believer in educating
women to be computer scientists.
And when they were growing up, I viewed
my job as not teaching them to read,
but teaching them to love to read.
I didn't view my job as
teaching them to play the piano,
but teaching them to
love to play the piano.
And I view my job here in CS200 and 201
as not teaching you computer science,
but teaching you to
love computer science.
And I think that's what
David tries to do as well.
That's my impression.
Anyway, so there are two courses--
200 and 201.
And they're sort of sister
courses, sibling courses.
They're meant to be theory and practice.
So 200 is more practice,
201 is more theory.
But they have the Common Core in that
they both satisfy the prerequisites
for a future in computer science.
And in particular, if you take either
course, you will learn recursion.
And see what happens when
you Google recursion.
And it's an interesting exercise.
You will learn Unix.
You will learn computer
architecture, machine language.
There are programming assignments
about every week or so,
much like you had in CS50.
And in addition, I introduce
what I call logical problems.
And the idea is to make you
realize that you make assumptions
about the world that often are false.
And this is the bane of
the computer programmer,
that when you're writing
a computer program,
you make assumptions about the
input or the behavior of the user,
and often those assumptions are false.
So what I try to do is train
you to think out of the box,
to think in terms larger than
what your normal assumptions are.
So for example, here's this a
representative logical problem.
What is the next number in
the following sequence--
1969, 73, 77, 81, 85, 91, 93, 99.
What's the next number?
Anyone know?
All right, let's analyze it.
First of all, they're all years.
All right, they're all odd years.
Am
OK, the current year is
2017, which is an odd year.
So that's a plausible
answer to the question.
So anyone want to guess what
the answer to the question is?
OK, good because no one will know the
answer until at least this weekend,
and maybe not even then.
[INAUDIBLE]
That's almost right.
So 1999 was the last time Yale
beat Harvard in New Haven.
So maybe this Saturday we'll
know the answer to the question.
We'll see.
It's supposed to rain, I think.
Anyway.
OK, 201, 201 is a prerequisite
for the rest of the major,
and it's meant to teach you theory.
So it teaches you recursion,
Unix, machine language, computer
architecture.
The programming language
you used is Racket,
which is a dialect of Scheme and LISP.
These were languages that were
developed maybe 50 years ago,
and they've evolved primarily at MIT.
But they've been used for artificial
intelligence for many years.
Putting Racket on your resume is
not going to get you anywhere.
It's going to get you odd questions.
So that's not the point.
We will learn Turing
machines, Boolean logic.
You'll see how to design software that
emulates digital gates and circuits.
You'll write machine language for
a fictional machine, the TC201.
We will look at formal
languages, regular expressions,
deterministic finite automata.
We'll look at computational
complexity and analysis of algorithms.
I think you did a little
bit of that in CS50.
I have a link here to the
syllabus for the current semester
in case you want to look.
And CS201 satisfies the de
jure requirement for the major
and for courses like 223.
200 is meant to be the
practical alternative to 201.
And as I say at the bottom, it
satisfies the de facto requirements
for the higher level courses.
So for example, you learn enough about
computer science and programming,
recursion, Unix, machine language
to take the higher level courses,
but sometimes you may need the
permission of the instructor.
But in general, it hasn't been an issue.
If you're not a computer
science major and you merely
want to take a course that will
help you in other areas of life,
this is probably a
reasonable course to take.
In particular, the
programming language we use
is Python, which you
should put on your resume--
Python.
And we will look at Python in much
more detail than you had in CS50,
but the fact that you've had it
already is probably beneficial.
So we will do object oriented
programming in Python,
which is like object oriented
programming in C and C++.
We'll look at software
engineering issues.
We will look at databases-- and not
only how to use a database like SQL,
but actually how to build a database
system in an object oriented way.
We'll use Python to build
an object oriented database.
We will do machine language but not
on a theoretical machine, the TC201.
We'll see how to interpret machine
language that's generated by Python.
So Python generates
what's called byte code,
and you will write a byte code
interpreter for Python in the course.
We'll also look at practical
real world problems,
not Turing machines,
not Boolean expressions.
But we will look at cryptography
and information security.
We will look at machine learning,
which is also sort of generally known--
it covers things like big
data and data science.
And we'll look at applications.
So some practical applications
of machine learning
include driverless cars and
actually information security.
So these days, one interesting
application of machine learning
is using machine learning
to break encryption codes,
or to create encryption codes.
And again, I have the address of
the syllabus from last spring.
It'll be a little bit different this
year based on what I've said here.
And I think that's it.
[APPLAUSE]
I'll be around if people have questions.
JIM: So, yes, so I'm Jim [INAUDIBLE].
I'm the DUS for computer science.
And I also teach computer
science 223, or at least will
be teaching computer
science 223 in the spring.
So what I was asked to come here and
talk about was both of these-- first,
I'm going to talk about
computer science 223
and why you might want
to or not take that class
or not take that class at
some point in the future
and what's involved in doing that.
And then I'm going to
talk a little bit more
broadly about the
computer science major,
if that's something that some of
you might be considering or some
of the other options related
to that, like our joint majors
or, in some cases, the
possibility of double majoring.
I did not actually bring any slides.
So I'm just going to stand here
and wave my arms around a bit.
Maybe I'll actually stand up.
And I suppose if we have
anything that we need to draw,
we do have the blackboard here.
So let me start by talking about 223.
223 is usually the second
programming oriented course
that people take as part of the
computer science major, the first one
being computer science 201.
If you are thinking of being
a computer science major,
you should probably
go through 201 first.
201 is formally a prerequisite for 223,
but as with all prerequisites at Yale,
this is an open negotiating position.
And with permission
of the instructor, you
can take 223 without
previously taking 201.
That being said, historically
students who have come in to 223
without taking 201 have
generally not done as well in 223
and then 323 after that as people
who go through the normal track.
If you are doing the
computer science major,
we do not necessarily require you to
take 201 if you've already done 223.
But we do ask you to do an extra
elective to make up for it.
In terms of the actual content
of the class, the title the class
is data structures and
programming techniques.
And that's mostly what it's about.
We talk about programming
from the point of view
of how do you organize your code, the
programming techniques side on the one
part, and how do you
organize your data that's
operating on the data structure side.
The thing that people often find odd
running into it, which was probably
not going to be so much an issue for
you guys having come through CS50,
is the language of instruction
is C. So for people
coming into the program who are
used to languages like Java,
this can be a little bit
of a shock, given that C is
such a terrible programming language.
We do you C for a reason,
which is that we're
trying to get you an understanding of
computers down at a fairly low level,
at the point of individual bits getting
shoved around, maybe not so much
in 223, but certainly by
the time you get to 323.
And C is about as close as we can
get to actual assembly language
and still have it be something
that's usable by any human beings
at this point pretty much.
And so that's why we
use that in 223 323.
If you want to come take 223, you
should feel free to check it out.
And then like I said, I'll
be teaching it this spring.
We offer it generally
every semester now.
So if you don't want
to take it immediately,
if you want to consider
looking into 201,
which we also offer every semester,
you can go do that first and then
and then come back.
It's really up to you.
Any questions about 223?
All right, so now I'd like to
move on to topic two, which
is the computer science major.
Which I don't know how many of you might
be thinking about the computer science
major.
But so I'm the DUS for
computer science, which
means that I'm responsible for
administering the computer science
majors.
Since it's a very large
major, we actually
have two other people who do
advising within the major.
We have a sophomore class advisor
who is currently a professor,
[? Rezeech ?] [? Pizscoch, ?]
and a junior class advisor,
who is currently Yang Yang, although
he'll be replaced by [? Brent ?]
[? Schuzuleti ?] next semester
because he's going to be on leave.
I handle all the seniors
and freshmen and also handle
issues that come up that are a little
bit more involved in terms of dealings
with the major.
The major itself is a fairly
straightforward major.
We have five core classes,
201 and 223, which
I mentioned already, 201
being the introduction to kind
of all of computer science
intended to give you
an idea of what you're getting into.
And then 223 is the
first of two programming
oriented classes on the kind
of a track of 223 and 323,
which are basically what
I mentioned already.
And then 323 is more of
a systems programming
class and computer
organization class aimed
at giving you an idea of how
things work at a fairly low level
and how hardware works and so forth.
We also have a sort of math
theory track on the other side.
And we now have basically
two versions of that.
The standard version of that
is computer science 202,
mathematical tools for computer science
and computer science 365 algorithms.
The purpose of 202 is to take
people who don't necessarily
have much background in
mathematics and give you
what is often called mathematical
maturity, an idea of how proofs work
and how definitions work and
how things in mathematics works,
and kind of cover a little bit
about the various different areas
within mathematics that are
relevant to computer science, mostly
in order to get you up
to speed so that when
you hit 365, the algorithms class--
which is a class about
reasoning, about things
you would be implementing in programs
without actually implementing them--
you will have the mathematical tools
to actually be able to do that.
And having gone through the core
classes, these five classes,
we then ask you to go and do
six electives on top of that
for the bachelor of science degree
plus your senior project, four
electives plus the
senior project if you're
doing the Bachelor of Arts degree.
And these advanced
electives will typically
be 400 level classes
in computer science.
These vary in terms of what
prerequisites they have.
You can actually start taking
electives pretty much once you
get through to 223, and there even
one or two that do not have anything
beyond 201 as a prerequisite.
And of course, as you take more and
more of the core classes, more of those
will open up.
So the typical schedule-- people
will start by going and doing
201, 202, 223, and so forth.
And as the electives
become available, you'll
start filling them until the point
where you get to maybe your senior year,
you will be mostly taking electives
and doing your senior project.
The other track I should
mention for the theory side
is that if you were really
gung ho about mathematics
and the theory end of
computer science, you
have the option of, instead of
taking computer science 202,
you can take the discrete math course
over in mathematics, mathematics 244.
And if you do that, that
opens up the intensive version
of the algorithms class, computer
science 366, which is basically
a more advanced version of
our standard algorithms class,
which some people might like to take.
So any questions about the basic
major or anything like that?
We also offer several joint majors.
There is a joint major with mathematics,
computer science, and mathematics,
a joint major with psychology.
We also have a joint major
with electrical engineering,
electrical engineering
and computer science.
These all have more or
less the same structure.
You have to take essentially
the core classes in both majors.
But then when you get up
to the elective level,
instead of making you take a full
set of electives from both sides,
you generally have an
abbreviated list of electives
that you're expected to
take from either side,
typically working out to
about 14 or 15 credits
total by the time you
complete the major.
And you do a single senior project
that is acceptable to both majors.
Some people will also do double
majors by taking advantage of the fact
that the computer science major,
particularly if you do the BA,
is a fairly thin major.
So we get a lot of
people who will do, say,
a BA in computer science, which
is 10 credits, and then a major
in some other area.
And these can vary for departments
all the way across Yale.
If you can arrange for something that
has overlap with computer science, that
has courses in common
or the courses that
could be counted as
electives to both majors,
this can also be efficient
because you can actually
get down to as little
as eight extra electives
to add on a computer science
major because we allow up
to two courses of overlap.
I personally don't necessarily
recommend doing a double major just
for the sake of doing a double major.
But if you're taking a lot
of these classes anyway,
this might be something
that you can look into.
I think that's basically it.
SPEAKER 1: Thanks so much.
All right, so we are
officially adjourned.
Please join us and the
staff in back for cake.
And we'll see you at
the hackathon and fair.
