Week 0


>>[MUSIC PLAYING] >>[MUSIC PLAYING] DAVID MALAN: All right. This is CS50. [MUSIC PLAYING Tritonal, Cash Cash,
“Untouchable”] [MUSIC PLAYING] SPEAKER 1: I’m going to
France, and you’re going, too. [MUSIC PLAYING] DAVID MALAN: This is CS50,
Harvard University’s introduction to the intellectual
enterprises of computer science and the arts of program– and
for the first time in history, Yale University’s as well. Indeed, whether you’re here in Cambridge
or in New Haven or Miami or St. Louis or Amsterdam or anywhere
around the world taking CS50, computer
science E50, CS50X, CS50 AP, we are all one and the same. Welcome to CS50.>>What we have–>>[APPLAUSE]>>[LAUGHS]>>[APPLAUSE] >>So I made a mistake myself some
time ago when I started off college. And I got to college, and I decided to
frankly, stick within my comfort zone. I ended up declaring a concentration,
or a major, of government. Ant that was mostly a function of me
being pretty familiar with government or at least history or I really liked
constitutional law in high school. And so when I got here, I kind
of gravitated toward things with which I was already familiar. Right? God forbid I do poorly in the class. I certainly wanted to stay
within my comfort zone, and it wasn’t until
sophomore year that I finally got up the nerve to step foot
in a classroom called CS50. And at that point, did I finally realize
that, my God, homework could actually be fun.>>Indeed, I was one of those kids
that on Friday evenings when the P-SETS would be released, I
would go back to my room and dive into the night’s P-SETS. And for me, that was a sign
that this was a field for me. But what was more important was the
fact that I did get up this nerve to explore waters unfamiliar to me
and get beyond my own comfort zone and frankly, I only was able to do that
sophomore year by taking this class pass/fail.>>Indeed, it was the very last day that
I finally switched over and finally declared CS as my concentration,
putting gov at that point behind me. And so we’re not setting out in
this course to turn all of you into CS majors or concentrators, but
rather to give you an opportunity to hopefully go beyond the world
with which you’re currently familiar and bring back from this world
skills and knowledge and savvy that you can apply to your
own world, whether that’s in the humanities, social sciences,
natural sciences, or beyond.>>Indeed, if you’re
feeling a little intrepid about being in this room
let alone in this class, realize that if history is
any indication, 72% of you have never taken a CS course before. So it is by all means not the case
that the student sitting to the left or to the right or in front or
behind you knows far more about CS or programming in particular than you. That’s not in fact the case. And indeed, much of
the support structure that we’ve set up in this
course over the past many years has been for exactly that reason– to
provide an on ramp that still exits just as rigorously and
just as high as ever– but the slope of which allow students
less comfortable and more comfortable alike to succeed irrespective
of his or her prior background.>>Indeed, what ultimately
matters in this class is not so much where you end up
relative to your classmates but where you in week 12
end up relative to yourself in week zero, which is
where we are here today.>>Indeed and this may very well
and probably does look like Greek to many of you. But rest assured, that
this and so much more is going to be completely within your
grasp in just a little bit of time.>>But today, we focus on some
of the higher level ideas to give you a taste of
CS50 and computer science in a sense of what
you’re signing up for. And indeed, computer science
might be distilled more simply as computational thinking–
thinking like a computer, if you will. And there’s so many different things
ingredients that go into that, but let’s propose just three for today. If the goal of the class ultimately
is not to teach you programming, is not to teach you C or PHP or
SQL or any number of the words and acronyms in the
course’s description, but rather to teach you to
solve problems more effectively and to think more methodically and
more algorithmically, so to speak. Let’s see what exactly this means.>>So I would propose that thinking
computationally boils down to solving problems. What do you need to solve a problem? You need to input– like
the input to the problem– you need an output, which
is hopefully the solution, and then you need a process by
which to solve that problem, which we’ll call an algorithm– a set of
instructions for solving some problem.>>But first, let’s focus on the first and
the last of these inputs and outputs. Computers after all, apparently
only understands zeros and ones. But how can that possibly be? Even if you’re not familiar at all
with what’s underneath the hood, you probably at least heard that
computers understand binary– just zeros and ones– but how can
you possibly do anything interesting?>>Well, one of the themes
of the class is going to be this layering– where today, we’ll
take a quick glance at the lowest level details, but with each
passing day, where we layer or abstract on top of those details
to actually solve higher level problems of interest to us.>>So here is what we might call binary–
with just an alphabet of 0 and 1. But we humans are mostly
familiar with decimal. Dec meaning 10. Bi meaning two. And so in the decimal
system, we have 10 digits at our disposal– of
course, zero through nine. So if you look at a number
like this, most of you intuitively just grasp that is 123. There’s nothing really hard about that. But why is it 123? Well, if you think back to
grade school– or at least the way I learned this
kind of world– you might recall that we treated these
things in columns, or places.>>So we have the ones place on the right. The tens place in the middle. The hundreds place on the left. And then how do we get
from this pattern symbols– 1 2 3– to this higher level
idea that we know as 123? Well, it’s just some simple arithmetic. Right?>>The one there is essentially means
give us 100 times 1 plus 10 times 2 plus 1 times 3. And of course if we do out the
math there, it’s 100 plus 20 plus 3– otherwise known as 123.>>So if you’re on the
same page as that right now and are comfortable with the
so-called decimal system as a human, it’s actually well within
your scope of comfort to consider now the binary system. Take a wild guess– this represents,
in the world of computers in binary– what number? Zero.>>But why is that? Well, it turns out that the columns or
places here– they’re not powers of 10. 1, 10, 100, 1,000, and so forth. They’re instead, quite
simply, powers of 2. So, 1, 2, 4, 8, 16, 32, and so on. And so now we of course get to 0
here simply because we have 4 times 0 plus 2 times 0 plus 1 times
0, which of course gives us 0.>>But how do I go about
representing the number 1? What’s the pattern of
zeros and ones to represent the number we humans know as 1? 001. And 2? 010.>>And now the pattern starts to repeats. Now it’s 011. And again, 0 fours, one 2, one 1. So 2 plus 1. That’s 3.>>And now to represent 4, we
don’t just change that 0 to a 1. You sort of have to carry,
so to speak, and the numbers start flipping around just
like in the decimal world.>>So this is 4. This is 5. This is 6. This is 7. And so we’ve counted as high as 7.>>Now all we just need is more a
bits– more zero’s and one’s. And indeed “bits”, if you’ve
heard this term– binary digit. Bit is where that comes from. And so if we want to represent
bigger numbers, we need more bits. But let’s move away from slides now
to something a little more real. Suppose that we want to
actually represent this thing.>>Well let’s take a look now
at a little demonstration. So this is a web based application
that one of CS50’s own, Michael G, put together this summer to help
us elucidate exactly this idea. And would someone like
to venture up on stage in front of all his or her classmates? Right there in front. Come on up.>>You have to be comfortable
on camera and the internet. Oh, right here. OK. We’re OK. All right. Come on up. What’s your name? Emily come on up. So this is Emily. What year are you?>>Freshman.>>Emily, nice to meet you. David.>>All right. So up on the screen here,
we have this touch screen which is going to allow us to
actually interact with this program, and it’s just a browser. It’s Chrome full screened
at the moment, but it’s been programmed by Michael to
respond in a way that allows us to play around with binary digits.>>So for instance, here we have not
three but eight bits– zeros and ones. Right now, we’re
looking at the number 0. And indeed, all eight zeros
in decimal means zero. So that’s all that’s
being hinted at here.>>So if you wanted to
represent the number 8, what’s the pattern of zeros
and ones that you want? You can simply tap up or down
or the numbers themselves. All right. So that of course is 8,
as you can see up there. And if we wanted to
do 16, what do we do?>>Yep, just touch it again. 16. All right. So this is all fine and good,
it’s still very low level. We need a way in the
real world for Emily of actually representing these things. And so suppose that we turn these
zeros and ones, which is very conceptual, into actual light bulbs. Right?>>A computer is a physical,
mechanical, electrical device. And its input– at least if
you plug it in or charge it– is to have battery power and
electrons flowing in and out.>>So now, why don’t we stop thinking
about bits as zeros and ones, but something more physical
like light bulbs here. And if Dan Armendariz could join
me for just a moment– come on up– we’re going to queue up an application.>>Come on over, Emily. Sorry this is the most
awkward demo for you ever. Come on over here. We’re going to queue
up with thanks to Dan Armendariz, another member of our staff,
an application known as binary bulb.>>So what we have here
is an iPad application that has the following user
interface on the screen for Emily. It’s just got the same exact UI
essentially that’s over there. And if you now want to
represent the number, say 8, how would you go about doing
this noticing at the right, the light bulbs that we have here? Ah-ha. Magical. So if we want to now turn this into
something a little more challenging, and let’s go ahead and pick a random
number like the number 50 here. Input this. And if you can now be challenged
to come up with the number 50, we’ll have a fabulous prize for you.>>EMILY: OK. Oh my God. DAVID MALAN: Arithmetic
is indeed hard in front of hundreds of your classmates. But 50 has been the answer here.>>[APPLAUSE]>>And so now, this is meant to
be demonstrative for Emily. So, in here, is some light
bulbs quite like these, but it’s actually the
little magnetic strips. And what’s cool about these and
the reason we use them in CS50 is that they support something called
an API– an application programming interface, which is just a fancy way
of saying that what one of our staff did over the summer was create
an iPad application here that talks over the internet
to the light bulbs over here, which are wirelessly
connected to another device. But this is now an option
for final projects. And so Emily, if you would so
like, at the end of the term, you can adorn your dorm room
in the meantime with those. Thank you to Emily as well.>>[APPLAUSE] >>But now, let’s turn
our attention to what that message might have looked like,
and it’s a little something like this. In fact, this is an
example just as a teaser of what’s to come of what’s
called an API request. And so what we have here is simply
exactly the kinds of message that after a few weeks
time in CS50, you’ll be able to send to something fairly
familiar like that to actually turn them on and off. But this is all fine and good. Right? We have the mental model hopefully
for representing numbers with zero’s and one’s. And from zeros and ones, we can
get to higher numbers like 50, as Emily just did, or we
can move up from that. And I claim that we can represent
things like letters as well. Right?>>Computers are far more
interesting than just numbers. And so how do you go
about representing words on the screen or emails
or essays or the like? Well, it turns out that computers simply
abstract on top of these low level details, and humans some time ago, came
up with an arbitrary, but a consistent, mapping of numbers to letters– so
that any time you see a capital letter A on your computer
screen, odds are what’s underneath the hood is a
pattern of zeros and ones that represent the number,
per this chart, 65.>>And more physically
inside of your computer, are millions of things called
transistors– these days– which are just switches if you will, things
that can go on and off and so imagine. Not eight of these large light bulbs
but millions of these tiny little light bulbs, or switches or transistors,
that can turn on and off based on how you program them. And so now we have a way of
representing letters as well.>>In fact, if I were to use this
mapping here and try to actually spell something out, we might look
at this pattern of decimal digits right now. So we’re not going to even
focus on binary anymore. Let’s just consider these as
decimal number 72, 73, 33. But what might this represent? Anyone have a sufficiently
photographic memory to know what’s spelled
on the screen here? Yeah a few. So hi. H-I and then an exclamation point,
which was not actually on the screen. But indeed there’s a mapping
for every letter to every number that you might want to
type on your keyboard.>>But numbers don’t have to
represent just letters. Right? All of us know about images
and photographs and audio files and video files and the like. So clearly we can represent
higher level things still. And so what a computer
does is simply choose to interpret patterns of zero ones
differently based on the context.>>If you double click a
Microsoft Word icon, you see words on the screen
instead of colors and pictures because word knows that this is an
essay that you’ve actually typed. If you instead double click
on a JPEG or a GIF or a PNG, it opens up and is an image because the
.PNG or the .docx or whatever the file extension is and whatever software
you’re using knows to interpret a pattern of zeros and ones differently
based on what its purpose in life is.>>So for instance, this
same sequence of numbers might represent how much red do you
want, how much green do you want, and how much blue do you want. And indeed, if you’ve ever heard
RGB– so just red green blue. And so if I see numbers like, this
give me 72 red, give me 73 green, and 33 blue, this is how a
computer using three bytes– where a byte is eight bits or 24 bits–
would represent a pretty nasty shade of brown or yellow here. And in different contexts, could those
exact same patterns in zeros and ones mean something completely
different as well.>>So we have now a way of representing
information– zeros and ones. On top of that, we get letters. On top of that, we might get colors. And let’s assume for today
that we can get audio and video and things so much more
sophisticated than that.>>But now let’s consider
how we use those inputs and produce those
outputs now that we have a way of representing that information. Well, we need something
called an algorithm. Again, a set of instructions
for solving some problem step by step– and the
more precise, the better.>>And so an example with which humans are
admittedly less familiar these days, but nonetheless is still
with us in software, is the process of looking
up someone in a phone book.>>Now, fewer and fewer folks know each
year what this relic actually is here. But back in my day,
this was a phone book with thousands of pages and numbers
and people’s names from A through Z. And even though we’re kind of cheating
a bit– this is mostly yellow pages. There were also white
pages at the time, which had all of those names and
numbers of actual human beings.>>And if I wanted to look someone up in a
phone book like this today, of course, I just type in the first few
characters of his or her name, and my phone finds that information. But the process by which
your iPhone or Android phone or whatever is actually finding
someone in your contacts list is identical to what we humans
probably have done for some time.>>Now I could take this
problem, if you will, and the inputs here
are not zeros and ones. They’re pages– like,
let’s say 1,000 pages. And if I wanted to look up someone
like Mike Smith in this phone book, I could start at the beginning
and see that I’m in the A section and then turn one page at
a time, looking and looking as I make to the B’s and the C’s and
the D’s and so forth for Mike Smith. Smith starting with an S, I’ll
hopefully eventually find him.>>Is this algorithm–
that process– correct? Yeah. It’s correct. I will find Mike if he’s in here, but
what’s the caveat that you might offer. It’s slow. Right? I know Mike S is sort of toward
the latter half of the phone book. Why the heck am I
starting at the beginning and going page by page by page. So of course, I could flip it
around and start from the back, but that’s going to get
me there at the same rate, if you willl– page
after page after page. And it’s not going to work if I want
to search for someone else whose name comes earlier in the alphabet.>>So what if I do what I
learned in grade school, again, do things not
by ones but by twos. So 2, 4, 6, 8, 10, 12, and so forth. Is that correct? No. It’s kind of correct. But some of you who murmured no,
where is the problem, or the bug, the mistake so to speak. Yeah.>>STUDENT: You might skip
over the right entry.>>DAVID MALAN: Yeah. I might skip over Mike Smith is
because I’ve taken two pages at once and he just happens to be
sandwiched between those two pages. I might realize that
I’m on to the T section not having found Mike Smith yet.>>And so what might the fixed there be? Well, if I do hit the
Ts in the phone book, I might need to double
back one or so page. So it’s fixable, but
it’s not quite as simple as just going by two to
speed up my performance. But what? Come on. What is what most humans are going
to do with this kind of phone book? You’re given the phone book. What do you do?>>What’s that? Go to the middle. So I heard go to the middle, and I
find myself roughly in the M section, so to speak. And now what do I want to do? Good job. What’s your name?>>JAMES: James.>>DAVID MALAN: James, all right. What do I do next? JAMES: You go in the
half that has the S’s. DAVID MALAN: All right. I’m going to go into the half that
has the S’s in it because, again, a stipulation here was
that this thing is sorted. It’s a pretty useless 1,000
pages if Verizon doesn’t actually sort these things for us A through Z. So if I know Mike is probably in
the latter half of the phone book, I can now.>>[LAUGHS] >>Tear the problem in half.>>[APPLAUSE] Thank you. Tear the problem in half. That was actually real– that struggle. So tear the phone book
in half, leaving myself with fundamentally the same problem. But of course, half as large. And if I follow James’s
advice again, and I go here. I say, oh now I’m in the T section.>>And so of course, I
can tear the phone book in half one more time, leaving
me with a problem that’s now a quarter of the size. So I’ve gone from 1,000 to 500
to 250 to 125 and so forth. It feels like I’m
taking bigger bites out of this problem with each
iteration, or each step in it.>>And indeed, the time I’m going to spend
finding Mike Smith in this example is so much less because eventually I’m
going to whittle this pone book down to just one lone page. And if Mike is on that page, I’m
going to go ahead and give him a call having found him.>>But just how much better
is that algorithm– that dare say intuitive
algorithm– than the ones we started with which we’re very linear–
left to right– at a pace of 1 or 2x?>>Well, let’s plot this. We don’t have to worry too much about
math or numbers in this case here. We just look at a plot. So on the x, or horizontal axis,
is the size of the problem– how many pages are there. On the y, or the vertical
axis, is how much time is it going to take me to solve it. And maybe that’s how many
page turns, how many seconds, how many– some unit of measures.>>And I’ve drawn a red straight lines
here because if each additional page of the phone book, I require
to make one additional step. So if Verizon adds one
more page next year, I might have to flip one more page
to find someone like Mike Smith.>>Meanwhile, the second algorithm, which
I went by twos, is the same shape. It’s still very linear, very left to
right, taking equal bytes each time, but the slope is a little lower.>>For instance, if the size of
the problem were roughly here and I used my first algorithm,
I might end up all the way at the top of that red line. But if I instead use
to twosies approach, the yellow line suggests
because it’s lower, that it’s going to take
me less time the solve.>>But what’s the shape of the
third algorithm– again, arguably the most intuitive algorithm? Well, it looks a little
something like this. It’s curved, or logarithmic, in shape. And even though it never
kind of flattens out, it asymptotically inches up and
up and up but terribly slowly versus everything else. And what’s the take away? Well, we call it log n. But what does that actually mean? Well if Verizon doubled the
number of pages in the phone book next year from 1,000 to 2,000. How many more steps is my
first algorithm going to take?>>My first algorithm. Maybe 1,000 more steps. If they doubled the
phone book, I’m going to have to flip through another
1,000 pages to find Mike. Of course, if the second
algorithm, maybe 500 because I’m going twice as fast.>>But if Verizon doubles the number
of pages between this year and next, with my third algorithm– the divide
and conquer that James proposed, going in half and half and
half– how many more steps will it take me next year to have
a phone book of a size 2,000? Just one. Because with one bite, I can take,
out of that problem, half of the pages away. And if you think about this a little
crazily now– if the phone book doesn’t have 1,000 or 2000 page, but
let’s say 4 billion pages– it’s a big phone book– how
many times or how many steps is it going to take me to find
Mike Smith in the phone book with 4 billion pages. You can sort of start to do the math. All right. 4 billion divided by 2. So that’s 2 billion divided by 1. That’s 1 billion. Then half a billion. Then 250– so you can do this again and
again but not that many times before you get to one page.>>And indeed, even if the phone
book is 4 billion pages long or the database you’re searching
is 4 billion records long, it’s going to take you give or take
32 steps only to find Mike Smith. And if you double the phone book next
year from 4 billion to 8 billion, 33 steps instead of just 32.>>And this is testament
to one of the ideas that we might embrace in computer
science more generally, which is this computational thinking
and approaching a problem frankly using tools from
your already familiar tool kit– your real world with
which you’re familiar, but harnessing those ideas
to actually solve problems.>>But we need to formalize our
solutions to these problems. And so let me introduce for a moment
something we might call pseudocode. Much of the semester, we’ll spend using
actual code in languages like C and PHP and JavaScript and SQL and the like.>>But for now, let’s just look
at something fairly intuitive like English. I might distill that
algorithm with which I found Mike into steps like this.>>Pick up the phone book>>Open to middle of phone book Look at the name’s If Mike is among the name’s Call Mike Else if Smith is earlier in the book Open to the middle of
the left half of the book Else go to line 3 Else if Smith is later in the book Open to the middle of the
right half of the book Go to line three Else Give up And there’s a few characteristics now
of this that are worth pointing out. So one, all the lines
I’ve highlighted in yellow we’re going to start calling
statements or functions or procedures. They’re just actions do
this, and there’s not all that much variability to it.>>Next step here though, are these
conditions– if, else, else if, else. And these are called conditions, or
branches, and they’re decision points. And they allow us to do
something conditionally.>>And in fact, let’s take a quick
look at perhaps a familiar face– we’ll call him Bill– and
exactly what these conditions, how these might be used.>>BILL GATES: People make
decisions every day. For example, before you go outside you
kind of have an if statement that says, if it’s raining, then I
need to get my jacket.>>And computers are amazing once you
decide those kinds of statements that they can reliably execute
those things at unbelievable speed. And so a computer program really
is a little bit of math and some if statements where
the decision gets made.>>DAVID MALAN: So now let’s focus
on a few different lines– the ones I’ve highlighted
in yellow here. And it turns out there’s different
ways of expressing this idea. But intuitively what our lines 8 and 11
that I’ve highlighted here telling you to do? Yes, go to line 3, but what
behavior is that really inducing? It’s some kind of loop or cycle,
and you can kind of see it. Right? If on line 8, you go back to line
3, and then you hit line 8 again, you might go back to line 3,
back to line 3, back to line 3. There’s this sort of cycle or loop. And indeed, that’s induced in
line 11 potentially as well. And this is a basic
programming construct as well.>>You might not want to just
do something with a statement or do something conditionally
with a condition or branch. You might want to do something
cyclically with a loop. And we’ll have someone else with whom
you might be familiar– we’ll call him Mark– explain this concept here. MARK ZUCKERBERG: One
thing that computers are really good at is repeating commands. As a person, you’d get
really bored if you had to do the same thing
lots of times in a row, but a computer can do the same thing
millions or even billions of times and not get bored and be able
to carry that out really well.>>So for example, if I
want to wish everyone on Facebook a happy birthday
by sending them an email, it might take me more than a
century to actually write out all of those emails to everyone. But with just a few lines of code, I can
have a system send an email to everyone on Facebook wishing
them a happy birthday.>>So that’s what loops are and why
they’re valuable and something that computers can do very well.>>DAVID MALAN: Many thanks to our friends
at code.org for those two films. And just last week, you might have
seen that Mark Zuckerberg and Facebook posted this announcement,
which is that they just have passed an important
milestone for the first time ever. 1 billion people used Facebook in a
single day, specifically last Monday. One in seven humans on Earth
apparently logged into Facebook.>>Well, this seems a good opportunity
to look back on where Facebook began, and we went through CS50’s own
archives because it turns out in 2005, Mark gave a guest lecture in CS50. You’ll see that production values
weren’t quite the same back then in terms of the technology
available, and you’ll also see that the presence
of this guest lecture didn’t necessarily pique the interest
of the student body, your predecessors, as much as it might have
just a few years later.>>So let’s take a look
at Science Center C. SPEAKER 2: Please join me, and welcome. [APPLAUSE] MARK ZUCKERBERG: Yo. All right. Cool this is the first time I’ve ever
have had to hold one of these things. So I’m just going to
attach it really quickly. All right. Can you hear it? Is this good? Is this amplified at all? All right. Sweet. So, this is like one of the first times
I’ve been to a lecture at Harvard, but–>>DAVID MALAN: So eventually the Science
Center did zoom in on the video, but not before capturing this
excerpt where Mark’s talking, which he discussed his
roommate, Dustin, who wanted to lend a hand with this
site called the Facebook.com and realized that Mark is about to
mention to programming languages– one called Perl, one
called PHP– as he discusses the origins of Dustin’s contribution. MARK ZUCKERBERG: I
started running the site and launched it at
Harvard in February, 2004. So I guess almost two years ago now. And within a couple of weeks, a
few thousand people had signed up, and we started getting some emails
from people at other colleges asking for us to launch it at their schools.>>And I was taking 161 at the time. So I don’t know if you guys know
the reputation of that course, but it was kind of heavy. It was a really fun course, but
it didn’t leave me with much time to do anything else with Facebook. So my roommate Dustin, who I guess
had just finished CS50, was like, hey. I want to help out. I want to do the expansion and help
you figure out how to do the stuff.>>So I was like, that’s pretty cool, dude. But you don’t really know any
PHP or anything like that. So that weekend he went home,
bought the book Perl for Dummies, came back and was like, all right. I’m ready to go.>>I was like, dude, the site’s written
in PHP not Perl, but that’s cool.>>So he picked up PHP over
like a few days because I promise that if you have
a good background in C, PHP is a very simple thing to pick up. And he just kind of went to work.>>Before we take a look now at
where the course is going, allow me to invite just some
of SC50’s staff up on to stage. Some of them are shopping
their own courses. But if those TFs and CAs and course
heads who are here could come on up and join me for a quick hello.>>Allow me to introduce in particular,
Hanna, Maria, Daven, and Rob, CS50’s course heads here in Cambridge.>>[APPLAUSE] >>DAVID MALAN: Indeed, testament to the
support structure that the course has built out over the past many years,
CS50 staff this year numbers nearly 100, and that’s here in Cambridge alone. Meanwhile, in New Haven, are there some
40 TFs and CAs and staff members there to run the course as well.>>Allow us to introduce first, Rob Bowden. ROB BOWDEN: Hi. I’m Rob. This is my sixth year
TFing in the course. So, all the way back in my
freshman year, I did not take CS50. Your freshman fall–
you might be familiar that you can only take four courses
and there are so many courses today. So I’m like, eh. I took AP CS my senior year of
high school it was horrible. So, I’m like, eh. Computer science is not for me.>>So then it was over the
course of my freshman fall, that I had a friend in CS50, and
I think I attended one lecture with her. It’s like, oh, this is kind of better
than what I had in high school.>>And over the course of the
year, I had my own problem sets in the courses I was actually taking. But I found that whenever I
wanted to procrastinate on those, I would go back to CS50 and
look at some of that stuff. So, yeah. I’m cool. I procrastination with coding. So then it’s at the end of
the fall that I realize, hey, computer science is pretty cool. I end up taking CS51. In the next semester,
I end up taking CS61. And it all from there,
then I end up declaring computer science, which I had
absolutely no intention of doing when I came into college. And now I’m here. So the course is what you make of it. I hope you enjoy it.>>[APPLAUSE] DAVID MALAN: Thank you to Rob. >>And now Maria, our
head course assistant.>>MARIA: Hey guys. My name is Maria. I’m a sophomore in Cabot
House, coming from Bulgaria, and I’m super excited to be
part of the staff this year. I took CS50 as a freshman
last year, and I never even thought about CS beforehand. So I absolutely love the course, and I
hope you all love it as much as I did. And, yeah. Welcome to CS50. DAVID MALAN: Thank you to Maria. [APPLAUSE] Now Hanna, our head teaching fellow. HANNA: Hi, I’m Hanna. I’m a senior in Cabot
studying computer science. I took CS50 as a freshman and had
been TFing– this’ll be my third year. So I will be happily involved
in CS50 for all four years, and I’m looking forward
to working with you all. DAVID MALAN: Thank you to Hanna. [APPLAUSE] And lastly, Daven, our precepter. DAVEN: Hey guys. I’m a precept over in
computer science here. This’ll be my fourth year teaching. I also help manage the course. So I’m sure you’ll see me around,
especially at office hours. I’m always at office hours. So if you see me walking
around, definitely come say hi. I love to meet everybody. Otherwise, have fun,
and I’ll see you around.>>DAVID MALAN: Thank you to Daven as well. So you’ll meet all of
these folks before long. But without further
ado, if you guys would like to resume your seats from earlier. Allow me to introduce from afar now
some of our friends from New Haven, in particular the course’s heads who’ll
be overseeing CS50 there– Professor Brian Scassellati, Jason, and Andi,
who just– so that we didn’t tempt fate with any FaceTime or the like–
have just sent us minutes ago the following video in which
they say hello from lecture hall at Yale, in which lecture
is being streamed right now.>>So our friends from Yale. BRIAN SCASSELLATI: Hi, David. Hi, everyone at Harvard. We are so excited to be bringing
CS50 to Yale this semester. My name is Brian Scassellati,
but everyone just calls me Scas. And I’m here today to introduce
to you the CS50 staff.>>[CHEERING] >>And more importantly, I’m
here to introduce as well all of the students at
Yale who as of this morning have made this the most popular
course at Yale the CS50 students.>>[CHEERING] >>So we’re very excited
to be seeing you here on Friday and on Saturday for
Puzzle Day and have a great lecture. Bye.>>[APPLAUSE] >>DAVID MALAN: On the screen here is
the names of the some of 140 staff members who await you over the
course of the semester– some of them here in Cambridge, some
of them here in New Haven. And indeed you’ll have an
opportunity this Saturday, as Scas notes, to
attend CS50 Puzzle Day. You might have seen little puzzle pieces
slipped under your doorways recently. We have a few extras here
later on when you exist. If you assemble all four puzzle
pieces and merge forces with rooms nearby yours in your
house or dorm, they’ll assemble into a QR code– or a
two dimensional bar code, that once assembled and scanned
with your phone will lead you to some fabulous prize or– I suppose
you could just photograph this now as well.>>But find those puzzle pieces nonetheless
in order to win that fabulous prize. And indeed one of the traditions
in SC50– ah, too slow. One of the traditions in CS50 is to
serve cake after the first lecture.>>And so indeed, in a
few minutes from now, there will be cake served outside
both here and New Haven as well.>>But first– we decorated them ourselves. But first– and hopefully
there’ll be enough.>>But first, a quick look. So lectures is indeed will be
produced mostly here in Cambridge. But each month, we’ll hop down to Yale
with CS50’s production team and stream the course in the reverse
direction as well so as to bring these two campuses
truly for the first time in history as close together as possible
as one in the same course.>>In terms of the support structure that’s
been stood up here in Cambridge as well as in New Haven, are sections. Indeed, as some of you may
know, we have different tracks within the course for those less
comfortable, more comfortable, and somewhere in between so that
irrespective of your prior background, can you ultimately succeed in the class.>>Office hours meanwhile, are an
opportunity on Mondays and Tuesdays and Thursday evenings to work both
here and in New Haven on our course’s problem sets with dozens of
the course’s staff near you.>>Problem sets meanwhile, are
supported by things we call walkthroughs, which are video based
tutorials that truly answering FAQ of where to begin a week’s challenge. And postmortems walk you
through possible solutions so that the end of the
problem set too, you know exactly what you could have done
differently or altogether otherwise.>>The problem sets themselves come
in two editions, a standard edition that we expect and invite most of
the class– some 90% plus to do– and a so-called hacker edition
on which every page is emblazoned hacker edition, hacker
edition, hacker edition, so that you have that karma
if you will, for diving into more advanced versions
of the course’s problem sets that cover ostensibly the same material
but with a more sophisticated approach and with additional background
sometimes introduced.>>Meanwhile, are there nine late days that
you can apply to the course’s problem sets as well as the lowest score,
which we drop at the terms end.>>But what awaits? Well, a taste of the problem
sets at hand on Friday and next week where we dabble
for just a few days in something called Scratch, a graphical programming
language developed by our friends at MIT’s Media Lab that allows you
to program either for the first time or in a new environment altogether
using a drag and drop type environment. Whereby puzzle pieces
only interlock together if it makes logical sense to do so.>>Meanwhile in problem set
two last year for instance, did we introduce the class
to the world of cryptography, the art of encrypting or
scrambling information. Indeed, this text here if
decrypted, will actually lead you to some fun destination. And in the problem set,
what we had students do is implement exactly those
kinds of things– an algorithm, or set of instructions for scrambling
and scrambling information.>>And in the hacker edition
of that same problem set, did we challenge students to take a
encrypted file from a typical computer system with lots of usernames
and encrypted passwords and to crack those passwords–
actually figure out what they were without knowing anything
a priori about those actual passwords. Meanwhile, do we
transition in the problem sets to then looking at
the world of graphics. And in fact, you might imagine
now that this could perhaps be the simplest way to represent
a black and white image.>>A white pixel, or square,
as at top right there, might be represented with
a 1 and a black square might be represented with a 0. And just by using more bits like we
proposed earlier with 72 and 73 and 33, could we represent color pixels as well. And what we do during
this problem set is generally take a stroll around
campus with a digital camera, take photographs of
people, places, and things. Then somehow every semester,
we seem to accidentally deleted or corrupt the memory card
on which all of those photos are, and so you are challenged
to then write software with which to recover those JPEGs
from a copy of our camera’s card.>>Meanwhile, do we hand you later in
the term a dictionary of English words that have 143,000 words,
and you need to come up with a smart way of
loading them into memory, or RAM so to speak, to answer
queries of the form: is this a word, is this a word, implementing the
fastest spell checker that you can, even pinning yourself
potentially against classmates to see which of you uses
the least amount of time when running your code and even
the least amount of memory.>>Later in term do you actually
implement your own web server. So not just a website in a
language called HTML and more, but a web server that actually
listens to requests on the internet and responds to them. And indeed, this is how we bridge
our world of C with which you’ll become familiar next week and
PHP and HTML and JavaScript and CSS and the like.>>Because one of the first web based
project we do later in the term is historically CS50 Finance. Etrade.com style a website that allows
you to buy and sell stocks virtually while also writing code to talk to Yahoo
Finance getting semi real time stock quotes in order to update
your own portfolio.>>But lastly of course,
is the final project– an opportunity to do most anything of
interest to you to solve a problem here or beyond of interest to
you that’s somehow inspired by the lessons learned in the class.>>And the class, as you may know,
culminates in so-called CS50 Hackathon and CS50 Fair and any number
of other cultural events throughout the semester
that allow you to engage with each other and the course’s staff.>>For instance, at Fire and Ice in Sitar
this year, well, on Friday afternoons, we invite some 50
students to lunch, whoever would like to join us,
myself, and the staff, and our friends from industry and alums
to chat about life in the real world and beyond while enjoying a good lunch. At the Hackathon will
you see such images as these, including plenty of candy–
and as of 2014 for the first time– vegetables.>>[APPLAUSE] >>But by 5:00 AM, does the scene usually
look a little something like this. And then just a week or
so later, is the CS50 Fair to which some 2000 plus
students and staff and faculty members from across campus
and across campuses this year come to see and delight in the
accomplishments of CS50 students, which is now you.>>And indeed, while this year we’ll
be inviting and busing anyone at at Yale who would like to come up to
Cambridge this Saturday for CS50 Puzzle Day, and we’ll do the exact same thing
in December for the CS50 Hackathon so that Harvard and Yale students
alike partake in both of these events.>>We will also hold CS50 fairs in
Cambridge and in New Haven this year so that students on both
campuses and staff and faculty can see each respective
campus’s accomplishment. And those accomplishments
will induce such memory as this and this and ultimately
this, in which all of you exit the class wearing a little
something in which you were hopefully happy or proud to say that I took CS50.>>But before that and
before we serve cake, we’ve put together– thanks to CS50’s
production team and a certain self stick, the one occasion that we use
such things for– when we sent it not only here to Cambridge
but also to New Haven to gather a few hellos from the
course’s staff and all of the folks you will meet both here and in New
Haven over the following months.>>Allow me to introduce a
few more of CS50’s staff. MARK ZUCKERBERG: Did that make it go? Oh, it’s going. It’s going. Ooh. Yarr!>>[MUSIC PLAYING ANDY GRAMMER, “HONEY, I’M
GOOD”] >>MARY: This is Caitlin. That’s Jay, and I’m Mary. SATO: Hi, guys. I’m Sato. MICHAEL G.: Hi. My name is Michael, G. DOUG LLOYD: I’m not. No. I’m Doug Lloyd. I can’t believe that I’m holding
a selfie stick right now. SPEAKER 4: Hi. SPEAKER 5: Hi. SPEAKER 6: Hello. SPEAKER 7: Hi. SPEAKER 8: Hey. We’re hanging out at Yale. We’re really excited for
this semester because it’s the first time it’s coming to Yale. It’s going to be awesome!>>[MUSIC PLAYING] >>JACOB SCHERBA: My name is Jacob Scherba. I’m excited to teach
CS50 because I think it bring computer science to
people in and approachable way. SPEAKER 9: I’m really
excited to teach CS50 because I took the class last year,
and it’s one of the best classes. SPEAKER 10: Yeah. My advice is you should take CS50. JACOB SCHERBA: I chose CS because
I think it’s a fun and creative way to solve problems in an analytical way. SPEAKER 11: Back when I was a little
freshman and afraid of computer science and afraid of doing
engineering and stuff, it was the first hard class I took,
and it was also my favorite class ever. DOUG LLOYD: This is my
ninth year teaching CS50. That makes me sound so old! There’s always something new. There’s always something exciting. There’s always new challenges faced by
new students, and it’s fun to help them and to experience those
challenges with them and help them solve their problems.>>SPEAKER 12: When I first
learned how to do CS, it was like learning a super power. And to see that in other students
and to help them through that process is one of the most
rewarding things I’ve ever.>>SPEAKER 7: I chose CS because in the
beginning, I was a math concentrator and I took CS50 and
fell in love with it. I also felt that with
CS, I could build things. And that, I thought, was
a really cool aspect.>>SPEAKER 13: Some advice for new
students is go to office hours and hang out with the awesome TFs. SPEAKER 14: Start your P-SETs
early, go to office hours, become frends with your TF. SPEAKER 15: Yeah. Everything she said. SPEAKER 16: Don’t be
afraid to ask for help. SPEAKER 17: Yeah. SPEAKER 18: Start your P-SETs early. SPEAKER 19: It’s a
big social experience. Make a lot of friends this way. SPEAKER 14: Go to section It’s fun. SPEAKER 11: I mean, go for it. It’s really hard. You’ll get out of it
what you put into it, but it’s a really fun
class especially if you’re willing to put the time into it, but
it helps if you put time into it. You’ll get a lot more
out of it later on. MIKE: I’m Mike. CAMILLE: I’m Camille. HANYA: I’m Hanya. MATT: I’m Matt. PETER: I am Peter. PHILLIP: I’m Phillip. PATRICK: I’m Patrick. ROB BOWDEN: I’m Rob Bowden. BRIAN SCASSELLATI: My
name is Scas, and this– ALL: –is CS50. SPEAKER 20: At Yale. SPEAKER 21: At Yale. [LAUGHING] DAVID MALAN: That’s it for CS50. We will see you from Yale on
Friday, Puzzle Day on Saturday. Cake is now served. This is CS50. >>[MUSIC PLAYING]

Leave a Reply

Your email address will not be published. Required fields are marked *