Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
00:00:00,000 --> 00:00:03,486
[MUSIC PLAYING]
2
00:00:03,486 --> 00:01:30,636
3
00:01:30,636 --> 00:01:34,620
[AUDIENCE EXCLAIMING]
4
00:01:34,620 --> 00:01:38,106
[APPLAUSE]
5
00:01:38,106 --> 00:01:42,588
6
00:01:42,588 --> 00:01:44,170
SPOT: Hello, world.
7
00:01:44,170 --> 00:01:47,860
This is CS50, Harvard
University's introduction
8
00:01:47,860 --> 00:01:50,740
to the intellectual
enterprises of computer science
9
00:01:50,740 --> 00:01:53,080
and the art of programming.
10
00:01:53,080 --> 00:01:54,190
Woof, woof.
11
00:01:54,190 --> 00:01:57,613
[LAUGHTER]
12
00:01:57,613 --> 00:02:08,870
13
00:02:08,870 --> 00:02:10,857
I'm sorry, Dave.
14
00:02:10,857 --> 00:02:12,440
[PINK, "WHAT ABOUT US"] What about us?
15
00:02:12,440 --> 00:02:15,350
16
00:02:15,350 --> 00:02:16,310
What about us?
17
00:02:16,310 --> 00:02:17,534
La-da-da-da-da-da-da.
18
00:02:17,534 --> 00:02:18,965
La-da-da-da-da-da-da.
19
00:02:18,965 --> 00:02:21,827
We are searchlights.
20
00:02:21,827 --> 00:02:23,750
We can see in the dark.
21
00:02:23,750 --> 00:02:27,020
22
00:02:27,020 --> 00:02:31,280
We are rockets pointed up at the stars.
23
00:02:31,280 --> 00:02:34,710
24
00:02:34,710 --> 00:02:38,610
We are billions of beautiful hearts.
25
00:02:38,610 --> 00:02:41,977
26
00:02:41,977 --> 00:02:46,750
And you sold us down the river too far.
27
00:02:46,750 --> 00:02:49,570
28
00:02:49,570 --> 00:02:51,920
What about us?
29
00:02:51,920 --> 00:02:57,270
What about all the times you
said you had the answers?
30
00:02:57,270 --> 00:02:59,270
What about us?
31
00:02:59,270 --> 00:03:05,270
What about all the
broken happy ever-afters?
32
00:03:05,270 --> 00:03:06,770
What about us?
33
00:03:06,770 --> 00:03:12,770
What about all the plans
that ended in disaster?
34
00:03:12,770 --> 00:03:14,980
What about love?
35
00:03:14,980 --> 00:03:16,149
What about trust?
36
00:03:16,149 --> 00:03:18,145
What about us?
37
00:03:18,145 --> 00:03:21,139
38
00:03:21,139 --> 00:03:24,632
La-da-da-da-da-da-da.
39
00:03:24,632 --> 00:03:28,624
La-da-da-da-da-da-da.
40
00:03:28,624 --> 00:03:30,121
La-da-da-da-da-da-da.
41
00:03:30,121 --> 00:03:33,115
42
00:03:33,115 --> 00:03:34,612
La-da-da-da-da-da-da.
43
00:03:34,612 --> 00:03:55,107
44
00:03:55,107 --> 00:03:56,190
DAVID J. MALAN: All right.
45
00:03:56,190 --> 00:03:56,840
So--
46
00:03:56,840 --> 00:04:00,340
[APPLAUSE, CHEERING]
47
00:04:00,340 --> 00:04:02,660
48
00:04:02,660 --> 00:04:05,480
This is CS50, Harvard
University's introduction
49
00:04:05,480 --> 00:04:07,790
to the intellectual
enterprises of computer science
50
00:04:07,790 --> 00:04:09,200
and the art of programming.
51
00:04:09,200 --> 00:04:11,090
And this is Spot.
52
00:04:11,090 --> 00:04:13,370
And our thanks to our
friends at 3D Cowboys
53
00:04:13,370 --> 00:04:15,080
for bringing him by class today.
54
00:04:15,080 --> 00:04:18,524
Perhaps a round of applause for
our special Professor [INAUDIBLE]..
55
00:04:18,524 --> 00:04:21,860
[APPLAUSE]
56
00:04:21,860 --> 00:04:22,820
My name is David Malan.
57
00:04:22,820 --> 00:04:26,270
And I actually took this class,
CS50, myself, some years ago.
58
00:04:26,270 --> 00:04:27,500
But I almost didn't.
59
00:04:27,500 --> 00:04:30,590
And I didn't because when I
got to campus, as a first-year,
60
00:04:30,590 --> 00:04:33,350
I really gravitated toward
things already familiar, things
61
00:04:33,350 --> 00:04:35,450
with which I was already comfortable,
specifically, government.
62
00:04:35,450 --> 00:04:38,700
And I came in here thinking I was going
to major or concentrate in government.
63
00:04:38,700 --> 00:04:41,840
And it was only once I got to
sophomore year, fall semester,
64
00:04:41,840 --> 00:04:44,300
that some friends of mine were
coming to this class called
65
00:04:44,300 --> 00:04:48,290
CS50 that was very much to
beware at the time, in that it
66
00:04:48,290 --> 00:04:50,870
was an unfamiliar field to so
many of us, myself included.
67
00:04:50,870 --> 00:04:54,320
But I got up the nerve to go over the
threshold, sit in on the first class,
68
00:04:54,320 --> 00:04:56,280
just shop it, so to speak.
69
00:04:56,280 --> 00:04:57,570
And I was hooked.
70
00:04:57,570 --> 00:05:00,470
I found that homework was,
for the first time, fun.
71
00:05:00,470 --> 00:05:03,783
And this was after having enrolled
only because the professor let
72
00:05:03,783 --> 00:05:06,200
me enroll pass/fail or [INAUDIBLE]
because I didn't really
73
00:05:06,200 --> 00:05:07,283
think I could even cut it.
74
00:05:07,283 --> 00:05:10,020
But fast forward to five
Mondays later in the semester,
75
00:05:10,020 --> 00:05:12,020
I actually switched to a
letter grade, deciding,
76
00:05:12,020 --> 00:05:14,240
wow, this is actually something for me.
77
00:05:14,240 --> 00:05:17,480
And I say this because
computer science, what
78
00:05:17,480 --> 00:05:19,640
I didn't realize about
it at the time, really
79
00:05:19,640 --> 00:05:23,680
is this very general purpose way of
thinking and way of solving problems.
80
00:05:23,680 --> 00:05:26,490
And even if this is the
only CS class you ever take,
81
00:05:26,490 --> 00:05:29,940
even if this is the only formal
training you have in programming
82
00:05:29,940 --> 00:05:32,550
as a practical skill, it's
just so darn applicable
83
00:05:32,550 --> 00:05:35,670
to so many other fields-- the
arts, humanities, social sciences,
84
00:05:35,670 --> 00:05:39,660
natural sciences, and beyond, and
certainly within the STEM fields,
85
00:05:39,660 --> 00:05:40,530
themselves.
86
00:05:40,530 --> 00:05:43,810
That said, it's going to often
feel a little something like this.
87
00:05:43,810 --> 00:05:47,310
This is from our friends at MIT, down
the road, which is one of their hacks
88
00:05:47,310 --> 00:05:51,300
whereby they connected a fire
hydrant to a drinking fountain,
89
00:05:51,300 --> 00:05:54,960
with a little sign up there that says,
"GETTING AN EDUCATION FROM MIT IS LIKE
90
00:05:54,960 --> 00:05:57,480
DRINKING FROM A FIRE HOSE,"
which is to say that it's
91
00:05:57,480 --> 00:05:59,310
going to feel, quite
often, in this class,
92
00:05:59,310 --> 00:06:01,260
too, that there's just
a lot of information.
93
00:06:01,260 --> 00:06:03,960
And you can't possibly
absorb it all, but realize
94
00:06:03,960 --> 00:06:06,750
that's to be expected, especially
in an introductory class.
95
00:06:06,750 --> 00:06:11,520
The whole point is for so much of it to
feel new, but with practice, with time,
96
00:06:11,520 --> 00:06:14,390
with years, even, looking
back, will you get all the more
97
00:06:14,390 --> 00:06:15,640
comfortable with the material.
98
00:06:15,640 --> 00:06:18,340
But you're not meant to feel
comfortable along the way.
99
00:06:18,340 --> 00:06:20,340
And so let me encourage
you, invite you, expect
100
00:06:20,340 --> 00:06:23,580
you to get comfortable feeling
uncomfortable along the way,
101
00:06:23,580 --> 00:06:27,390
whether you have or have not prior
computer science or programming
102
00:06:27,390 --> 00:06:28,080
experience.
103
00:06:28,080 --> 00:06:32,130
Now, back in my day, the class'
syllabus was a little bit different.
104
00:06:32,130 --> 00:06:35,438
And, really, when I and all of
my classmates exited the class,
105
00:06:35,438 --> 00:06:37,230
we would say to friends
that we learned how
106
00:06:37,230 --> 00:06:40,860
to program in C, which is a language
that we, ourselves, will still
107
00:06:40,860 --> 00:06:41,860
learn in this class.
108
00:06:41,860 --> 00:06:44,040
But that was it for languages.
109
00:06:44,040 --> 00:06:46,950
But nowadays, as you'll
see, we'll explore not just
110
00:06:46,950 --> 00:06:49,560
this older language called
C, but a more modern language
111
00:06:49,560 --> 00:06:53,580
called Python that's very much in vogue
for data science, and web applications,
112
00:06:53,580 --> 00:06:54,460
and much more.
113
00:06:54,460 --> 00:06:56,293
But we'll also introduce
you, along the way,
114
00:06:56,293 --> 00:07:01,020
to another language called S-Q-L or SQL,
which is specifically for databases.
115
00:07:01,020 --> 00:07:03,330
And SQL is a different type
of programming language
116
00:07:03,330 --> 00:07:06,060
that's just going to give you
different ways of solving problems,
117
00:07:06,060 --> 00:07:09,480
different building blocks with which
to express problems you want to solve.
118
00:07:09,480 --> 00:07:11,670
We'll introduce you, toward
the end of the semester,
119
00:07:11,670 --> 00:07:14,040
yet another language,
JavaScript, often used
120
00:07:14,040 --> 00:07:17,415
with markup languages called HTML
and CSS, with which maybe you
121
00:07:17,415 --> 00:07:19,290
have some experience if
you've made websites.
122
00:07:19,290 --> 00:07:23,640
But we'll do this because so many of
today's actual real-world software
123
00:07:23,640 --> 00:07:24,630
is web-based.
124
00:07:24,630 --> 00:07:27,450
Or it's phone-based,
mobile-based, but even then,
125
00:07:27,450 --> 00:07:30,000
it's using these same
languages, like JavaScript.
126
00:07:30,000 --> 00:07:32,700
And so by the end of
CS50, in particular,
127
00:07:32,700 --> 00:07:35,820
you won't know how to program
in X, or Y, or Z, per se.
128
00:07:35,820 --> 00:07:39,150
But, period, you'll
learn how to program.
129
00:07:39,150 --> 00:07:41,190
And, indeed, among the
goals of this class
130
00:07:41,190 --> 00:07:45,540
is to equip you with enough of a set
of concepts, enough practical skills
131
00:07:45,540 --> 00:07:49,440
and experience that after CS50, again,
if you never take another CS class,
132
00:07:49,440 --> 00:07:51,690
you can teach yourself new languages.
133
00:07:51,690 --> 00:07:52,650
And you won't feel--
134
00:07:52,650 --> 00:07:55,440
you won't have been reliant
on a class to, indeed,
135
00:07:55,440 --> 00:07:57,508
introduce you to each
and one of those ideas.
136
00:07:57,508 --> 00:07:59,550
And what are we going to
do, then, in this class?
137
00:07:59,550 --> 00:08:01,260
And, really, what are we
going to start doing today?
138
00:08:01,260 --> 00:08:03,402
Well, we're going to learn
how to solve problems.
139
00:08:03,402 --> 00:08:05,610
And that's really what
computer science is all about.
140
00:08:05,610 --> 00:08:09,090
We'll, very specifically,
today, knock off a few to-dos.
141
00:08:09,090 --> 00:08:12,130
We'll learn how to represent
simple things, like numbers.
142
00:08:12,130 --> 00:08:14,880
We'll learn how to represent letters
of an alphabet, like English.
143
00:08:14,880 --> 00:08:17,130
We'll learn how to represent
colors-- red, green, blue,
144
00:08:17,130 --> 00:08:18,240
and everything in between.
145
00:08:18,240 --> 00:08:20,610
We'll learn how to represent,
more interestingly,
146
00:08:20,610 --> 00:08:23,430
full-fledged images that you might
see on the web or your phone.
147
00:08:23,430 --> 00:08:26,730
We'll talk about representing
videos and even audio files.
148
00:08:26,730 --> 00:08:29,540
So, by the end of today,
alone, you will exit here
149
00:08:29,540 --> 00:08:31,850
with a newfound mental
model for how you can
150
00:08:31,850 --> 00:08:36,140
represent all of today's media and
multimedia that we take for granted
151
00:08:36,140 --> 00:08:37,760
and use most every day.
152
00:08:37,760 --> 00:08:40,370
But we'll also focus
today, ultimately, on how
153
00:08:40,370 --> 00:08:43,520
to write algorithms, like
step-by-step instructions for solving
154
00:08:43,520 --> 00:08:47,375
some problem, specifically,
implementing algorithms with code.
155
00:08:47,375 --> 00:08:48,500
And that's what we'll find.
156
00:08:48,500 --> 00:08:50,417
An algorithm is just
something you can express
157
00:08:50,417 --> 00:08:54,350
in English or any human language,
but code is a translation of that
158
00:08:54,350 --> 00:08:57,260
to, presumably, the 0's and
1's that you've probably heard
159
00:08:57,260 --> 00:08:59,840
is all that computers ultimately speak.
160
00:08:59,840 --> 00:09:02,030
And if you're feeling like
that's a lot for today,
161
00:09:02,030 --> 00:09:04,488
if you're feeling like that's
a lot for the whole semester,
162
00:09:04,488 --> 00:09:07,190
realize and take comfort in
knowing that -thirds of you
163
00:09:07,190 --> 00:09:09,720
have never taken a CS course before.
164
00:09:09,720 --> 00:09:12,140
So even if you think, like
I did all those years ago,
165
00:09:12,140 --> 00:09:15,047
that, surely, my friends, the
kids I didn't even in the class,
166
00:09:15,047 --> 00:09:16,880
must know more than I,
have been programming
167
00:09:16,880 --> 00:09:18,500
since they were six years old.
168
00:09:18,500 --> 00:09:19,880
That's just not the case.
169
00:09:19,880 --> 00:09:21,260
You're in very much good company.
170
00:09:21,260 --> 00:09:24,003
And within the class will
you find different tracks,
171
00:09:24,003 --> 00:09:26,420
by way of the homework
assignments, called "problem sets,"
172
00:09:26,420 --> 00:09:28,003
by way of the sections or recitations.
173
00:09:28,003 --> 00:09:29,962
There will be different
tracks for those of you
174
00:09:29,962 --> 00:09:32,610
less comfortable, more
comfortable, somewhere in between.
175
00:09:32,610 --> 00:09:34,940
And if you really don't
know why you are here today,
176
00:09:34,940 --> 00:09:37,970
we'll even have sections for those
least comfortable, where you just
177
00:09:37,970 --> 00:09:41,690
don't necessarily feel ready to dive
into CS or maybe STEM, more generally.
178
00:09:41,690 --> 00:09:44,840
But we'll get you there by way of
the course's support structure.
179
00:09:44,840 --> 00:09:47,780
And it's very much
grounded in this mindset.
180
00:09:47,780 --> 00:09:50,150
What ultimately matters in
this class is not so much
181
00:09:50,150 --> 00:09:52,025
where you end up relative
to your classmates,
182
00:09:52,025 --> 00:09:55,040
but where you end up relative
to yourself, when you began.
183
00:09:55,040 --> 00:09:58,323
So whether you have or have not
prior programming or CSS experience,
184
00:09:58,323 --> 00:10:00,740
it's not going to matter when
it comes to evaluation, when
185
00:10:00,740 --> 00:10:04,320
it comes to the output, be it a grade,
or a satisfactory mark, or the like.
186
00:10:04,320 --> 00:10:06,860
It's going to depend on,
really, where you are today,
187
00:10:06,860 --> 00:10:11,960
in this, what we call week zero, versus
the very end of the semester, when
188
00:10:11,960 --> 00:10:15,050
you will have built something grand,
of your very own, in software.
189
00:10:15,050 --> 00:10:17,270
But CS50 is also
characterized, fairly uniquely,
190
00:10:17,270 --> 00:10:19,147
by its community, its culture.
191
00:10:19,147 --> 00:10:21,230
And along the way, you'll
see that your experience
192
00:10:21,230 --> 00:10:24,680
is punctuated by a lot of social
and academic events alike.
193
00:10:24,680 --> 00:10:27,890
CS50 lunches, most every Friday,
we'll gather at a nearby restaurant
194
00:10:27,890 --> 00:10:30,280
called Changsho where we'll
have Chinese lunch together.
195
00:10:30,280 --> 00:10:32,030
And as many of you as
might want to attend
196
00:10:32,030 --> 00:10:34,988
that week will be able to join us,
sit down, and chat casually with me,
197
00:10:34,988 --> 00:10:39,680
the course's teaching staff, friends
of ours, alumni from industry, as well.
198
00:10:39,680 --> 00:10:42,630
CS50 Puzzle Day, coming up this
weekend, will be an opportunity,
199
00:10:42,630 --> 00:10:46,740
even if you have no prior CS
experience, just to solve problems,
200
00:10:46,740 --> 00:10:49,790
not jigsaw puzzles, but
puzzles in the logical sense.
201
00:10:49,790 --> 00:10:52,490
We'll hand you a packet of puzzles--
202
00:10:52,490 --> 00:10:54,230
logic problems, or
riddles, or the like--
203
00:10:54,230 --> 00:10:56,087
that you, as teams, can solve together.
204
00:10:56,087 --> 00:10:57,920
And at the very end,
we'll walk you through.
205
00:10:57,920 --> 00:11:01,350
And along the way, there'll be not only
these puzzles, but pizza, and prizes,
206
00:11:01,350 --> 00:11:02,960
and so much more, as well.
207
00:11:02,960 --> 00:11:06,350
Towards the end of the semester,
we'll have a CS50 Hackathon whereby
208
00:11:06,350 --> 00:11:09,830
we'll get together around 7:00 PM,
at the start of reading period,
209
00:11:09,830 --> 00:11:12,740
and we'll finish up around
7:00 AM the next morning.
210
00:11:12,740 --> 00:11:15,080
And it will be this
opportunity to really bond
211
00:11:15,080 --> 00:11:18,140
with your classmates, your project
partners, if you work in a team,
212
00:11:18,140 --> 00:11:20,510
on your very own final
project, which is meant
213
00:11:20,510 --> 00:11:23,750
to be a capstone of the course,
something you build, yourselves,
214
00:11:23,750 --> 00:11:25,760
that we don't hand you
a specification for.
215
00:11:25,760 --> 00:11:29,090
But it's your final offboarding,
so that when you exit CS50,
216
00:11:29,090 --> 00:11:31,340
you don't need CS50 anymore.
217
00:11:31,340 --> 00:11:32,100
You don't need me.
218
00:11:32,100 --> 00:11:33,058
You don't need your TF.
219
00:11:33,058 --> 00:11:35,910
You can actually write code
and solve problems on your own.
220
00:11:35,910 --> 00:11:39,740
So this picture here is one of our past
photos from earlier in the evening.
221
00:11:39,740 --> 00:11:42,590
Things get a little quieter
as we then, around 5:00 AM,
222
00:11:42,590 --> 00:11:46,340
drive anyone who's still awake
and energetic to a nearby IHOP
223
00:11:46,340 --> 00:11:48,140
for pancakes, around then.
224
00:11:48,140 --> 00:11:51,710
But here is how most of the evenings
tend to end for at least some
225
00:11:51,710 --> 00:11:53,000
of your classmates prior.
226
00:11:53,000 --> 00:11:55,670
But at the very end of the class
is the so-called CS50 Fair,
227
00:11:55,670 --> 00:11:59,670
an exhibition of all of your final
projects for friends, faculty,
228
00:11:59,670 --> 00:12:01,610
students, and staff
across campus, whereby
229
00:12:01,610 --> 00:12:03,440
you'll be invited to a space like this.
230
00:12:03,440 --> 00:12:04,220
Bring your laptop.
231
00:12:04,220 --> 00:12:06,920
Bring your phone, whatever it
is you have built and created.
232
00:12:06,920 --> 00:12:09,260
And we'll just show it off
for a bit of the afternoon,
233
00:12:09,260 --> 00:12:11,870
complete with music, and
friends from industry,
234
00:12:11,870 --> 00:12:16,000
and candy, and all what makes
gathering together at term's end fond.
235
00:12:16,000 --> 00:12:17,750
And you'll wear,
ultimately, very proudly,
236
00:12:17,750 --> 00:12:21,770
we hope, your very own "I took CS50,"
stating, very matter of factly,
237
00:12:21,770 --> 00:12:25,790
what I did some years ago; that, indeed,
this was a course I, myself, took.
238
00:12:25,790 --> 00:12:29,120
So, today, let's focus, then, on
computer science, like what is it.
239
00:12:29,120 --> 00:12:31,790
Well, it's really the
study of information.
240
00:12:31,790 --> 00:12:34,910
But, really, it's, more
specifically, about solving problems,
241
00:12:34,910 --> 00:12:38,360
using certain ideas and techniques, all
of which you'll exit the course with.
242
00:12:38,360 --> 00:12:43,378
So, as such, problem
solving is a goal that we'll
243
00:12:43,378 --> 00:12:45,920
approach by way of something
called "computational thinking."
244
00:12:45,920 --> 00:12:49,760
So computational thinking, you can
oversimplistically think about it
245
00:12:49,760 --> 00:12:51,500
as thinking like a computer.
246
00:12:51,500 --> 00:12:55,410
But it's really the application of
ideas that we'll dive into today
247
00:12:55,410 --> 00:12:57,380
and we'll finish some
weeks from now, that you
248
00:12:57,380 --> 00:13:01,880
can apply to problems from this field or
most any other, but in a computational,
249
00:13:01,880 --> 00:13:04,770
that is, a very methodical,
very careful way.
250
00:13:04,770 --> 00:13:07,520
And that's what CS really did for
me and does for a lot of people.
251
00:13:07,520 --> 00:13:09,740
It helps clean up your
thought processes.
252
00:13:09,740 --> 00:13:12,560
Even if you go off into the real
world and do nothing in tech,
253
00:13:12,560 --> 00:13:14,840
you have an ability,
after classes like this,
254
00:13:14,840 --> 00:13:18,020
to express yourself a
little more correctly, more
255
00:13:18,020 --> 00:13:20,660
precisely and, generally,
having better command
256
00:13:20,660 --> 00:13:22,980
of your own ideas and your language.
257
00:13:22,980 --> 00:13:24,410
So what's problem solving?
258
00:13:24,410 --> 00:13:25,790
Let me propose that this is it.
259
00:13:25,790 --> 00:13:29,270
This is as simple as we can make
today's goals and the semester's goals.
260
00:13:29,270 --> 00:13:30,960
Problems to be solved look like this.
261
00:13:30,960 --> 00:13:32,960
You've got some input,
the problem to be solved.
262
00:13:32,960 --> 00:13:35,750
You've got a goal being the output,
like the solution there, too.
263
00:13:35,750 --> 00:13:38,000
And then somewhere in the
middle is the secret sauce,
264
00:13:38,000 --> 00:13:40,375
where we'll spend the next
several weeks figuring out how
265
00:13:40,375 --> 00:13:42,350
we can convert these inputs to outputs.
266
00:13:42,350 --> 00:13:44,870
But before we can do
that, we all just have
267
00:13:44,870 --> 00:13:48,260
to agree on how to represent
these inputs and outputs,
268
00:13:48,260 --> 00:13:51,260
whether it's with English or,
really, any type of language.
269
00:13:51,260 --> 00:13:54,290
But, as I spoiled earlier, you
probably came in here already
270
00:13:54,290 --> 00:13:56,900
with a general sense that,
yeah, computers somehow
271
00:13:56,900 --> 00:14:00,823
only speak or know 0's and 1's,
the so-called binary system.
272
00:14:00,823 --> 00:14:02,990
But that's just one way of
representing information.
273
00:14:02,990 --> 00:14:05,150
Even simpler than binary is unary.
274
00:14:05,150 --> 00:14:10,670
So if you've ever, at this age or any
prior age, counted on your fingers,
275
00:14:10,670 --> 00:14:14,480
this is unary notation, whereby
each of your digits, your fingers
276
00:14:14,480 --> 00:14:17,000
literally represent some
piece of information;
277
00:14:17,000 --> 00:14:19,760
taking attendance, like 1, 2, 3, 4, 5.
278
00:14:19,760 --> 00:14:25,800
But on your one human hand, how high
can you count in this unary notation?
279
00:14:25,800 --> 00:14:26,505
AUDIENCE: Five.
280
00:14:26,505 --> 00:14:27,130
AUDIENCE: Five.
281
00:14:27,130 --> 00:14:29,550
DAVID J. MALAN: Five, I'm hearing five.
282
00:14:29,550 --> 00:14:31,890
Six, I heard one six.
283
00:14:31,890 --> 00:14:35,610
But I'm going to go further and say
the answer, if you're clever about it,
284
00:14:35,610 --> 00:14:36,500
is actually--
285
00:14:36,500 --> 00:14:37,132
AUDIENCE: 40?
286
00:14:37,132 --> 00:14:38,340
DAVID J. MALAN: Not quite 40.
287
00:14:38,340 --> 00:14:39,660
You overbid, but--
288
00:14:39,660 --> 00:14:40,500
AUDIENCE: 31.
289
00:14:40,500 --> 00:14:43,885
DAVID J. MALAN: 31 is as
high as I can actually count.
290
00:14:43,885 --> 00:14:46,260
And that's because if I
actually-- and if you're thinking
291
00:14:46,260 --> 00:14:49,530
this is weirdly painful
now, it will be, but this
292
00:14:49,530 --> 00:14:51,600
is my hand representing the number 0.
293
00:14:51,600 --> 00:14:55,980
Normally, in unary, this is 1,
2, 3, 4, 5, of course, obviously.
294
00:14:55,980 --> 00:14:58,290
But what if I take into
account the order in which I'm
295
00:14:58,290 --> 00:14:59,590
putting my fingers up and down?
296
00:14:59,590 --> 00:15:00,840
So maybe this is still 0.
297
00:15:00,840 --> 00:15:02,490
Maybe this is still 1.
298
00:15:02,490 --> 00:15:07,410
But maybe this is now 2, where it's
just the single second finger up,
299
00:15:07,410 --> 00:15:08,940
not two of them, total.
300
00:15:08,940 --> 00:15:10,860
Maybe this is now 3.
301
00:15:10,860 --> 00:15:14,730
Maybe this is now-- often offensive,
with just the middle finger up.
302
00:15:14,730 --> 00:15:17,250
This is now [LAUGHS] 5.
303
00:15:17,250 --> 00:15:19,260
This is now 6.
304
00:15:19,260 --> 00:15:21,160
This is now 7.
305
00:15:21,160 --> 00:15:24,010
And my hand just hurts too much if
I try to count higher than seven.
306
00:15:24,010 --> 00:15:27,640
But, theoretically, because each
of my fingers can be down or up
307
00:15:27,640 --> 00:15:32,230
and I've got five of them, that's
actually 32 possible permutations,
308
00:15:32,230 --> 00:15:32,890
up and down.
309
00:15:32,890 --> 00:15:33,640
But wait a minute.
310
00:15:33,640 --> 00:15:36,130
We said, 31, but if you start at 0.
311
00:15:36,130 --> 00:15:38,735
You have to subtract 1 from
the biggest possible value.
312
00:15:38,735 --> 00:15:41,860
So this is to say you and I have been
using unary because it's just simple,
313
00:15:41,860 --> 00:15:43,100
and it gets the job done.
314
00:15:43,100 --> 00:15:46,750
But if we just think about
representation a little more cleverly,
315
00:15:46,750 --> 00:15:50,410
we can do exactly what computers do,
using not what mathematicians call
316
00:15:50,410 --> 00:15:54,460
"base-1," where the finger is either
there or it's not, but base-2.
317
00:15:54,460 --> 00:15:58,390
And in base-2, we just need
two digits at our disposal.
318
00:15:58,390 --> 00:16:02,720
And we could call these digits 1
and 2, A and B, black or white.
319
00:16:02,720 --> 00:16:06,370
We just need two words to describe
two pieces of information.
320
00:16:06,370 --> 00:16:07,600
Computers keep it simple.
321
00:16:07,600 --> 00:16:10,960
And just like we humans start
counting 0, 1, 2, 3 on up,
322
00:16:10,960 --> 00:16:14,230
computers use 0 and 1, and that's it.
323
00:16:14,230 --> 00:16:15,710
But that's by convention.
324
00:16:15,710 --> 00:16:16,940
But why do they do that?
325
00:16:16,940 --> 00:16:21,930
Well, it turns out, when you use
base-2, otherwise known as binary, well,
326
00:16:21,930 --> 00:16:24,030
it just maps really
readily to the real world.
327
00:16:24,030 --> 00:16:25,947
Because, at the end of
the day, what do we all
328
00:16:25,947 --> 00:16:28,740
do, if you've got a laptop,
or a phone, or any device?
329
00:16:28,740 --> 00:16:32,310
You plug it into the wall because
it needs electricity at some point.
330
00:16:32,310 --> 00:16:35,820
And what if you have electricity or not?
331
00:16:35,820 --> 00:16:38,190
Well, there's your two possible values.
332
00:16:38,190 --> 00:16:39,910
Either it's there, or it's not.
333
00:16:39,910 --> 00:16:42,000
And because computers
are electrical devices,
334
00:16:42,000 --> 00:16:43,675
this is why binary is just useful.
335
00:16:43,675 --> 00:16:44,550
It's nice and simple.
336
00:16:44,550 --> 00:16:46,920
Either electricity is
there, or it's not.
337
00:16:46,920 --> 00:16:48,810
So when you plug this
device in and you've
338
00:16:48,810 --> 00:16:51,060
got all these electrons
or whatever flowing, maybe
339
00:16:51,060 --> 00:16:53,250
if we just hang on to
some of that electricity,
340
00:16:53,250 --> 00:16:55,230
we can represent what we'll call a 1.
341
00:16:55,230 --> 00:16:58,470
And maybe if we let it dissipate
or go away, that's a 0.
342
00:16:58,470 --> 00:17:02,760
So on and off maps very readily
to this idea of just 0's and 1's.
343
00:17:02,760 --> 00:17:06,750
And if you've ever thought of
this, now, as binary digits--
344
00:17:06,750 --> 00:17:10,380
"bi" implying 2, 0 and 1-- well,
if you've ever heard this term now,
345
00:17:10,380 --> 00:17:12,690
"bit," it just means binary digit.
346
00:17:12,690 --> 00:17:14,688
A single bit is just a 0 or 1.
347
00:17:14,688 --> 00:17:16,980
But we could have called
these things anything we want.
348
00:17:16,980 --> 00:17:20,069
Now how does this map to
be clear to the real world?
349
00:17:20,069 --> 00:17:23,470
Well, we can't see the tiny little
switches inside of our Macs,
350
00:17:23,470 --> 00:17:26,140
PCs, and our phones that are
actually turning the electricity on
351
00:17:26,140 --> 00:17:28,480
or off, storing electricity or not.
352
00:17:28,480 --> 00:17:29,920
But they're called transistors.
353
00:17:29,920 --> 00:17:32,470
They've got millions of
them in today's hardware.
354
00:17:32,470 --> 00:17:35,317
And they're just on or off,
like a switch or a light bulb.
355
00:17:35,317 --> 00:17:37,150
So, for instance, if
there's no electricity,
356
00:17:37,150 --> 00:17:40,690
the switch is off, we would
call this, by convention, a 0.
357
00:17:40,690 --> 00:17:45,160
If, though, you throw the switch and it
actually turns on, we would call this--
358
00:17:45,160 --> 00:17:45,940
AUDIENCE: On.
359
00:17:45,940 --> 00:17:47,607
DAVID J. MALAN: --an "on," exactly, a 1.
360
00:17:47,607 --> 00:17:48,690
We could have reversed it.
361
00:17:48,690 --> 00:17:51,160
But this is just the way the
world decided to standardize.
362
00:17:51,160 --> 00:17:51,910
And that's it.
363
00:17:51,910 --> 00:17:55,780
So you've either got something
on or off, a 1 or a 0.
364
00:17:55,780 --> 00:18:00,020
And this, then, is this thing we
know now as a binary digit or a bit.
365
00:18:00,020 --> 00:18:04,490
So once we've got these
values, what about how--
366
00:18:04,490 --> 00:18:07,090
how can we go about,
perhaps, representing things?
367
00:18:07,090 --> 00:18:08,060
Well, you know what?
368
00:18:08,060 --> 00:18:10,352
It turns out we've got a lot
of light bulbs right here.
369
00:18:10,352 --> 00:18:11,260
Let me grab-- thanks.
370
00:18:11,260 --> 00:18:12,010
Excuse me, spot.
371
00:18:12,010 --> 00:18:16,540
Let me grab the little music stand here.
372
00:18:16,540 --> 00:18:18,610
Let me borrow a couple
of these bulbs and see
373
00:18:18,610 --> 00:18:22,310
if we can't make clearer than my
hand, alone, what's going on here.
374
00:18:22,310 --> 00:18:24,970
So I'm going to go ahead
and grab two of these.
375
00:18:24,970 --> 00:18:26,670
And I'll just put them here.
376
00:18:26,670 --> 00:18:28,420
And I can turn these
things on or off now.
377
00:18:28,420 --> 00:18:32,560
So if I've got two bits, two switches,
two transistors, if you will, well,
378
00:18:32,560 --> 00:18:38,660
if I go ahead and turn on this one,
I'm representing what number in binary,
379
00:18:38,660 --> 00:18:39,160
perhaps?
380
00:18:39,160 --> 00:18:39,880
AUDIENCE: 1.
381
00:18:39,880 --> 00:18:41,200
DAVID J. MALAN: So just 1.
382
00:18:41,200 --> 00:18:45,130
Now, if I'm using unary, I would
turn this one on and be done with it.
383
00:18:45,130 --> 00:18:46,980
And that's 2, but not in binary.
384
00:18:46,980 --> 00:18:51,350
Binary, it's the permutations, which
ones are on and off, that matters.
385
00:18:51,350 --> 00:18:53,790
So what, now, am I
representing here, perhaps?
386
00:18:53,790 --> 00:18:54,370
AUDIENCE: 2.
387
00:18:54,370 --> 00:18:55,120
DAVID J. MALAN: 2.
388
00:18:55,120 --> 00:18:58,210
So this is when I put my
single pointer finger up.
389
00:18:58,210 --> 00:19:00,430
But then when I did
this, in my human hand,
390
00:19:00,430 --> 00:19:03,310
this was like representing the number 3.
391
00:19:03,310 --> 00:19:06,640
How do I represent the number 4.
392
00:19:06,640 --> 00:19:11,000
Yeah, I need another light bulb, so
I need more hardware, so to speak.
393
00:19:11,000 --> 00:19:13,000
So if I turn--
394
00:19:13,000 --> 00:19:19,180
if I leave this one-- if I turn this
one on, this one off, this one off,
395
00:19:19,180 --> 00:19:21,380
now I have the number 4.
396
00:19:21,380 --> 00:19:24,593
And someone tell me,
saying the words "on"
397
00:19:24,593 --> 00:19:26,510
and "on" and "on," or
"on," or "off," or "on,"
398
00:19:26,510 --> 00:19:28,850
using combinations of
"on," "off" and-- "on"
399
00:19:28,850 --> 00:19:32,832
and "off," how do I represent
5, from your left to your right?
400
00:19:32,832 --> 00:19:33,665
How about over here?
401
00:19:33,665 --> 00:19:34,880
AUDIENCE: On, off, on.
402
00:19:34,880 --> 00:19:36,620
DAVID J. MALAN: "On, off, on," I heard.
403
00:19:36,620 --> 00:19:38,480
And that's exactly right.
404
00:19:38,480 --> 00:19:41,085
And how do I represent, maybe, 6?
405
00:19:41,085 --> 00:19:41,585
Over here?
406
00:19:41,585 --> 00:19:43,010
AUDIENCE: Off, on, on.
407
00:19:43,010 --> 00:19:45,080
DAVID J. MALAN: Off, on, on, not quite.
408
00:19:45,080 --> 00:19:45,995
From left to right?
409
00:19:45,995 --> 00:19:47,390
AUDIENCE: Off-- the other way.
410
00:19:47,390 --> 00:19:47,620
DAVID J. MALAN: The--
411
00:19:47,620 --> 00:19:49,290
[LAUGHS] OK, so from right to left.
412
00:19:49,290 --> 00:19:50,960
So I think we leave this one on.
413
00:19:50,960 --> 00:19:58,760
This one, I'm going to claim,
represents, now, 6 and 7.
414
00:19:58,760 --> 00:19:59,570
AUDIENCE: On, off.
415
00:19:59,570 --> 00:20:02,300
DAVID J. MALAN: I'm just going to--
it's actually going to be "on, on, on."
416
00:20:02,300 --> 00:20:04,737
Now, if you're wondering, where
are these people coming up
417
00:20:04,737 --> 00:20:07,070
with these combinations,
there's actually a system here.
418
00:20:07,070 --> 00:20:09,770
It's actually hard for
me to do it backwards.
419
00:20:09,770 --> 00:20:14,202
But it turns out there's actually a
system that's not all that unfamiliar.
420
00:20:14,202 --> 00:20:15,410
In fact, let me propose this.
421
00:20:15,410 --> 00:20:18,770
Let me propose that we
consider what you and I all
422
00:20:18,770 --> 00:20:23,100
learned in grade school, which was
something like the base-10 system, 10
423
00:20:23,100 --> 00:20:25,770
meaning that you use 10
different digits, not two, 10.
424
00:20:25,770 --> 00:20:30,300
So 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, that's
the base-10 system, otherwise known
425
00:20:30,300 --> 00:20:32,370
as decimal, "dec" implying 10.
426
00:20:32,370 --> 00:20:34,140
So that's what you and I use every day.
427
00:20:34,140 --> 00:20:37,140
Well, let's think about how we
represent numbers in decimal,
428
00:20:37,140 --> 00:20:38,430
in the normal human way.
429
00:20:38,430 --> 00:20:39,520
Well, here is a number.
430
00:20:39,520 --> 00:20:41,380
It's what number, of course?
431
00:20:41,380 --> 00:20:42,180
AUDIENCE: 123.
432
00:20:42,180 --> 00:20:43,542
DAVID J. MALAN: 123.
433
00:20:43,542 --> 00:20:45,750
So we all just have an
intuition for that, obviously.
434
00:20:45,750 --> 00:20:48,420
But it's not necessarily 123.
435
00:20:48,420 --> 00:20:51,640
You're just assigning meaning to
the positions of these digits.
436
00:20:51,640 --> 00:20:54,030
This is really the pattern 1-2-3.
437
00:20:54,030 --> 00:20:57,390
But you immediately jump,
mathematically, to 123, but why?
438
00:20:57,390 --> 00:21:00,390
Well, odds are, in grade school, you
learned that the rightmost digit is
439
00:21:00,390 --> 00:21:02,160
the ones place or the ones column.
440
00:21:02,160 --> 00:21:04,800
This is the tens place
or the tens column.
441
00:21:04,800 --> 00:21:06,490
This is the hundreds place.
442
00:21:06,490 --> 00:21:08,230
And so why is this relevant?
443
00:21:08,230 --> 00:21:11,190
Well, this is like doing
100 times 1 plus 10 times
444
00:21:11,190 --> 00:21:16,410
2 plus 1 times 3 or, if we multiply
that out, 100 plus 20 plus 3,
445
00:21:16,410 --> 00:21:21,240
ergo, the number, now, that we
just take for granted is 123.
446
00:21:21,240 --> 00:21:24,240
But that's in base-10, the
so-called decimal system,
447
00:21:24,240 --> 00:21:27,930
whereby each of these digits
is in a different column.
448
00:21:27,930 --> 00:21:31,080
And those columns are, again,
ones place, tens, hundreds.
449
00:21:31,080 --> 00:21:33,790
If we keep going, thousand,
ten thousand, and so forth.
450
00:21:33,790 --> 00:21:35,040
But where did these come from?
451
00:21:35,040 --> 00:21:35,957
Well, here's the base.
452
00:21:35,957 --> 00:21:37,770
If you remember exponents
and all of that,
453
00:21:37,770 --> 00:21:41,910
this is just 10 to the 0, 10 to
the 1, 10 to the 2, ad infinitum.
454
00:21:41,910 --> 00:21:46,860
And so, now, what if we just changed
the base from 10, 0 through 9,
455
00:21:46,860 --> 00:21:48,480
to just two digits, 0 and 1?
456
00:21:48,480 --> 00:21:50,610
Well, now the math is
fundamentally the same.
457
00:21:50,610 --> 00:21:52,880
But it's 2 to the 0, 2
to the 1, 2 to the 2,
458
00:21:52,880 --> 00:21:57,030
which gives us the ones place,
twos place, and fours place.
459
00:21:57,030 --> 00:21:58,410
Now, why is this relevant?
460
00:21:58,410 --> 00:22:02,790
If you've got three light bulbs or
three bits that are off, off, off,
461
00:22:02,790 --> 00:22:03,930
what have I done?
462
00:22:03,930 --> 00:22:07,710
4 times 0 plus 2 times 0 plus 1
times 0 is, obviously, the number
463
00:22:07,710 --> 00:22:09,990
you and I know, in decimal, as 0.
464
00:22:09,990 --> 00:22:12,630
This, though, represents the
number you and I know as--
465
00:22:12,630 --> 00:22:13,230
AUDIENCE: 1
466
00:22:13,230 --> 00:22:14,605
DAVID J. MALAN: This represents--
467
00:22:14,605 --> 00:22:15,195
AUDIENCE: 2.
468
00:22:15,195 --> 00:22:17,910
DAVID J. MALAN: --3, 4.
469
00:22:17,910 --> 00:22:21,540
And just to be clear, this is why, when
I grabbed the additional light bulb,
470
00:22:21,540 --> 00:22:25,170
we claimed that this now was 4.
471
00:22:25,170 --> 00:22:29,430
Because we had "on, off,
off," "on, off, off."
472
00:22:29,430 --> 00:22:30,960
This now is 5.
473
00:22:30,960 --> 00:22:32,190
This now is 6.
474
00:22:32,190 --> 00:22:33,240
This now is 7.
475
00:22:33,240 --> 00:22:36,480
And if I wanted to count higher, what
would the pattern of 0's and 1's be
476
00:22:36,480 --> 00:22:37,478
for the number 8?
477
00:22:37,478 --> 00:22:38,942
AUDIENCE: 1, 0--
478
00:22:38,942 --> 00:22:40,410
DAVID J. MALAN: 1, 0, 0, 0.
479
00:22:40,410 --> 00:22:42,330
So we just need more
hardware, more bits.
480
00:22:42,330 --> 00:22:45,630
So it wasn't arbitrary,
even if it was non-obvious,
481
00:22:45,630 --> 00:22:49,660
what I was actually doing with
turning these light bulbs on and off.
482
00:22:49,660 --> 00:22:53,730
Now, it turns out here we are talking
about how to represent information,
483
00:22:53,730 --> 00:22:59,490
like numbers, but we could also
use bits, 0's and 1's, light bulbs
484
00:22:59,490 --> 00:23:01,590
to represent instructions, as well.
485
00:23:01,590 --> 00:23:04,050
Because, at the end of the
day, that's all computers do.
486
00:23:04,050 --> 00:23:07,950
They process data, information
of some sort, whether it's files,
487
00:23:07,950 --> 00:23:10,290
or numbers, or images,
or videos, or the like.
488
00:23:10,290 --> 00:23:13,290
And you do things with those files.
489
00:23:13,290 --> 00:23:13,985
You open them.
490
00:23:13,985 --> 00:23:14,610
You print them.
491
00:23:14,610 --> 00:23:15,610
You edit them and the like.
492
00:23:15,610 --> 00:23:18,720
So there's this notion of instructions,
what the computer can actually do.
493
00:23:18,720 --> 00:23:22,470
And I bet we could come up with
some pattern of 0's and 1's
494
00:23:22,470 --> 00:23:26,970
or, equivalently, light bulbs
that tell even Spot what to do.
495
00:23:26,970 --> 00:23:30,785
Maybe, go up, or down,
or left, or right.
496
00:23:30,785 --> 00:23:33,660
And it could certainly do this
autonomously by using various sensors.
497
00:23:33,660 --> 00:23:35,077
We need to keep things safe today.
498
00:23:35,077 --> 00:23:38,248
We're using Wi-Fi in sending
Spot these very instructions.
499
00:23:38,248 --> 00:23:41,040
But what's happening, wirelessly,
with our friend Andrew, here, is,
500
00:23:41,040 --> 00:23:45,330
essentially, he's sending Spot
instructions just encoded, wirelessly,
501
00:23:45,330 --> 00:23:47,610
somehow, as patterns of 0's and 1's.
502
00:23:47,610 --> 00:23:51,390
And the folks at Boston Dynamics,
who built this robot, programmed
503
00:23:51,390 --> 00:23:54,330
Spot to recognize certain
patterns as meaning "up,"
504
00:23:54,330 --> 00:23:57,030
a certain pattern as meaning
"down," "left," "right,"
505
00:23:57,030 --> 00:23:58,505
and any number of other things.
506
00:23:58,505 --> 00:24:00,630
So, in fact, Spot, come on
over here, if you could.
507
00:24:00,630 --> 00:24:01,830
Come on, Spot.
508
00:24:01,830 --> 00:24:03,510
[FOOTSTEPS]
509
00:24:03,510 --> 00:24:05,640
OK.
510
00:24:05,640 --> 00:24:08,400
So Spot, for instance, may
very well have a pattern
511
00:24:08,400 --> 00:24:11,190
of 0's and 1's that represents shake.
512
00:24:11,190 --> 00:24:12,720
Shake, Spot.
513
00:24:12,720 --> 00:24:16,330
So he could do that and any number
of other movements, as well.
514
00:24:16,330 --> 00:24:19,680
And maybe, especially with sensors here
and also a little human help over here,
515
00:24:19,680 --> 00:24:22,540
for today, what if we went
ahead and did something-- maybe
516
00:24:22,540 --> 00:24:23,870
ask Spot some questions?
517
00:24:23,870 --> 00:24:25,660
So let's go ahead, and
we'll start simple.
518
00:24:25,660 --> 00:24:31,150
Spot, here we have some
bits, "off, off, on."
519
00:24:31,150 --> 00:24:34,030
Spot, what [LAUGHS]-- OK.
520
00:24:34,030 --> 00:24:41,260
Spot, what is this
representing, "off, off, on"?
521
00:24:41,260 --> 00:24:43,710
[SPOT TAPS STAGE]
522
00:24:43,710 --> 00:24:44,970
Correct?
523
00:24:44,970 --> 00:24:45,900
I think so.
524
00:24:45,900 --> 00:24:46,900
Very horse-like, OK.
525
00:24:46,900 --> 00:24:47,400
Thank you.
526
00:24:47,400 --> 00:24:49,400
All right, so a round of
applause for Spot here.
527
00:24:49,400 --> 00:24:50,310
[APPLAUSE]
528
00:24:50,310 --> 00:24:51,450
All right.
529
00:24:51,450 --> 00:24:54,400
So, Spot, what if we [LAUGHS] turn--
530
00:24:54,400 --> 00:24:54,900
OK.
531
00:24:54,900 --> 00:24:56,160
We'll turn that one off here.
532
00:24:56,160 --> 00:24:57,535
How about if we turn this one on?
533
00:24:57,535 --> 00:24:59,280
So it's "off, on, off."
534
00:24:59,280 --> 00:25:02,470
Spot, what's this number?
535
00:25:02,470 --> 00:25:04,310
[SPOT TAPPING STAGE]
536
00:25:04,310 --> 00:25:05,570
Is that correct?
537
00:25:05,570 --> 00:25:06,150
Nice.
538
00:25:06,150 --> 00:25:06,650
OK.
539
00:25:06,650 --> 00:25:07,655
[APPLAUSE]
540
00:25:07,655 --> 00:25:09,620
[LAUGHS] How about one final flourish?
541
00:25:09,620 --> 00:25:12,440
How about, Spot, instead
of "off, on, off,"
542
00:25:12,440 --> 00:25:16,280
let's go ahead and do "off, on, on"?
543
00:25:16,280 --> 00:25:20,810
So think, in your mind's eye,
what the answer should be.
544
00:25:20,810 --> 00:25:24,104
All right, Spot, "off, on, on."
545
00:25:24,104 --> 00:25:27,420
[SPOT LANDING ON THE STAGE]
546
00:25:27,420 --> 00:25:27,920
547
00:25:27,920 --> 00:25:28,460
OK.
548
00:25:28,460 --> 00:25:30,830
And a round of applause
for, Spot, as well.
549
00:25:30,830 --> 00:25:31,816
[LAUGHS]
550
00:25:31,816 --> 00:25:33,790
[APPLAUSE]
551
00:25:33,790 --> 00:25:36,450
So this is to say, no matter how--
552
00:25:36,450 --> 00:25:37,140
thank you, Spot.
553
00:25:37,140 --> 00:25:40,620
No matter how fancy today's
hardware or software is,
554
00:25:40,620 --> 00:25:42,720
it really just boils
down to representing
555
00:25:42,720 --> 00:25:44,838
information and instructions.
556
00:25:44,838 --> 00:25:47,130
And computers, and phones,
and the like really are just
557
00:25:47,130 --> 00:25:51,460
operating on those same
pieces of information,
558
00:25:51,460 --> 00:25:55,240
whether implemented in 0's and 1's
or with, really, anything else.
559
00:25:55,240 --> 00:25:55,740
All right.
560
00:25:55,740 --> 00:25:59,880
So, where can we take this, once
we have this agreed-upon system
561
00:25:59,880 --> 00:26:03,030
for representing [LAUGHS] information?
562
00:26:03,030 --> 00:26:06,960
Well, it turns out that using three
bits, three 0's and 1's, at a time,
563
00:26:06,960 --> 00:26:08,700
isn't actually all that useful.
564
00:26:08,700 --> 00:26:12,240
And you and I, even in conversation,
don't often say the word "bit."
565
00:26:12,240 --> 00:26:13,500
We say the word "byte."
566
00:26:13,500 --> 00:26:15,280
And what is a byte, if familiar?
567
00:26:15,280 --> 00:26:15,780
Yeah?
568
00:26:15,780 --> 00:26:16,750
AUDIENCE: It's eight bits.
569
00:26:16,750 --> 00:26:18,417
DAVID J. MALAN: So it's just eight bits.
570
00:26:18,417 --> 00:26:20,200
It's just a more useful unit of measure.
571
00:26:20,200 --> 00:26:22,715
And it happens to be a
power of 2, 2 to the third,
572
00:26:22,715 --> 00:26:24,340
which just makes math work out cleanly.
573
00:26:24,340 --> 00:26:27,610
But it's just a convention, to have
more interesting units of measure
574
00:26:27,610 --> 00:26:28,540
than individual bits.
575
00:26:28,540 --> 00:26:30,350
So a byte is eight bits.
576
00:26:30,350 --> 00:26:34,690
So, for instance, this represents,
using eight bits, eight light bulbs,
577
00:26:34,690 --> 00:26:36,460
the number you and I know is 0.
578
00:26:36,460 --> 00:26:40,960
And this byte of all 1 bits--
579
00:26:40,960 --> 00:26:46,040
now you've got to do some quick math--
represents what number, instead?
580
00:26:46,040 --> 00:26:48,657
So it's all 1's; eight of them, total.
581
00:26:48,657 --> 00:26:49,990
How about over here, on the end?
582
00:26:49,990 --> 00:26:51,050
AUDIENCE: 255.
583
00:26:51,050 --> 00:26:52,992
DAVID J. MALAN: So it's, indeed, 255.
584
00:26:52,992 --> 00:26:54,700
Now, that's not the
kind of math that you
585
00:26:54,700 --> 00:26:57,310
need to do in your head for a
class like this, but you could.
586
00:26:57,310 --> 00:27:04,690
This is the ones place, twos,
fours, eight, 16, 32, 64, 128.
587
00:27:04,690 --> 00:27:08,800
And because they're all 1, you just have
to add up all of those columns' values.
588
00:27:08,800 --> 00:27:10,570
And you get 255.
589
00:27:10,570 --> 00:27:13,690
But a little mental trick, too,
is that, if you've got eight bits
590
00:27:13,690 --> 00:27:17,270
and each of them can be two
possible values, 0 or 1,
591
00:27:17,270 --> 00:27:21,740
that's like 2 possibilities here times
2 times 2 times 2 times 2, eight times.
592
00:27:21,740 --> 00:27:25,310
So that's 2 to the eighth, so that
is maybe a little easier to do.
593
00:27:25,310 --> 00:27:26,720
That's 256.
594
00:27:26,720 --> 00:27:29,780
Or easier, in the sense that you get
used to seeing these numbers in CS.
595
00:27:29,780 --> 00:27:31,220
That's 256.
596
00:27:31,220 --> 00:27:32,030
But wait a minute.
597
00:27:32,030 --> 00:27:35,300
How do I reconcile this with your 255?
598
00:27:35,300 --> 00:27:36,650
Because you start at 0.
599
00:27:36,650 --> 00:27:41,120
So you lose one on the high end because
we started counting and representing
600
00:27:41,120 --> 00:27:42,830
the number, like 0.
601
00:27:42,830 --> 00:27:43,760
All right.
602
00:27:43,760 --> 00:27:47,570
Questions on how we've represented
just numbers or, for instance,
603
00:27:47,570 --> 00:27:51,600
instructions to Spot, thus far?
604
00:27:51,600 --> 00:27:57,410
Any questions on binary,
unary, or the like?
605
00:27:57,410 --> 00:27:58,010
No?
606
00:27:58,010 --> 00:28:01,137
All right, so seeing none,
let's let things escalate a bit.
607
00:28:01,137 --> 00:28:03,470
So how do you represent letters
because, obviously, this
608
00:28:03,470 --> 00:28:05,262
makes our devices more
useful, whether it's
609
00:28:05,262 --> 00:28:07,020
in English or any other human language.
610
00:28:07,020 --> 00:28:10,740
How could we go about representing
the letter A, for instance?
611
00:28:10,740 --> 00:28:13,370
If, at the end of the
day, all our computers,
612
00:28:13,370 --> 00:28:17,390
all our phones have access to is
electricity; or, equivalently,
613
00:28:17,390 --> 00:28:20,570
switches; or, metaphorically,
tiny little light bulbs
614
00:28:20,570 --> 00:28:23,750
inside of them that can
be on and off-- that's it.
615
00:28:23,750 --> 00:28:26,990
There's no more building
blocks to give you.
616
00:28:26,990 --> 00:28:30,530
How could we represent
something like the letter A?
617
00:28:30,530 --> 00:28:32,000
Yeah, how about here?
618
00:28:32,000 --> 00:28:32,812
Yeah?
619
00:28:32,812 --> 00:28:34,312
AUDIENCE: You could assign a number.
620
00:28:34,312 --> 00:28:35,343
DAVID J. MALAN: Perfect.
621
00:28:35,343 --> 00:28:37,260
So we could just assign
every letter a number.
622
00:28:37,260 --> 00:28:38,677
And we could do this super simply.
623
00:28:38,677 --> 00:28:42,660
Maybe 0 is A, and 1
is B. Or maybe 1 is A,
624
00:28:42,660 --> 00:28:46,110
and 2 is B. It doesn't really matter,
so long as we all agree and we all
625
00:28:46,110 --> 00:28:48,660
use the same types of computers,
in some sense, ultimately.
626
00:28:48,660 --> 00:28:51,730
Well, for various reasons, the
humans that designed this system,
627
00:28:51,730 --> 00:28:53,160
they went with the number 65.
628
00:28:53,160 --> 00:28:57,540
So, nowadays, anytime your computer
is showing you the capital letter
629
00:28:57,540 --> 00:29:00,690
A on the screen, underneath
the hood, so to speak,
630
00:29:00,690 --> 00:29:06,780
it's actually storing a pattern of 0's
and 1's that represents the number 65.
631
00:29:06,780 --> 00:29:09,930
And it tends to use seven bits
or, typically, eight bits, total,
632
00:29:09,930 --> 00:29:12,790
even if it doesn't need
all of those bits in total.
633
00:29:12,790 --> 00:29:14,980
So how do we get there?
634
00:29:14,980 --> 00:29:17,490
Well, here, for instance,
is that same pattern.
635
00:29:17,490 --> 00:29:19,980
Here is that pattern of
bits that represents 65.
636
00:29:19,980 --> 00:29:20,520
And why?
637
00:29:20,520 --> 00:29:22,200
Well, quick check here.
638
00:29:22,200 --> 00:29:29,160
This is the ones place, twos,
fours, eights, 16, 32, 64's place.
639
00:29:29,160 --> 00:29:32,640
OK, so 64 plus 1 gives me 65.
640
00:29:32,640 --> 00:29:36,830
So that is to say here's how a computer,
using some light switches, so to speak,
641
00:29:36,830 --> 00:29:38,620
would represent the number 65.
642
00:29:38,620 --> 00:29:41,540
And our Macs, our PCs, our
phones just all know this.
643
00:29:41,540 --> 00:29:44,410
So whenever they see that in
their memory, so to speak,
644
00:29:44,410 --> 00:29:47,560
they show a capital
letter A on the screen.
645
00:29:47,560 --> 00:29:48,520
So that's it.
646
00:29:48,520 --> 00:29:51,250
That's the system known as
ASCII, the American Standard
647
00:29:51,250 --> 00:29:52,840
Code for Information Interchange.
648
00:29:52,840 --> 00:29:57,340
And the A is actually operative there
because we're only talking, thus far,
649
00:29:57,340 --> 00:29:59,500
about English letters in our alphabet.
650
00:29:59,500 --> 00:30:02,530
And, in fact, I claimed, a
moment ago, that we only use
651
00:30:02,530 --> 00:30:06,250
seven, maybe eight bits to
represent letters of an alphabet.
652
00:30:06,250 --> 00:30:08,410
So, just to come back to
you, if I may, how many
653
00:30:08,410 --> 00:30:10,900
possible letters of the
alphabet could-- how
654
00:30:10,900 --> 00:30:14,350
many possible letters of any alphabet
could we represent with eight bits?
655
00:30:14,350 --> 00:30:15,310
AUDIENCE: 256.
656
00:30:15,310 --> 00:30:18,400
DAVID J. MALAN: 256, the
numbers 0 through 255.
657
00:30:18,400 --> 00:30:20,650
Now, that's more than enough
for English because we've
658
00:30:20,650 --> 00:30:23,498
got A through Z, uppercase,
lowercase, a bunch of numbers,
659
00:30:23,498 --> 00:30:24,790
a bunch of punctuation symbols.
660
00:30:24,790 --> 00:30:28,660
But in a lot of languages, with accented
characters, a lot of Asian characters,
661
00:30:28,660 --> 00:30:32,230
this is not nearly enough
memory or bits with which
662
00:30:32,230 --> 00:30:34,717
to represent all of
those possible values.
663
00:30:34,717 --> 00:30:36,550
So we need to do a
little better than ASCII,
664
00:30:36,550 --> 00:30:39,200
but we can build on top of
what they did years ago.
665
00:30:39,200 --> 00:30:41,080
So here is a chart of ASCII codes.
666
00:30:41,080 --> 00:30:44,270
It's just a bunch of columns showing
us the mapping between letters
667
00:30:44,270 --> 00:30:44,770
and numbers.
668
00:30:44,770 --> 00:30:49,420
So, for instance, up here is the
capital letter A, 65; capital B, 66;
669
00:30:49,420 --> 00:30:52,060
capital C, 67; dot, dot, dot.
670
00:30:52,060 --> 00:30:56,333
72 is H. 73 is I and so forth.
671
00:30:56,333 --> 00:30:58,750
There's some weird things over
here, like special symbols,
672
00:30:58,750 --> 00:31:00,125
that we'll learn about over time.
673
00:31:00,125 --> 00:31:02,230
But there's a mapping
between every English letter
674
00:31:02,230 --> 00:31:04,810
of the alphabet and some
number, just as you'd propose,
675
00:31:04,810 --> 00:31:06,710
both for uppercase and lowercase.
676
00:31:06,710 --> 00:31:10,580
So, for instance, if we highlight
just a few of these for now
677
00:31:10,580 --> 00:31:14,998
and I say that I've just received
a text message or an email that,
678
00:31:14,998 --> 00:31:17,290
underneath the hood, so to
speak, if I have the ability
679
00:31:17,290 --> 00:31:22,930
to look at what switches are on and
off, I received this message here.
680
00:31:22,930 --> 00:31:26,020
Well, first-- and this is not what
CS is about, but just fun fact.
681
00:31:26,020 --> 00:31:29,470
Does anyone know what number
this would represent in decimal,
682
00:31:29,470 --> 00:31:34,565
if this is the binary pattern,
like ones place, twos place?
683
00:31:34,565 --> 00:31:35,420
AUDIENCE: 72?
684
00:31:35,420 --> 00:31:37,080
DAVID J. MALAN: 72 is correct.
685
00:31:37,080 --> 00:31:39,600
And again, not, intellectually,
all that interesting
686
00:31:39,600 --> 00:31:41,780
and this is not the kind of math
that we spend all day as CS--
687
00:31:41,780 --> 00:31:42,905
a computer scientist doing.
688
00:31:42,905 --> 00:31:45,380
But it's just following the
same darn pattern, which
689
00:31:45,380 --> 00:31:47,780
is to say it might look
cryptic, but, conceptually,
690
00:31:47,780 --> 00:31:50,542
intellectually, it ultimately
is exactly as we did before.
691
00:31:50,542 --> 00:31:52,250
So, yes, I'll spoil
the rest of the math.
692
00:31:52,250 --> 00:31:54,860
It's 72, 73, 33.
693
00:31:54,860 --> 00:31:58,370
Now, anyone remember, in your mind's
eye, what message we just spelled?
694
00:31:58,370 --> 00:31:59,180
AUDIENCE: Hi.
695
00:31:59,180 --> 00:31:59,810
AUDIENCE: Hi.
696
00:31:59,810 --> 00:32:01,520
DAVID J. MALAN: Yeah,
so it is, in fact, "Hi!"
697
00:32:01,520 --> 00:32:03,270
Though, no one really
said that excitedly.
698
00:32:03,270 --> 00:32:04,580
What's the 33, if you noticed?
699
00:32:04,580 --> 00:32:05,600
AUDIENCE: Exclamation point.
700
00:32:05,600 --> 00:32:06,770
DAVID J. MALAN: OK, so
a lot of people noticed.
701
00:32:06,770 --> 00:32:08,630
Yes, it's an exclamation point.
702
00:32:08,630 --> 00:32:11,300
And that's, indeed,
noticeable right here.
703
00:32:11,300 --> 00:32:13,063
33 is the exclamation point.
704
00:32:13,063 --> 00:32:15,480
And that's just something,
eventually, that might sink in.
705
00:32:15,480 --> 00:32:18,350
But, for the most part, if
you remember capital A is 65,
706
00:32:18,350 --> 00:32:22,100
you can figure out at least 25 other
answers to these kinds of questions
707
00:32:22,100 --> 00:32:24,060
because they're all
contiguous like that.
708
00:32:24,060 --> 00:32:25,740
So there's the exclamation point.
709
00:32:25,740 --> 00:32:30,350
But at the end of the day, we might
just have this mapping known as ASCII.
710
00:32:30,350 --> 00:32:33,000
And it's how our phones, and
computers, and devices, more
711
00:32:33,000 --> 00:32:35,310
generally, actually store information.
712
00:32:35,310 --> 00:32:37,050
So we thought we'd make--
713
00:32:37,050 --> 00:32:38,970
maybe take a little
pressure off of me here.
714
00:32:38,970 --> 00:32:41,550
And could we maybe flip things around?
715
00:32:41,550 --> 00:32:44,160
How about we try applying
this newfound knowledge--
716
00:32:44,160 --> 00:32:48,430
if it's, indeed, new to you-- with seven
volunteers, seven bits, if we could?
717
00:32:48,430 --> 00:32:48,930
OK.
718
00:32:48,930 --> 00:32:49,847
I saw your hand first.
719
00:32:49,847 --> 00:32:50,640
Come on down.
720
00:32:50,640 --> 00:32:52,650
Maybe your hand, there.
721
00:32:52,650 --> 00:32:54,870
OK, three, come on down over here.
722
00:32:54,870 --> 00:32:56,940
How about four and five?
723
00:32:56,940 --> 00:32:57,810
Yep, come on down.
724
00:32:57,810 --> 00:32:59,018
Yep, in the black shirt, yep.
725
00:32:59,018 --> 00:33:00,393
How about let me go farther back?
726
00:33:00,393 --> 00:33:01,890
How about in the green, over there?
727
00:33:01,890 --> 00:33:03,460
And how about you, seven, over here?
728
00:33:03,460 --> 00:33:03,960
All right.
729
00:33:03,960 --> 00:33:04,650
Come on down.
730
00:33:04,650 --> 00:33:05,790
[CHATTER]
731
00:33:05,790 --> 00:33:08,400
Come on down.
732
00:33:08,400 --> 00:33:10,600
So a round of applause
for our brave volunteers.
733
00:33:10,600 --> 00:33:12,740
[APPLAUSE]
734
00:33:12,740 --> 00:33:13,850
All right.
735
00:33:13,850 --> 00:33:17,060
So if you'd like to stand, roughly,
side by side, here in the middle
736
00:33:17,060 --> 00:33:17,830
of the stage.
737
00:33:17,830 --> 00:33:20,430
738
00:33:20,430 --> 00:33:22,530
First of all, thank you.
739
00:33:22,530 --> 00:33:23,030
Let's see.
740
00:33:23,030 --> 00:33:25,250
1, 2, 3, 4, 5, 6, 7, perfect.
741
00:33:25,250 --> 00:33:25,880
OK.
742
00:33:25,880 --> 00:33:29,900
And let's go all the way
over to this place, here.
743
00:33:29,900 --> 00:33:32,600
If you would like to introduce
yourself to the class.
744
00:33:32,600 --> 00:33:34,418
RACHEL RICHEY: I'm Rachel Richey.
745
00:33:34,418 --> 00:33:35,210
DAVID J. MALAN: OK.
746
00:33:35,210 --> 00:33:36,128
And what year?
747
00:33:36,128 --> 00:33:36,920
Anything about you?
748
00:33:36,920 --> 00:33:38,915
RACHEL RICHEY: Oh, first
year, concentrating in CS.
749
00:33:38,915 --> 00:33:39,707
DAVID J. MALAN: OK.
750
00:33:39,707 --> 00:33:40,670
Welcome to the stage.
751
00:33:40,670 --> 00:33:41,210
Next.
752
00:33:41,210 --> 00:33:42,080
SPEAKER: Hi.
753
00:33:42,080 --> 00:33:46,190
I'm [? Kang. ?] Also a
first-year concentrating in CS.
754
00:33:46,190 --> 00:33:47,390
SPEAKER: Hello.
755
00:33:47,390 --> 00:33:52,665
My name is [? Lam. ?] I'm a [INAUDIBLE]
student from education department.
756
00:33:52,665 --> 00:33:53,540
DAVID J. MALAN: Nice.
757
00:33:53,540 --> 00:33:53,810
OK.
758
00:33:53,810 --> 00:33:54,368
Next.
759
00:33:54,368 --> 00:33:55,160
JORDAN MITTLER: Hi.
760
00:33:55,160 --> 00:33:59,120
I'm Jordan Mittler, concentrating
in economics and maybe some CS.
761
00:33:59,120 --> 00:34:00,110
SPEAKER: So, hi.
762
00:34:00,110 --> 00:34:02,645
I'm [? Natalia. ?] First
year, and I want to do CS.
763
00:34:02,645 --> 00:34:03,435
SPEAKER: Hi.
764
00:34:03,435 --> 00:34:05,810
I'm [? Khadija. ?] I'm a
first-year, and I want to do CS.
765
00:34:05,810 --> 00:34:07,080
DAVID J. MALAN: [LAUGHS].
766
00:34:07,080 --> 00:34:08,030
SPEAKER: Hello.
767
00:34:08,030 --> 00:34:11,418
I'm [? Caleb. ?] And, once again,
first year, concentrating in CS.
768
00:34:11,418 --> 00:34:12,210
DAVID J. MALAN: OK.
769
00:34:12,210 --> 00:34:12,710
Wonderful.
770
00:34:12,710 --> 00:34:13,770
A pattern, yes.
771
00:34:13,770 --> 00:34:14,340
Thank you.
772
00:34:14,340 --> 00:34:14,880
Thank you.
773
00:34:14,880 --> 00:34:15,969
[APPLAUSE]
774
00:34:15,969 --> 00:34:20,010
So, if you haven't guessed
already, each of these volunteers
775
00:34:20,010 --> 00:34:23,429
is going to represent a bit, from
left to right, or right to left,
776
00:34:23,429 --> 00:34:24,010
in this case.
777
00:34:24,010 --> 00:34:24,750
So let's see.
778
00:34:24,750 --> 00:34:27,719
If you want to represent--
how about the twos place?
779
00:34:27,719 --> 00:34:37,350
How about the fours place, the eighths
place, 16ths place, 32's, 64, and 128?
780
00:34:37,350 --> 00:34:39,060
Although, wait a-- I think I screwed up.
781
00:34:39,060 --> 00:34:40,889
We needed one-- eighth volunteer.
782
00:34:40,889 --> 00:34:42,974
I think you know-- well, I think--
783
00:34:42,974 --> 00:34:45,330
[CLEARS THROAT] Spot?
784
00:34:45,330 --> 00:34:46,108
OK.
785
00:34:46,108 --> 00:34:46,650
Come on over.
786
00:34:46,650 --> 00:34:49,567
If you guys could step forward a
little bit, and then scooch this way,
787
00:34:49,567 --> 00:34:51,090
just to give Spot some room.
788
00:34:51,090 --> 00:34:52,650
[FOOTSTEPS]
789
00:34:52,650 --> 00:34:55,239
So Spot will represent the ones place.
790
00:34:55,239 --> 00:34:58,440
Now, what our volunteers have on
the back of their sheets of paper
791
00:34:58,440 --> 00:34:59,670
are little instructions.
792
00:34:59,670 --> 00:35:05,460
We're going to spell out a three-letter
word in English by using three bytes,
793
00:35:05,460 --> 00:35:08,170
from left to right, because
now we have eight volunteers.
794
00:35:08,170 --> 00:35:10,503
I'm going to propose that you
raise your hand, if you're
795
00:35:10,503 --> 00:35:12,185
supposed to represent a 1.
796
00:35:12,185 --> 00:35:14,310
Or you just stand there,
without raising your hand,
797
00:35:14,310 --> 00:35:15,780
if you're meant to represent a 0.
798
00:35:15,780 --> 00:35:18,450
And what we'll have the
audience do is do the quick math
799
00:35:18,450 --> 00:35:22,170
to figure out-- one, two, three--
each letter, what number is it.
800
00:35:22,170 --> 00:35:23,430
What letter is it?
801
00:35:23,430 --> 00:35:26,370
And we'll see what word that
we have finally spelled.
802
00:35:26,370 --> 00:35:26,880
All right.
803
00:35:26,880 --> 00:35:28,410
So, in round one--
804
00:35:28,410 --> 00:35:31,410
you have instructions on your back
of your sheet that will tell you to--
805
00:35:31,410 --> 00:35:32,580
what your number is.
806
00:35:32,580 --> 00:35:33,660
If you're 0, stand there.
807
00:35:33,660 --> 00:35:35,010
If you're a 1, raise your hand.
808
00:35:35,010 --> 00:35:37,700
809
00:35:37,700 --> 00:35:40,060
[PAPER RUSTLING]
810
00:35:40,060 --> 00:35:43,420
What number do these guys
seem to be representing?
811
00:35:43,420 --> 00:35:44,560
AUDIENCE: 68.
812
00:35:44,560 --> 00:35:46,360
DAVID J. MALAN: 66, I think.
813
00:35:46,360 --> 00:35:49,495
64 plus 2, so 66, which is the letter--
814
00:35:49,495 --> 00:35:50,260
AUDIENCE: B.
815
00:35:50,260 --> 00:35:52,930
DAVID J. MALAN: OK, so,
B. OK, so, B. All right.
816
00:35:52,930 --> 00:35:54,470
Hands down.
817
00:35:54,470 --> 00:35:57,565
Second letter is going
to be spelled how?
818
00:35:57,565 --> 00:36:01,160
819
00:36:01,160 --> 00:36:02,202
[SPOT LANDS ON THE STAGE]
820
00:36:02,202 --> 00:36:02,827
AUDIENCE: Whoa.
821
00:36:02,827 --> 00:36:03,530
AUDIENCE: Whoa.
822
00:36:03,530 --> 00:36:04,829
AUDIENCE: Whoa.
823
00:36:04,829 --> 00:36:07,570
DAVID J. MALAN: [LAUGHS] All right.
824
00:36:07,570 --> 00:36:09,670
What are we spelling now?
825
00:36:09,670 --> 00:36:11,635
[INDISTINCT CHATTER]
826
00:36:11,635 --> 00:36:15,580
I think-- psst, yep, OK.
827
00:36:15,580 --> 00:36:17,081
Yeah, I think you're one.
828
00:36:17,081 --> 00:36:19,490
[LAUGHTER]
829
00:36:19,490 --> 00:36:20,980
OK.
830
00:36:20,980 --> 00:36:23,430
Now what number are we spelling?
831
00:36:23,430 --> 00:36:24,370
AUDIENCE: 79
832
00:36:24,370 --> 00:36:26,770
DAVID J. MALAN: 79, I
heard, which is the letter?
833
00:36:26,770 --> 00:36:27,383
AUDIENCE: O.
834
00:36:27,383 --> 00:36:28,300
DAVID J. MALAN: O. OK.
835
00:36:28,300 --> 00:36:29,320
So hands down.
836
00:36:29,320 --> 00:36:30,100
Thank you, Spot.
837
00:36:30,100 --> 00:36:31,460
One final flourish.
838
00:36:31,460 --> 00:36:33,250
So we've spelled B-O--
839
00:36:33,250 --> 00:36:34,855
third letter, go ahead.
840
00:36:34,855 --> 00:36:37,942
841
00:36:37,942 --> 00:36:40,230
[SPOT LANDS ON THE STAGE]
842
00:36:40,230 --> 00:36:42,885
What number, now, is this?
843
00:36:42,885 --> 00:36:43,815
AUDIENCE: 87.
844
00:36:43,815 --> 00:36:44,460
AUDIENCE: 87.
845
00:36:44,460 --> 00:36:45,460
DAVID J. MALAN: I heard it here, 80--
846
00:36:45,460 --> 00:36:46,320
AUDIENCE: Seven.
847
00:36:46,320 --> 00:36:46,875
DAVID J. MALAN: --seven, which is?
848
00:36:46,875 --> 00:36:47,505
AUDIENCE: W.
849
00:36:47,505 --> 00:36:49,620
DAVID J. MALAN: W, which,
of course, spells "bow."
850
00:36:49,620 --> 00:36:53,437
So if our volunteers could
take a bow, Spot included.
851
00:36:53,437 --> 00:36:56,636
[APPLAUSE]
852
00:36:56,636 --> 00:36:58,010
853
00:36:58,010 --> 00:37:01,540
So this will make more
sense in week one,
854
00:37:01,540 --> 00:37:04,750
when we have an assignment involving
a certain someone from the Nintendo
855
00:37:04,750 --> 00:37:04,900
World.
856
00:37:04,900 --> 00:37:06,760
But we have a lovely parting
gift for each of you.
857
00:37:06,760 --> 00:37:07,510
SPEAKER: Thank you.
858
00:37:07,510 --> 00:37:07,630
[LAUGHS]
859
00:37:07,630 --> 00:37:08,180
DAVID J. MALAN: Thank
you for volunteering.
860
00:37:08,180 --> 00:37:08,980
SPEAKER: Thanks.
861
00:37:08,980 --> 00:37:11,897
DAVID J. MALAN: You might need to
share it with the folks next to you.
862
00:37:11,897 --> 00:37:15,106
[CHATTER]
863
00:37:15,106 --> 00:37:18,600
864
00:37:18,600 --> 00:37:19,470
Oop, here we go.
865
00:37:19,470 --> 00:37:19,970
There we go.
866
00:37:19,970 --> 00:37:20,360
Thank you--
867
00:37:20,360 --> 00:37:21,080
SPEAKER: Thank you.
868
00:37:21,080 --> 00:37:21,380
RACHEL RICHEY: Thank you.
869
00:37:21,380 --> 00:37:21,560
DAVID J. MALAN: --so much.
870
00:37:21,560 --> 00:37:23,250
One more round of applause, if
we could, for our volunteers.
871
00:37:23,250 --> 00:37:23,810
Thank you.
872
00:37:23,810 --> 00:37:24,734
[APPLAUSE]
873
00:37:24,734 --> 00:37:26,120
Did you lose something?
874
00:37:26,120 --> 00:37:27,490
OK.
875
00:37:27,490 --> 00:37:28,030
All right.
876
00:37:28,030 --> 00:37:31,190
So, [LAUGHS] Spot's had it.
877
00:37:31,190 --> 00:37:34,060
So let's see, then,
if we've solved, now,
878
00:37:34,060 --> 00:37:36,640
the problem of representing
English letters of the alphabet,
879
00:37:36,640 --> 00:37:39,850
being able to spell out words like
"bow," B-O-W. What if we actually do
880
00:37:39,850 --> 00:37:41,210
have accented characters?
881
00:37:41,210 --> 00:37:43,883
What if we do have other glyphs
that we want to represent?
882
00:37:43,883 --> 00:37:47,050
Well, here, of course, is a standard
US English keyboard, which a lot of you
883
00:37:47,050 --> 00:37:47,650
might have.
884
00:37:47,650 --> 00:37:50,260
But there's also characters
that you can type much more
885
00:37:50,260 --> 00:37:52,930
easily if you have a foreign
keyboard, relative to the US,
886
00:37:52,930 --> 00:37:55,780
or with certain keystrokes on
your own Mac, PC, and phone.
887
00:37:55,780 --> 00:37:59,230
But, nowadays, too, there's
this menu that, probably, you've
888
00:37:59,230 --> 00:38:03,400
used in the past hour or two
to actually send some emoji.
889
00:38:03,400 --> 00:38:06,040
An emoji, even though
they look like pictures
890
00:38:06,040 --> 00:38:08,080
and they actually are
pictures on the screen,
891
00:38:08,080 --> 00:38:13,120
they're, technically, just characters,
characters of an emoji alphabet
892
00:38:13,120 --> 00:38:16,330
that happened to use a certain
pattern of 0's and 1's to represent
893
00:38:16,330 --> 00:38:19,880
each of these faces, each of these
people, and places, and things.
894
00:38:19,880 --> 00:38:22,540
And it turns out that one of
the reasons that we have just
895
00:38:22,540 --> 00:38:29,240
so many [LAUGHS] such characters
nowadays is because we now
896
00:38:29,240 --> 00:38:31,370
use Unicode instead of ASCII.
897
00:38:31,370 --> 00:38:34,370
So Unicode is a superset,
so to speak, of ASCII,
898
00:38:34,370 --> 00:38:38,030
which is to say that we, humans,
realized, some time ago, that just
899
00:38:38,030 --> 00:38:40,370
using eight bits to represent
letters of the alphabet
900
00:38:40,370 --> 00:38:43,070
certainly isn't very good
when we want to represent
901
00:38:43,070 --> 00:38:44,960
other, non-English languages.
902
00:38:44,960 --> 00:38:47,240
So Unicode doesn't just use eight bits.
903
00:38:47,240 --> 00:38:52,520
It sometimes uses 16 bits per character,
sometimes 24 bits per character,
904
00:38:52,520 --> 00:38:55,610
and sometimes even 32
bits per character.
905
00:38:55,610 --> 00:38:56,690
Now, why those numbers?
906
00:38:56,690 --> 00:39:00,680
That's just one byte, two bytes,
three bytes, or four bytes.
907
00:39:00,680 --> 00:39:02,132
And that gives us--
908
00:39:02,132 --> 00:39:02,840
does anyone know?
909
00:39:02,840 --> 00:39:06,380
That gives us the ability
to represent as many as 4
910
00:39:06,380 --> 00:39:08,630
billion possible characters.
911
00:39:08,630 --> 00:39:12,150
Because if the longest one is
32 bits, that's 2 to the 32,
912
00:39:12,150 --> 00:39:15,090
which, if you do out the math,
trust me, is roughly 4 billion.
913
00:39:15,090 --> 00:39:16,430
So that's a lot of characters.
914
00:39:16,430 --> 00:39:19,040
And we've got a lot of
room, then, for these emoji.
915
00:39:19,040 --> 00:39:22,130
But it's not just about having
fun, pictorially, on the screen.
916
00:39:22,130 --> 00:39:27,830
Unicode's mission really is to represent
and to preserve all human languages
917
00:39:27,830 --> 00:39:31,530
digitally, both past,
present, and future.
918
00:39:31,530 --> 00:39:35,420
So it is really about capturing
the entirety of human knowledge,
919
00:39:35,420 --> 00:39:37,430
as we've expressed it
in language, but also
920
00:39:37,430 --> 00:39:42,020
giving this newfound ability that's been
used centuries ago, too-- in writings,
921
00:39:42,020 --> 00:39:44,300
on walls, and the like--
pictograms via which
922
00:39:44,300 --> 00:39:46,640
we can still communicate,
even independently
923
00:39:46,640 --> 00:39:48,030
of our own human language.
924
00:39:48,030 --> 00:39:51,320
So we'll reduce it, today, to
just patterns of 0's and 1's, but
925
00:39:51,320 --> 00:39:56,190
the problem being solved is much greater
and well-beyond CS, itself, there.
926
00:39:56,190 --> 00:39:58,610
So here is a pattern
of 0's and 1's using
927
00:39:58,610 --> 00:40:04,310
Unicode, so more than eight bits, that
represents a very popular emoji, which
928
00:40:04,310 --> 00:40:06,090
might be a bit of a hint.
929
00:40:06,090 --> 00:40:08,870
This is the most popular emoji,
as of last year, at least,
930
00:40:08,870 --> 00:40:10,330
statistically, internationally.
931
00:40:10,330 --> 00:40:13,078
[INTERPOSING VOICES]
932
00:40:13,078 --> 00:40:14,370
DAVID J. MALAN: Does this help?
933
00:40:14,370 --> 00:40:16,520
It's, roughly, this number here.
934
00:40:16,520 --> 00:40:17,240
No?
935
00:40:17,240 --> 00:40:19,080
It's this one here.
936
00:40:19,080 --> 00:40:23,360
So this is the most popular emoji,
by most measures, as of last year.
937
00:40:23,360 --> 00:40:25,170
But it doesn't always look like this.
938
00:40:25,170 --> 00:40:28,190
Those of you who have a Mac or an
iPhone recognize this symbol, perhaps,
939
00:40:28,190 --> 00:40:28,690
immediately.
940
00:40:28,690 --> 00:40:31,100
Those of you with Android
devices or other platforms
941
00:40:31,100 --> 00:40:35,310
might notice that it's the same idea,
but it's a little bit different.
942
00:40:35,310 --> 00:40:38,660
And this is because, too,
emojis, at the end of the day,
943
00:40:38,660 --> 00:40:41,420
just represent character, but
those characters can be drawn,
944
00:40:41,420 --> 00:40:43,070
can be painted in different ways.
945
00:40:43,070 --> 00:40:46,130
And reasonable people
will interpret differently
946
00:40:46,130 --> 00:40:49,880
this emoji, whose official name
is "face with tears of joy."
947
00:40:49,880 --> 00:40:52,130
And, indeed, Google interprets
it a little differently
948
00:40:52,130 --> 00:40:55,813
from Apple, versus Microsoft, versus
Meta, versus other companies, as well.
949
00:40:55,813 --> 00:40:57,980
So you can almost think of
those different companies
950
00:40:57,980 --> 00:41:00,230
as having different fonts for emoji.
951
00:41:00,230 --> 00:41:04,160
And that really starts to connect things
to the world of text and characters.
952
00:41:04,160 --> 00:41:05,720
So, just so you've seen it.
953
00:41:05,720 --> 00:41:07,110
More on this, another time.
954
00:41:07,110 --> 00:41:10,980
It turns out that emoji and,
really, characters, in general,
955
00:41:10,980 --> 00:41:13,430
we don't use binary 0's
and 1's to represent them
956
00:41:13,430 --> 00:41:15,740
because no one, myself included,
is going to recognize what's what.
957
00:41:15,740 --> 00:41:16,520
It's just too much math.
958
00:41:16,520 --> 00:41:17,480
It's not interesting.
959
00:41:17,480 --> 00:41:19,880
And even decimal numbers--
that was 4 billion or some--
960
00:41:19,880 --> 00:41:22,260
I don't remember which number is which.
961
00:41:22,260 --> 00:41:24,410
So we represent things
a little more compactly.
962
00:41:24,410 --> 00:41:26,510
And this, too, admittedly,
still looks cryptic,
963
00:41:26,510 --> 00:41:30,770
but this is a Unicode code point that
uses another system, mathematically,
964
00:41:30,770 --> 00:41:33,470
called base-16 or hexadecimal.
965
00:41:33,470 --> 00:41:34,670
More on that, another time.
966
00:41:34,670 --> 00:41:38,090
But it's just a way of representing
numbers even more succinctly,
967
00:41:38,090 --> 00:41:41,270
writing less on the screen,
because you're using not just 0
968
00:41:41,270 --> 00:41:42,590
through 9, as in decimal.
969
00:41:42,590 --> 00:41:46,010
But you're using A through
F, as well, so a few letters
970
00:41:46,010 --> 00:41:47,670
of the English alphabet come into play.
971
00:41:47,670 --> 00:41:49,700
But, for now, that's
just a little easier
972
00:41:49,700 --> 00:41:53,750
to remember, too, for people who
care, that that is the number that
973
00:41:53,750 --> 00:41:55,880
represents "face with tears of joy."
974
00:41:55,880 --> 00:41:58,010
But what if we want a customized emoji?
975
00:41:58,010 --> 00:41:59,780
And this, increasingly, is the case.
976
00:41:59,780 --> 00:42:01,910
Here, for instance,
are the five skin tones
977
00:42:01,910 --> 00:42:04,760
that phones, and laptops, and
desktops, nowadays, support.
978
00:42:04,760 --> 00:42:07,802
It's based on something called the
"Fitzpatrick scale," which essentially
979
00:42:07,802 --> 00:42:10,460
categorizes human skin tone
into six or, in this case, five
980
00:42:10,460 --> 00:42:12,560
different categories,
from lighter to darker.
981
00:42:12,560 --> 00:42:17,480
But this suggests that, wow,
if we want to represent people
982
00:42:17,480 --> 00:42:22,040
with five different skin tones,
like this, that could significantly
983
00:42:22,040 --> 00:42:25,130
increase how many unique
patterns of 0's and 1's we
984
00:42:25,130 --> 00:42:26,890
need for every possible face.
985
00:42:26,890 --> 00:42:29,540
But if we think about it from
an engineering perspective,
986
00:42:29,540 --> 00:42:33,068
we can actually just think of skin
tone as modifying some default
987
00:42:33,068 --> 00:42:34,360
color, for better or for worse.
988
00:42:34,360 --> 00:42:37,450
And yellow is the de facto
default, Simpson style.
989
00:42:37,450 --> 00:42:41,350
But to modify it to look more genuinely
human-like, from lighter to darker,
990
00:42:41,350 --> 00:42:43,990
well, maybe we just use
the same pattern of bits
991
00:42:43,990 --> 00:42:47,720
to represent a human thumb, for
instance, thumbs up or thumbs down.
992
00:42:47,720 --> 00:42:51,210
And we just, then, modify that character
to be displayed with a different skin
993
00:42:51,210 --> 00:42:51,710
tone.
994
00:42:51,710 --> 00:42:53,950
So, for instance, here,
then, is the "thumbs up"
995
00:42:53,950 --> 00:42:55,750
that you might use on various platforms.
996
00:42:55,750 --> 00:42:59,200
And let me just stipulate that
this is the Unicode code point.
997
00:42:59,200 --> 00:43:01,870
That is the number that
Macs, PCs, and phones
998
00:43:01,870 --> 00:43:05,960
use underneath the hood to represent
the default yellow "thumbs up."
999
00:43:05,960 --> 00:43:08,770
But if you want to give
it a medium skin tone,
1000
00:43:08,770 --> 00:43:12,370
you still use that same number,
that same pattern of 0's and 1's,
1001
00:43:12,370 --> 00:43:13,930
or switches, underneath the hood.
1002
00:43:13,930 --> 00:43:17,620
But you use a few more switches
that the computer or phone
1003
00:43:17,620 --> 00:43:20,800
will interpret as, "Oh, you don't
want to see the default in yellow
1004
00:43:20,800 --> 00:43:23,890
because of this second number that's
in the computer's memory somewhere.
1005
00:43:23,890 --> 00:43:27,170
You want me to adjust it to
be the medium skin tone or any
1006
00:43:27,170 --> 00:43:29,010
of the other values, instead."
1007
00:43:29,010 --> 00:43:31,580
So that's the engineering
solution to this problem
1008
00:43:31,580 --> 00:43:35,078
of just trying to represent
different ranges of emoji here.
1009
00:43:35,078 --> 00:43:36,620
Well, what about something like this?
1010
00:43:36,620 --> 00:43:38,480
There's a lot more
combinatorics, nowadays,
1011
00:43:38,480 --> 00:43:40,522
on your keyboard for
relationships, for instance.
1012
00:43:40,522 --> 00:43:43,620
So here is a "couple with heart" here.
1013
00:43:43,620 --> 00:43:46,520
So the couple, here, of course,
is represented with, apparently,
1014
00:43:46,520 --> 00:43:47,600
this number here.
1015
00:43:47,600 --> 00:43:48,255
But that's it.
1016
00:43:48,255 --> 00:43:50,630
But if you want to be more
specific-- like man and woman,
1017
00:43:50,630 --> 00:43:53,240
or man-man, woman-woman--
it's the same idea,
1018
00:43:53,240 --> 00:43:56,630
but we just need to express
ourselves a little-- with a little
1019
00:43:56,630 --> 00:43:57,600
more information.
1020
00:43:57,600 --> 00:44:00,560
So, for instance, the way the
Unicode folks came up with,
1021
00:44:00,560 --> 00:44:03,830
years ago, to represent, for instance,
a woman with a heart and a man,
1022
00:44:03,830 --> 00:44:06,480
from left to right, would
be using these values.
1023
00:44:06,480 --> 00:44:08,900
So things just escalated
quickly, but only
1024
00:44:08,900 --> 00:44:12,560
in the sense that we're using more
bits, more 0's and 1's, to represent,
1025
00:44:12,560 --> 00:44:15,470
more expressively, this
particular combination.
1026
00:44:15,470 --> 00:44:18,050
So this happens to be
the number in Unicode
1027
00:44:18,050 --> 00:44:19,790
that represents the woman at left.
1028
00:44:19,790 --> 00:44:22,430
This is the number that
represents the man at right.
1029
00:44:22,430 --> 00:44:25,160
And this is the pair of
numbers that represents
1030
00:44:25,160 --> 00:44:29,550
the heart in the middle, sometimes red,
sometimes pink, displayed here as pink.
1031
00:44:29,550 --> 00:44:32,510
But if we want to change the
combination, for instance, to be,
1032
00:44:32,510 --> 00:44:33,920
say, woman--
1033
00:44:33,920 --> 00:44:36,320
if we want to change the
combination to be woman-woman,
1034
00:44:36,320 --> 00:44:39,200
notice that, now, the left and
the rightmost numbers match.
1035
00:44:39,200 --> 00:44:42,290
Or if we flip it back to man-man,
it's just using different numbers
1036
00:44:42,290 --> 00:44:43,790
on the tail end again.
1037
00:44:43,790 --> 00:44:48,380
And meanwhile, if I rewind, there's
these two identical values here.
1038
00:44:48,380 --> 00:44:51,680
These are called zero-width
joiners or ZWNJ characters.
1039
00:44:51,680 --> 00:44:55,460
It just is a special number
that humans reserve to say,
1040
00:44:55,460 --> 00:45:00,210
glue the emoji at the left to the
emoji on the right and so forth.
1041
00:45:00,210 --> 00:45:02,370
So it connects ideas in this way.
1042
00:45:02,370 --> 00:45:04,490
So there's actually a
lot of emojis, nowadays,
1043
00:45:04,490 --> 00:45:07,370
that are a combination
of different things.
1044
00:45:07,370 --> 00:45:09,650
"Heart on fire" is one
that's, technically,
1045
00:45:09,650 --> 00:45:13,190
the combination of a heart
emoji, the fire emoji,
1046
00:45:13,190 --> 00:45:16,110
joined together,
numerically, in this way.
1047
00:45:16,110 --> 00:45:18,290
So computer scientists who
come up with these things
1048
00:45:18,290 --> 00:45:21,290
are just reducing things
to representations.
1049
00:45:21,290 --> 00:45:23,430
All we have at our
disposal are 0's and 1's.
1050
00:45:23,430 --> 00:45:25,250
So we all just need
to agree, ultimately--
1051
00:45:25,250 --> 00:45:28,760
whether we're Google, Microsoft, or the
like-- how we're going to standardize
1052
00:45:28,760 --> 00:45:31,030
these kinds of things as information.
1053
00:45:31,030 --> 00:45:36,520
Questions, then, on how characters
are represented in a computer,
1054
00:45:36,520 --> 00:45:38,260
be it English or any other language?
1055
00:45:38,260 --> 00:45:38,760
Yeah.
1056
00:45:38,760 --> 00:45:40,630
AUDIENCE: How is the plus a number?
1057
00:45:40,630 --> 00:45:41,963
DAVID J. MALAN: How is the what?
1058
00:45:41,963 --> 00:45:43,930
AUDIENCE: The plus, the U+.
1059
00:45:43,930 --> 00:45:46,600
DAVID J. MALAN: Oh, the U+
is just a convention, really.
1060
00:45:46,600 --> 00:45:49,820
So U+ represents a
special Unicode character,
1061
00:45:49,820 --> 00:45:51,790
which is a U with a plus in the middle.
1062
00:45:51,790 --> 00:45:54,590
And this is just the
convention for saying,
1063
00:45:54,590 --> 00:45:58,600
hey, everyone, here comes a number
that represents a Unicode code point.
1064
00:45:58,600 --> 00:46:00,070
The U and the 1 have no-- sorry.
1065
00:46:00,070 --> 00:46:02,278
The U and the plus have no
mathematical significance.
1066
00:46:02,278 --> 00:46:05,470
It's just a visual clue to folks.
1067
00:46:05,470 --> 00:46:10,460
Other questions on
representing text in this way?
1068
00:46:10,460 --> 00:46:10,960
All right.
1069
00:46:10,960 --> 00:46:12,240
So what about colors?
1070
00:46:12,240 --> 00:46:13,990
We've already started
looking at pictures.
1071
00:46:13,990 --> 00:46:17,032
Well, how are those pictures, be it
emojis or anything else, represented?
1072
00:46:17,032 --> 00:46:19,870
One of the most common
ways is just with RGB--
1073
00:46:19,870 --> 00:46:20,950
red, green, and blue.
1074
00:46:20,950 --> 00:46:24,700
It turns out that if we just
keep track of how much red should
1075
00:46:24,700 --> 00:46:27,880
be on the screen, and how much green,
and how much blue, combined together,
1076
00:46:27,880 --> 00:46:29,890
that gives us every
color of the rainbow,
1077
00:46:29,890 --> 00:46:32,120
from white to black and
everything in between.
1078
00:46:32,120 --> 00:46:35,620
So how do we represent an amount
of red, and green, and blue?
1079
00:46:35,620 --> 00:46:37,690
Well, frankly, just with
three different numbers.
1080
00:46:37,690 --> 00:46:40,030
And this is how computers
typically represent colors.
1081
00:46:40,030 --> 00:46:43,220
Every one of the dots on your
computer screen or your phone screen
1082
00:46:43,220 --> 00:46:44,390
is called a pixel.
1083
00:46:44,390 --> 00:46:50,130
And every single dot underneath the hood
has three numbers associated with it,
1084
00:46:50,130 --> 00:46:53,000
so three numbers, three numbers,
three numbers for every little dot.
1085
00:46:53,000 --> 00:46:56,420
And those three numbers, together,
say how much red, green, and blue
1086
00:46:56,420 --> 00:46:59,040
should the device
display at that location.
1087
00:46:59,040 --> 00:47:02,390
So, for instance, if you
had a dot on your screen
1088
00:47:02,390 --> 00:47:07,520
that said, "use this much red, this
much green this much blue," because each
1089
00:47:07,520 --> 00:47:11,820
of these numbers, I'll tell
you, are one byte or eight bits,
1090
00:47:11,820 --> 00:47:15,710
which means the total
possible values is 0 to 255--
1091
00:47:15,710 --> 00:47:19,070
let me just ballpark that the 72,
it feels like a medium amount of red
1092
00:47:19,070 --> 00:47:21,350
because it's in between 0 and 255.
1093
00:47:21,350 --> 00:47:25,590
73 is a medium amount of green, and
33 of blue is just a little bit.
1094
00:47:25,590 --> 00:47:29,480
So if you combine a medium amount of
red, green, and a little bit of blue,
1095
00:47:29,480 --> 00:47:32,840
anyone want to guess what
color of the rainbow this is?
1096
00:47:32,840 --> 00:47:33,507
AUDIENCE: Brown.
1097
00:47:33,507 --> 00:47:34,423
DAVID J. MALAN: Sorry?
1098
00:47:34,423 --> 00:47:35,190
AUDIENCE: Brown.
1099
00:47:35,190 --> 00:47:36,470
DAVID J. MALAN: Brown?
1100
00:47:36,470 --> 00:47:37,228
So, close.
1101
00:47:37,228 --> 00:47:39,020
It's a little more
yellow than it is brown.
1102
00:47:39,020 --> 00:47:41,920
But if we combine them, it looks
a little something like this.
1103
00:47:41,920 --> 00:47:43,887
This is just CS trivia,
not something that even
1104
00:47:43,887 --> 00:47:46,970
I would be able to eyeball, unless I
came up with that particular example.
1105
00:47:46,970 --> 00:47:48,607
But wait a minute.
1106
00:47:48,607 --> 00:47:49,940
We've seen these numbers before.
1107
00:47:49,940 --> 00:47:51,768
72, 73, 33 represented what--
1108
00:47:51,768 --> 00:47:52,310
AUDIENCE: Hi!
1109
00:47:52,310 --> 00:47:53,370
DAVID J. MALAN: --a few minutes ago?
1110
00:47:53,370 --> 00:47:55,787
So it meant "Hi!" but here I
am, claiming, no, no, no, no,
1111
00:47:55,787 --> 00:47:57,140
that means yellow.
1112
00:47:57,140 --> 00:47:58,890
How do you reconcile this?
1113
00:47:58,890 --> 00:48:01,550
Well, at the end of the
day, this is all we have,
1114
00:48:01,550 --> 00:48:04,310
0's and 1's, whether you
think of them as numbers,
1115
00:48:04,310 --> 00:48:06,620
or letters, or even colors now.
1116
00:48:06,620 --> 00:48:08,400
But it depends on the context.
1117
00:48:08,400 --> 00:48:11,390
So if you've received a
text message or an email,
1118
00:48:11,390 --> 00:48:13,850
odds are the pattern of 0's
and 1's that the computer
1119
00:48:13,850 --> 00:48:17,300
is showing you are going to be
interpreted as text because that's
1120
00:48:17,300 --> 00:48:19,940
the whole point of a
text message or an email.
1121
00:48:19,940 --> 00:48:23,930
If, though, you opened up MacOS's
or iOS's or Windows's or Android's
1122
00:48:23,930 --> 00:48:27,230
calculator app, the same
pattern of 0's and 1's might
1123
00:48:27,230 --> 00:48:30,650
be interpreted as numbers for some
addition, or subtraction, or whatever.
1124
00:48:30,650 --> 00:48:33,780
If you open the same pattern
of 0's and 1's in Photoshop,
1125
00:48:33,780 --> 00:48:37,110
like a graphics program, they're going
to be interpreted, in that context,
1126
00:48:37,110 --> 00:48:37,950
as colors.
1127
00:48:37,950 --> 00:48:39,098
So context matters.
1128
00:48:39,098 --> 00:48:40,890
And, indeed, as soon
as next week, when you
1129
00:48:40,890 --> 00:48:43,080
start writing code in
that language called C,
1130
00:48:43,080 --> 00:48:47,550
the onus will be on you, the programmer,
to tell the computer, interpret
1131
00:48:47,550 --> 00:48:52,593
the following sequence of bits as a
number, or a letter, or something else.
1132
00:48:52,593 --> 00:48:55,260
And you won't have to even worry
about what the 0's and 1's are,
1133
00:48:55,260 --> 00:48:58,380
but you need to give the computer
a hint as to what type of file
1134
00:48:58,380 --> 00:49:00,730
or piece of data you're representing.
1135
00:49:00,730 --> 00:49:01,890
So that gives us bits.
1136
00:49:01,890 --> 00:49:05,640
And you can actually see these
dots, these pixels on the screen.
1137
00:49:05,640 --> 00:49:07,380
Let me zoom in, zoom in.
1138
00:49:07,380 --> 00:49:10,470
And here we have it, just with this
emoji, which, at the end of the day,
1139
00:49:10,470 --> 00:49:13,380
is a picture that someone at
Apple, in this case, drew.
1140
00:49:13,380 --> 00:49:16,440
And you can see-- if you really
zoom in, or take your phone or TV
1141
00:49:16,440 --> 00:49:19,470
and really put it close to your
face, you'll see all of these dots,
1142
00:49:19,470 --> 00:49:20,700
depending on the hardware.
1143
00:49:20,700 --> 00:49:23,250
And each of these
dots, these squares, is
1144
00:49:23,250 --> 00:49:28,350
storing 24 bits or three bytes,
24 bits, 24 bits, 24 bits.
1145
00:49:28,350 --> 00:49:31,200
And that's whey, dot,
dot, dot, if you've
1146
00:49:31,200 --> 00:49:35,730
got a photograph, for instance,
that's three megabytes, which
1147
00:49:35,730 --> 00:49:42,030
is 3 million bytes, well, odds are
there's 1 million pixels therein
1148
00:49:42,030 --> 00:49:45,240
because you're using
three bytes per pixel
1149
00:49:45,240 --> 00:49:46,708
to represent each of those colors.
1150
00:49:46,708 --> 00:49:48,750
That's a bit of an
oversimplification, but that's
1151
00:49:48,750 --> 00:49:51,840
why images and photos are getting
bigger and bigger nowadays.
1152
00:49:51,840 --> 00:49:56,110
Because we're throwing even
more pixels into the file.
1153
00:49:56,110 --> 00:49:56,610
Music--
1154
00:49:56,610 --> 00:49:57,330
[MUSIC PLAYING]
1155
00:49:57,330 --> 00:49:59,880
--how could you represent
music, digitally,
1156
00:49:59,880 --> 00:50:03,920
using just 0's and 1's,
or numbers, really?
1157
00:50:03,920 --> 00:50:07,710
Any instinct, whether a musician or not?
1158
00:50:07,710 --> 00:50:08,743
Yeah.
1159
00:50:08,743 --> 00:50:11,060
AUDIENCE: The notes could
be represented by a number.
1160
00:50:11,060 --> 00:50:13,768
DAVID J. MALAN: Yeah, so we can
just represent notes by a number.
1161
00:50:13,768 --> 00:50:17,660
So A is some number, and B. And maybe
sharp or flat is some other number.
1162
00:50:17,660 --> 00:50:21,610
But note might not be
quite enough for some--
1163
00:50:21,610 --> 00:50:22,110
yeah?
1164
00:50:22,110 --> 00:50:22,876
AUDIENCE: [INAUDIBLE].
1165
00:50:22,876 --> 00:50:23,834
DAVID J. MALAN: Ah, OK.
1166
00:50:23,834 --> 00:50:26,470
So one note-- one number to
represent the note, itself,
1167
00:50:26,470 --> 00:50:30,820
the sound or the pitch; one other
number to represent the duration.
1168
00:50:30,820 --> 00:50:35,000
In the context of piano, how long
is the human holding the key down?
1169
00:50:35,000 --> 00:50:37,330
And maybe I can think of
a third, the loudness.
1170
00:50:37,330 --> 00:50:39,457
How hard has the person
played that note?
1171
00:50:39,457 --> 00:50:41,290
So, minimally, with
three numbers, you could
1172
00:50:41,290 --> 00:50:43,492
imagine representing music, as well.
1173
00:50:43,492 --> 00:50:45,700
And, indeed, that's very
well might be what computers
1174
00:50:45,700 --> 00:50:47,720
are doing when you listen to sound.
1175
00:50:47,720 --> 00:50:48,610
What about video?
1176
00:50:48,610 --> 00:50:51,760
How could you represent videos, as well?
1177
00:50:51,760 --> 00:50:52,270
Yeah?
1178
00:50:52,270 --> 00:50:53,460
AUDIENCE: Through many images.
1179
00:50:53,460 --> 00:50:54,790
DAVID J. MALAN: Yeah, many images.
1180
00:50:54,790 --> 00:50:57,750
So if you've ever produced a film
or looked at some of the fine print,
1181
00:50:57,750 --> 00:51:02,070
30 frames per second, FPS,
or 29 frames per second
1182
00:51:02,070 --> 00:51:04,560
is just how many pictures
are flying across the screen.
1183
00:51:04,560 --> 00:51:06,810
But that's really all a
video file is on a computer,
1184
00:51:06,810 --> 00:51:10,470
lots of pictures moving so quickly in
front of us that you and I, our brains,
1185
00:51:10,470 --> 00:51:12,930
interpolate that as being actual motion.
1186
00:51:12,930 --> 00:51:15,720
And, in fact, from
yesteryear, motion pictures,
1187
00:51:15,720 --> 00:51:18,570
it's like pictures that are
giving the illusion of motion,
1188
00:51:18,570 --> 00:51:21,910
even though there's only 30 or so
of them flying across the screen.
1189
00:51:21,910 --> 00:51:24,870
So we have a way, now, to
represent information, both as
1190
00:51:24,870 --> 00:51:29,250
input and output, whether it's numbers,
letters, images, anything else.
1191
00:51:29,250 --> 00:51:32,200
Let's now focus on what's
inside of that black box,
1192
00:51:32,200 --> 00:51:36,360
so to speak, wherein we have
algorithms, step-by-step instructions
1193
00:51:36,360 --> 00:51:38,430
for solving some problem.
1194
00:51:38,430 --> 00:51:41,760
Now, what do I mean by "algorithms"
or "step-by-step instructions"?
1195
00:51:41,760 --> 00:51:44,815
Well, maybe, if we were
to turn this into code--
1196
00:51:44,815 --> 00:51:47,190
and that's how we'll connect
the dots, ultimately, today.
1197
00:51:47,190 --> 00:51:51,480
Code is just the implementation,
in computers, of algorithms.
1198
00:51:51,480 --> 00:51:53,920
An algorithm can be something
we do in the physical world.
1199
00:51:53,920 --> 00:51:58,180
Code is how we implement that exact
same idea, in the context of a computer,
1200
00:51:58,180 --> 00:51:58,810
instead.
1201
00:51:58,810 --> 00:52:02,152
And here, for instance, is a very
common application inside of a computer,
1202
00:52:02,152 --> 00:52:02,860
for your context.
1203
00:52:02,860 --> 00:52:04,900
This is the iOS version of the icon.
1204
00:52:04,900 --> 00:52:06,963
And, typically, if you
click on that icon,
1205
00:52:06,963 --> 00:52:09,130
you'll see something like
all of your contacts here,
1206
00:52:09,130 --> 00:52:12,250
typically, alphabetical,
by first name or last name.
1207
00:52:12,250 --> 00:52:17,103
And your phone or your computer lets
you often search for someone's name
1208
00:52:17,103 --> 00:52:17,770
at the very top.
1209
00:52:17,770 --> 00:52:20,620
And it will autocomplete, and
it'll be pretty darn fast.
1210
00:52:20,620 --> 00:52:23,470
But it'll be pretty darn fast
because the programmers who
1211
00:52:23,470 --> 00:52:28,210
implemented that application are
looking for someone quickly for you.
1212
00:52:28,210 --> 00:52:33,400
Now, I can do this old school style,
whereby we have one of these things
1213
00:52:33,400 --> 00:52:35,840
from yesteryear, an actual phone book.
1214
00:52:35,840 --> 00:52:39,160
So, in a physical phone book like
this, you might have 1,000 pages.
1215
00:52:39,160 --> 00:52:42,440
And on every page are a bunch
of names and a bunch of numbers.
1216
00:52:42,440 --> 00:52:45,490
And as I flip through this, I
could look for someone specific.
1217
00:52:45,490 --> 00:52:49,010
So suppose I want to call John Harvard,
who's-- the first name, of course,
1218
00:52:49,010 --> 00:52:52,720
starts with a J. Well, I
could just turn, page by page,
1219
00:52:52,720 --> 00:52:54,590
looking for John Harvard.
1220
00:52:54,590 --> 00:52:57,000
And if he's not there, I
keep turning and turning.
1221
00:52:57,000 --> 00:52:58,000
So this is an algorithm.
1222
00:52:58,000 --> 00:53:00,790
I'm stepping through the phone
book, one page at a time.
1223
00:53:00,790 --> 00:53:04,510
Is it correct, this algorithm,
assuming I'm looking down?
1224
00:53:04,510 --> 00:53:05,470
So, yeah.
1225
00:53:05,470 --> 00:53:07,930
I mean, it's stupidly
slow because why am
1226
00:53:07,930 --> 00:53:10,585
I wasting my time with the A's,
and the B's, and the so forth?
1227
00:53:10,585 --> 00:53:12,460
I could probably take
bigger bites out of it.
1228
00:53:12,460 --> 00:53:13,210
But it is correct.
1229
00:53:13,210 --> 00:53:16,293
And that's going to be one of the goals
of writing code, is to, of course,
1230
00:53:16,293 --> 00:53:18,100
solve the problem you
care about correctly.
1231
00:53:18,100 --> 00:53:20,470
So correctness goes without
saying, or else what's
1232
00:53:20,470 --> 00:53:23,080
the point of writing the code
or solving-- or implementing
1233
00:53:23,080 --> 00:53:23,800
the algorithm?
1234
00:53:23,800 --> 00:53:24,040
All right.
1235
00:53:24,040 --> 00:53:25,623
Well, let me at least speed things up.
1236
00:53:25,623 --> 00:53:29,380
So, instead of one page at a
time, so, two, four, six, eight--
1237
00:53:29,380 --> 00:53:33,420
no, ignore that-- 10,
12, 14, 16, and so forth.
1238
00:53:33,420 --> 00:53:35,920
It's a little hard to do,
physically, but it sounded faster.
1239
00:53:35,920 --> 00:53:38,815
It was twice as fast,
theoretically, but is it correct?
1240
00:53:38,815 --> 00:53:39,505
AUDIENCE: No.
1241
00:53:39,505 --> 00:53:40,480
DAVID J. MALAN: So, no.
1242
00:53:40,480 --> 00:53:41,210
Why?
1243
00:53:41,210 --> 00:53:41,710
Yeah?
1244
00:53:41,710 --> 00:53:43,180
AUDIENCE: Yeah, you might [INAUDIBLE].
1245
00:53:43,180 --> 00:53:46,263
DAVID J. MALAN: Yeah, I might miss
John Harvard because, just by accident,
1246
00:53:46,263 --> 00:53:48,490
he might get sandwiched
between two pages.
1247
00:53:48,490 --> 00:53:52,210
But do I have to throw the
algorithm out altogether?
1248
00:53:52,210 --> 00:53:53,260
Probably not.
1249
00:53:53,260 --> 00:53:56,073
Once I reach the K section,
which is past the J section,
1250
00:53:56,073 --> 00:53:58,990
I could double back at least one
page, at least, [PATS TELEPHONE BOOK]
1251
00:53:58,990 --> 00:54:01,540
and just make sure I didn't
blow past him completely.
1252
00:54:01,540 --> 00:54:04,450
So that is twice as fast,
because I'm going two pages
1253
00:54:04,450 --> 00:54:05,922
at a time, plus one extra step.
1254
00:54:05,922 --> 00:54:07,130
So it's still an improvement.
1255
00:54:07,130 --> 00:54:08,922
So the first algorithm,
worst case, if it's
1256
00:54:08,922 --> 00:54:10,900
not John, but someone
whose name starts with Z,
1257
00:54:10,900 --> 00:54:12,860
that might take me a full 1,000 steps.
1258
00:54:12,860 --> 00:54:16,210
The second algorithm is
just 500 steps because I'm
1259
00:54:16,210 --> 00:54:19,660
going two pages at a time plus
one, in case I have to double back,
1260
00:54:19,660 --> 00:54:20,990
but that's in the worst case.
1261
00:54:20,990 --> 00:54:26,080
But most of us in the-- in yesteryear,
and what Apple, and Google, and others
1262
00:54:26,080 --> 00:54:29,440
are actually doing is, in
software or here, physically,
1263
00:54:29,440 --> 00:54:31,540
we're typically going,
roughly, to the middle.
1264
00:54:31,540 --> 00:54:34,360
Especially if there's no cheat
sheet on the side, like A through Z,
1265
00:54:34,360 --> 00:54:36,235
I'm just going to go
to, roughly, the middle.
1266
00:54:36,235 --> 00:54:38,920
And, oh, here I am, not
surprisingly, in the M section.
1267
00:54:38,920 --> 00:54:40,360
But what do I now know.
1268
00:54:40,360 --> 00:54:43,660
If this is the M section,
where is John Harvard?
1269
00:54:43,660 --> 00:54:46,130
So, clearly, to the
left, alphabetically.
1270
00:54:46,130 --> 00:54:49,660
And so here is where we can take a
much bigger bite out of the problem.
1271
00:54:49,660 --> 00:54:52,480
We can really divide
and conquer this problem
1272
00:54:52,480 --> 00:54:56,080
by tearing [TEARS BOOK] the problem
in half, throwing half of it
1273
00:54:56,080 --> 00:55:01,240
away, 500 pages away, leaving
me with a smaller problem,
1274
00:55:01,240 --> 00:55:04,370
half as big, that I can
really just now repeat.
1275
00:55:04,370 --> 00:55:07,150
So I go, roughly, here, and
now I'm in the E section.
1276
00:55:07,150 --> 00:55:09,102
So I went a little too far back.
1277
00:55:09,102 --> 00:55:10,060
But what do I now know?
1278
00:55:10,060 --> 00:55:11,680
If this is the E pages, where's John?
1279
00:55:11,680 --> 00:55:12,460
AUDIENCE: To the right.
1280
00:55:12,460 --> 00:55:13,690
DAVID J. MALAN: So
now he's to the right.
1281
00:55:13,690 --> 00:55:15,815
So I can-- again, hopefully,
he's not on that page.
1282
00:55:15,815 --> 00:55:20,380
I can tear the problem in half
again, throw that 250 pages away.
1283
00:55:20,380 --> 00:55:23,530
And now I've gone from
1,000 to 500 to 250 pages.
1284
00:55:23,530 --> 00:55:26,470
Now I'm moving because the first
algorithm was one page at a time,
1285
00:55:26,470 --> 00:55:27,280
second was two.
1286
00:55:27,280 --> 00:55:29,373
This is hundreds of pages at a time.
1287
00:55:29,373 --> 00:55:31,540
And if I go, roughly, again,
to the middle; roughly,
1288
00:55:31,540 --> 00:55:33,790
to the middle; roughly, to
the middle, hopefully, I'll
1289
00:55:33,790 --> 00:55:36,350
find John Harvard on one final page.
1290
00:55:36,350 --> 00:55:39,140
Can only do this once,
but one final page.
1291
00:55:39,140 --> 00:55:42,010
So that invites the
question, I would think,
1292
00:55:42,010 --> 00:55:44,680
if the phone book does
have 1,000 or so pages,
1293
00:55:44,680 --> 00:55:50,210
how many times can I divide the problem
in half to get down to one last page?
1294
00:55:50,210 --> 00:55:51,580
So it's, roughly, 10.
1295
00:55:51,580 --> 00:55:56,203
And the quick math is 1,000 goes to
500 to 250 to 125 to 67 something.
1296
00:55:56,203 --> 00:55:58,370
So we have to deal with
rounding issues, eventually.
1297
00:55:58,370 --> 00:56:01,640
But assuming we work out the math,
it's, roughly, 10 page tears.
1298
00:56:01,640 --> 00:56:07,580
And that's crazy faster than 1,000
pages and still faster than 500 pages.
1299
00:56:07,580 --> 00:56:09,350
So it's fundamentally better.
1300
00:56:09,350 --> 00:56:13,792
And, indeed, if I finally get to that
final page, in the software world,
1301
00:56:13,792 --> 00:56:16,250
you'd see something like this,
John Harvard and his number,
1302
00:56:16,250 --> 00:56:17,810
which you're welcome to call or text.
1303
00:56:17,810 --> 00:56:22,850
But that's how we now have our answer,
much like the single page there.
1304
00:56:22,850 --> 00:56:27,090
But let's consider just how
efficient that actually is.
1305
00:56:27,090 --> 00:56:30,560
So here's a very rough, broad--
with broad strokes, a chart.
1306
00:56:30,560 --> 00:56:31,998
So here's an xy plot.
1307
00:56:31,998 --> 00:56:34,790
So here, on the horizontal, is
going to be the size of the problem.
1308
00:56:34,790 --> 00:56:38,360
And, by that, I mean, how many
pages are we trying to go through?
1309
00:56:38,360 --> 00:56:39,890
This would be zero pages.
1310
00:56:39,890 --> 00:56:41,480
This would be a lot of pages.
1311
00:56:41,480 --> 00:56:43,610
How much time does it
take to solve the problem?
1312
00:56:43,610 --> 00:56:46,100
How long does it take to find
John Harvard or anyone else?
1313
00:56:46,100 --> 00:56:47,540
This means no time.
1314
00:56:47,540 --> 00:56:48,960
This means a lot of time.
1315
00:56:48,960 --> 00:56:51,110
So what's the relationship
among these algorithms?
1316
00:56:51,110 --> 00:56:53,490
Well, the first one is
actually just a straight line.
1317
00:56:53,490 --> 00:56:57,330
If there's n pages in
the phone book, well, I
1318
00:56:57,330 --> 00:57:00,060
claim that it's a
one-to-one relationship.
1319
00:57:00,060 --> 00:57:04,290
Because if Verizon or the phone
company adds another page next year,
1320
00:57:04,290 --> 00:57:06,900
that just means I might have
one more step next year,
1321
00:57:06,900 --> 00:57:09,990
as well, to find John
Harvard or anyone else.
1322
00:57:09,990 --> 00:57:12,930
But the second algorithm,
it's also a straight line,
1323
00:57:12,930 --> 00:57:15,295
but it's lower, even though
it might not look obvious.
1324
00:57:15,295 --> 00:57:16,420
And what do I mean by that?
1325
00:57:16,420 --> 00:57:18,253
Well, let me just draw
some temporary lines.
1326
00:57:18,253 --> 00:57:20,610
If this is how many pages
are in the phone book-- dot,
1327
00:57:20,610 --> 00:57:24,090
dot, dot-- notice that it takes
this much time, on the red line,
1328
00:57:24,090 --> 00:57:25,360
to solve the problem.
1329
00:57:25,360 --> 00:57:28,530
But if I, instead, use
the second algorithm,
1330
00:57:28,530 --> 00:57:30,507
it takes me half as much time.
1331
00:57:30,507 --> 00:57:32,340
So, even though they're
both straight lines,
1332
00:57:32,340 --> 00:57:34,923
one is strictly lower than the
other, which means it's faster.
1333
00:57:34,923 --> 00:57:35,640
It's better.
1334
00:57:35,640 --> 00:57:38,310
But the third algorithm is a
fundamentally different shape,
1335
00:57:38,310 --> 00:57:40,090
and it looks a little
something like this.
1336
00:57:40,090 --> 00:57:42,370
And it looks like it's going to
flatten, flatten, flatten out,
1337
00:57:42,370 --> 00:57:43,260
but it never does.
1338
00:57:43,260 --> 00:57:46,170
It just rises ever so slowly.
1339
00:57:46,170 --> 00:57:49,290
And what this means is that if
maybe Cambridge and Allston, here
1340
00:57:49,290 --> 00:57:53,030
in Massachusetts, merge next year,
so we go from 1,000 page phone book
1341
00:57:53,030 --> 00:57:58,100
to a 2,000 page phone book, that
means, if we're here this year,
1342
00:57:58,100 --> 00:57:59,660
we're over here next year.
1343
00:57:59,660 --> 00:58:01,190
It's not all that much higher.
1344
00:58:01,190 --> 00:58:04,320
But it would be much higher if we
were using the first two algorithms.
1345
00:58:04,320 --> 00:58:04,820
Why?
1346
00:58:04,820 --> 00:58:07,880
It'd be an extra 1,000 steps to
find someone in that combined phone
1347
00:58:07,880 --> 00:58:09,890
book or maybe another 500 steps.
1348
00:58:09,890 --> 00:58:13,520
But, to be clear, if we're using
my third and final algorithm,
1349
00:58:13,520 --> 00:58:15,620
how many more steps will
it take me next year,
1350
00:58:15,620 --> 00:58:20,930
when Cambridge and Allston merge
into one 2,000-page phone book?
1351
00:58:20,930 --> 00:58:22,800
Just one more step, no big deal.
1352
00:58:22,800 --> 00:58:24,400
It's one more page tear.
1353
00:58:24,400 --> 00:58:26,900
And this is what we mean,
ultimately, about not just writing
1354
00:58:26,900 --> 00:58:29,720
code or implementing algorithms
that are correct, but, now,
1355
00:58:29,720 --> 00:58:33,070
that are well-designed or
efficient, specifically.
1356
00:58:33,070 --> 00:58:35,570
And this is what makes someone
a better programmer, perhaps,
1357
00:58:35,570 --> 00:58:38,237
than someone else, or a better
problem-solver than someone else,
1358
00:58:38,237 --> 00:58:40,130
is acquiring, over time, these skills.
1359
00:58:40,130 --> 00:58:43,280
So that, sure, you could solve
the problem quickly and dirtily,
1360
00:58:43,280 --> 00:58:45,560
so to speak, but if you're
going to have a lot of data
1361
00:58:45,560 --> 00:58:49,492
eventually, be it in your phone book
or maybe your Google website index,
1362
00:58:49,492 --> 00:58:51,200
if you're searching
the web, you're going
1363
00:58:51,200 --> 00:58:54,540
to want to try to think about how to
design algorithms that look like this.
1364
00:58:54,540 --> 00:58:56,370
Mathematically, this
is called a logarithm.
1365
00:58:56,370 --> 00:58:59,495
And it's log base 2 because I'm halving,
halving, halving, again and again.
1366
00:58:59,495 --> 00:59:03,120
But, for now, just know that it's a
fundamentally faster and different
1367
00:59:03,120 --> 00:59:03,820
shape.
1368
00:59:03,820 --> 00:59:06,330
So, among our goals in CS50,
ultimately, is not just
1369
00:59:06,330 --> 00:59:12,270
to write and solve problems correctly,
but, ultimately, ever more efficiently,
1370
00:59:12,270 --> 00:59:13,600
as well.
1371
00:59:13,600 --> 00:59:20,110
Any questions, then, on these
ideas of efficiency and design?
1372
00:59:20,110 --> 00:59:21,480
Any questions here?
1373
00:59:21,480 --> 00:59:22,080
Yeah, in back?
1374
00:59:22,080 --> 00:59:23,480
AUDIENCE: [INAUDIBLE].
1375
00:59:23,480 --> 00:59:24,170
DAVID J. MALAN: A good question.
1376
00:59:24,170 --> 00:59:27,462
Just to repeat it, can a graph like this
capture the accuracy of the algorithm?
1377
00:59:27,462 --> 00:59:28,640
Short answer, no.
1378
00:59:28,640 --> 00:59:31,460
For instance, if I drew
a straight line that
1379
00:59:31,460 --> 00:59:35,570
is super low on this graph, which
would imply that the algorithm takes
1380
00:59:35,570 --> 00:59:38,240
the same amount of time, no
matter how many pages there are,
1381
00:59:38,240 --> 00:59:41,480
my algorithm might actually be to
just pull a random page from the phone
1382
00:59:41,480 --> 00:59:43,230
book, one step, and say, here it is.
1383
00:59:43,230 --> 00:59:45,230
But that's not necessarily
going to be accurate,
1384
00:59:45,230 --> 00:59:47,010
unless I get really, really lucky.
1385
00:59:47,010 --> 00:59:49,820
So the graph really only
speaks to efficiency
1386
00:59:49,820 --> 00:59:52,880
and the design of the algorithm,
not the correctness of it.
1387
00:59:52,880 --> 00:59:57,170
To analyze the correctness, you need
to use another mechanism altogether,
1388
00:59:57,170 --> 00:59:58,280
namely, logic.
1389
00:59:58,280 --> 01:00:02,120
Other questions now, on
efficiency, in this way?
1390
01:00:02,120 --> 01:00:02,940
No?
1391
01:00:02,940 --> 01:00:03,440
All right.
1392
01:00:03,440 --> 01:00:08,090
So, with that in mind, let's begin to
translate this to some actual code.
1393
01:00:08,090 --> 01:00:11,630
And, in fact, before we look at,
today, one actual programming language,
1394
01:00:11,630 --> 01:00:14,720
albeit a graphical one, let's
consider something called pseudocode.
1395
01:00:14,720 --> 01:00:16,497
So pseudocode has no formal meaning.
1396
01:00:16,497 --> 01:00:19,580
Generally, you write it in English or
whatever your own human language is.
1397
01:00:19,580 --> 01:00:25,600
But you write your thoughts down
tersely, succinct, but precisely.
1398
01:00:25,600 --> 01:00:28,570
You try to really convey your
thoughts, not with a wave of the hand,
1399
01:00:28,570 --> 01:00:31,510
metaphorically, but
step by step, precisely.
1400
01:00:31,510 --> 01:00:32,650
So what do I mean by this?
1401
01:00:32,650 --> 01:00:35,380
Here might be some
representative pseudocode
1402
01:00:35,380 --> 01:00:39,337
via which I describe that third
and final algorithm in a way
1403
01:00:39,337 --> 01:00:41,920
that I could hand it to you and
you could do the same at home.
1404
01:00:41,920 --> 01:00:45,425
Or I could hand it to someone at Google,
and they could implement it in Android.
1405
01:00:45,425 --> 01:00:48,550
Or I could hand it to someone at Apple,
and they could implement it in iOS.
1406
01:00:48,550 --> 01:00:51,280
So, step one, I claimed,
was "Pick up phone book."
1407
01:00:51,280 --> 01:00:54,430
Step two was "Open to the
middle of the phone book."
1408
01:00:54,430 --> 01:00:57,145
Step three, "Look at
the page," as I did.
1409
01:00:57,145 --> 01:00:59,020
And now things get a
little more interesting.
1410
01:00:59,020 --> 01:01:03,760
Step four, "If person is on
page," I have to make a decision.
1411
01:01:03,760 --> 01:01:07,810
Presumably, what should I do if John
Harvard is on the page I'm looking at?
1412
01:01:07,810 --> 01:01:12,050
So stop and probably make the call, or
email, or whatever the goal might be.
1413
01:01:12,050 --> 01:01:15,430
And so I'm going to actually indent
this, visually, by a few spaces,
1414
01:01:15,430 --> 01:01:19,900
just to make clear that you should only
do line five if the answer to line four
1415
01:01:19,900 --> 01:01:21,130
is yes.
1416
01:01:21,130 --> 01:01:22,360
Otherwise, you don't bother.
1417
01:01:22,360 --> 01:01:26,640
The next thing I'm going to do, line
six, is consider another possibility.
1418
01:01:26,640 --> 01:01:28,980
"If the person I'm
looking for is earlier
1419
01:01:28,980 --> 01:01:30,805
in the book," what do I want to do?
1420
01:01:30,805 --> 01:01:31,680
Well, I could write--
1421
01:01:31,680 --> 01:01:33,388
I could describe this
in a bunch of ways.
1422
01:01:33,388 --> 01:01:35,190
I'm going to do this
tersely, as follows.
1423
01:01:35,190 --> 01:01:38,910
"Open to the middle of
the left half of the book,
1424
01:01:38,910 --> 01:01:41,610
so it's open to the middle
of the left half of the book.
1425
01:01:41,610 --> 01:01:43,320
And then, what am I going to do?
1426
01:01:43,320 --> 01:01:46,630
Well, I've just divided the
problem into something smaller.
1427
01:01:46,630 --> 01:01:48,580
But it's fundamentally the same problem.
1428
01:01:48,580 --> 01:01:51,100
It's just a fewer number of pages.
1429
01:01:51,100 --> 01:01:54,017
So I'm just going to go back
to line three and do it again
1430
01:01:54,017 --> 01:01:56,850
because the problem is just getting
smaller and smaller, presumably.
1431
01:01:56,850 --> 01:01:59,520
Else, if the person I'm looking
for is later in the book,
1432
01:01:59,520 --> 01:02:02,760
open to the middle of the
right half of the book,
1433
01:02:02,760 --> 01:02:04,950
and, also, "Go back to line 3."
1434
01:02:04,950 --> 01:02:08,160
But there's a fourth
possibility and its failure
1435
01:02:08,160 --> 01:02:11,580
to realize, sometimes, that there's
other possible outcomes that
1436
01:02:11,580 --> 01:02:14,400
make computers crash, or spinning
beach balls, or the like,
1437
01:02:14,400 --> 01:02:17,130
if a programmer doesn't
anticipate some situation.
1438
01:02:17,130 --> 01:02:20,538
What's the fourth possible situation,
when looking for John Harvard?
1439
01:02:20,538 --> 01:02:22,080
AUDIENCE: If they're not in the book.
1440
01:02:22,080 --> 01:02:24,205
DAVID J. MALAN: If they're
not in the book, at all.
1441
01:02:24,205 --> 01:02:27,450
And, indeed, I might get to the very
last page and John Harvard's not even
1442
01:02:27,450 --> 01:02:28,200
on that one.
1443
01:02:28,200 --> 01:02:33,450
I'd better handle that and say, else,
as a catchall, just quit altogether.
1444
01:02:33,450 --> 01:02:35,610
And, truly, often, in
your Macs, PCs, phones,
1445
01:02:35,610 --> 01:02:38,310
when they freeze, or, again,
spinning beach ball, or the like,
1446
01:02:38,310 --> 01:02:39,660
and just weird things
happen, that's just
1447
01:02:39,660 --> 01:02:41,220
because some human made a dumb mistake.
1448
01:02:41,220 --> 01:02:44,430
And they didn't realize that you could
somehow get your phone or your laptop
1449
01:02:44,430 --> 01:02:47,070
into a configuration that
they didn't anticipate.
1450
01:02:47,070 --> 01:02:48,870
So we're going to try
to handle that here.
1451
01:02:48,870 --> 01:02:50,880
Now this is just one way
of writing pseudocode.
1452
01:02:50,880 --> 01:02:52,230
There's no one way to do this.
1453
01:02:52,230 --> 01:02:55,500
All of us in this room could come up
with slightly different pseudocode.
1454
01:02:55,500 --> 01:02:59,190
But I think you'll find
characteristic are certain building
1455
01:02:59,190 --> 01:03:02,130
blocks in all of our answers.
1456
01:03:02,130 --> 01:03:04,590
Here, in yellow, are
what, as of today, we're
1457
01:03:04,590 --> 01:03:07,540
going to start calling
"functions," technically speaking.
1458
01:03:07,540 --> 01:03:10,800
These are like actions or verbs that
literally, in this case, tell me
1459
01:03:10,800 --> 01:03:11,700
what to do.
1460
01:03:11,700 --> 01:03:15,150
Next, we're going to have
these things, conditionals,
1461
01:03:15,150 --> 01:03:20,525
forks in the road, so to speak, that
take me down this path or another,
1462
01:03:20,525 --> 01:03:21,150
metaphorically.
1463
01:03:21,150 --> 01:03:22,933
So I do this thing or something else.
1464
01:03:22,933 --> 01:03:25,350
But how do I decide if I want
to go this way, or this way,
1465
01:03:25,350 --> 01:03:26,620
or this way, or this way?
1466
01:03:26,620 --> 01:03:27,780
I need to ask a question.
1467
01:03:27,780 --> 01:03:30,000
And in programming,
we'll typically use what
1468
01:03:30,000 --> 01:03:33,240
are called Boolean expressions,
named after a mathematician, Boole.
1469
01:03:33,240 --> 01:03:36,090
And a Boolean expression is
essentially just a question
1470
01:03:36,090 --> 01:03:42,300
with a yes/no answer, a true or
false answer, a 1 or 0 answer.
1471
01:03:42,300 --> 01:03:45,520
It doesn't matter how you think about
it, but it's got two possible answers.
1472
01:03:45,520 --> 01:03:49,228
And so you can think of these as
being expressions with question marks,
1473
01:03:49,228 --> 01:03:50,520
even though I didn't draw such.
1474
01:03:50,520 --> 01:03:54,270
Person on page, person earlier
in book, person later in book,
1475
01:03:54,270 --> 01:03:55,590
those are Boolean expressions.
1476
01:03:55,590 --> 01:04:00,400
And they tell me whether I should go
down one fork in the road or another.
1477
01:04:00,400 --> 01:04:03,600
And, lastly, there's this, "Go back
to line 3," in two different places.
1478
01:04:03,600 --> 01:04:06,630
That represents what we call a
"loop," some kind of cycle that's
1479
01:04:06,630 --> 01:04:08,370
doing something again and again.
1480
01:04:08,370 --> 01:04:10,733
Now these are just a few
building blocks here--
1481
01:04:10,733 --> 01:04:12,900
functions, conditionals,
Boolean expressions, loops.
1482
01:04:12,900 --> 01:04:15,210
But you'll find that
they're characteristic of so
1483
01:04:15,210 --> 01:04:18,380
many different languages, one of which
we'll look at today, another of which
1484
01:04:18,380 --> 01:04:19,380
we'll look at next week.
1485
01:04:19,380 --> 01:04:23,130
And those include, indeed, C, and
Python, and other languages still.
1486
01:04:23,130 --> 01:04:25,350
And so this is why we
focus on these basics
1487
01:04:25,350 --> 01:04:27,480
and fundamentals in these
early days because we're
1488
01:04:27,480 --> 01:04:29,080
going to see them again and again.
1489
01:04:29,080 --> 01:04:31,800
So even if you feel like that
fire hose is hitting you sometime,
1490
01:04:31,800 --> 01:04:34,320
we'll give you, today,
ultimately, more visuals
1491
01:04:34,320 --> 01:04:38,730
by which you can hang onto, so as
to actually write code, ultimately,
1492
01:04:38,730 --> 01:04:41,490
in different languages and
solve all sorts of problems.
1493
01:04:41,490 --> 01:04:46,050
Now, we'd be remiss in not bringing
up what's behind characters like Spot,
1494
01:04:46,050 --> 01:04:48,570
and ChatGPT, and other software,
artificial intelligence.
1495
01:04:48,570 --> 01:04:51,430
And it turns out, to
get to the point of AI,
1496
01:04:51,430 --> 01:04:54,150
we're actually going to need
more building blocks than just
1497
01:04:54,150 --> 01:04:56,125
functions, and loops, and conditionals.
1498
01:04:56,125 --> 01:04:57,750
It's not going to be quite that simple.
1499
01:04:57,750 --> 01:04:59,200
But this has been a lot, so far.
1500
01:04:59,200 --> 01:05:01,530
Let's go ahead, here, and
take a five-minute break.
1501
01:05:01,530 --> 01:05:03,990
And when we resume, we'll
take a look not only at AI,
1502
01:05:03,990 --> 01:05:06,630
but also a specific
language called Scratch.
1503
01:05:06,630 --> 01:05:09,870
So no cake, just yet, but
we'll come back in five.
1504
01:05:09,870 --> 01:05:14,820
Before we dive back in, I just
wanted to call out a special guest
1505
01:05:14,820 --> 01:05:16,980
that we have here today,
beyond Spot, someone
1506
01:05:16,980 --> 01:05:19,050
who's come from even farther away.
1507
01:05:19,050 --> 01:05:22,560
And, in fact, if any of you have taken
CS50x, the OpenCourseWare version
1508
01:05:22,560 --> 01:05:25,270
of the class, or dabbled in
it over the past few years
1509
01:05:25,270 --> 01:05:27,490
in some of CS50's online
social communities,
1510
01:05:27,490 --> 01:05:29,710
you might have had
your questions answered
1511
01:05:29,710 --> 01:05:31,810
by a certain human from New Zealand.
1512
01:05:31,810 --> 01:05:35,890
And she's come all this way, today,
to spend this lecture with us.
1513
01:05:35,890 --> 01:05:38,350
This is CS50's own Brenda Anderson.
1514
01:05:38,350 --> 01:05:41,920
If you might come up for
acknowledgment from all of us here.
1515
01:05:41,920 --> 01:05:45,052
[APPLAUSE]
1516
01:05:45,052 --> 01:05:47,440
1517
01:05:47,440 --> 01:05:50,170
It's not much, but just a
little token of our thanks.
1518
01:05:50,170 --> 01:05:53,830
Brenda has helped, truly,
thousands of students online
1519
01:05:53,830 --> 01:05:55,370
for the past many years.
1520
01:05:55,370 --> 01:05:58,780
And, in fact, her own
daughter has been the artist
1521
01:05:58,780 --> 01:06:03,615
behind the duck that's about to loom
large in CS50 this year and beyond.
1522
01:06:03,615 --> 01:06:04,615
So, thank you to Brenda.
1523
01:06:04,615 --> 01:06:07,936
[APPLAUSE]
1524
01:06:07,936 --> 01:06:11,410
1525
01:06:11,410 --> 01:06:12,400
All right.
1526
01:06:12,400 --> 01:06:16,690
So it's hard to escape a discussion
of artificial intelligence, nowadays,
1527
01:06:16,690 --> 01:06:18,790
but we thought we'd use
this as an opportunity
1528
01:06:18,790 --> 01:06:20,260
to connect some of these dots.
1529
01:06:20,260 --> 01:06:22,460
Because, indeed, over the
course of the semester,
1530
01:06:22,460 --> 01:06:25,990
we'll be-- not only be talking
about artificial intelligence or AI,
1531
01:06:25,990 --> 01:06:28,900
but really using it all
the more constructively
1532
01:06:28,900 --> 01:06:31,570
to help you solve problems,
help you get unblocked
1533
01:06:31,570 --> 01:06:35,680
when you hit a wall, cognitively or
syntactically, when writing code.
1534
01:06:35,680 --> 01:06:39,430
And, indeed, it's no accident
that we have this duck here,
1535
01:06:39,430 --> 01:06:42,370
looming large, which is really
the embodiment of the sort of AI
1536
01:06:42,370 --> 01:06:45,200
that you'll experience within
CS50, itself, this year.
1537
01:06:45,200 --> 01:06:48,220
So let's talk about the
so-called chatbots that
1538
01:06:48,220 --> 01:06:50,500
inspired some of those
headlines with which we began
1539
01:06:50,500 --> 01:06:52,780
class, that weren't quite on the nose.
1540
01:06:52,780 --> 01:06:54,880
So the class will still
be taught by us humans,
1541
01:06:54,880 --> 01:06:59,170
but helped by this CS50
duck, a chatbot of sorts.
1542
01:06:59,170 --> 01:07:00,590
Now what do I mean by this?
1543
01:07:00,590 --> 01:07:04,090
Well, it turns out that, when it
comes to implementing something
1544
01:07:04,090 --> 01:07:06,730
like an artificial
intelligence, we don't quite
1545
01:07:06,730 --> 01:07:10,550
have all of the building blocks yet,
certainly after just today's week zero,
1546
01:07:10,550 --> 01:07:12,000
to implement something like that.
1547
01:07:12,000 --> 01:07:14,960
But I think we can skate in
that direction, intellectually.
1548
01:07:14,960 --> 01:07:19,670
So, for instance, if we were to take a
stab at implementing our own chatbot--
1549
01:07:19,670 --> 01:07:22,883
some interactive text-based
program that talks to us,
1550
01:07:22,883 --> 01:07:24,800
and answers questions,
and the like-- we could
1551
01:07:24,800 --> 01:07:28,850
try borrowing some of today's ideas
already, those functions, conditionals,
1552
01:07:28,850 --> 01:07:30,007
loops, and more.
1553
01:07:30,007 --> 01:07:31,590
And I could write something like this.
1554
01:07:31,590 --> 01:07:34,370
If I am writing code or
pseudocode for a chatbot,
1555
01:07:34,370 --> 01:07:37,170
I could program the chatbot
to do something like this.
1556
01:07:37,170 --> 01:07:39,230
If the student says,
hello, to the chatbot,
1557
01:07:39,230 --> 01:07:41,840
then the chatbot should
say, hello, back.
1558
01:07:41,840 --> 01:07:44,900
Else, if the student says,
goodbye, well, the chatbot
1559
01:07:44,900 --> 01:07:46,580
should say, goodbye, back.
1560
01:07:46,580 --> 01:07:51,800
Else, if the student asks how you are,
the chat bot should say that it's well.
1561
01:07:51,800 --> 01:07:54,020
But things get a little
harder when you start
1562
01:07:54,020 --> 01:07:57,470
asking more interesting
questions, like, else,
1563
01:07:57,470 --> 01:08:00,990
if the student asks why 111
in binary is 7 in decimal.
1564
01:08:00,990 --> 01:08:03,980
Now, you could imagine that
we just have a conditional,
1565
01:08:03,980 --> 01:08:08,570
with this Boolean expression, that
programs the chatbot to just give you
1566
01:08:08,570 --> 01:08:12,230
the answer and explain, in an English
sentence, why that, in fact, is.
1567
01:08:12,230 --> 01:08:20,750
But what if you, the student, asks why
110 is 6 in decimal or why 010 is 2?
1568
01:08:20,750 --> 01:08:24,229
I mean, you can just imagine the
explosion in the amount of code
1569
01:08:24,229 --> 01:08:28,370
that we would have to write to just
anticipate every darn question that you
1570
01:08:28,370 --> 01:08:31,375
might ask about today and every
other class, not to mention all
1571
01:08:31,375 --> 01:08:32,750
of the knowledge in the universe.
1572
01:08:32,750 --> 01:08:36,649
So, surely, there are other
ways to implement algorithms
1573
01:08:36,649 --> 01:08:39,319
that allow something
like a chatbot or AI,
1574
01:08:39,319 --> 01:08:43,700
more generally, to be fed input,
still, like all of the internet, all
1575
01:08:43,700 --> 01:08:46,760
of the worldwide web, all of the
pages and textual content therein,
1576
01:08:46,760 --> 01:08:51,050
but to let it just figure out
how to answer our questions based
1577
01:08:51,050 --> 01:08:54,330
on those kinds of inputs, assuming
the inputs, themselves, are accurate.
1578
01:08:54,330 --> 01:08:56,510
So "large language models"
is a term you might
1579
01:08:56,510 --> 01:08:59,720
have heard bandied about over
the past several months, or LLMs.
1580
01:08:59,720 --> 01:09:04,729
And a large language model really
is an implementation, in software,
1581
01:09:04,729 --> 01:09:09,630
of code that actually takes, as
input, lots and lots of language--
1582
01:09:09,630 --> 01:09:13,310
like the text of lots and lots of web
pages, dictionaries, encyclopedias,
1583
01:09:13,310 --> 01:09:14,779
Wikipedias, and the like--
1584
01:09:14,779 --> 01:09:19,729
and infers, from the patterns of
English words or any human language,
1585
01:09:19,729 --> 01:09:22,907
what a typical human might
actually say when asked a question.
1586
01:09:22,907 --> 01:09:24,740
And some of these
questions are easy, right?
1587
01:09:24,740 --> 01:09:28,165
Probably, on the internet, alone, not
to mention everyday life, if someone
1588
01:09:28,165 --> 01:09:29,540
extends their hand and says, "Hi.
1589
01:09:29,540 --> 01:09:33,000
How are you," odds are, with 90%
probability, you're going to say,
1590
01:09:33,000 --> 01:09:33,500
"Good.
1591
01:09:33,500 --> 01:09:34,000
Thanks.
1592
01:09:34,000 --> 01:09:34,700
How are you?"
1593
01:09:34,700 --> 01:09:37,250
So I bet we could write
software that just
1594
01:09:37,250 --> 01:09:41,569
infers what it should say,
probabilistically, statistically, based
1595
01:09:41,569 --> 01:09:43,069
on those kinds of patterns online.
1596
01:09:43,069 --> 01:09:45,442
And that's, indeed, where
the world is starting
1597
01:09:45,442 --> 01:09:47,359
to go, when it comes to
the most sophisticated
1598
01:09:47,359 --> 01:09:49,151
of algorithms, where
you and I, the humans,
1599
01:09:49,151 --> 01:09:51,979
we don't try to anticipate
every possible input.
1600
01:09:51,979 --> 01:09:54,620
Rather, we give it a
more general purpose
1601
01:09:54,620 --> 01:09:58,277
input, like all human knowledge, and
ideally just let it figure things out.
1602
01:09:58,277 --> 01:09:59,610
Now, we're not quite there, yet.
1603
01:09:59,610 --> 01:10:02,000
And odds are you've heard of
hallucinations or just mistakes
1604
01:10:02,000 --> 01:10:03,680
that these large language models make.
1605
01:10:03,680 --> 01:10:05,005
But their inputs are imperfect.
1606
01:10:05,005 --> 01:10:07,130
And sometimes there's a
bit of randomness sprinkled
1607
01:10:07,130 --> 01:10:10,088
in because you don't want the thing
to always say the exact same thing.
1608
01:10:10,088 --> 01:10:14,250
Even you and I might say, "Eh, I'm
not that great today" 10% of the time.
1609
01:10:14,250 --> 01:10:16,730
So you need to perturb
the output in some way.
1610
01:10:16,730 --> 01:10:20,630
But within CS50 and within this
world of large language models,
1611
01:10:20,630 --> 01:10:24,630
we do have these tools like
ChatGPT, and Bing, chat, and others.
1612
01:10:24,630 --> 01:10:26,810
And we'll stipulate that,
for CS50's purposes,
1613
01:10:26,810 --> 01:10:28,910
the direction we're going
this year is that this
1614
01:10:28,910 --> 01:10:30,710
is what's in the
syllabus, dot, dot, dot;
1615
01:10:30,710 --> 01:10:32,840
that it will not be allowed,
it will be considered
1616
01:10:32,840 --> 01:10:37,348
not reasonable to use AI-based
software, other than CS50's own.
1617
01:10:37,348 --> 01:10:39,140
So the goal here is
not to simply take away
1618
01:10:39,140 --> 01:10:43,250
tools that are clearly inevitable,
in my view, and clearly helpful
1619
01:10:43,250 --> 01:10:44,720
and productivity savers.
1620
01:10:44,720 --> 01:10:48,440
But we'd like there to be some
guardrails, intellectually, on just how
1621
01:10:48,440 --> 01:10:49,653
helpful these chatbots are.
1622
01:10:49,653 --> 01:10:52,070
Because as you've probably
seen, if you ask it a question,
1623
01:10:52,070 --> 01:10:54,560
these chatbots are already
pretty good at not just helping
1624
01:10:54,560 --> 01:10:56,310
you finish your current
thought, but it'll
1625
01:10:56,310 --> 01:10:59,900
hand you your second and your third
thought and do the assignment for you.
1626
01:10:59,900 --> 01:11:02,660
But I think, through
prompting, so to speak,
1627
01:11:02,660 --> 01:11:04,850
we'll be able to coax
some of our own tools,
1628
01:11:04,850 --> 01:11:07,100
being computer scientists,
ourself, in a direction
1629
01:11:07,100 --> 01:11:10,200
that you actually find to be the
right balance, akin to having
1630
01:11:10,200 --> 01:11:14,310
a good tutor by your side 24/7,
who doesn't just hand you answers,
1631
01:11:14,310 --> 01:11:16,223
but, indeed, tries to
lead you to the same.
1632
01:11:16,223 --> 01:11:18,390
So you actually get something
out of the experience,
1633
01:11:18,390 --> 01:11:20,520
and, ideally, three-plus
months from now,
1634
01:11:20,520 --> 01:11:22,380
those training wheels can come off, too.
1635
01:11:22,380 --> 01:11:24,880
And you're able to
still stand on your own.
1636
01:11:24,880 --> 01:11:28,770
So it will be reasonable to use
CS50's own AI-based software which
1637
01:11:28,770 --> 01:11:33,210
will actually take the form of a CS50
duck, which is actually available now--
1638
01:11:33,210 --> 01:11:37,170
and we'll use it throughout the term--
at CS50.ai, a web-based application
1639
01:11:37,170 --> 01:11:39,450
that's quite similar
to ChatGPT, but that
1640
01:11:39,450 --> 01:11:44,010
has the personality of a CS50 teaching
fellow or TF, or teaching assistant,
1641
01:11:44,010 --> 01:11:47,220
TA, that also happens to
think of itself as a duck.
1642
01:11:47,220 --> 01:11:49,860
And for reasons we'll get to
in a couple of weeks time,
1643
01:11:49,860 --> 01:11:54,105
but rubber ducks, in particular,
are a thing in programming.
1644
01:11:54,105 --> 01:11:56,730
But more on that, before long,
as you can even see from the one
1645
01:11:56,730 --> 01:11:58,350
there on my desk.
1646
01:11:58,350 --> 01:12:01,110
With that said, too, well, I'm
going to call out CS50's own Brenda
1647
01:12:01,110 --> 01:12:05,485
Anderson, whose daughter,
Sophie, kindly not only created
1648
01:12:05,485 --> 01:12:07,860
the first incarnation, digitally,
of this duck, but also,
1649
01:12:07,860 --> 01:12:11,560
most recently, once it actually
did more than quack a random number
1650
01:12:11,560 --> 01:12:13,540
of times in response
to questions, has now
1651
01:12:13,540 --> 01:12:15,320
been virtually brought to life, too.
1652
01:12:15,320 --> 01:12:18,760
So, all that and more, over the coming
weeks, but you'll find, ultimately,
1653
01:12:18,760 --> 01:12:23,590
that the goal is to really bring to life
the availability of an AI-based tutor
1654
01:12:23,590 --> 01:12:26,650
that you have access
to, a friend in your--
1655
01:12:26,650 --> 01:12:30,340
next to you, that will help guide
you through a lot of the course's
1656
01:12:30,340 --> 01:12:31,660
challenges along the way.
1657
01:12:31,660 --> 01:12:33,310
And we actually rolled
it out this past summer,
1658
01:12:33,310 --> 01:12:35,950
already, with some of your predecessors,
through the Harvard Summer School.
1659
01:12:35,950 --> 01:12:38,200
One student wrote, at
summer's end, that this duck
1660
01:12:38,200 --> 01:12:40,180
"felt like having a personal tutor--
1661
01:12:40,180 --> 01:12:44,110
I love how AI bots will answer questions
without ego and without judgment
1662
01:12:44,110 --> 01:12:47,110
generally entertaining even
the stupidest of questions
1663
01:12:47,110 --> 01:12:49,360
without treating them
like they're stupid.
1664
01:12:49,360 --> 01:12:53,140
It has, as one could expect,
an inhuman level of patience."
1665
01:12:53,140 --> 01:12:56,410
So there's actually something really
there because as many teachers
1666
01:12:56,410 --> 01:12:57,520
as there are in CS50--
1667
01:12:57,520 --> 01:13:00,730
myself, the course's preceptors,
teaching fellows, teaching assistants,
1668
01:13:00,730 --> 01:13:03,490
and course assistants--
there's only so many of us.
1669
01:13:03,490 --> 01:13:05,650
And we're only awake so
many hours of the day.
1670
01:13:05,650 --> 01:13:08,620
And I think you'll find, too, that
we're on the cusp of something
1671
01:13:08,620 --> 01:13:11,080
pretty remarkable, in
the coming years, where
1672
01:13:11,080 --> 01:13:14,380
it's going to get a lot more
enabling, now, to learn material
1673
01:13:14,380 --> 01:13:18,110
not only within the confines of a class,
but on your own, ultimately, as well.
1674
01:13:18,110 --> 01:13:22,270
And as one other student put it, at
summer's end, with respect to the duck,
1675
01:13:22,270 --> 01:13:23,680
"Love love loved the duck.
1676
01:13:23,680 --> 01:13:24,490
We're friends now."
1677
01:13:24,490 --> 01:13:25,720
So that, too, awaits.
1678
01:13:25,720 --> 01:13:28,840
But, first, we're going to
need to start with the basics.
1679
01:13:28,840 --> 01:13:30,820
And we started today by
talking about binary.
1680
01:13:30,820 --> 01:13:32,710
And darn it, here it is again.
1681
01:13:32,710 --> 01:13:37,060
So we can't actually get to the point
of using, or solving, or implementing AI
1682
01:13:37,060 --> 01:13:38,590
until we understand this.
1683
01:13:38,590 --> 01:13:42,590
And odds are most of you won't know, at
a glance, what this piece of software
1684
01:13:42,590 --> 01:13:43,090
does.
1685
01:13:43,090 --> 01:13:46,600
But these are the 0's and
1's that represent, perhaps,
1686
01:13:46,600 --> 01:13:50,650
the first program that any programmer
writes, which is now a clue to some
1687
01:13:50,650 --> 01:13:52,700
of you who have dabbled in code before.
1688
01:13:52,700 --> 01:13:56,470
What does this pattern of 0's and
1's tell a typical computer to do?
1689
01:13:56,470 --> 01:13:57,348
Might someone guess?
1690
01:13:57,348 --> 01:13:58,390
AUDIENCE: "Hello, world."
1691
01:13:58,390 --> 01:14:00,760
DAVID J. MALAN: It's going to
have it say, "hello, world,"
1692
01:14:00,760 --> 01:14:02,927
which is one of the very
first programmer-- programs
1693
01:14:02,927 --> 01:14:04,420
that most any programmer writes.
1694
01:14:04,420 --> 01:14:06,790
Should you be able to
recognize these 0's and 1's?
1695
01:14:06,790 --> 01:14:08,260
Do I recognize these 0's and 1's?
1696
01:14:08,260 --> 01:14:09,040
No, not at all.
1697
01:14:09,040 --> 01:14:11,120
I just happen to know
that they are the same.
1698
01:14:11,120 --> 01:14:12,700
And that was a leading question.
1699
01:14:12,700 --> 01:14:17,050
But they are representing data
and instructions, ultimately,
1700
01:14:17,050 --> 01:14:22,360
data like H-E-L-L-O, comma,
W-O-R-L-D and an instruction like,
1701
01:14:22,360 --> 01:14:24,910
"Print that data to the screen."
1702
01:14:24,910 --> 01:14:26,920
As for what these patterns
of 0's and 1's are,
1703
01:14:26,920 --> 01:14:30,250
this is not something that a computer
scientist or programmer worries about.
1704
01:14:30,250 --> 01:14:34,240
We just stipulate that, OK, someone,
somewhere knows how to do this.
1705
01:14:34,240 --> 01:14:36,400
And it's probably someone
like Intel, who makes
1706
01:14:36,400 --> 01:14:37,960
the hardware inside of the computers.
1707
01:14:37,960 --> 01:14:41,470
But you and I, starting
now, already, in week zero,
1708
01:14:41,470 --> 01:14:44,950
can start to view
binary more abstractly.
1709
01:14:44,950 --> 01:14:46,660
We don't care about the 0's and 1's.
1710
01:14:46,660 --> 01:14:49,090
We only care that you
can use 0's and 1's
1711
01:14:49,090 --> 01:14:52,420
to represent more useful
quantities, like numbers,
1712
01:14:52,420 --> 01:14:54,260
and letters, colors, and more.
1713
01:14:54,260 --> 01:14:57,040
So this, next week, is going
to be the code we actually
1714
01:14:57,040 --> 01:14:58,330
start writing at a keyboard.
1715
01:14:58,330 --> 01:15:01,538
And this is that language called C. It's
the same language I, myself, learned
1716
01:15:01,538 --> 01:15:05,140
years ago, when taking CS50, when
all we learned at the time was C.
1717
01:15:05,140 --> 01:15:07,770
But this, too, has
some crypticness to it.
1718
01:15:07,770 --> 01:15:11,020
And if you've never programmed before,
you can probably wrap your mind around,
1719
01:15:11,020 --> 01:15:14,190
OK, I'm guessing the "printf"
prints out the "hello, world."
1720
01:15:14,190 --> 01:15:16,920
But what's with the semicolon,
the quotes, the backslash,
1721
01:15:16,920 --> 01:15:21,030
and the curly braces, the #include,
and all of this stupid syntax?
1722
01:15:21,030 --> 01:15:23,970
A lot of this, in the beginning of
any class, is really a distraction.
1723
01:15:23,970 --> 01:15:25,890
It is not intellectually interesting.
1724
01:15:25,890 --> 01:15:29,230
But it's the stupid kind of stuff
that's going to trip you up quite often.
1725
01:15:29,230 --> 01:15:31,500
And so, today, what
we'll do is focus not
1726
01:15:31,500 --> 01:15:35,100
on syntax, characters on
the keyboard, but ideas
1727
01:15:35,100 --> 01:15:37,170
because what really
matters in this program
1728
01:15:37,170 --> 01:15:40,900
is that "printf" is a function
here for our purposes.
1729
01:15:40,900 --> 01:15:43,980
And that function is to display
information on the screen.
1730
01:15:43,980 --> 01:15:46,860
Everything else, as
we'll soon see, has value
1731
01:15:46,860 --> 01:15:50,435
and will be understood by you, before
long, but for now, it's a distraction.
1732
01:15:50,435 --> 01:15:52,200
Let's focus on those building blocks.
1733
01:15:52,200 --> 01:15:54,940
When it comes time to write
code, though, for the curious,
1734
01:15:54,940 --> 01:15:56,815
especially if you've
programmed before, we'll
1735
01:15:56,815 --> 01:15:58,890
use a very popular free
and open-source tool
1736
01:15:58,890 --> 01:16:01,260
called Visual Studio Code, or VS Code.
1737
01:16:01,260 --> 01:16:06,000
We'll use a cloud-based version of
it that we pre-install everything
1738
01:16:06,000 --> 01:16:08,070
you need in the cloud
for you so you don't
1739
01:16:08,070 --> 01:16:10,980
have to deal with headaches like
getting your Mac or PC to work.
1740
01:16:10,980 --> 01:16:13,920
You'll use instead this
URL, cs50.dev, but more
1741
01:16:13,920 --> 01:16:15,870
on that in next week, week one.
1742
01:16:15,870 --> 01:16:19,650
For now, we'll use another
cloud-based editor called Scratch.
1743
01:16:19,650 --> 01:16:21,960
And odds are some number
of you use this probably
1744
01:16:21,960 --> 01:16:23,970
as early as like middle
school or the like.
1745
01:16:23,970 --> 01:16:27,300
And that was fine to create
your own animations, games,
1746
01:16:27,300 --> 01:16:28,650
interactive art, or the like.
1747
01:16:28,650 --> 01:16:30,600
But we'll use it today for just a bit.
1748
01:16:30,600 --> 01:16:32,670
And we'll use it in the
course's first homework,
1749
01:16:32,670 --> 01:16:36,870
AKA problem set 0, to explore
now some of these same ideas.
1750
01:16:36,870 --> 01:16:39,720
And among the goals today
for the remainder of today
1751
01:16:39,720 --> 01:16:42,920
is not to focus so much on
Scratch and the particulars
1752
01:16:42,920 --> 01:16:44,670
because this is not a
language that you're
1753
01:16:44,670 --> 01:16:50,280
going to use often but to give you
very visual representations of ideas
1754
01:16:50,280 --> 01:16:53,790
so that when things do escalate
next week to C, to the more cryptic,
1755
01:16:53,790 --> 01:16:57,840
it's the same ideas just typed out
instead of dragged and dropped.
1756
01:16:57,840 --> 01:16:59,460
So by that, I mean this.
1757
01:16:59,460 --> 01:17:03,270
I'm going to go ahead and share in just
a moment the user interface of Scratch.
1758
01:17:03,270 --> 01:17:05,370
But what's nice about
Scratch is that this
1759
01:17:05,370 --> 01:17:08,400
is how we're going to implement
that same program today.
1760
01:17:08,400 --> 01:17:11,200
These are two blocks or
puzzle pieces on the screen,
1761
01:17:11,200 --> 01:17:15,670
and they've been interconnected to
tell the computer to say "hello, world"
1762
01:17:15,670 --> 01:17:16,570
on the screen.
1763
01:17:16,570 --> 01:17:18,490
The user interface
that we're about to use
1764
01:17:18,490 --> 01:17:20,652
will look generally something like this.
1765
01:17:20,652 --> 01:17:22,360
It's a web-based editor
that you can also
1766
01:17:22,360 --> 01:17:24,160
download it locally to use offline.
1767
01:17:24,160 --> 01:17:28,120
And you'll see that at the left here
are a whole bunch of puzzle pieces
1768
01:17:28,120 --> 01:17:29,020
or blocks.
1769
01:17:29,020 --> 01:17:31,630
They're categorized by
color, and the blue ones
1770
01:17:31,630 --> 01:17:33,980
tend to relate to motion, for instance.
1771
01:17:33,980 --> 01:17:35,950
The purple ones represent looks.
1772
01:17:35,950 --> 01:17:37,750
The pink one represents sounds.
1773
01:17:37,750 --> 01:17:40,180
The yellow one represents events.
1774
01:17:40,180 --> 01:17:41,230
More on that soon.
1775
01:17:41,230 --> 01:17:43,270
The orange ones represent
control, and then
1776
01:17:43,270 --> 01:17:46,390
there's operators, variables, my
blocks, and even some extensions
1777
01:17:46,390 --> 01:17:47,690
we can install as well.
1778
01:17:47,690 --> 01:17:51,820
So it just categorizes things
visually and colorfully so that you
1779
01:17:51,820 --> 01:17:53,470
can find what you're looking for.
1780
01:17:53,470 --> 01:17:56,740
But we're going to use these
puzzle pieces to drag and drop them
1781
01:17:56,740 --> 01:17:58,300
onto this area here.
1782
01:17:58,300 --> 01:18:02,030
And we're going to connect them
when we want them to do something.
1783
01:18:02,030 --> 01:18:02,890
What can they do?
1784
01:18:02,890 --> 01:18:06,010
Well, by default, Scratch comes
with this cat here, otherwise known
1785
01:18:06,010 --> 01:18:09,760
as a sprite, which is a character
in a game or in a graphics context.
1786
01:18:09,760 --> 01:18:12,310
And this cat lives in this
two-dimensional world in which
1787
01:18:12,310 --> 01:18:14,050
the cat can go up, down, left, right.
1788
01:18:14,050 --> 01:18:16,330
And you can actually
change the cat's costume
1789
01:18:16,330 --> 01:18:18,730
to be a dog, a bird, or anything else.
1790
01:18:18,730 --> 01:18:23,260
It really is more of an idea than it
is a specific animal in this case.
1791
01:18:23,260 --> 01:18:26,950
But the world that Scratch lives in
looks a little something like this.
1792
01:18:26,950 --> 01:18:29,860
It's like a Cartesian plane with
x-coordinates and y-coordinates.
1793
01:18:29,860 --> 01:18:32,050
And the numbers don't so
much matter fundamentally,
1794
01:18:32,050 --> 01:18:35,390
except that when you want the
cat or any character to go up,
1795
01:18:35,390 --> 01:18:37,300
down, left, or right
by some amount, it's
1796
01:18:37,300 --> 01:18:42,985
useful to know, for instance, that 0, 0
is the middle, 0 comma 0 for x comma y.
1797
01:18:42,985 --> 01:18:45,550
All the way up is a y value of 180.
1798
01:18:45,550 --> 01:18:47,470
All the way down is -180.
1799
01:18:47,470 --> 01:18:50,170
All the way to the left is -240.
1800
01:18:50,170 --> 01:18:52,030
All the way to the right is 240.
1801
01:18:52,030 --> 01:18:54,655
And generally, you're not going
to have to worry about numbers.
1802
01:18:54,655 --> 01:18:58,030
You're going to use these relatively--
go right, go left, go up, or down.
1803
01:18:58,030 --> 01:19:01,970
But that's just the world that
Scratch itself lives in here.
1804
01:19:01,970 --> 01:19:03,730
So let's go about using Scratch here.
1805
01:19:03,730 --> 01:19:06,880
I'm going to change over
to my cloud-based editor
1806
01:19:06,880 --> 01:19:10,120
here, where I've gone
to scratch.mit.edu.
1807
01:19:10,120 --> 01:19:12,520
And I've clicked Create in
order to create a project.
1808
01:19:12,520 --> 01:19:14,822
And that gives me this
blank canvas here.
1809
01:19:14,822 --> 01:19:17,530
And I'm going to do these somewhat
quickly because I kind of know
1810
01:19:17,530 --> 01:19:18,440
what I'm looking for.
1811
01:19:18,440 --> 01:19:21,400
But part of the process with problem
set zero is going to be clicking,
1812
01:19:21,400 --> 01:19:23,410
and dragging, and sort
of scrolling around
1813
01:19:23,410 --> 01:19:25,390
to see what building blocks exist.
1814
01:19:25,390 --> 01:19:29,020
But I know under Events
there's this puzzle piece here
1815
01:19:29,020 --> 01:19:30,910
when green flag clicked.
1816
01:19:30,910 --> 01:19:32,110
Why is that germane?
1817
01:19:32,110 --> 01:19:35,720
Well, if I zoom out, and go back to
Scratch's world at the right here,
1818
01:19:35,720 --> 01:19:37,720
notice that above
Scratch's world there's
1819
01:19:37,720 --> 01:19:40,870
a green flag, which is going to
mean go, and a red stop sign, which,
1820
01:19:40,870 --> 01:19:42,290
of course, is going to mean stop.
1821
01:19:42,290 --> 01:19:46,780
So if I drag this puzzle piece
anywhere into the middle,
1822
01:19:46,780 --> 01:19:49,180
it's just going to plop where I put it.
1823
01:19:49,180 --> 01:19:53,380
But what that means semantically is
when someone clicks that green flag,
1824
01:19:53,380 --> 01:19:56,440
I want Scratch the cat
to do this other thing.
1825
01:19:56,440 --> 01:19:57,970
Well, what do I want it to do?
1826
01:19:57,970 --> 01:19:59,560
Well, let me go under Looks.
1827
01:19:59,560 --> 01:20:04,090
And looks here in purple have
some puzzle pieces like this.
1828
01:20:04,090 --> 01:20:06,490
Well, I can say hello for
some number of seconds,
1829
01:20:06,490 --> 01:20:08,620
or I can just go ahead and say hello.
1830
01:20:08,620 --> 01:20:09,430
So let's do that.
1831
01:20:09,430 --> 01:20:11,650
I'm going to drag this say block.
1832
01:20:11,650 --> 01:20:13,630
And notice that as soon
as I get close enough,
1833
01:20:13,630 --> 01:20:15,562
it's going to magnetically
want to connect.
1834
01:20:15,562 --> 01:20:17,770
So I can let go, and they
snap together automatically
1835
01:20:17,770 --> 01:20:19,103
because they're the right shape.
1836
01:20:19,103 --> 01:20:21,100
I don't have to say
hello, exclamation point.
1837
01:20:21,100 --> 01:20:23,920
I can change it to the more
canonical, hello comma world.
1838
01:20:23,920 --> 01:20:26,440
So anything in this
white oval is editable
1839
01:20:26,440 --> 01:20:28,870
that you can change as just text there.
1840
01:20:28,870 --> 01:20:31,960
If I now zoom out, let me go
ahead and click the green flag.
1841
01:20:31,960 --> 01:20:36,556
And voila-- this should be
my first program in Scratch.
1842
01:20:36,556 --> 01:20:37,430
Hello, world.
1843
01:20:37,430 --> 01:20:39,410
Without any of the
distractions of syntax
1844
01:20:39,410 --> 01:20:42,420
or weird characters on the screen,
it's just done what I want it to do.
1845
01:20:42,420 --> 01:20:42,920
All right.
1846
01:20:42,920 --> 01:20:44,462
Let me go ahead and click Stop there.
1847
01:20:44,462 --> 01:20:47,240
And let me make it a
little more connected
1848
01:20:47,240 --> 01:20:48,750
to what we've discussed thus far.
1849
01:20:48,750 --> 01:20:51,380
So this puzzle piece
here, say hello, world,
1850
01:20:51,380 --> 01:20:56,370
represents what type of building
block using the vocabulary of today?
1851
01:20:56,370 --> 01:20:57,420
So it's a function.
1852
01:20:57,420 --> 01:21:00,048
So these purple blocks are
functions, say, hello, world.
1853
01:21:00,048 --> 01:21:02,090
And let me give you another
piece of terminology.
1854
01:21:02,090 --> 01:21:04,910
These white ovals that
take textual input--
1855
01:21:04,910 --> 01:21:08,210
in general, those are called
parameters or arguments.
1856
01:21:08,210 --> 01:21:11,610
And they customize the
behavior of a function.
1857
01:21:11,610 --> 01:21:14,180
So a parameter or an
argument customizes,
1858
01:21:14,180 --> 01:21:17,810
modifies the default behavior of a
function, like in this case, say.
1859
01:21:17,810 --> 01:21:20,990
Similarly, in the C code from
earlier that we'll see next week,
1860
01:21:20,990 --> 01:21:27,350
the printf function took a quoted phrase
like, hello, world, similarly as input.
1861
01:21:27,350 --> 01:21:29,970
But more on that in the future.
1862
01:21:29,970 --> 01:21:32,810
So how does this connect to the
mental model we presented earlier?
1863
01:21:32,810 --> 01:21:37,140
Well, here's problem-solving as I
described it earlier, inputs to outputs
1864
01:21:37,140 --> 01:21:39,090
with algorithms or code in the middle.
1865
01:21:39,090 --> 01:21:43,710
Well, what we've got here really is an
input of, hello, world, the white oval.
1866
01:21:43,710 --> 01:21:48,600
The function or algorithm that it's
going into as input is the say block.
1867
01:21:48,600 --> 01:21:51,960
And what is the output of using
this say block, the say function?
1868
01:21:51,960 --> 01:21:55,650
It's the visual effect of having the
cat have the little speech bubble appear
1869
01:21:55,650 --> 01:21:58,060
above its head, saying, hello, world.
1870
01:21:58,060 --> 01:22:00,900
So everything we do, in
fact, can be mapped back
1871
01:22:00,900 --> 01:22:04,590
to that very simple idea
of inputs and outputs.
1872
01:22:04,590 --> 01:22:06,840
Well, let's make it a little
more interesting, though.
1873
01:22:06,840 --> 01:22:09,430
It's a little boring to just
say "hello, world" all the time.
1874
01:22:09,430 --> 01:22:11,500
Let me go ahead and drag this away.
1875
01:22:11,500 --> 01:22:15,180
And if you just drag it to the left and
let go, it gets automatically deleted.
1876
01:22:15,180 --> 01:22:18,580
Let me go under Sensing
in light blue here.
1877
01:22:18,580 --> 01:22:20,850
And you'll see there's a
bunch of blocks, one of which
1878
01:22:20,850 --> 01:22:24,180
is an ask block, an ask function,
which is going to prompt
1879
01:22:24,180 --> 01:22:26,170
the human, me, for some input.
1880
01:22:26,170 --> 01:22:29,700
So let me go ahead and drag that
over here, and it snaps together.
1881
01:22:29,700 --> 01:22:32,190
I could change the question,
but I'm OK with that question.
1882
01:22:32,190 --> 01:22:33,670
We'll use what's your name.
1883
01:22:33,670 --> 01:22:36,900
But notice that this block,
ask, is a little special.
1884
01:22:36,900 --> 01:22:40,240
It is not just going to display
like a speech bubble on the screen.
1885
01:22:40,240 --> 01:22:42,510
It's actually going to
return a value, and this is
1886
01:22:42,510 --> 01:22:44,250
another term of art today and onward.
1887
01:22:44,250 --> 01:22:48,492
A return value is some value that can
be handed back to you conceptually
1888
01:22:48,492 --> 01:22:50,700
from a function so that you
can do something with it.
1889
01:22:50,700 --> 01:22:55,025
It's as though the ask function
asks someone for their name,
1890
01:22:55,025 --> 01:22:57,900
writes it down on a piece of paper,
and hands you the piece of paper.
1891
01:22:57,900 --> 01:23:00,150
You can do anything now that
you want with that name.
1892
01:23:00,150 --> 01:23:03,810
And here is how you access the
name in this special block called
1893
01:23:03,810 --> 01:23:07,330
answer, which, again, will
start calling a return value.
1894
01:23:07,330 --> 01:23:10,770
So if I want to say "hello" to someone
specific, I'm going to do this.
1895
01:23:10,770 --> 01:23:11,800
Let me zoom out.
1896
01:23:11,800 --> 01:23:15,510
Let me go back to Looks,
and let me go back to Say.
1897
01:23:15,510 --> 01:23:19,890
And I'm going to change the say
block here to "hello, comma."
1898
01:23:19,890 --> 01:23:21,270
Then I'm going to zoom out.
1899
01:23:21,270 --> 01:23:23,700
Well, I need two inputs, I think.
1900
01:23:23,700 --> 01:23:26,640
So I'm going to grab another say
block, and I'm going to put it below.
1901
01:23:26,640 --> 01:23:29,160
And I could just type
"David," but this is
1902
01:23:29,160 --> 01:23:31,660
going to defeat the whole point
of asking me for the name.
1903
01:23:31,660 --> 01:23:32,610
And it will only work for me.
1904
01:23:32,610 --> 01:23:33,790
So I don't want to do that.
1905
01:23:33,790 --> 01:23:38,520
So let me go back to Sensing, and
notice the shape is important here.
1906
01:23:38,520 --> 01:23:41,130
Even if it's not quite the
same size, the shape matters.
1907
01:23:41,130 --> 01:23:45,690
And I can actually drag this and
change the input of this say function
1908
01:23:45,690 --> 01:23:48,870
to be whatever that return
value is, that piece of paper
1909
01:23:48,870 --> 01:23:50,430
that has the person's name on it.
1910
01:23:50,430 --> 01:23:53,550
And it grows to fill,
but now we have a program
1911
01:23:53,550 --> 01:23:57,240
that I think when I click the green
flag-- watch-- is going to prompt me.
1912
01:23:57,240 --> 01:23:58,367
What's your name?
1913
01:23:58,367 --> 01:23:59,950
And now I have room to type down here.
1914
01:23:59,950 --> 01:24:02,370
So I'm going to type D-A-V-I-D.
I'm going to hit Enter,
1915
01:24:02,370 --> 01:24:04,000
and it should say "hello, Dave."
1916
01:24:04,000 --> 01:24:04,500
Wait.
1917
01:24:04,500 --> 01:24:06,110
Hmm.
1918
01:24:06,110 --> 01:24:07,050
Huh.
1919
01:24:07,050 --> 01:24:09,990
Maybe it was-- didn't work.
1920
01:24:09,990 --> 01:24:11,160
D-A-V-I-D. Here we go.
1921
01:24:11,160 --> 01:24:12,165
Hello, David.
1922
01:24:12,165 --> 01:24:13,530
Hmm.
1923
01:24:13,530 --> 01:24:19,210
It's missing the hello, but I'm quite
sure we have a hello right there.
1924
01:24:19,210 --> 01:24:22,170
So what explains this bug or mistake?
1925
01:24:22,170 --> 01:24:23,117
Yeah.
1926
01:24:23,117 --> 01:24:26,596
AUDIENCE: [INAUDIBLE].
1927
01:24:26,596 --> 01:24:29,090
So they overlap.
1928
01:24:29,090 --> 01:24:30,800
DAVID J. MALAN: Exactly.
1929
01:24:30,800 --> 01:24:33,710
Put another way, my Mac,
my PC, it's just so darn
1930
01:24:33,710 --> 01:24:36,320
fast that it did exactly
what it was supposed to.
1931
01:24:36,320 --> 01:24:40,580
But it said "hello, David" so fast that
we didn't even see, we being the human,
1932
01:24:40,580 --> 01:24:42,795
the slowest part of the
puzzle, see the actual hello.
1933
01:24:42,795 --> 01:24:45,170
So there's a few different
ways to fix this, as you know.
1934
01:24:45,170 --> 01:24:48,660
We could have it say "hello"
for some number of seconds.
1935
01:24:48,660 --> 01:24:49,910
So I could kind of do that.
1936
01:24:49,910 --> 01:24:50,660
So let me do this.
1937
01:24:50,660 --> 01:24:53,210
I can decouple these by just
dragging and letting it go
1938
01:24:53,210 --> 01:24:55,220
so that they're magnetically far apart.
1939
01:24:55,220 --> 01:24:58,610
Let me go ahead and drag this
one, say hello for two seconds.
1940
01:24:58,610 --> 01:25:02,030
I'm going to change the grammar
here to be hello comma again.
1941
01:25:02,030 --> 01:25:05,120
I'm going to go ahead
and disconnect these two.
1942
01:25:05,120 --> 01:25:08,160
I'm going to throw away the old
one that I don't want to use.
1943
01:25:08,160 --> 01:25:11,460
And I'm going to reconnect
this so that now--
1944
01:25:11,460 --> 01:25:11,960
OK.
1945
01:25:11,960 --> 01:25:14,960
It's going to say hello for two
seconds and then my name, hopefully.
1946
01:25:14,960 --> 01:25:17,180
So let me click Stop and Start.
1947
01:25:17,180 --> 01:25:20,970
D-A-V-I-D. Enter.
1948
01:25:20,970 --> 01:25:21,540
OK.
1949
01:25:21,540 --> 01:25:25,577
So it's better, but it's
kind of poorly implemented.
1950
01:25:25,577 --> 01:25:26,160
Like, come on.
1951
01:25:26,160 --> 01:25:27,785
I just wanted to say hello comma David.
1952
01:25:27,785 --> 01:25:28,785
Why is that hard?
1953
01:25:28,785 --> 01:25:31,410
Well, maybe we can actually
combine these a little differently.
1954
01:25:31,410 --> 01:25:32,610
And let me propose this.
1955
01:25:32,610 --> 01:25:35,760
Let me actually get rid
of these blocks again.
1956
01:25:35,760 --> 01:25:38,430
And let me go ahead
and just say one thing.
1957
01:25:38,430 --> 01:25:43,650
But can I somehow combine this to say
hello comma David all in one breath?
1958
01:25:43,650 --> 01:25:46,348
Well, it turns out if
I go under Operators,
1959
01:25:46,348 --> 01:25:49,140
I know from having played with this
before that there's this puzzle
1960
01:25:49,140 --> 01:25:51,030
piece down here called join.
1961
01:25:51,030 --> 01:25:52,463
It's an oval.
1962
01:25:52,463 --> 01:25:54,630
It's a little big, but,
again, it will grow to fill.
1963
01:25:54,630 --> 01:25:57,338
And by default, it wants to join
two words, "apple" and "banana."
1964
01:25:57,338 --> 01:25:59,830
But those are just placeholders.
1965
01:25:59,830 --> 01:26:03,990
So let me go ahead and drag
this over the default hello.
1966
01:26:03,990 --> 01:26:08,700
Let me change "apple" to hello
comma space and then banana.
1967
01:26:08,700 --> 01:26:10,230
Let me go back to Sensing.
1968
01:26:10,230 --> 01:26:13,630
Let me grab answer and
drag and drop that.
1969
01:26:13,630 --> 01:26:16,740
So now notice that I'm
kind of layering my ideas.
1970
01:26:16,740 --> 01:26:20,980
And put another way, the
output of this join block
1971
01:26:20,980 --> 01:26:22,980
is presumably going to
join two things together,
1972
01:26:22,980 --> 01:26:25,110
apple and banana or hello comma David.
1973
01:26:25,110 --> 01:26:29,460
And then the output of join is
going to become the input to say.
1974
01:26:29,460 --> 01:26:31,900
So aesthetically, it just looks better.
1975
01:26:31,900 --> 01:26:33,790
It's still correct,
but it's just better.
1976
01:26:33,790 --> 01:26:36,840
So if I type "David," and
hit Enter, hello, David.
1977
01:26:36,840 --> 01:26:38,820
This is what a normal
program would presumably
1978
01:26:38,820 --> 01:26:42,390
do, not show you part of the phrase
and then the rest of the phrase.
1979
01:26:42,390 --> 01:26:44,230
Like, it's just better in this way.
1980
01:26:44,230 --> 01:26:48,480
So let's connect this now to this same
puzzle piece and this methodology.
1981
01:26:48,480 --> 01:26:50,610
So here's that same puzzle piece, ask.
1982
01:26:50,610 --> 01:26:53,520
How do we fit it into this input
and output flow with algorithms?
1983
01:26:53,520 --> 01:26:57,120
Well, the input to that puzzle piece
is something like, what's your name,
1984
01:26:57,120 --> 01:26:58,200
question mark.
1985
01:26:58,200 --> 01:27:01,680
Then the algorithm or the
code implementation thereof
1986
01:27:01,680 --> 01:27:06,240
is this ask block and wait so the human
has a moment to type their response in.
1987
01:27:06,240 --> 01:27:09,548
The output of that function
recall is a return value.
1988
01:27:09,548 --> 01:27:12,840
You don't see anything on the screen by
default because we've not used say yet,
1989
01:27:12,840 --> 01:27:14,860
but we get this return value.
1990
01:27:14,860 --> 01:27:18,120
And let me scooch everything
over now so that we can now
1991
01:27:18,120 --> 01:27:20,110
join those inputs together.
1992
01:27:20,110 --> 01:27:21,610
So here's this puzzle piece.
1993
01:27:21,610 --> 01:27:24,940
Let me go ahead and propose that
the inputs now to the join block
1994
01:27:24,940 --> 01:27:30,100
are two arguments or two parameters,
so to speak, hello and answer.
1995
01:27:30,100 --> 01:27:32,740
They go into that join puzzle
piece, whose purpose in life
1996
01:27:32,740 --> 01:27:36,040
is to return one joined version thereof.
1997
01:27:36,040 --> 01:27:38,470
Let me slide this all
over logically now so
1998
01:27:38,470 --> 01:27:42,850
that now that output becomes
the input to the say block
1999
01:27:42,850 --> 01:27:46,330
and now is why the cat has the
speech bubble saying all at once,
2000
01:27:46,330 --> 01:27:47,740
hello comma David.
2001
01:27:47,740 --> 01:27:51,620
So what we've done here is
kind of composed the output
2002
01:27:51,620 --> 01:27:54,017
and from one function
into the input of another.
2003
01:27:54,017 --> 01:27:56,350
And you can think of this in
a couple of different ways,
2004
01:27:56,350 --> 01:27:58,150
left to right, as I
did there, or kind of
2005
01:27:58,150 --> 01:28:00,740
like stacking these things
on top of one another.
2006
01:28:00,740 --> 01:28:02,860
But at the end of the
day, even as programming
2007
01:28:02,860 --> 01:28:07,510
gets more and more powerful for us,
it's just inputs and outputs, inputs
2008
01:28:07,510 --> 01:28:08,320
and outputs.
2009
01:28:08,320 --> 01:28:11,230
And thankfully, with built-in
functionality from our friends
2010
01:28:11,230 --> 01:28:14,680
at MIT who designed Scratch, I can
even do something playful like this.
2011
01:28:14,680 --> 01:28:16,990
I can go to that Extensions
button at the bottom.
2012
01:28:16,990 --> 01:28:20,260
And there's a lot of fancy things I
can add here, like text-to-speech.
2013
01:28:20,260 --> 01:28:22,680
So let me go ahead and
choose text-to-speech.
2014
01:28:22,680 --> 01:28:28,050
And let me go ahead here and
change the say block in purple.
2015
01:28:28,050 --> 01:28:30,450
Let me get rid of the say
block, and let me borrow this.
2016
01:28:30,450 --> 01:28:33,300
Let me get the speak block like this.
2017
01:28:33,300 --> 01:28:35,250
And now let me drag and drop this oval.
2018
01:28:35,250 --> 01:28:36,470
It's going to grow to fill.
2019
01:28:36,470 --> 01:28:38,970
And I think it's just about to
be a little more interesting.
2020
01:28:38,970 --> 01:28:42,090
Let me click Play now, and
hopefully this isn't too loud.
2021
01:28:42,090 --> 01:28:44,280
D-A-V-I-D. Enter.
2022
01:28:44,280 --> 01:28:45,948
SPEAKER: Hello, David.
2023
01:28:45,948 --> 01:28:46,740
DAVID J. MALAN: OK.
2024
01:28:46,740 --> 01:28:47,730
[APPLAUSE]
2025
01:28:47,730 --> 01:28:50,350
Thank you.
2026
01:28:50,350 --> 01:28:50,980
Thank you.
2027
01:28:50,980 --> 01:28:51,835
That's a low bar.
2028
01:28:51,835 --> 01:28:54,550
[CHUCKLES] Let me go ahead
and set the voice too.
2029
01:28:54,550 --> 01:28:56,830
And you might now remember
how we began class, where
2030
01:28:56,830 --> 01:28:59,080
we had a robotic, computerized voice.
2031
01:28:59,080 --> 01:29:03,168
Well, we didn't use Scratch at the time,
but we could change this in Scratch
2032
01:29:03,168 --> 01:29:04,460
alone to be a little different.
2033
01:29:04,460 --> 01:29:05,890
So D-A-V-I-D.
2034
01:29:05,890 --> 01:29:07,028
SPEAKER: Hello, David.
2035
01:29:07,028 --> 01:29:07,820
DAVID J. MALAN: OK.
2036
01:29:07,820 --> 01:29:10,070
Little creepy, but we can
play all day long with that.
2037
01:29:10,070 --> 01:29:12,125
But the point is that
these functions are just
2038
01:29:12,125 --> 01:29:13,750
now doing something a little different.
2039
01:29:13,750 --> 01:29:15,792
But it's just these inputs and outputs.
2040
01:29:15,792 --> 01:29:17,500
Well, let's make the
cat more like a cat.
2041
01:29:17,500 --> 01:29:20,590
Let me go ahead and throw away
all of this asking question stuff.
2042
01:29:20,590 --> 01:29:23,350
Let me go up to Sound,
and let me go ahead
2043
01:29:23,350 --> 01:29:26,260
and drag the play sound meow until done.
2044
01:29:26,260 --> 01:29:27,910
And here too it comes with meow.
2045
01:29:27,910 --> 01:29:31,697
You can add your own sounds as well.
2046
01:29:31,697 --> 01:29:34,030
But I'm just going to use the
default meow and here too.
2047
01:29:34,030 --> 01:29:35,447
Hopefully, this won't be too loud.
2048
01:29:35,447 --> 01:29:37,360
Let's make the cat
meow by clicking Play.
2049
01:29:37,360 --> 01:29:39,530
[MEOWING]
2050
01:29:39,530 --> 01:29:40,030
OK.
2051
01:29:40,030 --> 01:29:42,200
It's a little piercing, but it's cute.
2052
01:29:42,200 --> 01:29:45,490
And if I want the cat to meow twice,
I could just play the game twice.
2053
01:29:45,490 --> 01:29:48,410
[MEOWING]
2054
01:29:48,410 --> 01:29:48,910
All right.
2055
01:29:48,910 --> 01:29:52,360
But it would be nice to just get it
to meow automatically two, or three,
2056
01:29:52,360 --> 01:29:53,240
or more times.
2057
01:29:53,240 --> 01:29:54,760
So you know what I could do?
2058
01:29:54,760 --> 01:29:56,820
I could just drag a second one of these.
2059
01:29:56,820 --> 01:29:57,820
Actually, you know what?
2060
01:29:57,820 --> 01:30:00,790
I could even just right-click or
Control-click and duplicate them.
2061
01:30:00,790 --> 01:30:02,110
But I'll just keep
dragging and dropping.
2062
01:30:02,110 --> 01:30:03,670
There's different ways
to solve problems.
2063
01:30:03,670 --> 01:30:04,780
And now let me click Play.
2064
01:30:04,780 --> 01:30:07,370
[MEOWING]
2065
01:30:07,370 --> 01:30:07,870
OK.
2066
01:30:07,870 --> 01:30:09,940
Cat does not sound particularly happy.
2067
01:30:09,940 --> 01:30:12,320
So we could go under--
2068
01:30:12,320 --> 01:30:13,690
how about Control?
2069
01:30:13,690 --> 01:30:15,220
We could wait one second.
2070
01:30:15,220 --> 01:30:18,740
Now, there's no room, but it will
sort of expand to give room for me.
2071
01:30:18,740 --> 01:30:19,900
So let me try this.
2072
01:30:19,900 --> 01:30:22,540
And now it's going to wait
one second in between meows.
2073
01:30:22,540 --> 01:30:25,828
[MEOWING]
2074
01:30:25,828 --> 01:30:26,820
2075
01:30:26,820 --> 01:30:27,330
OK.
2076
01:30:27,330 --> 01:30:28,830
Let me stipulate that is correct.
2077
01:30:28,830 --> 01:30:32,190
If my goal is to get the cat to meow
three times, it meowed three times.
2078
01:30:32,190 --> 01:30:36,640
But per our discussion earlier of
algorithms and the design thereof,
2079
01:30:36,640 --> 01:30:38,770
this is not the best design.
2080
01:30:38,770 --> 01:30:39,760
[MEOWING]
2081
01:30:39,760 --> 01:30:40,260
OK?
2082
01:30:40,260 --> 01:30:40,500
[LAUGHTER]
2083
01:30:40,500 --> 01:30:42,000
Thank you for playing along at home.
2084
01:30:42,000 --> 01:30:43,350
Yeah.
2085
01:30:43,350 --> 01:30:47,050
In what sense is this
arguably not well-designed?
2086
01:30:47,050 --> 01:30:47,550
Yeah.
2087
01:30:47,550 --> 01:30:48,930
AUDIENCE: You repeated yourself.
2088
01:30:48,930 --> 01:30:51,600
DAVID J. MALAN: I repeated myself,
which actually in programming
2089
01:30:51,600 --> 01:30:53,440
tends not to be a good thing.
2090
01:30:53,440 --> 01:30:54,510
Now, it was easy.
2091
01:30:54,510 --> 01:30:57,510
I almost resorted to copy-paste,
which saves me time upfront.
2092
01:30:57,510 --> 01:30:59,400
But just imagine a contrived scenario.
2093
01:30:59,400 --> 01:31:02,350
Now, what if I want it to wait
like two seconds in between?
2094
01:31:02,350 --> 01:31:02,850
All right.
2095
01:31:02,850 --> 01:31:03,940
It's not that big a deal.
2096
01:31:03,940 --> 01:31:05,640
I change it here, and I change it here.
2097
01:31:05,640 --> 01:31:07,913
But what if the program
is meant to meow 10 times?
2098
01:31:07,913 --> 01:31:10,830
Then I have to change it here, and
here, and here, and here, and here.
2099
01:31:10,830 --> 01:31:12,570
And eventually I'm going to screw up.
2100
01:31:12,570 --> 01:31:13,470
Humans are fallible.
2101
01:31:13,470 --> 01:31:14,970
I'm going to overlook one of them.
2102
01:31:14,970 --> 01:31:16,260
One time, it's going to be one second.
2103
01:31:16,260 --> 01:31:18,910
Another is going to be two, and
just stupid things will happen.
2104
01:31:18,910 --> 01:31:23,050
You're setting yourself up for
failure if you design things poorly.
2105
01:31:23,050 --> 01:31:26,440
And so I would propose that we
use another type of building block
2106
01:31:26,440 --> 01:31:27,730
to solve this instead.
2107
01:31:27,730 --> 01:31:28,555
Yeah.
2108
01:31:28,555 --> 01:31:28,810
AUDIENCE: [INAUDIBLE]
2109
01:31:28,810 --> 01:31:29,685
DAVID J. MALAN: Yeah.
2110
01:31:29,685 --> 01:31:32,950
So we could use a loop and
just write minimal code
2111
01:31:32,950 --> 01:31:35,240
but to accomplish even
more functionality.
2112
01:31:35,240 --> 01:31:37,390
So let me throw away
most of these blocks.
2113
01:31:37,390 --> 01:31:40,990
And let's go and grab this repeat
block, which we haven't used yet,
2114
01:31:40,990 --> 01:31:42,042
but it's right there.
2115
01:31:42,042 --> 01:31:43,750
And as the name
suggests, this will allow
2116
01:31:43,750 --> 01:31:45,850
me to repeat something
some number of times.
2117
01:31:45,850 --> 01:31:48,280
Let me put these two
puzzle pieces inside.
2118
01:31:48,280 --> 01:31:49,330
It'll grow to fill.
2119
01:31:49,330 --> 01:31:51,370
Let me reconnect it to the green flag.
2120
01:31:51,370 --> 01:31:53,470
I'll change the default 10 to a 3.
2121
01:31:53,470 --> 01:31:54,265
And now--
2122
01:31:54,265 --> 01:31:57,526
[MEOWING]
2123
01:31:57,526 --> 01:31:58,940
2124
01:31:58,940 --> 01:32:02,290
It's just sort of better because if
now you want it to meow more times,
2125
01:32:02,290 --> 01:32:03,290
you change it one place.
2126
01:32:03,290 --> 01:32:05,623
If you want it to slow down,
you change it in one place.
2127
01:32:05,623 --> 01:32:07,280
There's no room for error.
2128
01:32:07,280 --> 01:32:09,920
And that's generally a good thing.
2129
01:32:09,920 --> 01:32:10,670
But this is silly.
2130
01:32:10,670 --> 01:32:12,350
Like, Scratch comes with a cat.
2131
01:32:12,350 --> 01:32:15,590
Why didn't MIT give us a
puzzle piece called "meow?"
2132
01:32:15,590 --> 01:32:18,460
Like, why am I implementing
the idea of meowing myself?
2133
01:32:18,460 --> 01:32:19,460
Like, that took me what?
2134
01:32:19,460 --> 01:32:21,410
1, 2, 3, 4 puzzle pieces.
2135
01:32:21,410 --> 01:32:24,080
Why isn't there just one
puzzle piece that meows for me?
2136
01:32:24,080 --> 01:32:28,430
This too we can do in code, be it in
Scratch, or C, or other languages too.
2137
01:32:28,430 --> 01:32:32,660
I'm going to go down to
these pink my blocks here,
2138
01:32:32,660 --> 01:32:35,027
where I can create my own puzzle piece.
2139
01:32:35,027 --> 01:32:36,860
And I'm going to call
this literally "meow."
2140
01:32:36,860 --> 01:32:39,150
And I'm going to go
ahead and just click OK.
2141
01:32:39,150 --> 01:32:42,242
And notice that it's given me
this new type of start connector.
2142
01:32:42,242 --> 01:32:44,450
It's a start puzzle piece
that nothing goes above it.
2143
01:32:44,450 --> 01:32:46,430
But you can put anything
you want below it.
2144
01:32:46,430 --> 01:32:48,170
And I'm going to go
ahead and cheat here.
2145
01:32:48,170 --> 01:32:51,390
I'm just going to grab my
existing code, so to speak.
2146
01:32:51,390 --> 01:32:53,810
This is code I'm writing, even
though it's puzzle pieces.
2147
01:32:53,810 --> 01:32:57,380
And now let me just claim,
and I'll move this aside.
2148
01:32:57,380 --> 01:33:00,690
Here is now an implementation
of my own function,
2149
01:33:00,690 --> 01:33:03,510
my own block called "meow,"
whose purpose in life
2150
01:33:03,510 --> 01:33:06,180
is to meow until done
and then wait one second.
2151
01:33:06,180 --> 01:33:10,350
But what's powerful now is notice at
top left, now that I've made the block,
2152
01:33:10,350 --> 01:33:12,910
I can use it any number of times.
2153
01:33:12,910 --> 01:33:17,520
So I can grab this meow block, drag
it over here, and you know what?
2154
01:33:17,520 --> 01:33:21,590
Now that "meow" exists as an
idea, I can abstract that away.
2155
01:33:21,590 --> 01:33:24,090
And I'm just going to arbitrarily
drag it way to the bottom.
2156
01:33:24,090 --> 01:33:24,990
I'm not deleting it.
2157
01:33:24,990 --> 01:33:27,270
I'm just putting it out
of sight, out of mind so
2158
01:33:27,270 --> 01:33:28,890
that we can focus now on this idea.
2159
01:33:28,890 --> 01:33:31,410
And I claim that this
implementation of meowing
2160
01:33:31,410 --> 01:33:35,010
is sort of better because it's
more compact, it does what it says,
2161
01:33:35,010 --> 01:33:38,520
and I don't care about the
implementation details of "meow."
2162
01:33:38,520 --> 01:33:41,640
So this idea of abstraction, something
we're going to use frequently.
2163
01:33:41,640 --> 01:33:44,767
To abstract something
away is to simplify.
2164
01:33:44,767 --> 01:33:47,100
Don't think about the underlying
implementation details.
2165
01:33:47,100 --> 01:33:50,130
Just care about what it
does or what it's called.
2166
01:33:50,130 --> 01:33:52,590
Someone has to care about
the implementation details,
2167
01:33:52,590 --> 01:33:54,330
like me 30 seconds ago.
2168
01:33:54,330 --> 01:33:56,430
But here on out, I don't need to care.
2169
01:33:56,430 --> 01:33:59,690
And so in fact, you and I
are using the abstraction
2170
01:33:59,690 --> 01:34:02,940
that is Scratch because I don't know how
to put a speech bubble on the screen.
2171
01:34:02,940 --> 01:34:04,773
I don't know how to
create that sound, meow.
2172
01:34:04,773 --> 01:34:07,380
MIT did that, and they
abstracted those pieces
2173
01:34:07,380 --> 01:34:10,440
of functionality away already
for us by just giving us
2174
01:34:10,440 --> 01:34:12,280
these puzzle pieces we see here.
2175
01:34:12,280 --> 01:34:14,445
So the code will work the exact same.
2176
01:34:14,445 --> 01:34:17,330
[MEOWING]
2177
01:34:17,330 --> 01:34:21,640
But it's sort of better
designed now because now I've
2178
01:34:21,640 --> 01:34:23,470
abstracted away the idea of meowing.
2179
01:34:23,470 --> 01:34:25,690
But I bet I can improve this further.
2180
01:34:25,690 --> 01:34:28,390
Can I get rid of the
repeat block altogether?
2181
01:34:28,390 --> 01:34:31,510
And let me just tell the meow
block how many times to meow.
2182
01:34:31,510 --> 01:34:35,170
Well, let me go down to the bottom and
look at the implementation details.
2183
01:34:35,170 --> 01:34:37,270
I'm going to right-click
or Control-click on this,
2184
01:34:37,270 --> 01:34:38,210
and I'm going to edit it.
2185
01:34:38,210 --> 01:34:39,290
So I'm going to make a change.
2186
01:34:39,290 --> 01:34:42,290
And I didn't do this before, but I'm
going to call it "meow," as before.
2187
01:34:42,290 --> 01:34:43,780
I'm going to add an input.
2188
01:34:43,780 --> 01:34:46,240
And just so I know what
it says what it does,
2189
01:34:46,240 --> 01:34:49,000
I'm going to add the word "times" here.
2190
01:34:49,000 --> 01:34:52,840
And I'm going to change
this placeholder to n.
2191
01:34:52,840 --> 01:34:54,970
n for "number" is the
go-to placeholder any time
2192
01:34:54,970 --> 01:34:57,230
we want to talk about a number in CS.
2193
01:34:57,230 --> 01:35:00,020
So now notice the puzzle piece
looks a little different.
2194
01:35:00,020 --> 01:35:02,830
It takes an argument
or a parameter called
2195
01:35:02,830 --> 01:35:05,680
n, which represents the number of
times you want the thing to meow.
2196
01:35:05,680 --> 01:35:07,280
Now, that doesn't do that yet.
2197
01:35:07,280 --> 01:35:10,240
So let me go back to my other code.
2198
01:35:10,240 --> 01:35:13,210
Let me just decouple these temporarily.
2199
01:35:13,210 --> 01:35:17,950
I'm going to move my loop into
my implementation of meowing.
2200
01:35:17,950 --> 01:35:21,950
But I don't want to hard code, that is
literally write the number 3 anymore.
2201
01:35:21,950 --> 01:35:25,860
I'm going to grab this
oval and put it there.
2202
01:35:25,860 --> 01:35:27,900
So now I've generalized the function.
2203
01:35:27,900 --> 01:35:33,860
So now it will meow any number of
times, 0 on up, by executing that loop
2204
01:35:33,860 --> 01:35:35,540
and now more powerfully.
2205
01:35:35,540 --> 01:35:36,890
Out of sight, out of mind.
2206
01:35:36,890 --> 01:35:40,850
Notice that my code just
became so darn simple.
2207
01:35:40,850 --> 01:35:42,650
Like, my function is called "meow."
2208
01:35:42,650 --> 01:35:44,330
It meows some number of times.
2209
01:35:44,330 --> 01:35:46,910
All I have to do is type a
number there, and it just works.
2210
01:35:46,910 --> 01:35:50,660
And I don't care any more about
those lower-level, so to speak,
2211
01:35:50,660 --> 01:35:52,230
implementation details.
2212
01:35:52,230 --> 01:35:53,270
So here, no surprise.
2213
01:35:53,270 --> 01:35:55,985
If I type in the number 3,
zoom out, and hit Play--
2214
01:35:55,985 --> 01:36:00,270
[MEOWING]
2215
01:36:00,270 --> 01:36:02,500
--it still works just fine.
2216
01:36:02,500 --> 01:36:05,460
So any questions on what
we've just done here?
2217
01:36:05,460 --> 01:36:07,710
It's still just meowing, but
that's besides the point.
2218
01:36:07,710 --> 01:36:11,340
It's this creation of our own
functions, this modularity,
2219
01:36:11,340 --> 01:36:15,640
this abstraction that's going to be
the idea that keeps coming back to us.
2220
01:36:15,640 --> 01:36:16,140
No?
2221
01:36:16,140 --> 01:36:16,640
All right.
2222
01:36:16,640 --> 01:36:19,050
So let's make this a
little more cat-like.
2223
01:36:19,050 --> 01:36:20,980
Let me throw away all of this code.
2224
01:36:20,980 --> 01:36:22,000
And let me go ahead--
2225
01:36:22,000 --> 01:36:25,000
oops-- let me throw away this code
first and then the rest of this code.
2226
01:36:25,000 --> 01:36:28,500
And let me go ahead and give
myself another green flag block.
2227
01:36:28,500 --> 01:36:32,430
And let me go ahead, and let's
create a cat that allows us to pet it
2228
01:36:32,430 --> 01:36:34,530
by moving my cursor over the cat.
2229
01:36:34,530 --> 01:36:36,820
And maybe it likes that, so
it'll meow when I do that.
2230
01:36:36,820 --> 01:36:42,270
So let me go under Control, and
let me grab this if conditional,
2231
01:36:42,270 --> 01:36:44,910
which we talked about as
a building block earlier.
2232
01:36:44,910 --> 01:36:47,310
Let me go to Sensing, and
we haven't used this before.
2233
01:36:47,310 --> 01:36:50,130
But here is a weird
sort of diagonal shape
2234
01:36:50,130 --> 01:36:52,440
that says touching mouse
pointer question mark.
2235
01:36:52,440 --> 01:36:54,027
So that's a Boolean expression.
2236
01:36:54,027 --> 01:36:56,610
So I'm going to drag that, and
it's definitely the wrong size.
2237
01:36:56,610 --> 01:36:59,070
But it is the right shape,
so it will grow to fill.
2238
01:36:59,070 --> 01:37:03,820
And the question I want to ask is if
the cat is touching the mouse pointer,
2239
01:37:03,820 --> 01:37:05,770
then go ahead and meow happily.
2240
01:37:05,770 --> 01:37:08,360
So let me grab the meow
sound, put it in there.
2241
01:37:08,360 --> 01:37:12,970
And so I think when I click the
green flag to start the program,
2242
01:37:12,970 --> 01:37:19,174
and now I let the mouse pointer
touch the cat, we should hear--
2243
01:37:19,174 --> 01:37:20,110
huh.
2244
01:37:20,110 --> 01:37:21,120
huh.
2245
01:37:21,120 --> 01:37:23,820
Doesn't seem to be working.
2246
01:37:23,820 --> 01:37:27,440
There's a bug or a mistake
in this program too.
2247
01:37:27,440 --> 01:37:28,440
What did I do wrong?
2248
01:37:28,440 --> 01:37:28,940
Yeah.
2249
01:37:28,940 --> 01:37:31,090
AUDIENCE: You didn't specify
the sprite [INAUDIBLE]..
2250
01:37:31,090 --> 01:37:33,130
DAVID J. MALAN: I don't need to
specify the sprite explicitly
2251
01:37:33,130 --> 01:37:35,200
because a detail I
didn't discuss earlier.
2252
01:37:35,200 --> 01:37:37,630
In the bottom right
of the screen, notice
2253
01:37:37,630 --> 01:37:39,890
that the cat is already selected.
2254
01:37:39,890 --> 01:37:42,100
So this code relates to that cat.
2255
01:37:42,100 --> 01:37:45,340
So your instinct is good if
we had two or more sprites,
2256
01:37:45,340 --> 01:37:48,045
but I just have one,
so I'm covered there.
2257
01:37:48,045 --> 01:37:48,670
Other thoughts.
2258
01:37:48,670 --> 01:37:49,602
Yeah.
2259
01:37:49,602 --> 01:37:50,870
AUDIENCE: It only checks once.
2260
01:37:50,870 --> 01:37:51,980
DAVID J. MALAN: It only checks?
2261
01:37:51,980 --> 01:37:52,250
AUDIENCE: Once.
2262
01:37:52,250 --> 01:37:53,125
DAVID J. MALAN: Once.
2263
01:37:53,125 --> 01:37:54,960
So I click the green flag.
2264
01:37:54,960 --> 01:37:57,230
The computer did what I told it to do.
2265
01:37:57,230 --> 01:38:00,165
The mouse pointer was not
touching the cat at that moment
2266
01:38:00,165 --> 01:38:01,790
because it was touching the green flag.
2267
01:38:01,790 --> 01:38:03,320
So, of course, it didn't meow.
2268
01:38:03,320 --> 01:38:05,360
So what maybe is the fix here?
2269
01:38:05,360 --> 01:38:06,980
What puzzle piece can we add?
2270
01:38:06,980 --> 01:38:09,290
AUDIENCE: After the green
flag is [INAUDIBLE]..
2271
01:38:09,290 --> 01:38:10,140
DAVID J. MALAN: OK.
2272
01:38:10,140 --> 01:38:10,640
OK.
2273
01:38:10,640 --> 01:38:12,360
Interesting solution.
2274
01:38:12,360 --> 01:38:17,930
So let me go ahead, and under Control
let me grab a-- wait one second.
2275
01:38:17,930 --> 01:38:21,360
I'm going to change the 1 to 5, and
now I'm going to click the green flag.
2276
01:38:21,360 --> 01:38:22,370
So here we go.
2277
01:38:22,370 --> 01:38:28,490
1, 2, 3, 4, 5.
2278
01:38:28,490 --> 01:38:29,060
Damn it.
2279
01:38:29,060 --> 01:38:29,630
[MEOWING]
2280
01:38:29,630 --> 01:38:29,810
OK.
2281
01:38:29,810 --> 01:38:30,852
That was yours, not mine.
2282
01:38:30,852 --> 01:38:32,240
[LAUGHTER]
2283
01:38:32,240 --> 01:38:33,915
It didn't work.
2284
01:38:33,915 --> 01:38:34,790
AUDIENCE: [INAUDIBLE]
2285
01:38:34,790 --> 01:38:35,707
DAVID J. MALAN: Sorry?
2286
01:38:35,707 --> 01:38:36,703
AUDIENCE: [INAUDIBLE]
2287
01:38:36,703 --> 01:38:38,120
DAVID J. MALAN: Oh, maybe forever.
2288
01:38:38,120 --> 01:38:42,230
So your approach would work, but
it's very much a hack, if you will.
2289
01:38:42,230 --> 01:38:46,700
Like, I would have to time it perfectly
so that the mouse pointer is touching
2290
01:38:46,700 --> 01:38:49,040
it, or, conversely, I have
to drag it there and just
2291
01:38:49,040 --> 01:38:50,540
leave it there for five seconds.
2292
01:38:50,540 --> 01:38:53,040
And that's a little weird because
you don't just touch a cat
2293
01:38:53,040 --> 01:38:54,960
and then five seconds
later it meows at you.
2294
01:38:54,960 --> 01:38:57,190
Like, presumably, we want
it to be more interactive.
2295
01:38:57,190 --> 01:38:58,660
So I like this idea of a loop.
2296
01:38:58,660 --> 01:38:59,160
Right?
2297
01:38:59,160 --> 01:39:04,440
Why don't we just tell the cat
to forever listen for the cursor
2298
01:39:04,440 --> 01:39:07,170
as by using not repeat but forever?
2299
01:39:07,170 --> 01:39:08,240
Let me move this in here.
2300
01:39:08,240 --> 01:39:11,490
So now the cat's going to be told when
the green flag is clicked just forever,
2301
01:39:11,490 --> 01:39:13,073
if touching, if touching, if touching.
2302
01:39:13,073 --> 01:39:15,270
Oh, meow when actually touched.
2303
01:39:15,270 --> 01:39:19,368
So now if I zoom out and hit
Play, nothing's happening.
2304
01:39:19,368 --> 01:39:21,160
I don't have to wait
any number of seconds.
2305
01:39:21,160 --> 01:39:22,545
But when I do touch the cat--
2306
01:39:22,545 --> 01:39:23,260
[MEOWING]
2307
01:39:23,260 --> 01:39:24,180
[APPLAUSE]
2308
01:39:24,180 --> 01:39:26,765
[CHUCKLES] Fan section here.
2309
01:39:26,765 --> 01:39:27,265
Thank you.
2310
01:39:27,265 --> 01:39:27,765
[MEOWING]
2311
01:39:27,765 --> 01:39:30,890
So now it's actually working quite well.
2312
01:39:30,890 --> 01:39:33,220
So there we have sort of a logical bug.
2313
01:39:33,220 --> 01:39:35,545
But it does make sense if
you think about what it was
2314
01:39:35,545 --> 01:39:38,020
you told the computer to actually do.
2315
01:39:38,020 --> 01:39:39,915
Well, let's make things
even more interesting
2316
01:39:39,915 --> 01:39:41,290
by using one of these extensions.
2317
01:39:41,290 --> 01:39:44,620
In this bottom left corner, this is
how I got to text-to-speech earlier.
2318
01:39:44,620 --> 01:39:47,470
Let me go to Video
Sensing over here too.
2319
01:39:47,470 --> 01:39:50,750
And I can actually-- there we go--
literally, the video has come on.
2320
01:39:50,750 --> 01:39:52,060
Let me go ahead and do this.
2321
01:39:52,060 --> 01:39:55,690
Get rid of this code, and
let me step out of the frame.
2322
01:39:55,690 --> 01:39:58,540
When video motion is greater than--
2323
01:39:58,540 --> 01:40:00,490
well, this is CS50, so
let's just type in 50,
2324
01:40:00,490 --> 01:40:02,150
which is just a measure of motion.
2325
01:40:02,150 --> 01:40:07,370
Let me go and play sound meow.
2326
01:40:07,370 --> 01:40:07,870
OK.
2327
01:40:07,870 --> 01:40:11,720
And let me stop and restart.
2328
01:40:11,720 --> 01:40:12,220
All right.
2329
01:40:12,220 --> 01:40:13,030
So there's the cat.
2330
01:40:13,030 --> 01:40:18,270
2331
01:40:18,270 --> 01:40:19,260
[MEOWING]
2332
01:40:19,260 --> 01:40:20,040
OK.
2333
01:40:20,040 --> 01:40:20,880
It worked.
2334
01:40:20,880 --> 01:40:24,330
The cat's a little insensitive.
2335
01:40:24,330 --> 01:40:25,190
[MEOWING]
2336
01:40:25,190 --> 01:40:25,720
There we go.
2337
01:40:25,720 --> 01:40:26,720
Actually, you know what?
2338
01:40:26,720 --> 01:40:30,300
Maybe it's just-- let me
put-- let's change it.
2339
01:40:30,300 --> 01:40:31,130
20.
2340
01:40:31,130 --> 01:40:31,940
Oh, my God.
2341
01:40:31,940 --> 01:40:33,480
Oh, that's OK.
2342
01:40:33,480 --> 01:40:33,980
[MEOWING]
2343
01:40:33,980 --> 01:40:34,790
There we go.
2344
01:40:34,790 --> 01:40:35,690
All right.
2345
01:40:35,690 --> 01:40:36,420
There we go.
2346
01:40:36,420 --> 01:40:40,038
So now it's a little more sensitive
to the petting by using the camera.
2347
01:40:40,038 --> 01:40:41,580
Now, this is kind of a weird example.
2348
01:40:41,580 --> 01:40:43,160
And if I just start moving
around crazily, like,
2349
01:40:43,160 --> 01:40:45,320
it's just going to meow incessantly,
which was what was happening--
2350
01:40:45,320 --> 01:40:46,430
[MEOWING]
2351
01:40:46,430 --> 01:40:48,222
Stop.
2352
01:40:48,222 --> 01:40:49,020
[LAUGHTER]
2353
01:40:49,020 --> 01:40:49,520
OK.
2354
01:40:49,520 --> 01:40:51,800
When in doubt, this is
when you reload the page.
2355
01:40:51,800 --> 01:40:53,010
[LAUGHTER]
2356
01:40:53,010 --> 01:40:53,510
All right.
2357
01:40:53,510 --> 01:40:55,730
So now we're back to
where we wanted to be.
2358
01:40:55,730 --> 01:40:58,220
But where can we now use these
kinds of building blocks?
2359
01:40:58,220 --> 01:41:00,540
Like, we were doing such
tiny little programs.
2360
01:41:00,540 --> 01:41:04,220
But even that we could turn
into a whole game, I bet.
2361
01:41:04,220 --> 01:41:07,700
Could we get like one
volunteer to come on up?
2362
01:41:07,700 --> 01:41:08,810
One volunteer?
2363
01:41:08,810 --> 01:41:10,170
Everyone's looking down.
2364
01:41:10,170 --> 01:41:10,670
OK.
2365
01:41:10,670 --> 01:41:11,180
On the end here.
2366
01:41:11,180 --> 01:41:11,722
Come on down.
2367
01:41:11,722 --> 01:41:12,290
Yeah.
2368
01:41:12,290 --> 01:41:12,790
All right.
2369
01:41:12,790 --> 01:41:14,930
Round of applause for our
one brave volunteer here.
2370
01:41:14,930 --> 01:41:18,150
[APPLAUSE]
2371
01:41:18,150 --> 01:41:18,650
2372
01:41:18,650 --> 01:41:19,400
All right.
2373
01:41:19,400 --> 01:41:22,020
These Super Mario cookies
are on the line for you,
2374
01:41:22,020 --> 01:41:23,160
depending on how this goes.
2375
01:41:23,160 --> 01:41:24,827
So I'm going to have you come over here.
2376
01:41:24,827 --> 01:41:28,940
And in advance on Scratch's website,
we have some pre-made games,
2377
01:41:28,940 --> 01:41:32,930
one of them written by one of your
predecessors, a former student,
2378
01:41:32,930 --> 01:41:36,050
that they implemented this
sort of "Whac-A-Mole" game.
2379
01:41:36,050 --> 01:41:39,290
So what you're about to see
is the camera turn on on you.
2380
01:41:39,290 --> 01:41:43,160
And you're going to see four moles
above, below, left, and right.
2381
01:41:43,160 --> 01:41:44,720
And using only your head--
2382
01:41:44,720 --> 01:41:47,930
up, down, left, right--
the goal is to whack a mole
2383
01:41:47,930 --> 01:41:51,860
to get a point every time your
head touches one of these sprites.
2384
01:41:51,860 --> 01:41:54,740
So you're about to see things get
very interesting very quickly.
2385
01:41:54,740 --> 01:41:57,050
But using these building
blocks, just those simple
2386
01:41:57,050 --> 01:42:01,350
blocks but have four sprites, not
four cats but four moles in this case.
2387
01:42:01,350 --> 01:42:03,955
We can actually turn
these into actual games.
2388
01:42:03,955 --> 01:42:04,580
[MUSIC PLAYING]
2389
01:42:04,580 --> 01:42:06,950
So here we go.
2390
01:42:06,950 --> 01:42:08,360
Click Beginner.
2391
01:42:08,360 --> 01:42:08,900
OK.
2392
01:42:08,900 --> 01:42:10,858
And we just need you to
center your head first.
2393
01:42:10,858 --> 01:42:13,808
[MUSIC PLAYING]
2394
01:42:13,808 --> 01:42:20,152
2395
01:42:20,152 --> 01:42:23,080
[INDISTINCT CHATTER]
2396
01:42:23,080 --> 01:42:24,056
2397
01:42:24,056 --> 01:42:25,032
[CHUCKLES]
2398
01:42:25,032 --> 01:42:28,448
[MUSIC PLAYING]
2399
01:42:28,448 --> 01:42:30,920
2400
01:42:30,920 --> 01:42:31,820
Nice.
2401
01:42:31,820 --> 01:42:32,630
Ten seconds.
2402
01:42:32,630 --> 01:42:36,004
[MUSIC PLAYING]
2403
01:42:36,004 --> 01:42:39,390
2404
01:42:39,390 --> 01:42:40,470
Nice.
2405
01:42:40,470 --> 01:42:42,486
Two seconds.
2406
01:42:42,486 --> 01:42:43,290
AUDIENCE: [LAUGHS]
2407
01:42:43,290 --> 01:42:43,770
DAVID J. MALAN: All right.
2408
01:42:43,770 --> 01:42:44,610
A round of applause.
2409
01:42:44,610 --> 01:42:45,906
[APPLAUSE]
2410
01:42:45,906 --> 01:42:48,100
Thank you.
2411
01:42:48,100 --> 01:42:50,380
You want to introduce yourself?
2412
01:42:50,380 --> 01:42:51,380
AUDIENCE: Hi, everybody.
2413
01:42:51,380 --> 01:42:53,890
My name is [? Vanilla. ?]
I'm a first year,
2414
01:42:53,890 --> 01:42:56,955
and I'm going to be majoring in
computer science and economics.
2415
01:42:56,955 --> 01:42:58,330
DAVID J. MALAN: Nice to meet you.
2416
01:42:58,330 --> 01:42:58,830
Here we go.
2417
01:42:58,830 --> 01:42:59,435
Thank you.
2418
01:42:59,435 --> 01:43:00,560
AUDIENCE: Nice to meet you.
2419
01:43:00,560 --> 01:43:01,393
[APPLAUSE, CHEERING]
2420
01:43:01,393 --> 01:43:04,210
DAVID J. MALAN: So we won't look
at the code for that actual game.
2421
01:43:04,210 --> 01:43:05,740
It was written by one
of your predecessors.
2422
01:43:05,740 --> 01:43:07,573
And you can see it
online if you're curious.
2423
01:43:07,573 --> 01:43:10,780
But you can think about now with
our functions, conditionals,
2424
01:43:10,780 --> 01:43:15,010
Boolean expressions, loops how you could
kind of compose that kind of program.
2425
01:43:15,010 --> 01:43:17,770
So odds are there was a loop that
was just constantly listening
2426
01:43:17,770 --> 01:43:19,690
for that kind of
connectivity, or it was one
2427
01:43:19,690 --> 01:43:22,900
of those extensions that
was waiting for motion to go
2428
01:43:22,900 --> 01:43:24,180
touch one of those sprites.
2429
01:43:24,180 --> 01:43:25,930
Notice that there's
these numbers up here.
2430
01:43:25,930 --> 01:43:27,040
And we haven't talked about this yet.
2431
01:43:27,040 --> 01:43:30,040
But just like in math, where you
can have variables x, y, and z,
2432
01:43:30,040 --> 01:43:33,220
in programming, you can create
variables using other puzzle pieces
2433
01:43:33,220 --> 01:43:36,460
in Scratch that just keep track
of how many seconds are left,
2434
01:43:36,460 --> 01:43:40,310
that keeps track of how many times
her head hit one of the moles.
2435
01:43:40,310 --> 01:43:43,760
And so you can implement the mechanics
of games using very simple building
2436
01:43:43,760 --> 01:43:44,260
blocks.
2437
01:43:44,260 --> 01:43:46,240
But how do you go about
building something
2438
01:43:46,240 --> 01:43:48,600
that's more interesting
and interactive like that?
2439
01:43:48,600 --> 01:43:50,760
Let me go ahead and
bring up, for instance,
2440
01:43:50,760 --> 01:43:52,930
one of the very first
things I wrote years ago
2441
01:43:52,930 --> 01:43:55,430
when I was in graduate school
and Scratch had just come out.
2442
01:43:55,430 --> 01:43:57,380
I was taking a class at MIT's Media Lab.
2443
01:43:57,380 --> 01:44:01,520
And they invited us to beta test-- that
is, try out the software before it then
2444
01:44:01,520 --> 01:44:03,140
became part of the world.
2445
01:44:03,140 --> 01:44:07,200
And the game I made was this one here.
2446
01:44:07,200 --> 01:44:10,640
Let me find the right
version of "Oscartime."
2447
01:44:10,640 --> 01:44:15,673
So "Oscartime" is a game that took
me tens of hours probably in the end.
2448
01:44:15,673 --> 01:44:18,590
It was a little bit addictive, but
let me go ahead and full-screen it.
2449
01:44:18,590 --> 01:44:20,270
And I won't play the whole game.
2450
01:44:20,270 --> 01:44:23,995
But it looked a little
something like this.
2451
01:44:23,995 --> 01:44:25,120
OSCAR: (SINGS) Oh, I love--
2452
01:44:25,120 --> 01:44:28,220
DAVID J. MALAN: Where trash
is falling from the sky.
2453
01:44:28,220 --> 01:44:30,070
And I can click on it and drag it.
2454
01:44:30,070 --> 01:44:33,430
And notice as I get close,
the lid opens up like this.
2455
01:44:33,430 --> 01:44:37,450
And if I let it keep falling, it
goes in, and Oscar gives me a point.
2456
01:44:37,450 --> 01:44:39,585
And I can do this again.
2457
01:44:39,585 --> 01:44:41,710
OSCAR: If you really want
to see something trashy--
2458
01:44:41,710 --> 01:44:41,860
DAVID J. MALAN: All right.
2459
01:44:41,860 --> 01:44:42,943
Here comes something else.
2460
01:44:42,943 --> 01:44:44,565
OSCAR: I have here a sneaker that--
2461
01:44:44,565 --> 01:44:46,690
DAVID J. MALAN: So now
there's two pieces of trash.
2462
01:44:46,690 --> 01:44:49,787
OSCAR: It's all full of
holes, and the laces are--
2463
01:44:49,787 --> 01:44:52,370
DAVID J. MALAN: And it just keeps
going, and going, and going.
2464
01:44:52,370 --> 01:44:55,537
And if we can lower the volume for just
a moment, we'll let more trash fall.
2465
01:44:55,537 --> 01:44:58,300
But to your comment earlier
about one sprite or more
2466
01:44:58,300 --> 01:45:00,040
sprites, that's what we're seeing here.
2467
01:45:00,040 --> 01:45:03,190
Even though our examples thus far
are just one cat, one or two puzzle
2468
01:45:03,190 --> 01:45:04,660
pieces, or a few puzzle pieces.
2469
01:45:04,660 --> 01:45:06,670
Here is, I claim, a sprite.
2470
01:45:06,670 --> 01:45:08,110
Here is another sprite.
2471
01:45:08,110 --> 01:45:09,340
Here is another sprite.
2472
01:45:09,340 --> 01:45:11,950
And by toggling among them in
that bottom right-hand corner,
2473
01:45:11,950 --> 01:45:15,460
I can just associate different puzzle
pieces with each of these sprites.
2474
01:45:15,460 --> 01:45:17,987
Now, I didn't start off by
implementing this whole game.
2475
01:45:17,987 --> 01:45:20,570
And in just a moment, if we can
raise the volume a little bit,
2476
01:45:20,570 --> 01:45:22,400
we'll see even more trash is falling.
2477
01:45:22,400 --> 01:45:23,300
So this is what--
2478
01:45:23,300 --> 01:45:26,930
I hate this song now, like 10 plus
hours listening to this song on loop
2479
01:45:26,930 --> 01:45:28,160
just to get the timing right.
2480
01:45:28,160 --> 01:45:31,040
But it brings to life all
of these different sprites.
2481
01:45:31,040 --> 01:45:34,130
And if you play it again and again,
it's always a little bit different
2482
01:45:34,130 --> 01:45:35,600
because I'm using some randomness.
2483
01:45:35,600 --> 01:45:38,510
So this newspaper doesn't
always fall from there.
2484
01:45:38,510 --> 01:45:39,650
Sometimes it's here.
2485
01:45:39,650 --> 01:45:40,680
Sometimes it's here.
2486
01:45:40,680 --> 01:45:42,920
And so here, again, we have
mechanics of a game where
2487
01:45:42,920 --> 01:45:45,770
things are being perturbed a
little, randomized a little bit
2488
01:45:45,770 --> 01:45:47,772
to keep things more interesting.
2489
01:45:47,772 --> 01:45:48,605
And let me go ahead.
2490
01:45:48,605 --> 01:45:50,240
OSCAR: (SINGS) I love trash.
2491
01:45:50,240 --> 01:45:51,407
DAVID J. MALAN: There we go.
2492
01:45:51,407 --> 01:45:53,420
How. about raise a little volume?
2493
01:45:53,420 --> 01:45:54,890
One more piece of trash.
2494
01:45:54,890 --> 01:45:55,490
So a clock.
2495
01:45:55,490 --> 01:45:57,600
It just goes on forever,
this kind of game.
2496
01:45:57,600 --> 01:45:59,010
But let's go ahead and consider.
2497
01:45:59,010 --> 01:46:00,060
Let me close that.
2498
01:46:00,060 --> 01:46:01,610
Let me go ahead and consider.
2499
01:46:01,610 --> 01:46:04,770
How I went about implementing
that from the get-go.
2500
01:46:04,770 --> 01:46:06,920
So I will stipulate--
2501
01:46:06,920 --> 01:46:11,090
let me open a few of these versions
here-- that the very first thing I did
2502
01:46:11,090 --> 01:46:13,070
was pretty much just
implement the stage.
2503
01:46:13,070 --> 01:46:13,220
Right?
2504
01:46:13,220 --> 01:46:15,262
I was kind of procrastinating,
so I poked around.
2505
01:46:15,262 --> 01:46:18,390
I found the Sesame Street lamppost,
and I dragged it into the world.
2506
01:46:18,390 --> 01:46:18,890
And done.
2507
01:46:18,890 --> 01:46:19,820
Version one is done.
2508
01:46:19,820 --> 01:46:23,510
It didn't do anything, but at least
I had the world sort of laid out.
2509
01:46:23,510 --> 01:46:25,820
That is to say I took a
baby step toward my goal.
2510
01:46:25,820 --> 01:46:27,528
Then I started thinking
about, all right,
2511
01:46:27,528 --> 01:46:31,620
how do I bring the trash to life, even
if it doesn't do much of anything else?
2512
01:46:31,620 --> 01:46:34,370
And so I created another sprite
by clicking the appropriate button
2513
01:46:34,370 --> 01:46:35,840
in that bottom right-hand corner.
2514
01:46:35,840 --> 01:46:38,420
And I thought about, well, what
do I want this trash to do?
2515
01:46:38,420 --> 01:46:40,860
I want it to just kind
of fall from the sky.
2516
01:46:40,860 --> 01:46:44,690
And so what I did here
was the following.
2517
01:46:44,690 --> 01:46:48,020
If I go to this trash piece
here or-- actually, sorry.
2518
01:46:48,020 --> 01:46:48,780
Out of order.
2519
01:46:48,780 --> 01:46:51,860
What I actually did first was I
didn't even have the trash fall.
2520
01:46:51,860 --> 01:46:55,280
If I play this game, the trash
just stays there in the air.
2521
01:46:55,280 --> 01:46:57,480
But I can do this.
2522
01:46:57,480 --> 01:47:01,370
I can drag it, and as before,
as I touch the other sprite,
2523
01:47:01,370 --> 01:47:03,090
I get the trash can lid to go up.
2524
01:47:03,090 --> 01:47:04,080
So how do I do that?
2525
01:47:04,080 --> 01:47:07,130
Well, let me click on Oscar
down there, my first sprite.
2526
01:47:07,130 --> 01:47:10,580
And here are the puzzle pieces
via which I implemented this idea.
2527
01:47:10,580 --> 01:47:13,340
I changed Oscar's
costume, his appearance,
2528
01:47:13,340 --> 01:47:17,960
to be just number one, which was one of
the images I imported into the program.
2529
01:47:17,960 --> 01:47:19,820
And then I forever did this.
2530
01:47:19,820 --> 01:47:22,460
If Oscar is touching
the mouse pointer, then
2531
01:47:22,460 --> 01:47:26,390
change Oscar's costume to number
two, otherwise change it back to one.
2532
01:47:26,390 --> 01:47:28,190
So it's super simple animation.
2533
01:47:28,190 --> 01:47:31,970
I'm just toggling between lid
up, lid down, lid up, lid down,
2534
01:47:31,970 --> 01:47:33,710
but it kind of feels interactive.
2535
01:47:33,710 --> 01:47:35,810
And if I wanted to
really make this pretty,
2536
01:47:35,810 --> 01:47:40,580
I could have 30 different costumes where
the lid is ever so slightly higher.
2537
01:47:40,580 --> 01:47:44,120
Then it would look even more
like a movie or fluid motion.
2538
01:47:44,120 --> 01:47:46,640
But this was enough to
get the job done, which
2539
01:47:46,640 --> 01:47:49,700
is to say I didn't try to implement
all of "Oscartime" together.
2540
01:47:49,700 --> 01:47:52,490
I just took a second
baby step toward my goal.
2541
01:47:52,490 --> 01:47:54,950
And then my next version
of "Oscartime" might
2542
01:47:54,950 --> 01:47:57,675
have looked a little something
like this, where now the trash--
2543
01:47:57,675 --> 01:47:58,800
there's more going on here.
2544
01:47:58,800 --> 01:48:02,300
Let's look at two of
these blocks of code.
2545
01:48:02,300 --> 01:48:04,972
The first thing I did was I
enabled drag mode to draggable,
2546
01:48:04,972 --> 01:48:07,430
and I had to Google to figure
this out because otherwise it
2547
01:48:07,430 --> 01:48:09,890
didn't let me drag the trash
while playing the game.
2548
01:48:09,890 --> 01:48:12,800
But once I figured that
out, I tell the trash
2549
01:48:12,800 --> 01:48:16,700
to go to a random
x-coordinate between 0 and 240
2550
01:48:16,700 --> 01:48:19,670
from left to right and
then the y location 180
2551
01:48:19,670 --> 01:48:22,070
because I always want the
trash falling from the sky.
2552
01:48:22,070 --> 01:48:23,270
And then what do I do?
2553
01:48:23,270 --> 01:48:27,530
I told the trash to forever change its
y-coordinate, its vertical coordinate,
2554
01:48:27,530 --> 01:48:30,740
by negative 1, negative
1, negative 1, one pixel
2555
01:48:30,740 --> 01:48:34,190
at a time, which creates the
illusion of it falling from the sky.
2556
01:48:34,190 --> 01:48:36,950
But I needed to do one other
thing, and let me scroll up.
2557
01:48:36,950 --> 01:48:41,360
Each of your sprites can have
multiple programs, multiple scripts,
2558
01:48:41,360 --> 01:48:44,070
so to speak, that are not
attached to one another.
2559
01:48:44,070 --> 01:48:46,050
They will happen in parallel for you.
2560
01:48:46,050 --> 01:48:47,750
The second one is saying this.
2561
01:48:47,750 --> 01:48:52,850
Forever if the trash is touching
Oscar, what should it do?
2562
01:48:52,850 --> 01:48:57,440
Go to a completely different x
and y location at the very top.
2563
01:48:57,440 --> 01:48:57,950
Why?
2564
01:48:57,950 --> 01:49:01,010
Well, as soon as I drag
the trash over the Oscar,
2565
01:49:01,010 --> 01:49:03,530
I want it to disappear as
though it's going into the can.
2566
01:49:03,530 --> 01:49:06,830
And I then want it to reappear
at the top so more trash falls.
2567
01:49:06,830 --> 01:49:08,840
So I just thought about
what would it mean
2568
01:49:08,840 --> 01:49:10,910
for the trash to go into the trash can.
2569
01:49:10,910 --> 01:49:11,870
Well, who cares?
2570
01:49:11,870 --> 01:49:14,210
What really matters to the
human user is that it just
2571
01:49:14,210 --> 01:49:16,980
disappears and teleports elsewhere.
2572
01:49:16,980 --> 01:49:19,620
And so that's the idea
I implemented here.
2573
01:49:19,620 --> 01:49:24,960
So if you can reduce intuitive ideas to
just basic building blocks like this,
2574
01:49:24,960 --> 01:49:27,440
you can start to make things
much more interactive.
2575
01:49:27,440 --> 01:49:29,970
And lastly, if I look
at this version here,
2576
01:49:29,970 --> 01:49:33,050
you'll see that we've combined these.
2577
01:49:33,050 --> 01:49:35,930
And so indeed, if I actually
go ahead and play this now,
2578
01:49:35,930 --> 01:49:37,790
not only is it falling.
2579
01:49:37,790 --> 01:49:41,090
I can let it fall right on top
of Oscar and watch it disappear.
2580
01:49:41,090 --> 01:49:44,795
But notice Oscar doesn't pop out yet
because that was the fourth version
2581
01:49:44,795 --> 01:49:45,920
and then the fifth version.
2582
01:49:45,920 --> 01:49:48,650
And then I added the annoying
music and so forth but sort of
2583
01:49:48,650 --> 01:49:51,600
composed this program
step by step by step
2584
01:49:51,600 --> 01:49:53,193
so as to accomplish my larger goal.
2585
01:49:53,193 --> 01:49:55,610
And this is going to be true
of all of the code you write,
2586
01:49:55,610 --> 01:50:00,980
be it in Scratch, or C, or Python, or
in the like, trying to come up with--
2587
01:50:00,980 --> 01:50:05,360
or rather, trying to reduce your ideas,
your grand vision to just baby steps,
2588
01:50:05,360 --> 01:50:07,670
building blocks so that
you start with version one,
2589
01:50:07,670 --> 01:50:10,010
and maybe you submit version 10 or 20.
2590
01:50:10,010 --> 01:50:13,190
But you don't try to implement
version 10 or 20 at the get-go.
2591
01:50:13,190 --> 01:50:15,780
You take those incremental steps.
2592
01:50:15,780 --> 01:50:16,280
All right.
2593
01:50:16,280 --> 01:50:17,270
How about one other?
2594
01:50:17,270 --> 01:50:19,550
Well, let me propose this.
2595
01:50:19,550 --> 01:50:23,370
Let me go ahead and open
three games that represent one
2596
01:50:23,370 --> 01:50:27,570
that your predecessors also implemented,
which looks a little something
2597
01:50:27,570 --> 01:50:29,220
like this in version zero.
2598
01:50:29,220 --> 01:50:32,220
Suppose I wanted to
implement a game that
2599
01:50:32,220 --> 01:50:33,900
simply has these kinds of mechanics.
2600
01:50:33,900 --> 01:50:37,050
I'm touching my arrow keys on my
keyboard-- up, down, left, and right.
2601
01:50:37,050 --> 01:50:38,460
And I'm moving the Harvard logo.
2602
01:50:38,460 --> 01:50:39,610
Let me zoom in a bit.
2603
01:50:39,610 --> 01:50:42,210
So if I hit the up arrow,
the Harvard shield goes up.
2604
01:50:42,210 --> 01:50:44,760
If I hit the down arrow,
the shield goes down.
2605
01:50:44,760 --> 01:50:47,070
If I go all the way to
the left, it goes left
2606
01:50:47,070 --> 01:50:49,548
until it hits the wall and
same thing on the right.
2607
01:50:49,548 --> 01:50:51,840
So this is like the beginnings
of a game or a beginning
2608
01:50:51,840 --> 01:50:53,370
of a maze, something like that.
2609
01:50:53,370 --> 01:50:55,150
Well, how might I implement this?
2610
01:50:55,150 --> 01:50:57,210
Well, let me look inside this one.
2611
01:50:57,210 --> 01:51:01,020
And there's a lot going on, but,
again, I sort of took simple steps.
2612
01:51:01,020 --> 01:51:02,730
Notice that I've got three sprites--
2613
01:51:02,730 --> 01:51:04,920
a left wall, which is
just a straight line,
2614
01:51:04,920 --> 01:51:07,140
the right wall, which
is a straight line.
2615
01:51:07,140 --> 01:51:10,710
And just intuitively, why did
I implement those as sprites?
2616
01:51:10,710 --> 01:51:15,240
Why do they need to exist
as entities themselves?
2617
01:51:15,240 --> 01:51:16,230
Yeah, in front.
2618
01:51:16,230 --> 01:51:16,530
AUDIENCE: [INAUDIBLE]
2619
01:51:16,530 --> 01:51:17,405
DAVID J. MALAN: Yeah.
2620
01:51:17,405 --> 01:51:19,033
I want it to interact with the shield.
2621
01:51:19,033 --> 01:51:21,450
So I need to be able to ask
that Boolean expression, like,
2622
01:51:21,450 --> 01:51:24,940
not touching mouse pointer but
touching shield, for instance,
2623
01:51:24,940 --> 01:51:26,560
a different type of yes/no question.
2624
01:51:26,560 --> 01:51:29,130
And so what is the code for
the shield actually doing?
2625
01:51:29,130 --> 01:51:32,850
Well, there's a lot of duplication, and
let me focus on the abstraction first.
2626
01:51:32,850 --> 01:51:35,680
Notice that I've got this
one green flag clicked.
2627
01:51:35,680 --> 01:51:38,430
I want the shield to go
dead center, 0 comma 0,
2628
01:51:38,430 --> 01:51:42,600
and then forever listen for the human's
keyboard, and feel for the wall.
2629
01:51:42,600 --> 01:51:45,815
So I decided to implement my
own pink puzzle pieces that
2630
01:51:45,815 --> 01:51:47,190
implement the two separate ideas.
2631
01:51:47,190 --> 01:51:49,450
One, just listen for the
keyboard-- up, down, left,
2632
01:51:49,450 --> 01:51:50,700
right-- and then do something.
2633
01:51:50,700 --> 01:51:53,770
And then feel for walls is
this idea of whenever I go up,
2634
01:51:53,770 --> 01:51:56,550
down, left, or right,
if I touch a wall, I
2635
01:51:56,550 --> 01:52:00,600
need to stop doing whatever the
keystrokes are telling me to do.
2636
01:52:00,600 --> 01:52:05,580
So now if we dive into those
implementation details, listen and feel
2637
01:52:05,580 --> 01:52:07,930
are abstractions, custom puzzle pieces.
2638
01:52:07,930 --> 01:52:09,870
Let's look at the
implementation details.
2639
01:52:09,870 --> 01:52:11,220
Well, here's the keyboard.
2640
01:52:11,220 --> 01:52:15,840
If the key arrow up is
pressed, change y by 1.
2641
01:52:15,840 --> 01:52:19,495
If key down arrow is pressed,
change y by negative 1.
2642
01:52:19,495 --> 01:52:21,370
And you can probably
see where this is going.
2643
01:52:21,370 --> 01:52:23,310
Right arrow is x by 1.
2644
01:52:23,310 --> 01:52:25,920
Left arrow is x by
negative 1, and that's
2645
01:52:25,920 --> 01:52:29,050
sort of all that's involved
with up, down, left, right.
2646
01:52:29,050 --> 01:52:30,030
But wait a minute.
2647
01:52:30,030 --> 01:52:35,910
Why is there no loop in this
listen for keyboard puzzle piece?
2648
01:52:35,910 --> 01:52:39,240
I needed a loop last time
so it constantly works.
2649
01:52:39,240 --> 01:52:40,770
AUDIENCE: [INAUDIBLE]
2650
01:52:40,770 --> 01:52:41,770
DAVID J. MALAN: Exactly.
2651
01:52:41,770 --> 01:52:44,350
I put the loop in my
main part of my program
2652
01:52:44,350 --> 01:52:48,020
up top so something is telling me
to keep listening again and again.
2653
01:52:48,020 --> 01:52:50,020
So it's got to be somewhere,
but it doesn't have
2654
01:52:50,020 --> 01:52:51,760
to be in the actual implementation.
2655
01:52:51,760 --> 01:52:53,950
And lastly, how about
this feel for walls?
2656
01:52:53,950 --> 01:52:58,420
Well, if touching left wall, which is
just another sprite, change x by 1.
2657
01:52:58,420 --> 01:53:00,880
So that is to say if I'm
touching the left wall,
2658
01:53:00,880 --> 01:53:03,465
I want to bounce it
back the other direction
2659
01:53:03,465 --> 01:53:04,840
and same thing on the right wall.
2660
01:53:04,840 --> 01:53:06,580
If I'm touching the right
wall, I want to bounce it
2661
01:53:06,580 --> 01:53:09,670
back to the left, which effectively
means that even if the human's hitting
2662
01:53:09,670 --> 01:53:11,680
the key, it's like
fighting with this code,
2663
01:53:11,680 --> 01:53:14,890
but it's never going to go through
the wall based on that math.
2664
01:53:14,890 --> 01:53:16,760
It's going to stop it right there.
2665
01:53:16,760 --> 01:53:17,260
All right.
2666
01:53:17,260 --> 01:53:18,760
Let's add something else to the mix.
2667
01:53:18,760 --> 01:53:21,640
Suppose I want the game to change
to be a little something like this,
2668
01:53:21,640 --> 01:53:25,300
where Yale is some kind of block
in between me and the exit.
2669
01:53:25,300 --> 01:53:27,140
So some dramatic race here.
2670
01:53:27,140 --> 01:53:27,640
OK.
2671
01:53:27,640 --> 01:53:30,100
I just got by, but the
Yale logo doesn't seem
2672
01:53:30,100 --> 01:53:32,200
to be doing all that
much except bouncing.
2673
01:53:32,200 --> 01:53:35,660
So I'm guessing there's a loop, maybe
a conditional checking for those walls
2674
01:53:35,660 --> 01:53:36,160
too.
2675
01:53:36,160 --> 01:53:38,823
So let's go ahead and
zoom out, see inside.
2676
01:53:38,823 --> 01:53:41,490
Let's not worry about Harvard
because it's pretty much the same.
2677
01:53:41,490 --> 01:53:43,520
Let's look at the Yale puzzle pieces.
2678
01:53:43,520 --> 01:53:45,710
And sure enough, go to the middle.
2679
01:53:45,710 --> 01:53:46,880
0 comma zero.
2680
01:53:46,880 --> 01:53:50,930
Point in direction 90, so
point horizontally on the grid.
2681
01:53:50,930 --> 01:53:53,870
And then if touching left
wall or touching right wall--
2682
01:53:53,870 --> 01:53:58,470
I'm kind of cheating this time, but
cleverly, just spin around and do 180
2683
01:53:58,470 --> 01:54:00,198
so you effectively bounce off the wall.
2684
01:54:00,198 --> 01:54:01,490
This just tightened up my code.
2685
01:54:01,490 --> 01:54:03,490
I don't need to do the
negative 1 or the plus 1.
2686
01:54:03,490 --> 01:54:07,010
I just say bounce in this
form of code, otherwise just
2687
01:54:07,010 --> 01:54:08,420
constantly move one step.
2688
01:54:08,420 --> 01:54:12,080
Now, if this is a game where Yale
is supposed to be better and faster,
2689
01:54:12,080 --> 01:54:13,520
well, let's change the 1 to 5.
2690
01:54:13,520 --> 01:54:15,300
Move 5 pixels at a time.
2691
01:54:15,300 --> 01:54:17,610
Let's move it 10 back and forth.
2692
01:54:17,610 --> 01:54:19,040
Let's maybe 100.
2693
01:54:19,040 --> 01:54:20,150
Uh-oh.
2694
01:54:20,150 --> 01:54:21,380
So what just happened?
2695
01:54:21,380 --> 01:54:25,310
That is a bug, which we can
avoid by just not doing that.
2696
01:54:25,310 --> 01:54:27,310
But why did it break out of the wall?
2697
01:54:27,310 --> 01:54:28,310
Yeah.
2698
01:54:28,310 --> 01:54:29,600
AUDIENCE: [INAUDIBLE].
2699
01:54:29,600 --> 01:54:30,890
At first it was [INAUDIBLE].
2700
01:54:30,890 --> 01:54:31,890
DAVID J. MALAN: Exactly.
2701
01:54:31,890 --> 01:54:34,010
Because I'm doing 100
steps at a time, I'm
2702
01:54:34,010 --> 01:54:36,200
never actually touching the
other sprite because I'm
2703
01:54:36,200 --> 01:54:38,060
sort of stepping way over it.
2704
01:54:38,060 --> 01:54:40,610
So there's never a moment where
they're actually touching.
2705
01:54:40,610 --> 01:54:44,630
So previously, I was just getting
lucky by doing fewer steps because it's
2706
01:54:44,630 --> 01:54:46,700
gradually going over
the wall, which gives me
2707
01:54:46,700 --> 01:54:48,557
just enough time to detect as much.
2708
01:54:48,557 --> 01:54:50,390
So I would have to kind
of tinker, and he'll
2709
01:54:50,390 --> 01:54:51,932
handle this a little bit differently.
2710
01:54:51,932 --> 01:54:53,790
So it's a bug if it's too fast.
2711
01:54:53,790 --> 01:54:55,730
But at least if I keep
it slow and reasonable
2712
01:54:55,730 --> 01:54:59,870
the math actually does work out, so
long as it starts again in the middle.
2713
01:54:59,870 --> 01:55:04,200
Well, let's do one final flourish here,
whereby let's bring MIT into the mix.
2714
01:55:04,200 --> 01:55:04,700
Right?
2715
01:55:04,700 --> 01:55:06,770
They're super smart, so
maybe they can kind of
2716
01:55:06,770 --> 01:55:11,390
track us and follow wherever I'm going.
2717
01:55:11,390 --> 01:55:13,140
So how might this work?
2718
01:55:13,140 --> 01:55:13,640
All right.
2719
01:55:13,640 --> 01:55:16,580
So nothing happens yet because we
haven't finished composing the game.
2720
01:55:16,580 --> 01:55:17,490
And notice here--
2721
01:55:17,490 --> 01:55:17,990
OK.
2722
01:55:17,990 --> 01:55:19,063
Now MIT is struggling.
2723
01:55:19,063 --> 01:55:21,980
It's kind of twitching there because
it's going just above, and below,
2724
01:55:21,980 --> 01:55:23,100
and then above, and below.
2725
01:55:23,100 --> 01:55:24,840
So we could fix that too if we want.
2726
01:55:24,840 --> 01:55:28,080
But that's just a function of
my math, one pixel at a time.
2727
01:55:28,080 --> 01:55:33,570
Let me open up this one, see
inside, and click on MIT.
2728
01:55:33,570 --> 01:55:37,110
And it doesn't take much
to implement MIT, it seems.
2729
01:55:37,110 --> 01:55:43,200
So go to random position, forever
point towards the Harvard logo outline,
2730
01:55:43,200 --> 01:55:46,330
AKA the shield, and then move one step.
2731
01:55:46,330 --> 01:55:50,705
So if I wanted to make MIT even smarter,
even faster, what do I change here?
2732
01:55:50,705 --> 01:55:51,580
AUDIENCE: [INAUDIBLE]
2733
01:55:51,580 --> 01:55:52,455
DAVID J. MALAN: Yeah.
2734
01:55:52,455 --> 01:55:56,070
Change one step to two steps to double
their speed or five steps, 10 steps,
2735
01:55:56,070 --> 01:55:56,612
or 100 steps.
2736
01:55:56,612 --> 01:55:58,403
And the game is going
to be over like that.
2737
01:55:58,403 --> 01:56:00,940
But that's all it takes to now
make these kinds of elements.
2738
01:56:00,940 --> 01:56:03,330
So if you are a game player
on your phone, or consoles,
2739
01:56:03,330 --> 01:56:06,120
or computer, or whatever, if
you think about almost any game,
2740
01:56:06,120 --> 01:56:08,910
you can probably now start to
think about how they implemented
2741
01:56:08,910 --> 01:56:12,210
those mechanics because it's just being
reduced to functions, conditionals,
2742
01:56:12,210 --> 01:56:15,640
loops, variables, and
the like in this case.
2743
01:56:15,640 --> 01:56:20,560
So let's go ahead here and
have maybe one final volunteer.
2744
01:56:20,560 --> 01:56:22,480
We've got one more bag of Oreos here.
2745
01:56:22,480 --> 01:56:22,980
OK.
2746
01:56:22,980 --> 01:56:23,640
That was super fast.
2747
01:56:23,640 --> 01:56:24,750
Do you want to come on up?
2748
01:56:24,750 --> 01:56:25,250
All right.
2749
01:56:25,250 --> 01:56:25,920
Brave volunteer.
2750
01:56:25,920 --> 01:56:26,820
Come on up.
2751
01:56:26,820 --> 01:56:30,271
[APPLAUSE]
2752
01:56:30,271 --> 01:56:31,180
2753
01:56:31,180 --> 01:56:31,680
All right.
2754
01:56:31,680 --> 01:56:36,720
Let me find the full-fledged version
of this that one of your predecessors
2755
01:56:36,720 --> 01:56:37,650
made.
2756
01:56:37,650 --> 01:56:40,490
And let me get the right one.
2757
01:56:40,490 --> 01:56:40,990
OK.
2758
01:56:40,990 --> 01:56:41,740
Here we go.
2759
01:56:41,740 --> 01:56:45,030
We'll see some instructions on
the screen in just a moment.
2760
01:56:45,030 --> 01:56:50,460
And when we hit Play, you'll see that
the mechanics are all combined now
2761
01:56:50,460 --> 01:56:51,630
into one full-fledged game.
2762
01:56:51,630 --> 01:56:54,740
But first, an introduction.
2763
01:56:54,740 --> 01:56:55,890
It's on.
2764
01:56:55,890 --> 01:56:56,750
SAM: Hi, everyone.
2765
01:56:56,750 --> 01:56:57,780
I'm Sam.
2766
01:56:57,780 --> 01:56:58,830
I live in [INAUDIBLE].
2767
01:56:58,830 --> 01:57:00,657
I'm a freshman, and I'm from Nepal.
2768
01:57:00,657 --> 01:57:01,740
DAVID J. MALAN: All right.
2769
01:57:01,740 --> 01:57:02,655
Welcome to the stage.
2770
01:57:02,655 --> 01:57:03,155
[APPLAUSE]
2771
01:57:03,155 --> 01:57:04,287
SAM: Thank you.
2772
01:57:04,287 --> 01:57:05,370
DAVID J. MALAN: All right.
2773
01:57:05,370 --> 01:57:05,980
So here we go.
2774
01:57:05,980 --> 01:57:06,480
Yep.
2775
01:57:06,480 --> 01:57:08,010
Go ahead and click the green flag.
2776
01:57:08,010 --> 01:57:10,435
[MUSIC PLAYING]
2777
01:57:10,435 --> 01:57:14,010
[MC HAMMER, "U CAN'T TOUCH THIS"]
You can't touch this.
2778
01:57:14,010 --> 01:57:17,982
DAVID J. MALAN: You see the
grid is just bigger this time.
2779
01:57:17,982 --> 01:57:19,395
(SINGING) You can't touch this.
2780
01:57:19,395 --> 01:57:20,270
DAVID J. MALAN: Nice.
2781
01:57:20,270 --> 01:57:22,227
Now there's that Yale element.
2782
01:57:22,227 --> 01:57:24,080
(SINGING) You can't touch this.
2783
01:57:24,080 --> 01:57:27,770
My, my, my my music hits me so hard.
2784
01:57:27,770 --> 01:57:29,570
Makes me say, oh, my Lord.
2785
01:57:29,570 --> 01:57:32,518
Thank you for blessing me with a
mind to rhyme and two hyped feet.
2786
01:57:32,518 --> 01:57:35,810
It feels good when you know you're down,
a super dope homeboy from the Oaktown.
2787
01:57:35,810 --> 01:57:36,602
DAVID J. MALAN: OK.
2788
01:57:36,602 --> 01:57:38,810
Third Yale.
2789
01:57:38,810 --> 01:57:41,480
All started at slightly
different positions.
2790
01:57:41,480 --> 01:57:43,035
(SINGING) I told you, homeboy.
2791
01:57:43,035 --> 01:57:43,910
You can't touch this.
2792
01:57:43,910 --> 01:57:44,660
DAVID J. MALAN: Nice.
2793
01:57:44,660 --> 01:57:45,160
All right.
2794
01:57:45,160 --> 01:57:45,830
There's MIT.
2795
01:57:45,830 --> 01:57:47,780
(SINGING) And ya know
you can't touch this.
2796
01:57:47,780 --> 01:57:49,139
[CHEERING, APPLAUSE]
2797
01:57:49,139 --> 01:57:50,500
DAVID J. MALAN: Oh.
2798
01:57:50,500 --> 01:57:52,520
(SINGING) You can't touch this.
2799
01:57:52,520 --> 01:57:53,020
Yo.
2800
01:57:53,020 --> 01:57:54,245
Let me bust the funky lyrics.
2801
01:57:54,245 --> 01:57:55,495
DAVID J. MALAN: Gotta go fast.
2802
01:57:55,495 --> 01:57:58,000
2803
01:57:58,000 --> 01:57:59,930
Oh.
2804
01:57:59,930 --> 01:58:00,430
No.
2805
01:58:00,430 --> 01:58:05,030
2806
01:58:05,030 --> 01:58:07,090
Oh.
2807
01:58:07,090 --> 01:58:07,590
[CHUCKLES]
2808
01:58:07,590 --> 01:58:09,465
(SINGING) Cold on a
mission, so fall on back.
2809
01:58:09,465 --> 01:58:13,690
Let them know that you're too much,
and this is a beat they can't touch.
2810
01:58:13,690 --> 01:58:14,590
DAVID J. MALAN: Nice.
2811
01:58:14,590 --> 01:58:15,970
[EXCLAIMING]
2812
01:58:15,970 --> 01:58:18,270
(SINGING) You can't touch this.
2813
01:58:18,270 --> 01:58:20,482
DAVID J. MALAN: No more
walls but two MITs.
2814
01:58:20,482 --> 01:58:21,690
(SINGING) Yo, sound the bell.
2815
01:58:21,690 --> 01:58:22,765
School's in, sucker.
2816
01:58:22,765 --> 01:58:24,015
DAVID J. MALAN: Princeton now.
2817
01:58:24,015 --> 01:58:25,612
(SINGING) Give me a song or rhythm.
2818
01:58:25,612 --> 01:58:27,570
Making them sweat, that's
what I'm giving them.
2819
01:58:27,570 --> 01:58:31,140
Now, they know you talk about
the Hammer when you're talkin'
2820
01:58:31,140 --> 01:58:32,670
'bout a show that's hyped and tight.
2821
01:58:32,670 --> 01:58:36,463
Singers are sweatin', so pass
them a wipe or a tape to learn.
2822
01:58:36,463 --> 01:58:38,005
DAVID J. MALAN: Second to last level.
2823
01:58:38,005 --> 01:58:39,800
(SINGING) The chart's legit.
2824
01:58:39,800 --> 01:58:41,980
Either work hard, or
you might as well quit.
2825
01:58:41,980 --> 01:58:45,540
That's word because you
know you can't touch this.
2826
01:58:45,540 --> 01:58:48,265
2827
01:58:48,265 --> 01:58:49,140
You can't touch this.
2828
01:58:49,140 --> 01:58:51,870
2829
01:58:51,870 --> 01:58:52,600
Break it down.
2830
01:58:52,600 --> 01:58:53,683
DAVID J. MALAN: All right.
2831
01:58:53,683 --> 01:58:54,660
Clear.
2832
01:58:54,660 --> 01:58:55,160
There we go.
2833
01:58:55,160 --> 01:58:55,660
Nice.
2834
01:58:55,660 --> 01:58:56,310
Oh, oh.
2835
01:58:56,310 --> 01:58:59,565
2836
01:58:59,565 --> 01:59:00,960
Oh.
2837
01:59:00,960 --> 01:59:02,814
Few more lives.
2838
01:59:02,814 --> 01:59:05,590
Oh.
2839
01:59:05,590 --> 01:59:06,280
(SINGING) Stop.
2840
01:59:06,280 --> 01:59:06,700
Hammer time.
2841
01:59:06,700 --> 01:59:07,130
DAVID J. MALAN: Here we go.
2842
01:59:07,130 --> 01:59:08,110
There we go.
2843
01:59:08,110 --> 01:59:09,690
[EXCLAIMING]
2844
01:59:09,690 --> 01:59:10,190
All right.
2845
01:59:10,190 --> 01:59:12,220
Couple more tries.
2846
01:59:12,220 --> 01:59:13,260
Yes!
2847
01:59:13,260 --> 01:59:14,345
Oh, no.
2848
01:59:14,345 --> 01:59:15,997
(SINGING) This is it for a winner.
2849
01:59:15,997 --> 01:59:17,830
Dance to this, and
you're gonna get thinner.
2850
01:59:17,830 --> 01:59:19,480
Now move, slide your rump.
2851
01:59:19,480 --> 01:59:20,080
DAVID J. MALAN: Starts
getting stressful.
2852
01:59:20,080 --> 01:59:22,210
(SINGING) Just for a minute,
let's all do the bump.
2853
01:59:22,210 --> 01:59:23,140
Bump, bump, bump.
2854
01:59:23,140 --> 01:59:24,310
Yeah.
2855
01:59:24,310 --> 01:59:27,020
You can't touch this.
2856
01:59:27,020 --> 01:59:27,890
Look, man.
2857
01:59:27,890 --> 01:59:29,358
You can't touch this.
2858
01:59:29,358 --> 01:59:30,650
You'll probably get hyped, boy.
2859
01:59:30,650 --> 01:59:31,620
DAVID J. MALAN: One more try.
2860
01:59:31,620 --> 01:59:33,087
(SINGING) You can't touch this.
2861
01:59:33,087 --> 01:59:33,670
Ring the bell.
2862
01:59:33,670 --> 01:59:34,840
School's back in.
2863
01:59:34,840 --> 01:59:35,140
DAVID J. MALAN: All right.
2864
01:59:35,140 --> 01:59:36,515
A round of applause, nonetheless.
2865
01:59:36,515 --> 01:59:37,420
[APPLAUSE]
2866
01:59:37,420 --> 01:59:38,360
Nicely done.
2867
01:59:38,360 --> 01:59:39,280
Thank you.
2868
01:59:39,280 --> 01:59:42,500
2869
01:59:42,500 --> 01:59:46,660
So as you might have
noticed if your eyes started
2870
01:59:46,660 --> 01:59:48,410
to wander to the light
bulbs here, there's
2871
01:59:48,410 --> 01:59:50,570
actually 64 of these light bulbs.
2872
01:59:50,570 --> 01:59:55,062
And I'm wondering if you divide 64
by 8, that's 8 bytes of light bulbs.
2873
01:59:55,062 --> 01:59:57,020
And we now have some
Unicode in our vocabulary.
2874
01:59:57,020 --> 01:59:58,970
So might very well be
the case that we've
2875
01:59:58,970 --> 02:00:03,360
been spelling something out on the
stage here for you all of this time.
2876
02:00:03,360 --> 02:00:07,190
But before we adjourn for cake
to be served in the Transept,
2877
02:00:07,190 --> 02:00:11,930
allow me to introduce some
of CS50's human friends,
2878
02:00:11,930 --> 02:00:17,210
the Harvard Krokodiloes
and the Radcliffe Pitches,
2879
02:00:17,210 --> 02:00:23,148
to give us this exciting
ending, "This is CS50."
2880
02:00:23,148 --> 02:00:26,606
[APPLAUSE, CHEERING]
2881
02:00:26,606 --> 02:00:36,980
2882
02:00:36,980 --> 02:00:38,462
[HARMONICA NOTE]
2883
02:00:38,462 --> 02:00:41,420
2884
02:00:41,420 --> 02:00:41,920
[VOCALIZING]
2885
02:00:41,920 --> 02:00:50,820
SPEAKER: (SINGING) There's a
certain someone who I'm indebted to.
2886
02:00:50,820 --> 02:01:00,080
And since the old [? BNC ?] has
50, I have this friend for you.
2887
02:01:00,080 --> 02:01:03,090
2888
02:01:03,090 --> 02:01:04,300
A two, three, four.
2889
02:01:04,300 --> 02:01:08,845
[VOCALIZING]
2890
02:01:08,845 --> 02:01:12,130
Oh, rubber ducky, you're the one.
2891
02:01:12,130 --> 02:01:14,770
You make [INAUDIBLE] so much fun.
2892
02:01:14,770 --> 02:01:18,400
Rubber ducky, I'm awfully fond of you.
2893
02:01:18,400 --> 02:01:25,030
[SCATTING] Rubber ducky, you make me
smile, and you help my code compile.
2894
02:01:25,030 --> 02:01:27,100
Rubber ducky, you're
my very best friend.
2895
02:01:27,100 --> 02:01:29,230
It's true.
2896
02:01:29,230 --> 02:01:33,760
When I'm at a standstill, your
debugging abilities stun me.
2897
02:01:33,760 --> 02:01:40,330
When I'm at the end of my rope, you
just snap, and my code's up and running.
2898
02:01:40,330 --> 02:01:45,160
Rubber ducky, you're so fine,
and I'm lucky that you're mine.
2899
02:01:45,160 --> 02:01:47,320
Rubber ducky, you're
my very best friend.
2900
02:01:47,320 --> 02:01:48,610
It's true.
2901
02:01:48,610 --> 02:01:49,910
You're my best friend.
2902
02:01:49,910 --> 02:01:52,750
It's true.
2903
02:01:52,750 --> 02:01:56,785
Rubber ducky, I'm awfully fond of you.
2904
02:01:56,785 --> 02:02:02,128
2905
02:02:02,128 --> 02:02:05,607
[CHEERING, APPLAUSE]
2906
02:02:05,607 --> 02:02:08,600
2907
02:02:08,600 --> 02:02:10,140
SPEAKER: Good afternoon, CS50.
2908
02:02:10,140 --> 02:02:12,890
We are the Harvard Krokodiloes,
Harvard's oldest a cappella group,
2909
02:02:12,890 --> 02:02:16,160
founded way back in 1946 at the
historic Hasty Pudding Club.
2910
02:02:16,160 --> 02:02:18,462
We'd love to make a big
thank you to CS50 staff
2911
02:02:18,462 --> 02:02:21,170
and to David Malan for having us
perform here at Sanders Theater.
2912
02:02:21,170 --> 02:02:24,800
And you enjoyed this performance,
please come audition for us
2913
02:02:24,800 --> 02:02:26,856
this weekend at Farkas Hall.
2914
02:02:26,856 --> 02:02:30,328
[CHEERING, APPLAUSE]
2915
02:02:30,328 --> 02:02:36,280
2916
02:02:36,280 --> 02:02:37,730
SPEAKER: Hello, everyone.
2917
02:02:37,730 --> 02:02:40,000
We are some of the Radcliffe
Pitches, and we are also
2918
02:02:40,000 --> 02:02:41,920
hosting auditions this weekend.
2919
02:02:41,920 --> 02:02:45,280
You can find more information at
our Instagram, @radcliffepitches.
2920
02:02:45,280 --> 02:02:48,700
Now, let me tell you a little
bit about just about a year ago
2921
02:02:48,700 --> 02:02:52,840
today, when I was sitting in your very
seats on my first day of CS50 lecture.
2922
02:02:52,840 --> 02:02:55,700
And this is just about
how I was feeling.
2923
02:02:55,700 --> 02:02:57,170
[HARMONICA NOTE]
2924
02:02:57,170 --> 02:03:00,110
2925
02:03:00,110 --> 02:03:03,540
[VOCALIZING]
2926
02:03:03,540 --> 02:03:07,410
2927
02:03:07,410 --> 02:03:11,700
(SINGING) It's the first day of
class, and I'm brand new to code.
2928
02:03:11,700 --> 02:03:14,190
Is this for me?
2929
02:03:14,190 --> 02:03:16,200
So many people around.
2930
02:03:16,200 --> 02:03:18,750
Can I get through the workload?
2931
02:03:18,750 --> 02:03:21,660
But it's my dream.
2932
02:03:21,660 --> 02:03:25,260
I tend to stick to English, not science.
2933
02:03:25,260 --> 02:03:29,167
But my [INAUDIBLE] friends
told me to try this.
2934
02:03:29,167 --> 02:03:32,250
Hey, dancing robot dog, you kind of
look like you have your life together,
2935
02:03:32,250 --> 02:03:33,180
I guess.
2936
02:03:33,180 --> 02:03:35,697
I really need some advice.
2937
02:03:35,697 --> 02:03:37,530
(ALL SINGING) We know
you're feeling unsure,
2938
02:03:37,530 --> 02:03:40,590
but this is really the right call.
2939
02:03:40,590 --> 02:03:44,760
In CS50, you'll meet new
friends, get free food.
2940
02:03:44,760 --> 02:03:50,160
You'll be all set for this fall in CS50.
2941
02:03:50,160 --> 02:03:54,150
You have a thousand
TAs who will help you.
2942
02:03:54,150 --> 02:03:58,190
You'll get cupcakes,
duckies, Chinese food.
2943
02:03:58,190 --> 02:04:03,870
And you can always take
this class and set aside.
2944
02:04:03,870 --> 02:04:06,880
2945
02:04:06,880 --> 02:04:08,680
SPEAKER: This is CS50.
2946
02:04:08,680 --> 02:04:10,828
Fist bump.
2947
02:04:10,828 --> 02:04:11,800
[LAUGHTER]
2948
02:04:11,800 --> 02:04:15,202
[APPLAUSE, CHEERING]
2949
02:04:15,202 --> 02:04:16,645
2950
02:04:16,645 --> 02:04:18,270
DAVID J. MALAN: Thank you to the Kroks.
2951
02:04:18,270 --> 02:04:19,380
Thank you to the Pitches.
2952
02:04:19,380 --> 02:04:20,370
Cake is now served.
2953
02:04:20,370 --> 02:04:23,490
Come on up to say hi if
you'd like or meet Spot.
2954
02:04:23,490 --> 02:04:24,330
See you next time.
2955
02:04:24,330 --> 02:04:25,163
[APPLAUSE, CHEERING]
2956
02:04:25,163 --> 02:04:28,280
[MUSIC PLAYING]
2957
02:04:28,280 --> 02:04:54,000233166
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.