Placeholder Image

Subtitles section Play video

  • [MUSIC PLAYING]

  • DAVID MALAN: All right.

  • This is CS50.

  • And just eight weeks ago, 2/3 of you had never

  • studied any computer science before.

  • And what we thought we'd begin with today is really a look back of truly

  • how far you've come over just those several weeks.

  • In fact, it was just eight weeks ago when you first

  • started tinkering with Scratch, this graphical programming language

  • by which you could drag and drop puzzle pieces and make the computer

  • do what you want.

  • And then a week later, you might have struggled

  • with just getting Mario to ascend a pyramid by way of hashes

  • that you were printing.

  • Which at the time was perhaps quite non obvious,

  • but it's ever since has just been what?

  • A pair of nested four loops.

  • And then the week after that, you explored cryptography

  • among other fields.

  • And you learned how to encrypt and you decrypted information,

  • like this snippet here.

  • After that, you explored some electoral processes and the implementation

  • of algorithms that you might be familiar with from the real world, but perhaps

  • didn't think about the trade offs in choosing one algorithm or another.

  • And then ultimately, implementing it in code.

  • Just a week later did we transition to filters on Instagram,

  • implementing things like your own sepia filters.

  • So that moving forward, hopefully, you won't

  • take for granted when you click that button on the screen on your phone,

  • you actually know or can presume, or infer,

  • what's going on underneath the hood as it changes from one setting to another.

  • And then, of course, Big Board, where we handed you some 140,000 English words

  • and a really large file.

  • And you had to implement your own spell check,

  • or a dictionary so to speak, with using as little amount of time

  • and as little space as you could, implementing ultimately your own hash

  • table.

  • Thankfully since then, we can now take for granted that those things exist.

  • But you, indeed, built that from scratch.

  • Just a week later, we started handing you large files like this.

  • And of all things, you were able to deduce by writing some Python code

  • that this is lavender's DNA, among others

  • in the class whose files we handed you.

  • And then most recently, or perhaps quite soon,

  • when you learn to apply another language.

  • In this case, SQL.

  • To questions like who has starred in films with Kevin Bacon.

  • And so, a number of tools are now in your toolkit.

  • And again, I would just emphasize that eight weeks ago, 2/3 of you

  • had never done any of that before.

  • So even if it's felt like it has never let up

  • and each week feels all the more challenging than the last,

  • consider the delta.

  • Consider what we promised in the first week of the class.

  • That what ultimately matters in this course

  • is not so much where you end up relative to your classmates,

  • but where you end up relative to yourself when you began.

  • And it is, indeed, those eight weeks ago that you began.

  • And it's today and in the courses final weeks that you will ultimately

  • be able to compare yourself.

  • So in trying to think today about what we hope your own takeaways are from,

  • not only the course, but computer science more generally,

  • I actually pulled up some of my own notes.

  • You might recall from week zero that I mentioned I took this course myself

  • back in 1996 and it happened to be the one that turned me from a government

  • major to a computer science major.

  • And I didn't take many notes at first, it seems in that first class.

  • Now, there were a couple of other pages.

  • And so, I started flipping through these and in fact,

  • this was my second page of notes.

  • And if you focus on what's up here at the top, apparently, one of my first

  • notes to myself that a function, for those unfamiliar today,

  • are instructions that do the work.

  • And indeed, if I looked down further on my notes, arguments

  • we introduced that same first day.

  • It's info that's passed from one function to another

  • to have something done by or performed on it.

  • All right.

  • So that actually maps wonderfully cleanly to what

  • it is we indeed started ourselves doing those eight weeks ago.

  • Just talking about what CS is, problem solving.

  • And a problem is just something that's got input.

  • And the goal, of course, is to produce something with output.

  • And we had to agree from that very first week

  • how we're going to represent these inputs and outputs.

  • And so, we might do it symbolically with letters of the alphabet.

  • We know since then with that we might do it numerically as with decimal digits

  • or below that, we might just use binary, a different base

  • system using only zeros and ones.

  • Or we could even represent that same capital A just using

  • some pattern of light bulbs or switches that you turn on in some order.

  • In fact, if you think back then to these first principles

  • that we introduced those weeks ago, to any of the students

  • now in the audience, what does this say?

  • AUDIENCE: Hi.

  • DAVID MALAN: Hi.

  • So it indeed says hi.

  • Why is that?

  • Well, we just agreed weeks ago on what numbers map to what letters.

  • And so as long as all of the humans in the world

  • agree on that when they're sending emails, or text messages, or the like,

  • our computer systems can all present information

  • that we ultimately understand.

  • Another review question from week zero.

  • What did this say way back when?

  • If you need a hint, it was it was in decimal 128,514.

  • A little louder.

  • AUDIENCE: Emoji.

  • DAVID MALAN: Emoji.

  • This was the face with tears of joy, right?

  • Taking all of the fun out of sending emojis.

  • Anytime you receive or send an emoji, really all you're sending

  • is a pattern of zeros and ones, or worse the number 128,514.

  • But your computer or phone are presenting it to you

  • in a certain way based on that context.

  • All based on just how we humans or those before us decided

  • how to represent this information.

  • But of course, we don't have just those inputs and outputs.

  • There is another piece to the puzzle.

  • And so, I actually looked back at my own third page of notes

  • here and focused on my first line here back in 1996.

  • An algorithm is apparently a precise sequence

  • of steps for getting something done and programming more generally

  • is a process of taking an algorithm and putting it

  • into a language a computer can process.

  • And indeed, that really was the additional puzzle piece

  • we first focused on in week zero.

  • It was what was inside the proverbial black box?

  • The sort of secret sauce that you provide your input to,

  • you get your output from.

  • Those are the algorithms that we've been talking about ever since now, not

  • just in pseudocode or in English.

  • But in C, and in Python, and now SQL.

  • And then in the coming weeks, a few other languages as well.

  • But of course, we used algorithms to solve problems

  • and one problem is and was rather old school.

  • And we thought we'd reflect just a bit and perhaps

  • reinforce that same week zero if by taking a couple of volunteers.

  • Perhaps a student and one of their family members

  • voluntarily or forcibly with them.

  • You have to be comfortable, though, appearing on stage

  • and in turn, the internet in perpetuity is the catch.

  • I see-- OK.

  • I see one volunteer and either mom or dad

  • finding out who is not going to go up.

  • OK

  • [LAUGHTER]

  • Come on up.

  • A round of applause if we could for our volunteers.

  • [APPLAUSE]

  • DAVID MALAN: Come on over this way.

  • And what is your name?

  • DANIELLA: Daniella.

  • DAVID MALAN: Daniella.

  • Nice to meet you.

  • Come on over here.

  • And what is your name?

  • MARIANO: Mariano.

  • DAVID MALAN: Mariano.

  • And your dad, I presume.

  • MARIANO: Yes.

  • DAVID MALAN: All right.

  • Well, so nice to see you both.

  • You'll recall from week zero that one of the first problems we solved

  • was looking up someone in a phone book.

  • Well, here I have a pretty thick yellow pages wherein

  • there's a whole bunch of products and services alphabetized from A to Z.

  • And we can, of course, look up the number for someone in this book.

  • For instance, suppose today we need a plumber.

  • Could we ask Mariano to find us a plumber in this phone book?

  • Flipping through a few pages.

  • A lot of pages.

  • Yeah.

  • OK.

  • All right.

  • And we have a page full of plumbers.

  • And now, could your dad have done better do you think?

  • DANIELLA: Yes.

  • DAVID MALAN: I think so.

  • So would you like to show dad and other parents here

  • what you might have done instead?

  • Oh my goodness.

  • [LAUGHTER]

  • OK.

  • Thank you.

  • [APPLAUSE]

  • [LAUGHTER]

  • DAVID MALAN: And for those wondering, let's continue the algorithm,

  • if you will.

  • What's your next step?

  • [LAUGHTER]

  • Nice.

  • And why are you doing this, though?

  • DANIELLA: So I open halfway and then if it's not on the page

  • and it looks like, for example, if it's n, I know p is afterwards.

  • So I need to get rid of the first half and just look at the second half.

  • DAVID MALAN: Well, need to is a little strong.

  • [LAUGHTER]

  • But you can get rid of--

  • yes, indeed.

  • So if you keep this process going, halving, and halving, and halving,

  • what should you be left with ultimately?

  • DANIELLA: Just the letter p.

  • DAVID MALAN: Just the letter p.

  • Round of applause would be good for both of our volunteers here.

  • [APPLAUSE]

  • DAVID MALAN: Thank you.

  • A CS50 stress ball for you both.

  • Thank you so much.

  • Oh, thank you.

  • Thanks.

  • So that was one of the first lessons with which we

  • began focusing on algorithms.

  • And the point back then, recall, was to really emphasize the familiar, right?

  • We might not use that particular technology all that much anymore.

  • But it really is fundamentally the same thing that's now in our iPhones

  • and Android devices and the like.

  • It just so happens that we search for things by scrolling with our finger

  • up and down.

  • But consider too, even these days in 2019

  • when you type into the auto-complete to search

  • for someone by first name or last name, how

  • is your phone finding that information?

  • It's exactly like that.

  • Not quite as physically as that.

  • But most likely for efficiency, your phone

  • is looking roughly in the middle of all of those names then jumping

  • up or down in the blink of an eye in order to find that person for you

  • ever so quickly.

  • And so, all of us might have an intuitive understanding,

  • just like Mariano did, for finding plumbers by jumping to the p section.

  • But then, he came close to the p section, but then started flipping.

  • And I dare say you flipped through far more pages

  • than you ultimately needed to using our more efficient divide

  • and conquer if one time only algorithm instead.

  • So beyond algorithms, I recall that I had just a few other notes.

  • On my last page of notes, I also had this here.

  • That what was apparently important then and no less so

  • now is that in computer science and in turn programming,

  • precision is important and correctness is important.

  • And indeed, one of the things you perhaps

  • gleaned in programming, whether in Scratch or C or Python

  • or SQL over the past few weeks, is that the computers are really unforgiving.

  • They can't just infer like we humans do.

  • And frankly, I'm not sure we would want our computers to just infer sometimes

  • what we mean if the goal is precision and correctness.

  • You need to be ever so precise.

  • So let's see, perhaps, with one more demonstration just how

  • much this one has perhaps sunk in.

  • If we can get perhaps two more volunteers, a student and family member

  • as well.

  • Student and family member.

  • Here and I don't see a family member's hand up.

  • Can you convince one?

  • OK.

  • Come on up.

  • Wonderful.

  • A round of applause for our other pair of volunteers here.

  • [APPLAUSE]

  • So now for this one, not everyone's off the hook.

  • If all the students in the room, if they have a piece of paper

  • and/or a pen or pencil could take that out and share with anyone next you

  • if you don't have.

  • Emma and Brian are also going to pass out some paper and pens

  • if you don't have a writing apparatus.

  • The goal at hand is actually for all of us

  • to participate, thanks to our two volunteers.

  • And what's your name?

  • DAVID: David.

  • DAVID MALAN: David.

  • Nice to see you.

  • SPEAKER: [INAUDIBLE]

  • DAVID MALAN: [INAUDIBLE] Nice to see you, as well.

  • Come on over in here.

  • And this will be a two part exercise as well.

  • And the first goal at hand is for you to choose.

  • Do you want to go first or dad, is it?

  • Would you like your dad to go first?

  • DAVID: OK.

  • I'll go first.

  • DAVID MALAN: You're going to go first.

  • All right.

  • So come on over here.

  • And what I'm going to show David in just a moment is an image on the screen

  • that I'm going to ask that he program you, the audience,

  • to draw giving verbal instructions only.

  • The goal of which is for him to be as precise as possible

  • and as correct as possible to compel the audience, much like a computer,

  • to follow his instructions.

  • And in turn, implement your algorithm.

  • So in just a moment, David is going to rattle off step

  • by step instructions for having everyone in the audience draw this.

  • You are the only one that can see what's on the screen.

  • Everyone in the audience just about has a piece of paper and a pen or pencil.

  • And I just need you very confidently, clearly,

  • to recite step by step instructions by which everyone with their pen or pencil

  • can draw what you see on the screen here.

  • Makes sense?

  • DAVID: Yes.

  • DAVID MALAN: You may use any verbal instructions you like.

  • DAVID: OK.

  • DAVID MALAN: All right.

  • Just about ready to begin?

  • The goal, precision correctness.

  • Begin.

  • DAVID: OK.

  • Step 1.

  • Draw a sideways square.

  • [LAUGHTER]

  • Sideways.

  • 45 degrees rotated.

  • Yeah.

  • DAVID MALAN: OK.

  • DAVID: From the bottom three corners, draw a straight line down

  • that's approximately the length of each side of the square.

  • DAVID MALAN: Unfortunately, programs cannot ask questions of programmer.

  • So we continue on with the next step.

  • DAVID: And finally, between the first and second line,

  • draw a line connecting the two at the end.

  • And between the second and third line, draw a line connecting the end.

  • DAVID MALAN: All right.

  • How do you feel about your instructions?

  • Precise and correct?

  • DAVID: Wishy-washy.

  • DAVID MALAN: Wishy-washy.

  • OK.

  • All right.

  • So let's go ahead.

  • Hang on to the mic for just a moment.

  • I'm going to hop down into the audience with our TFs just

  • to grab a few representative solutions.

  • If you wouldn't mind my grabbing a few sheets of paper

  • from folks who have participated.

  • Let me take a few over here, just a random sample.

  • Welcome to volunteer proactively or keep it to yourself.

  • Let me go in over here.

  • OK.

  • Thank you so much.

  • Any takers over here?

  • OK.

  • All right.

  • Good.

  • Good.

  • Good.

  • Thank you.

  • And all right.

  • The TFs are grabbing a couple too.

  • See some over here.

  • All right.

  • That should do.

  • That should do.

  • Let me grab these from Brian over here and Emma.

  • Oh, those are blank.

  • All right.

  • So I think we have plenty over here.

  • So let's take a look before we do part two of two, if I may,

  • at how well David programmed the audience.

  • I'm going to go ahead in just a moment and pull up

  • a projection of some of these drawings here that

  • are the results of these operations.

  • So let me flip through.

  • Get a sample here.

  • And I see a lot of good options here.

  • I see this picture here, which perhaps resembles what you drew.

  • See this one here the top corner, very similar in spirit.

  • This one left a lot of room for other things but--

  • [LAUGHTER]

  • This one was a little more abstract, if I may.

  • [LAUGHTER]

  • And so, let me go over to a spoiler to show you what it

  • is David was programming you to draw.

  • And with some suspense, he was compelling you

  • to draw we hope this here.

  • All right.

  • So close or not close perhaps.

  • All right.

  • Round of applause for David, if we could.

  • [APPLAUSE]

  • DAVID MALAN: Thank you.

  • One moment.

  • And so, you gave pretty--

  • you used, if you would, abstractions in discussing this.

  • You said a sideways square, used 45 degree angles

  • hoping that folks would presumably know what you mean by that.

  • Why did you not just say draw a cube, for instance?

  • DAVID: I thought that would be cheating.

  • DAVID MALAN: OK.

  • Well, it would not have been cheating, but it would

  • have been a wonderful abstraction.

  • If everyone in the room, assuming, knows what in a cube is,

  • you might then be compelled to draw it quite quickly.

  • But that, too, leaves ambiguity and lacks precision.

  • Well, how is the cube oriented?

  • Is it this way?

  • Is it that way?

  • Is a curved this way?

  • So sometimes, these abstractions aren't sufficiently helpful.

  • So I probably would have done what you did as well.

  • Now let's do one other example here, if we could.

  • I'm going to go ahead in just a moment and project an image onto the screen

  • that everyone in the audience can see except you two.

  • Let me go ahead and re angle this a little bit.

  • And if father and son would like to get together or solo draw

  • a picture that the audience is going to tell you how to draw.

  • So we're going to flip the roles now.

  • You all will see the drawing on the screen.

  • We ask that you tell our volunteers what to draw.

  • You can use any words that you want, but you cannot ask questions and no

  • physical gestures to explain.

  • All right.

  • Unfortunately, it's a little hard technologically here

  • in that the solution is going to be there.

  • The solution is going to be there.

  • So we're going to have to put some visors on you, if we could--

  • [LAUGHTER]

  • --so that you can only see straight forward.

  • And if you don't mind hugging the board as close as possible,

  • but occasionally back up so that people can see what you're drawing,

  • but resist the temptation to look up, over left or right.

  • All right.

  • So for our audience then, the images.

  • And if you two could focus only on the board now.

  • Only on the board and definitely not facing that screen.

  • OK.

  • [LAUGHTER]

  • The audience is about to see the picture in question.

  • And so, we need a volunteer first from the audience

  • to call out an instruction.

  • Any step ones?

  • Over here.

  • Make a circle.

  • [LAUGHTER]

  • I heard a small--

  • I heard draw a smaller circle.

  • I didn't hear use the eraser, but OK.

  • OK.

  • OK.

  • No looking at me.

  • No looking at me.

  • All right.

  • So I'll take a third step.

  • So let's go to someone else.

  • Yeah.

  • AUDIENCE: Draw a vertical line.

  • DAVID MALAN: Draw a vertical line.

  • AUDIENCE: From the center of the circle.

  • DAVID MALAN: From the center of the circle.

  • AUDIENCE: From the bottom of the circle and down.

  • DAVID MALAN: From the bottom of the circle and down.

  • AUDIENCE: Large stick figure that appears to be walking.

  • [LAUGHTER]

  • DAVID MALAN: I hear an abstraction.

  • So we were also given a fourth instruction.

  • Draw a stick figure that appears to be walking, if that helps.

  • But I think we're going to need to be more precise here

  • because I can imagine a stick figure doing multiple things in multiple--

  • [LAUGHTER]

  • With--

  • [LAUGHTER]

  • OK.

  • Maybe step five.

  • Do we want to make any tweaks?

  • AUDIENCE: It's an almost upside down triangle.

  • DAVID MALAN: Draw an almost upside down triangle, I heard.

  • AUDIENCE: For the legs.

  • DAVID MALAN: Through the legs.

  • AUDIENCE: For the legs.

  • DAVID MALAN: For the legs.

  • AUDIENCE: After the vertical line coming down.

  • AUDIENCE: You need to erase the legs.

  • DAVID MALAN: OK.

  • I heard erase the legs.

  • AUDIENCE: Get rid of the arms.

  • DAVID MALAN: And get rid of the arms.

  • [LAUGHTER]

  • OK and step five was?

  • AUDIENCE: From the bottom of the vertical line, the body,

  • make the two legs are like a triangle without the bottom.

  • DAVID MALAN: From the bottom of the body,

  • draw like a triangle to represent the legs.

  • AUDIENCE: But not--

  • [LAUGHTER]

  • DAVID MALAN: But not that way.

  • That's good.

  • Let's move on to step six.

  • Step six.

  • Someone over here.

  • AUDIENCE: So once they erase that triangle,

  • from the bottom of the vertical line, draw

  • an upside V, where the center of the V is touching

  • the bottom of that bottom line.

  • DAVID MALAN: From the bottom of the straight line, draw an upside down V.

  • I think we did that.

  • Can you step aside just so the audience can see?

  • Now we have a tripod.

  • OK.

  • [LAUGHTER]

  • OK.

  • OK.

  • So I think we're there.

  • I think we're there.

  • One other instruction.

  • Let's see if we can take this home.

  • Yes, right here.

  • AUDIENCE: Draw a less than symbol, starting from the base of the middle

  • of the circle.

  • DAVID MALAN: Draw a less than symbol from the base

  • of the middle of the end of the circle on the left side.

  • DAVID: Wait, a less than symbol.

  • DAVID MALAN: Less than symbol.

  • Yep.

  • DAVID: Less than.

  • DAVID MALAN: Yes.

  • DAVID: Here?

  • DAVID MALAN: So this is what we call a condition.

  • So, yes.

  • AUDIENCE: Correct.

  • DAVID MALAN: Correct, I hear.

  • OK.

  • I think we're close.

  • Two more steps, maybe.

  • AUDIENCE: To the top of the circle, write the word Hi

  • with a capital H and lowercase I.

  • DAVID MALAN: OK.

  • From the top left of the head, draw the word hi, capital H lowercase I with--

  • I think did you say a line to it?

  • AUDIENCE: Yes, with a line.

  • DAVID MALAN: With a line to it.

  • Yeah.

  • AUDIENCE: [INAUDIBLE]

  • DAVID MALAN: OK.

  • And can you step aside, just so the audience can see?

  • I think we need just one more step.

  • One more step.

  • OK.

  • Back here.

  • AUDIENCE: From the bottom of the circle on the right hand side--

  • DAVID MALAN: From the bottom of the circle on the right hand side--

  • AUDIENCE: --touching the base of the circle and the vertical line going

  • down--

  • DAVID MALAN: --touching the base of the circle and the vertical line going

  • down--

  • AUDIENCE: --make the letter L--

  • DAVID MALAN: --make the letter L--

  • AUDIENCE: --at a 15 degree angle.

  • DAVID MALAN: I heard at a 15 degree angle?

  • Sure.

  • [LAUGHTER]

  • OK.

  • I think-- I think could we have you take several steps back and look up?

  • And round of applause for our volunteers.

  • [APPLAUSE]

  • That's pretty good.

  • Thank you both so much.

  • Please keep the hats.

  • Congrats.

  • So clearly, abstractions can be useful, but they can also be challenging.

  • Like programming is hard.

  • And even though this went a bit off the rails here and there verbally,

  • this really is just programming.

  • And we're all trying to agree on a common language or common syntax

  • to use to have the computer, or in this case,

  • our human volunteers execute those instructions.

  • And sometimes, these abstractions are great.

  • Draw a stick figure who appears to be walking.

  • I think we can all visualize what that is.

  • Unfortunately, we're all probably visualizing

  • slightly different stick figures.

  • And that's, again, where precision comes into play and correctness too.

  • Of course, sometimes the chalk went off in the wrong direction.

  • So we might have to undo.

  • And of course, we've spent also the past eight weeks debugging code as well.

  • And so, I wish I could say that this gets easier or just gets

  • absolutely easy.

  • But it never does because the problems you aspire to solve,

  • whether it's in the real world or in the world of computer science

  • and programming, are going to be ever changing.

  • And your aspirations are going to increase.

  • And so, this frustration you might feel now never

  • really goes away, if I can say as much some 20 plus years

  • after doing this myself.

  • But the problems you're solving with those same challenges

  • and those same hurdles get so much more powerful, so much more interesting.

  • And again, it all started from just a few weeks ago

  • when Mario's pyramid was perhaps the first problem to solve.

  • If we go back to where we were here, we had of course our drawings, and then

  • ultimately this process.

  • This, I dare say, is computer science.

  • You have inputs.

  • You have outputs and algorithms in between.

  • But really, what are we talking about at the end of the day?

  • Well, the creation of, the output of, the management of information.

  • I mean, that really is what we've been talking about for these past eight

  • weeks is information.

  • How do you process it?

  • How do you represent it?

  • How do you transform it into something more and ultimately, solve

  • problems with it?

  • But, with this manipulation of, this creation of,

  • this storage of information ever more so these days

  • comes increasing responsibility.

  • And I daresay one of the things that we encourage

  • you, as you exit a course like this, is not just what you can do,

  • but frankly whether you should do it.

  • And indeed, all the more relevant today in societies of course stories.

  • Horrifying stories of where our data has ended up

  • or what has happened to our data, or good intentions

  • perhaps gone awry because we haven't considered implications.

  • And what we wanted to do today is to point out

  • a few examples of opportunities to think harder

  • about what it is you do in the real world as just a citizen.

  • And what you do in the keyboard as a programmer,

  • and how you might solve problems with one's privacy and the security of one's

  • data in mind.

  • Consider, for instance, passwords.

  • These, of course, are perhaps the most familiar thing

  • that you and I use probably every day to secure our accounts,

  • and in turn maintain the privacy of our information.

  • Whether it's our photographs, or financial documents,

  • or emails, or text messages, or the like.

  • Unfortunately, passwords really aren't the best mechanism.

  • And most of us in this room probably should be more thoughtful

  • when it comes to making these kinds of decisions, as well.

  • For instance, in 2019 already, based on a very large data breach

  • and in the analysis thereof, it turns out

  • that the top 10 passwords in the world as of this year are number one, 123456.

  • [LAUGHTER]

  • Apparently, the result of some website or applications

  • requiring a password of at least six characters.

  • And this is about the least amount of effort you can do to satisfy that goal.

  • Number two password was 123456789.

  • [LAUGHTER]

  • Slightly better.

  • Slightly more secure insofar as it's longer.

  • Number three is qwerty.

  • And if you don't know what that means, that actually

  • describes the type of keyboard.

  • But because if you go to the top left hand corner of your keyboard and type

  • one, two, three, four, five, six from left to right,

  • you will end up spelling Q-W-E-R-T-Y.

  • Easy to remember.

  • Also, pretty easy for other people to remember as well.

  • Password is the number four password out there.

  • And number five is, as of this year, 6 ones.

  • So another way of satisfying the constraints that these people

  • did, but with even less effort.

  • Just hitting the same key again, and again, and again.

  • 12345678.

  • So, slightly behind the other two.

  • ABC 123.

  • Starting to get a little more interesting that we're

  • combining letters and numbers.

  • 1234567 slips in there as well.

  • Number nine is password1, clearly satisfying websites

  • that require that you not use an English word

  • but you include at least one symbol or letter here too.

  • Dare say the bare minimum.

  • And number 10 as of this year is 12345.

  • So it's easy to poke fun at these and we won't call for a show of hands.

  • But odds are some of us in this room maybe--

  • don't make eye contact--

  • have at least one of these passwords as your own.

  • It's just all too easy, then, to guess certainly these.

  • But even if you're practicing adhering to better practices than these,

  • and you're not as simplistic as I'm going

  • to pick an easy word or a very simple number.

  • Suppose you're actually being more thoughtful.

  • It doesn't really matter these days.

  • I'm going to go ahead and turn my attention to just a moment to a text

  • editing program here on my computer.

  • The students in the room will recognize this is just representative

  • of a programming environment.

  • And today, this just happens to be something

  • called Visual Studio Code, or VS code that you

  • can download on your own Mac or PC.

  • And I'm going to go ahead and just save a file called pin.py.

  • Many of us have not only passwords, but pins.

  • Personal identification numbers that you're supposed to keep secret and that

  • are usually, say, six digits long.

  • Well, even if you've protected your financial account or some other account

  • with a six digit code, it might take a human quite a while

  • to guess all of the possible codes that you might have chosen.

  • But it's not terribly hard for a computer.

  • In fact, we'll do it even more simply like a lot

  • of times with a four digit code.

  • I can simply go in a program like this, if I

  • know a bit of programming in Python.

  • And I can say from time import sleep.

  • I can say something like for I in range.

  • Well, let's start from 0000 and go all the way up to 9,999.

  • A four digit number.

  • But it turns out, we need to iterate up to 10,000

  • because the students in the room will recall that we iterate up to,

  • but not through that value.

  • And then in here, I'm going to go ahead and say something

  • like, I am checking this value I. So this

  • is to say I'm proposing to write a program in Python that

  • will try to crack someone's pin to show how easy it is to generate

  • as a computer all of the possible PINs in the world that are four digits long.

  • So and just to demonstrate this, I'm going

  • to do it a little slowly by sleeping for 1/10

  • of a second between each iteration.

  • So I've gone ahead and saved my file.

  • I'm going to go ahead down here now and run Python of pin.py.

  • And I'll go ahead and make my screen a little taller here so we can see more.

  • AUDIENCE: Close the parentheses.

  • DAVID MALAN: Thank you.

  • Thank you.

  • Thank you.

  • New here.

  • OK.

  • So here we go.

  • We've now written a program that, granted is not cracking anything,

  • but it is demonstrating how easily and how quickly we can generate numbers

  • from 0 on up to 9,999.

  • It's not quite right.

  • These aren't four digit codes because they're being treated as numbers.

  • But there's actually syntax with which we can solve this.

  • And if you've never seen this before, you

  • can actually just say something like this colon 0 4.

  • And that's just going to reform my output as being four digits.

  • And it's going to pat it with zeros instead.

  • So boom.

  • I've written a program that generates all possible four digit codes.

  • Of course, I've been deliberately sleeping, that is pausing,

  • each time I'm printing something out.

  • A hacker is not going to do that.

  • They are going to try to do this as quickly as possible.

  • No need for sleep whatsoever.

  • So let me just rerun this code, getting rid of those lines.

  • Boom.

  • That's every possible four digit code that you

  • might have on your bank account or on some email account or the like,

  • assuming the system allows you to have a relatively short number like that.

  • You might think.

  • OK.

  • Well, what's better than four digits?

  • Five digits.

  • Let's just increase it.

  • But I think that adversary is going to be able to crack that pin as well.

  • I'm not even over at the screen yet and it's done already.

  • It is not hard once you know how to program, not

  • only to use these systems for good, but in this case, for some form of evil.

  • Now maybe you're off the hook because you're not as simplistic

  • as I claim as to use only, for instance, an alphabetical

  • or rather a numeric code.

  • Maybe you're using a word and not a word as simple as password.

  • It's a more arcane word from English or perhaps some other language.

  • That, too, doesn't really matter.

  • Let me go ahead and copy from our source directory today, which for the students

  • is available online, that large dictionary that we had from problem

  • sets five wherein you loaded all of these words

  • into a dictionary of your own.

  • There was 140,000 some odd words here.

  • I'm going to go ahead and create another file, though.

  • This one called password.py.

  • And recall from some of our building blocks over the past few weeks

  • how easy it is to similarly manipulate words from a dictionary.

  • Let me go ahead and again, initially import sleep

  • just so that we can see this happening.

  • I'm then going to say with open.

  • Large in read mode.

  • And I'm going to call this as file.

  • And over here I'm going to go ahead and say now for word in.

  • I want to say file.

  • And we've not perhaps seen this one, but it turns out

  • there's a really easy Python function where you can say file dot read lines.

  • And it's just going to slurp in all of the 140,000 words from the file

  • and allow you to iterate over them one at a time.

  • And if I want to go ahead and print this out, I'll use print again, as before.

  • And I'm going to go and claim that I'm checking,

  • for instance, that word dot, dot, dot just as I claim to be checking a pin.

  • Now again, I'm not checking anything.

  • I'm just demonstrating that I could be checking this fast as by simply

  • printing out these words instead.

  • And I'm going to go ahead and as before, sleep

  • for a tenth of a second on each iteration.

  • But I'm also in anticipation going to call this function, which

  • some students will recall is to strip off

  • any whitespace at the end of the line.

  • Recall that in large our big dictionary, there was a new line

  • character at the end of every word.

  • So this line of code will we'll get rid of this here.

  • Yeah.

  • Question over here.

  • AUDIENCE: What's the significance of different colors?

  • DAVID MALAN: What's the significance of the different colors?

  • This is happening automatically in my text editor

  • the program I'm using to write code.

  • Each type of word or blocks of words that I type

  • have a different semantic meaning to the computer.

  • And so, the computer is highlighting them

  • in that way to draw my attention to different types of words here.

  • For instance, we have this preposition from that does something

  • like load someone else's code.

  • Time, though, and sleep are names of things that other humans have actually

  • invented.

  • So I'm going to go ahead now and run this as Python of password.py.

  • We'll see, as the students will recall, all

  • of the words in that dictionary starting with the A words, then the B

  • words, then the C words, and so forth all the way down through F.

  • Now, of course, I'm sleeping unnecessarily.

  • But if during this demonstration you see your own password fly by the screen,

  • it's not that hard for an adversary to be writing code like this

  • and not just printing out the possible passwords,

  • but trying to log into your account again and again

  • and again until they gain access to the system.

  • And in fact, if we deliberately speed this up, let's not bother sleeping.

  • We'll get rid of all of the sleep related lines as before.

  • Now, run this code.

  • Now, I'm not even over at the board and it's already done 140,000 words.

  • Which is to say if you're choosing a password that's

  • just a word in the dictionary, whether it's English or some other language,

  • you're not off the hook.

  • You're not being so clever because anyone with a computer

  • can check all of those codes.

  • Now you might think, well, this is why someone had abc123.

  • That's not in the dictionary.

  • That's not just numbers.

  • That's not just letters.

  • But, come on.

  • If you give me a few more minutes, I bet we could write a program together

  • that starts with letters and ends with numbers or vise versa.

  • We could try to concoct these patterns.

  • And granted, it's going to get a little slower.

  • A little slower, the more complicated it gets.

  • But it can.

  • The adversary, if the goal is to get your money, get your data,

  • might have all the time in the world to actually wage that attack.

  • And so, I would consider moving forward exactly what the implications are

  • of putting your data in one place or another

  • and not thinking to actually secure it because in the best case,

  • someone nosily might end up getting in.

  • At worst case, more than that, whether it's financial or personal,

  • might be compromised.

  • Well, what other forms does information come

  • that might hint at potential threats for us too?

  • Well you've all probably heard of cookies, when it comes to the web.

  • And indeed, if you pursue our web track in a couple of weeks' time will

  • you dive in deeper to what these things can do.

  • But cookies are little pieces of information

  • that websites plant on your Mac or PC or your phone anytime

  • you visit the website.

  • Now, that might seem a little creepy at first glance

  • and it can be used for creepy purposes.

  • Advertising and other such tracking applications among them.

  • But this is actually a very useful primitive and computer science and web

  • programming, in that if you have the ability

  • to plant a little file on someone's computer,

  • it's like the digital version of a hand stamp.

  • You can remember that you've seen them before.

  • And that's actually useful because when you log into Gmail

  • or whatever email account you have, you don't really

  • want to be typing in your username and password every time

  • you look at a new message.

  • Gmail or Google would be a little obnoxious

  • if they kept asking you wait a minute, who are you?

  • Wait a minute, who are you?

  • These cookies are stored on your computer so that, unbeknownst to you,

  • it's sent from you, the browser, to them, the server,

  • to just remind them perpetually who you are because you've already logged in.

  • And we can actually see this.

  • Let me actually go over to my browser and you, too,

  • might be in the habit of using Chrome just as I am here.

  • And I can go in Chrome go to View, Developer, and go to Developer Tools.

  • And you can do this, too, at home on your own Mac or PC.

  • You can do this with Firefox, or Edge, or other browsers as well.

  • And you'll see among the various things that just popped up

  • are not terribly user friendly.

  • This is really the domain of indeed developers or programmers.

  • But I've clicked on this network tab here because on my own Mac or PC,

  • if I visit some url like www.google.com and hit Enter,

  • I can actually see inside of Chrome all of the requests my computer has just

  • made over the internet from me to Google.com.

  • And I'm going to go ahead and click on the very first of these here.

  • And this, too, is going to look pretty arcane for today's purposes,

  • but it's only meant to reveal what it is that's going on here.

  • Let me scroll down, down, down, down, down.

  • And you'll see a few things here request headers.

  • These are little pieces of information that my Mac, and in term Chrome,

  • just sent to Google.com com simply because I visited the website.

  • And then if I scroll down here, we'll see response headers.

  • This is what's coming back from Google.com to my own Mac or PC.

  • And this is the line that's interesting.

  • If you've ever heard about a cookie, all it

  • means when I say a server is planting some information or a file

  • on your computer, it's really just doing this.

  • The response you're getting from Google.com

  • simply says literally in English set dash cookie colon, and then some value.

  • And to be fair, that value is pretty arcane looking.

  • It looks a little weird.

  • It apparently is going to expire in December.

  • So I can infer from this that Google wants

  • to be able to remember me at least for a couple

  • more months to the end of the year.

  • And this value here collectively would seem to be like a hand stamp

  • they've put on my computer so that if I now proceed to do searches,

  • if I proceed to log into Gmail, use Google Calendar, or the like,

  • they know who I am or they know that it's me again and again.

  • So what does this mean?

  • This means that any website you visit can certainly

  • be tracking what it is you're doing and where it is you're going.

  • And because big companies like Google have advertising networks

  • as part of their portfolio, if a website that's not Google.com

  • is something else dot com, or something even else dot com,

  • and they are using Google's advertising, well long story short,

  • these cookies unfortunately are sent.

  • These digital hand stamps are presented, not just to those individual websites,

  • but also to Google again, and again, and again because they

  • are the middleman in this story.

  • The advertising network that's using ads on all of these different websites.

  • So here a very fundamentally useful and compelling computer science principle

  • can be used certainly for wonderfully useful applications,

  • just remembering that I'm logged in.

  • But also, if you don't think twice about it

  • or if you want to make money off of it, can be used for these other purposes

  • as well.

  • Now we won't go down this rabbit hole today

  • of well this is largely advertising what has helped

  • make the internet become what it is.

  • So there are trade certainly here, but that too has been thematic.

  • But again, I would encourage you, as you discover

  • more and more of these principles these things you can do through code,

  • that you consider whether indeed you should be doing so as well.

  • Well, what else might you do to mitigate this?

  • Well some of you might be in the habit of using at work

  • or at home incognito mode or private mode, which most browsers today

  • support.

  • Well what is that actually doing?

  • Well, according to Google, it says Chrome

  • won't save the following information, your browsing history, cookies

  • and site data, information entered in forms, and so forth.

  • Well, that means literally that.

  • Even if Google or Facebook or some other website

  • sends you a set cookie value saying please

  • store this, Chrome, in this case, it's just going to throw it away.

  • It's going to empty the cookie jar, so to speak,

  • once you close that incognito window.

  • However, your browser is still sending to Google or Facebook

  • or whatever website you're visiting those values again,

  • and again, and again.

  • You're not private within that window, per se.

  • You're only private within that window with respect

  • to everything else you have opened.

  • So for instance, if I go now here and go to View, Developer, and Developer

  • Tools.

  • And I have my network tab open again and I

  • visit something like https://www.google.com and hit Enter,

  • you'll see that Google is indeed still planting a cookie.

  • This time, I got two cookies from Google on my computer.

  • And those cookies will exist for as long as I have this incognito window open.

  • So Google might be able to infer who I am

  • or that I am the same person based on these cookies.

  • But they know even more than that.

  • If I scroll back down to where we began to these requests

  • headers, the information my browser is sending to the server,

  • you'll notice that among these values is something like this.

  • This one, too, looks a little arcane.

  • Let me go ahead and zoom in on it here.

  • But it's called user agent.

  • It's formatted in the same way.

  • User dash agent colon.

  • And then an arcane string here.

  • But it looks like for whatever reason, my computer

  • is telling Google without my even asking it to that I'm using a Mac,

  • that I'm running Mac OS 10.14.

  • 6 at the moment.

  • And if I keep scrolling, it's going to tell it

  • further that this is a specific version of Google Chrome.

  • And this is just some of the information that is leaked deliberately and often

  • for good purposes.

  • But these are the kinds of traces we all leave when we're using the internet.

  • And we won't even go down this rabbit hole too, but all of our computers

  • have unique addresses.

  • You might have heard of things called IP addresses.

  • You can't just get rid of those much like you can't just

  • remove your postal address and expect mail to still arrival.

  • All of us have unique addresses that are still being presented to these servers.

  • And so, through computer science, through courses like this,

  • and through reading up on these kinds of topics hereinafter realize

  • that in understanding these primitives, these things like cookies

  • and how they are set can you at least then,

  • we hope, make a more informed decision as to whether to use them

  • in that way or not or to visit websites in some way

  • that you know to be using them for some purpose.

  • Well what do we have besides this to perhaps worry about in the world?

  • I daresay Snapchat is pretty popular these days.

  • And of course, with Snapchat there's this notion

  • that they popularized it being able to delete photos after 1 second or 10

  • seconds or the like.

  • And in fact, you all may recall from problems set four.

  • You implemented recover in a language called C

  • and you recovered photos that had been deleted.

  • So clearly already, deleted doesn't necessarily have to mean deleted.

  • And that's certainly the case even for third party services.

  • Now to be fair, we can only guess how it is Snapchat works underneath the hood.

  • They claim to be deleting your photos after some number of seconds,

  • but let's consider for a moment what that might actually

  • mean because it's our information we're putting out there,

  • in this case in pictorial form.

  • If you've never use Snapchat, when taking a photo,

  • you're able to see a screen like this and allow your message

  • to expire either never or infinitely many seconds from now,

  • or 1 to 10 seconds somewhere in between.

  • After which, the photo is deleted.

  • Well what does that mean?

  • In the context of last week, those of you with now background in SQL

  • might hope that what Snapchat is doing on their servers

  • is executing a query like this.

  • Delete from snaps where ID equals something.

  • And the question mark represents the idea of the snap you just sent,

  • the photograph that you just took.

  • But maybe they're doing that.

  • We, as outsiders as users, have no way to audit this.

  • We can only trust what they say.

  • What if they're instead just doing something like this?

  • Update snaps, set deleted equals true where

  • ID equals question mark, where that again is the identifier of your snap.

  • Now what is this representative of?

  • Well in the world of computer science, there's

  • this notion of hard deletion and soft deletion.

  • Hard delete means truly just delete the data,

  • like throw the bits away so that they really shouldn't be recoverable.

  • Soft delete is generally implemented like this, where you literally

  • change a 0 to a 1, a false to a true in your database to just remember oh

  • the user deleted this.

  • But that doesn't mean we have to throw the data away.

  • This might have value for marketing purposes,

  • for analytical purposes, business purposes, or the like.

  • So for all intents and purposes, it's deleted

  • because you the user can't get it back and no one else can see it.

  • But perhaps one or more employees at Snap can see that data.

  • And perhaps, that's the kind of data that's

  • at risk of being leaked out longer term.

  • And we've not even discussed things like backups, which too have upsides.

  • You don't want your data to get lost, but you also

  • don't want your data to get stuck on some backup in perpetuity as well.

  • So the lesson here we would propose is just consider.

  • Don't just trust what some tool or some application or developer

  • says something does.

  • Decide for yourself just how much weight to give those claims

  • and whether or not this kind of risk is worth taking photos

  • that you might regret, or wish to unsend because there really

  • is no notion of unsending, no matter what it is these applications

  • describe it as.

  • One last one that we saw just a couple of weeks ago.

  • Photo, the ability to tagged photos using artificial intelligence

  • and machine learning these days, or just simple pattern matching

  • was incredibly easy and a few lines of Python code to pick me out,

  • for instance, out of all of CS50 staff based on relatively little information.

  • This is enhanced, the closest thereof.

  • This is a fuzzy picture.

  • Didn't represent it really just by two eyes, a nose,

  • and a mouth that apparently resembles my particular face.

  • This was really easy to do.

  • And I don't have to tell you these days that if you're on social media,

  • all of us have probably been uploading or have had upload

  • on our behalf photographs of us that are then tagged

  • and we have for better or for worse been just telling the world what

  • we look like from all sorts of angles.

  • And here too, can the data perhaps be misused.

  • Yes, it's wonderfully useful when you upload an album because your friends

  • can see oh, that was a great night out.

  • We can now reminisce about those memories.

  • But someone else can be scraping all that data,

  • as we have read about having happened in the past.

  • And someone else might use that data to find you in a crowd

  • where you don't want to be found.

  • Or governments could do this too, based on driver's licenses

  • photos or the like.

  • Here, too, just because the software can do something

  • doesn't necessarily mean we should do that.

  • So we have all of these building blocks underneath our belts

  • now from week zero on through up eight.

  • We have a number of languages under our belts.

  • And for the final weeks of the class is the goal ultimately,

  • to take off the last of the training wheels.

  • In fact, the training wheels we literally took off just a few weeks ago

  • are sitting over there now.

  • And now, is there an opportunity for you in the weeks

  • ahead as the students in the room to decide on your follow on tracks.

  • All toward an end of CS50's final project.

  • And among the tracks, for instance, that are on the horizon

  • for your web programming.

  • This is taking primitives like we just saw there,

  • using JavaScript, HTML, CSS, plus some more Python and SQL

  • which you've seen over the past couple of weeks, to build applications.

  • This particular track will be led by CS50's own Brian.

  • And among the projects you'll tackle over the coming weeks

  • are something like this.

  • CS50 finance, so to speak, which is a web based application

  • via which you can buy quote unquote and sell quote unquote stocks using

  • real time data from an actual API, application programming interface,

  • to get the latest prices for stock symbols in the world.

  • So you and this track will build this application complete with the ability

  • to log in, to log out, to buy stocks, sell stocks, all using virtual dollars

  • and using a SQL database underneath the hood to keep track of that information.

  • If you pursue the mobile track instead, applying your past eight

  • weeks of skills and concepts to a domain familiar to you and the phone

  • you have in your own pocket can you explore programming on iOS

  • or iPhones with a language called Swift.

  • Or if you're an Android user exploring that domain instead, using a language

  • called Java.

  • In this track, you'll be led by CS50's own Tommy McWilliam, who will guide you

  • to a number of projects, one of which implementing

  • your own Pokemon decks, a sort of Rolodex for Pokemon characters,

  • including all of the native user interface elements that

  • come with both iOS and Android.

  • You'll be able to explore an Instagram like application reminiscent of some

  • of the filters that you did in problem set four.

  • But this one will be interactive and on your own device or in a simulator

  • much closer to the app, whether it's Instagram or Snapchat that you yourself

  • are familiar with.

  • And then lastly in this track will you implement your own note

  • taking application.

  • The ability to add and remove information to keep track of todo's,

  • whether it's a grocery list, class schedule, or something else altogether.

  • And then lastly, you have the choice of CS50's games track

  • using a language called Lua.

  • This is a language that facilitates implementing games

  • and many other applications as well.

  • And CS50's own Colton Ogden will introduce you

  • to a couple of applications, some of which our parents in the room

  • might recall.

  • This was one of the first games ever implemented on a computer,

  • for instance.

  • Not to date people in the room.

  • But this is a game called Pong.

  • And it's relatively simple mechanically.

  • You move these white paddles up, down, up, down, on the left and on the right.

  • And this little ball back in my day was represented with a pixel, if you will.

  • That ball is going to bounce back and forth against those paddles.

  • So you have to figure out exactly how to do the reflections

  • and how to implement that interface.

  • And then, as is consistent with the CS50's theme of beginning with Mario,

  • you can end the semester with Mario again,

  • implementing your own version of Super Mario Brothers, which is representative

  • of a two dimensional side scrolling game, so to speak,

  • implementing this on your own Mac or PC using your own computer.

  • Indeed, for each of these tracks do you no longer need to use CS50 IDE.

  • And while you're welcome to for at least the web track,

  • you can now use tools that are freely available and are the types of tools

  • you'll use after this course, in the real world.

  • The goal of the final few weeks of the class is indeed this final project.

  • The goal of which is to apply these lessons

  • learned now to a project of your own design.

  • In the coming weeks when you propose and then design, and then

  • implement your final project inspired perhaps by any of those tracks,

  • you'll be able, for instance, in the web track to download Python, the language,

  • and in turn, the interpreter, onto your own Mac or PC and use it.

  • You can use a popular tool like I used briefly today,

  • Visual Studio Code, which is a free and open source tool that's

  • gaining momentum in industry because it's relatively accessible

  • and has lots of features many more than CS50's own IDE.

  • Xcode, by contrast, is what you'll use if you're using a Mac

  • and developing an iOS project for your iPhone because of that

  • being the software that Apple provides for that.

  • Or in the worlds of Google's, Android Studio,

  • a free tool that you can use to build those Android applications as well.

  • But how are we going to get there and how

  • will we support you along the the way?

  • So there's this tradition in CS50 for the past decade of a CS50 hackathon.

  • This is an event that will begin at 7:00 PM sometime in December

  • and will end at 7 AM the next night.

  • But unlike most, for instance, all night affairs,

  • this one will be entirely focused on building something and creating

  • something alongside all of your classmates and all of your staff,

  • including some of our friends from Yale as well.

  • Upon arrival, we'll all CS50 staff greet you at the top of the stairs

  • where you check in, get settled for the night,

  • and ultimately spend those 12 hours working theoretically

  • on your final project.

  • Perhaps, even putting the finishing touches on it here.

  • One of the rooms from across the river where the event is held, this I think

  • is shortly after a bug was fixed later that night.

  • But along the way, there will be made several meal times as well.

  • We're in the habit of providing 100 of burritos from Philippe's around 9 PM.

  • Domino's kindly brings a few 100 pizzas around 1:00 AM.

  • And then, if you're still awake at 5:00 AM,

  • will some Harvard shuttles take us too.

  • And our therapy dog who will also be in attendance

  • will take us down the road to Ihop for pancakes at 5 AM

  • if you would like to join us there.

  • [LAUGHTER]

  • And after that is the final, the one final capstone to which everyone

  • in this room parents and families as well are

  • invited as are all faculty and staff across campus, is the CS50 fair.

  • A campus wide exhibition of all students final projects at which you'll

  • be to which you'll bring your laptop.

  • We'll have music, and popcorn, and candy, and friends,

  • and alumni from industry.

  • And it really is meant to be this exhibition of in celebration

  • of the final projects you by that point a month hence will have created.

  • Its at central Harvard Square in the Smith center

  • and will you be greeted by such visuals as these.

  • Our friends at Yale will be doing the same in parallel.

  • And it's just an opportunity to see what you and your friends

  • have done to invite them as well to see what you've accomplished this term.

  • And to ultimately share in the kinds of projects

  • that you've both created with a few passers by here, as well.

  • And here is where I wanted to thank the staff, not only those who

  • helped run the show in the room here.

  • But also a few of the course's heads, literally heads.

  • This here is CS50 staff here in Cambridge this past year.

  • All of our teaching fellows, course assistants, producers, and the like.

  • These are our team members at Yale, where

  • the course is indeed held in parallel.

  • And there is a few faces we wanted to call in particular.

  • Rodrigo, our head teaching fellow who sadly is graduating, but has

  • been with the course for so many years.

  • Emma, who is currently our head CA, will take over as head teaching fellow

  • this coming year.

  • And of course, Brian, many of whom you know

  • as the course's preceptor who himself holds

  • both of those roles over the past couple of years.

  • But this is where we'll end just as we began.

  • 2/3 of you eight weeks ago had never taken CS before.

  • And when we surveyed you as to your comfort levels,

  • you might recall this breakdown.

  • That over some 49% percent of you described yourselves

  • as among those less comfortable just with the idea of taking,

  • shopping, let alone staying in the course like CS50.

  • 16% of you described yourselves as more comfortable.

  • And 35% described yourselves as somewhere in between.

  • As you now embark on your final projects of your own choice,

  • I can officially decree that you are all now more comfortable.

  • This then, was just the beginning of your journey

  • toward the end of these final projects.

  • Thank you all, too, for coming today and for joining us this semester.

  • This was CS50.

  • [APPLAUSE]

[MUSIC PLAYING]

Subtitles and vocabulary

Click the word to look it up Click the word to find further inforamtion about it