Subtitles section Play video
[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.