字幕表 動画を再生する
So it is my greatest pleasure to welcome you all here today
for the first lecture of, well, Introduction
to Computing and Programming.
Also known as CS50 or well, CPSC 100, officially here at Yale.
>> So we couldn't be more excited to welcome you all here.
My name is Patrick Rebeschini.
I'm the head instructor for the class.
I am here representing a group of about 60 staff members
that will work with you throughout the semester.
This number is almost 60 of us.
Yet along the extraordinary level of commitments
that we put into this class, makes CS50 the class
at Yale University that offers the greatest level of support
to all of you.
And we couldn't be more proud of offering this class here again.
>> In fact, as you will soon experience, CS50 is much more than a class.
It's a community.
And you will be part soon of this community.
This is the second year that Yale is offering this class.
We are building on the extreme success of last year, where
for the first time, here at this university,
undergraduate learning assistant were adopted in classrooms.
It all started with this class last year.
>> So as you know, the class is taught jointly with Harvard University.
To teach this course we are relying-- we can
count on the great expertise of David Malan and the Harvard team.
So David has been teaching CS50 for well, 10 years now.
And every year he has been pushing the boundaries
and improving the classroom experience.
Again, we couldn't be more happy to continue this collaboration with them.
>> In fact, one of the most interesting parts,
I will say of running this class now, both at Harvard and here at Yale,
is the really incredible cross-fertilization
of ideas, aimed at improving the learning experience to you all.
So as a result of this extensive collaboration between the two
university, CS50 is proud to announce the new version this year
with noticeable changes.
David will all tell us about them now.
So please-- this being said, please join me
and welcome to give a big round of applause
to welcome David and Harvard team here at Yale.
>> [APPLAUSE]
>> DAVID MALAN: Thank you.
Thanks.
This is CS50, Harvard University's and Yale University's introduction
to the intellectual enterprises of computer science
and the art of programming.
And what that means is that this course ultimately, is about problem solving.
Indeed many of you might have come out of high school
or have spent the past couple of years wondering what some of your friends
did last year or in other classes.
And yet, the reality is, no matter what we
do at the end of the day in this class, it's going to be about problem solving.
>> And as such, perhaps take some reassurance in the fact
that 73% of the students that take this class, both here
at Yale as well as at Harvard, have never taken a CS class before.
So if you're sitting here in the audience today wondering
why you are sitting here in the audience today,
or maybe you just followed along with some friends,
or maybe you've been a little curious as to what
computer science and programming is, realize
that most of your classmates to the left and to the right of you
are very much in that same demographic.
>> And indeed, if we look at last year statistics
within the student body of CS50, both here and at Harvard, 58% of students
describe themselves as less comfortable.
9% is more comfortable.
And then 33% is somewhere in between.
And there's no formal definition of what these buckets means.
You sort of know you're less comfortable if you are.
You're feeling a little uneasy with maybe being in the class.
You're not quite sure if a computer science class is ultimately for you,
and realize that you are in very good company.
And indeed the grading, and the assessment,
and the feedback, and all of that support structure in the class
is ultimately very much individualized.
More so than most any other class by design.
And indeed, what ultimately matters in this class is not
so much where you end up relative to others,
but where you, in week 11 or last, and relative to yourself in week
0 here our first.
So what does that mean?
Well, this means of those 73% of students last year that had never taken
a CS class before, by the start of the semester they
were dabbling in a language called Scratch, which we ourselves
will see here today.
And by the end of the semester had they gone
through this entire list of challenges.
Starting with a language called c.
Implementing, what's at first glance, going
to be a bit of a challenge for some, but fairly gratifying once you
get Super Mario bouncing up and down a pyramid
implemented, albeit, with just something called ASCII art.
Implementing last year-- what the students last year then
did after that was implement their own Caesar cipher and vigenere cipher.
So encryption algorithms with which you could
scramble information and then unscramble information to send secret messages.
The game of 15.
If you remember from childhood or some party favor,
that little plastic game where you move the numbers up, down, left and right
to try to get them in order, actually implementing that game
and solving the logic required there.
And then we dabbled in forensics last year.
>> So by mid-semester, students who had never
used their keyboards for this purpose before,
were writing software to recover, so to speak,
JPEGs or photographs that we had accidentally
deleted from a digital memory card from a camera.
Recovering secret messages from inside of a bitmap image,
and other such types of graphics as well.
>> We then transitioned to giving the whole class a dictionary.
Just a really big text file with 150,000 English words.
And everyone was challenged to somehow read, so to speak,
those words into memory.
Into the computer's memory.
And then answer questions of the form, is this a word?
Is this a word?
Is this a word?
Really just implementing a spell checker.
And then challenging each other with a big board--
a leader board to see who could use the least amount of memory,
in the least amount of time to actually spell check large documents.
>> We transitioned from then to implementing ones own web server.
So not making web pages in languages like HTML and CSS, if you're familiar.
But actually implementing the server that
listens on the internet for requests from browsers
and then responding to those requests.
Then implementing our own e-trade like website, where
students could buy and sell stocks.
Drawing in nearly real time stock quotes from Yahoo Finance.
And allowing students to see how their portfolio develops.
And then finally a mash up of Google News and Google
Maps whereby students by term by terms end
had the ability to click, and round, and search on a Google map.
And then see all of the news articles that
are proximal to those particular areas.
So truly going from zero to 60.
>> And along the way having what we had last year called, hacker additions.
That raise the bar further for those of you
who might very well have a good amount of experience being in that 9%
of more comfortable.
So realize that there's a very high ceiling
even within those challenges for students
coming from a different background.
Because at the end of the day, we're ultimately
focused quite simply on this.
>> But what does this mean, problem solving?
So let's propose that we distill it like this.
So problem solving is really just this kind of picture.
So you've got inputs to some problem, something you actually want to solve.
The goal is to get outputs, a solution to that problem.
And then in the middle is what we'll call a black box.
You don't necessarily know or even care what's inside that black box.
All you know is that when you feed input into it,
you hopefully get output or a solution from it.
And while today we'll look both at inputs and outputs,
we'll long term, and over the course of the whole semester,
focus on what's inside that box.
>> And therein will lie something called algorithms.
Step by step instructions for actually solving some problems.
But what's an example of some inputs?
So maybe a simple thing at the start of every school year, someone
might want to take attendance.
So we might do one, two, three, four, five, six,
and how would I keep track of that information.
I might just go one, two, three, four, five, six.
And just use sort of single digits.
>> Or I could actually record this a little longer term.
And how do I represent all the humans in this room?
Well, I might do something like, OK.
I see one person.