1
00:00:12,930 --> 00:00:16,985
This presentation is delivered by the
Stanford Center for Professional Development
2
00:00:25,540 --> 00:00:30,010
Hi! Welcome, welcome to CS106B,
Programming Abstractions.
3
00:00:30,010 --> 00:00:33,010
(maybe now our mic is on? Oh, that's iteresting.)
4
00:00:34,000 --> 00:00:37,000
The website was probably the most important
thing to take away from here,
5
00:00:37,000 --> 00:00:38,000
where can you find information about the class
6
00:00:38,000 --> 00:00:40,000
for the talk today and give some
overview and stuff like that,
7
00:00:40,000 --> 00:00:42,000
but this is the home base for all the material.
8
00:00:42,000 --> 00:00:45,390
If you managed to get the handouts
on the way in, you're golden.
9
00:00:45,400 --> 00:00:47,160
Otherwise, you can grab them from the website.
10
00:00:47,160 --> 00:00:49,430
There's a lot of background information,
staff information,
11
00:00:49,430 --> 00:00:51,520
office hours, all sorts of stuff gathered there.
12
00:00:51,520 --> 00:00:53,120
It's kind of one stop shopping for
13
00:00:53,120 --> 00:00:56,000
figuring things out about our course.
14
00:00:56,000 --> 00:00:57,250
Let me tell you what I'm going to do today.
15
00:00:58,000 --> 00:01:00,480
The first day of, I know a lot of you are shopping
16
00:01:00,480 --> 00:01:01,480
trying to figure out what's the right fit for you,
17
00:01:01,480 --> 00:01:04,000
so hopefully today, I'm going to
try to give you some information that will
18
00:01:04,000 --> 00:01:05,000
help you make a good decision.
19
00:01:05,000 --> 00:01:07,000
I want to tell you a little bit
of what our course is about,
20
00:01:07,000 --> 00:01:09,090
tell you a little bit about the
administration and logistics
21
00:01:09,090 --> 00:01:11,530
most of that stuff is pretty ordinary,
and you can read about it.
22
00:01:11,530 --> 00:01:13,250
Of course, I have to do a little bit of marketing.
23
00:01:13,250 --> 00:01:14,880
I get to give you my unbiased opinions
24
00:01:14,880 --> 00:01:17,000
of why this is the absolute
best class you could possibly take.
25
00:01:17,000 --> 00:01:20,000
(I get paid per student, you know.)
26
00:01:20,000 --> 00:01:22,000
(That's not true.)
27
00:01:23,000 --> 00:01:24,640
Maybe we'll even have time to check out
28
00:01:24,640 --> 00:01:27,130
a little bit of the C++ language
before we're done and set today.
29
00:01:27,460 --> 00:01:30,230
(and this needs to go away)
30
00:01:30,760 --> 00:01:32,590
Let me tell you about CS106.
31
00:01:33,270 --> 00:01:37,000
CS106 is the introductory programming
sequence here at Stanford.
32
00:01:37,000 --> 00:01:40,000
It's our version of CS1,
where you start at the beginning
33
00:01:40,000 --> 00:01:43,000
when you are interested in
learning more about programming.
34
00:01:43,000 --> 00:01:46,000
We have a two-quarter sequence,
A and B, that kind of follow together.
35
00:01:46,000 --> 00:01:48,170
They're not particularly tightly coupled, which is to say
36
00:01:48,170 --> 00:01:51,340
if you took A and you took little a break, you could come back to B.
37
00:01:51,340 --> 00:01:54,160
Or maybe you you actually took a variant of 106a type course
38
00:01:54,160 --> 00:01:59,000
that is similar at another institution,
you're probably in a fine place for starting mid stream.
39
00:01:59,000 --> 00:02:04,430
We also have an alternate form of B, the CS106X, which is kind of an honors version of that second course.
40
00:02:04,430 --> 00:02:07,090
So after you've taken that first course and you're feeling really jazzed up,
41
00:02:07,130 --> 00:02:11,000
there is an alternative more intense way to get through the second course that's
42
00:02:11,000 --> 00:02:14,000
offered. It's offered this quarter, in fact, so if you're
43
00:02:14,000 --> 00:02:17,000
thinking actually about that, that is an option for you as well as
44
00:02:17,000 --> 00:02:18,000
sticking with us.
45
00:02:18,000 --> 00:02:19,570
What do we do in 106A?
46
00:02:19,570 --> 00:02:22,230
'A's official title is programming methodology.
47
00:02:22,870 --> 00:02:25,000
It is starting at the very beginning
48
00:02:25,000 --> 00:02:26,000
and assuming you have no background in programming.
49
00:02:26,000 --> 00:02:29,000
It's teaching you how it works,
50
00:02:29,000 --> 00:02:32,000
what the languages look like, what the syntax is like, what things you need
51
00:02:32,000 --> 00:02:34,580
to know about how to solve problems using a computer.
52
00:02:34,580 --> 00:02:38,080
It covers a lot of the fundamentals about logic control
53
00:02:38,080 --> 00:02:41,000
and in general, I think the big issues of 106A
54
00:02:41,000 --> 00:02:44,000
have less to do with any particular syntax or
55
00:02:44,000 --> 00:02:46,000
feature that you learn about a language but
56
00:02:46,000 --> 00:02:47,880
about how do you solve problems on a computer?
57
00:02:47,880 --> 00:02:49,000
Somebody gives you a specification of
58
00:02:49,000 --> 00:02:50,000
you need to write a program that does X,
59
00:02:50,000 --> 00:02:52,000
and you have to figure out how to make that happen,
60
00:02:52,000 --> 00:02:54,020
how to break it down,
61
00:02:54,020 --> 00:02:57,000
how to step through it, how to develop it, how to test it,
62
00:02:57,000 --> 00:03:00,000
how to iterate on it, how to make changes in it later,
63
00:03:00,000 --> 00:03:04,000
how to debug it when it's not working well,
64
00:03:04,000 --> 00:03:06,700
and those things, (I think), transcend any particular language.
65
00:03:06,700 --> 00:03:09,000
We happen to use the Java programming language in our 106A course
66
00:03:09,000 --> 00:03:12,790
because it's a great tool for introductory programming,
67
00:03:13,000 --> 00:03:15,060
but I don't think of that as being really critical.
68
00:03:15,060 --> 00:03:17,000
In fact, if your introductory course was in some other language,
69
00:03:17,000 --> 00:03:19,000
some other fairly modern, high level language
70
00:03:19,000 --> 00:03:20,000
- let's say
71
00:03:20,000 --> 00:03:24,940
you've learned in Python, C, Scheme, or something other than Java,
72
00:03:25,000 --> 00:03:28,000
you're probably still fine, 'cause what we're really counting on in B is that you know how to
73
00:03:28,000 --> 00:03:30,500
program and think like a computer scientist
74
00:03:30,500 --> 00:03:32,000
know how to solve problems
75
00:03:32,000 --> 00:03:34,000
Not a lot of the details of the syntax
76
00:03:34,000 --> 00:03:37,000
are going to be important to us.
77
00:03:37,000 --> 00:03:40,000
"B" picks up from there, saying okay, you've got some fundamentals.
78
00:03:40,000 --> 00:03:43,000
Let's start really learning some of the techniques that extend the range of
79
00:03:43,000 --> 00:03:45,000
problems you can solve.
80
00:03:45,000 --> 00:03:48,180
We look at recursion, which is one of the fundamental
81
00:03:48,180 --> 00:03:50,000
problem solving techniques that involves using
82
00:03:50,000 --> 00:03:52,150
something akin to mathematical induction
83
00:03:52,150 --> 00:03:54,000
to solve problems in terms of themselves.
84
00:03:54,000 --> 00:03:56,050
Looking at a lot of algorithms for sorting
85
00:03:56,050 --> 00:03:57,000
and searching and hashing and doing
86
00:03:57,000 --> 00:03:58,000
things efficiently, knowing how to compare
87
00:03:58,000 --> 00:04:01,000
and contrast alternatives in algorithms,
88
00:04:01,000 --> 00:04:04,040
having some formalisms by which to discuss those things,
89
00:04:04,040 --> 00:04:08,000
and learn some of the classics that are out there for solving these problems.
90
00:04:08,000 --> 00:04:11,000
The dynamic data structure, which involves use of pointers to construct things
91
00:04:11,000 --> 00:04:14,010
like lists, trees and heaps, graphs that
92
00:04:15,000 --> 00:04:18,000
model certain structures that are very effective in solving certain kinds of
93
00:04:18,000 --> 00:04:19,570
problems - we'll work through those.
94
00:04:19,570 --> 00:04:22,000
A large part of our time is spent on this concept
95
00:04:22,000 --> 00:04:23,900
of data abstraction, which is why
96
00:04:23,900 --> 00:04:27,000
abstraction shows up as the main word in our title.
97
00:04:29,020 --> 00:04:31,000
As we start to solve more and more complex problems,
98
00:04:31,000 --> 00:04:34,000
the code itself can kind of become overwhelming if we don't have some
99
00:04:34,000 --> 00:04:36,000
technique for managing that complexity.
100
00:04:36,000 --> 00:04:39,910
One of the big themes for 106B is how we can use this idea of abstraction,
101
00:04:39,910 --> 00:04:42,000
building something and dealing with the low level details but then
102
00:04:42,000 --> 00:04:44,000
closing up the box and now treating it as a
103
00:04:44,000 --> 00:04:47,880
a fixed entity and building on top of that
104
00:04:47,880 --> 00:04:49,000
and then closing another layer around that
105
00:04:49,000 --> 00:04:52,000
as a way of working on something, finishing it
106
00:04:52,000 --> 00:04:53,480
moving on to some larger piece without
107
00:04:53,480 --> 00:04:55,710
having those details clouding our way.
108
00:04:55,710 --> 00:04:59,000
It's a very powerful technique for solving larger problems.
109
00:04:59,000 --> 00:05:00,000
In that context,
110
00:05:00,000 --> 00:05:04,000
we'll be looking at some of the classic data structures,
111
00:05:04,000 --> 00:05:06,000
like stacks, queues, lists, maps and sets
112
00:05:06,000 --> 00:05:08,000
as part of the domain for that.
113
00:05:08,000 --> 00:05:11,000
We do happen to use the C++ programming language,
114
00:05:11,000 --> 00:05:14,000
but this is not a C++ course, so to be clear about what you're
115
00:05:14,000 --> 00:05:16,000
getting versus what you wanted,
116
00:05:16,000 --> 00:05:17,800
we use Java here (as a vehicle) [a].
117
00:05:17,800 --> 00:05:20,000
We use C++ here (as a vehicle) [b].
118
00:05:20,000 --> 00:05:22,700
We happen to think there are good reasons
119
00:05:22,700 --> 00:05:24,390
to actually expose you to both languages.
120
00:05:24,390 --> 00:05:25,960
(ill talk about that more later)
121
00:05:26,000 --> 00:05:29,000
In particular, C++ is an enormous language.
122
00:05:29,000 --> 00:05:30,990
It has a lot of language features as well as
123
00:05:30,990 --> 00:05:32,000
a very very large standard library,
124
00:05:32,000 --> 00:05:33,950
and our goal is not at all
125
00:05:33,950 --> 00:05:36,000
to turn you into this industrial strength
126
00:05:36,000 --> 00:05:37,000
knows every detail about quirks
127
00:05:37,000 --> 00:05:38,000
and ins and outs of C++.
128
00:05:38,910 --> 00:05:41,000
There is another class, 193D, that
129
00:05:41,000 --> 00:05:43,000
does attempt to do that.
130
00:05:43,000 --> 00:05:45,000
In fact, if that's what you're looking for,
131
00:05:45,000 --> 00:05:47,000
I suggest you take a look at that.
132
00:05:47,000 --> 00:05:47,970
What we're here about is learning
133
00:05:47,970 --> 00:05:50,000
advanced programming techniques
134
00:05:50,000 --> 00:05:52,020
taking those foundations and building on them
135
00:05:52,020 --> 00:05:53,990
to be able to solve more interesting problems.
136
00:05:53,990 --> 00:05:54,990
We happen to use C++.
137
00:05:54,990 --> 00:05:56,000
You will learn some C++, but I almost
138
00:05:56,000 --> 00:05:58,000
consider it a side effect
139
00:05:58,000 --> 00:06:00,000
of what we're doing.
140
00:06:03,950 --> 00:06:06,000
Just a little note on placement
141
00:06:06,000 --> 00:06:09,040
if you're kind of in between and not really sure,
142
00:06:09,040 --> 00:06:13,000
these are the very very rough guidelines, but they give you
143
00:06:13,000 --> 00:06:17,000
some idea of which groups gravitate where.
144
00:06:17,000 --> 00:06:18,000
If you are new to programming or
145
00:06:18,000 --> 00:06:20,000
you're not confident about your background
146
00:06:20,000 --> 00:06:22,030
- maybe it was a long time ago, if it was self-taught.
147
00:06:22,030 --> 00:06:23,000
Maybe it was in a course that you
148
00:06:23,000 --> 00:06:25,090
felt was not as good as it could have been
149
00:06:26,000 --> 00:06:27,000
or you didn't do as well in it,
150
00:06:27,000 --> 00:06:29,000
106A is a great place to start.
151
00:06:29,000 --> 00:06:31,000
It actually is by all accounts
152
00:06:31,000 --> 00:06:34,000
an extremely popular course at Stanford
153
00:06:34,000 --> 00:06:36,090
and services a wide group of people
154
00:06:36,090 --> 00:06:39,000
with a little bit of background or no background.
155
00:06:39,000 --> 00:06:42,000
All very well getting them up to speed.
156
00:06:42,000 --> 00:06:45,000
If you do have something like a solid first course experience
157
00:06:45,000 --> 00:06:47,000
So you did well in 106A or took a similar course
158
00:06:47,000 --> 00:06:48,970
or perhaps even self-taught your way
159
00:06:48,970 --> 00:06:53,010
through a lot of those materials and you feel ready to move on, 106B.
160
00:06:53,010 --> 00:06:55,000
An AP course in high school -
161
00:06:55,000 --> 00:06:59,000
the A curriculum is a pretty good match for 106A here
162
00:06:59,000 --> 00:07:00,000
so you're in a great place.
163
00:07:00,000 --> 00:07:01,980
If you have this and you've got a little bit more going for you
164
00:07:01,980 --> 00:07:04,000
or you're super enthused and you have a
165
00:07:04,000 --> 00:07:06,000
lot of extra time this quarter
166
00:07:06,000 --> 00:07:09,000
and want to sit in the company of only
167
00:07:09,000 --> 00:07:11,000
the uber geeks,
168
00:07:11,000 --> 00:07:13,000
you can check out 106X,
169
00:07:13,000 --> 00:07:15,000
Which is a varient of B
170
00:07:15,000 --> 00:07:17,000
which covers the same kind of topical ground
171
00:07:17,000 --> 00:07:18,000
but at a different level intensity.
172
00:07:18,000 --> 00:07:20,000
It amps up a little bit of the assignments,
173
00:07:20,010 --> 00:07:22,960
covers some of the material that we won't get a chance to cover,
174
00:07:23,930 --> 00:07:25,000
and
175
00:07:25,000 --> 00:07:27,000
just pushes the envelope a little bit there.
176
00:07:27,000 --> 00:07:30,000
If you have experience comparable to the first two courses
177
00:07:30,000 --> 00:07:31,000
- you've
178
00:07:31,940 --> 00:07:34,000
done all the things that we're talking about here in B
179
00:07:34,000 --> 00:07:35,000
and you feel comfortable with it,
180
00:07:35,000 --> 00:07:37,000
it might be that the right place for you is 107,
181
00:07:37,000 --> 00:07:39,990
which is the third course in our sequence.
182
00:07:39,990 --> 00:07:42,890
And just skipping over our 106 courses entirely
183
00:07:43,920 --> 00:07:45,970
That's somewhat rare,
184
00:07:45,970 --> 00:07:47,000
so if you're thinking about that, I encourage you to
185
00:07:47,000 --> 00:07:49,010
talk to me a little bit to make sure
186
00:07:49,010 --> 00:07:51,000
that you won't be missing out on something important
187
00:07:51,000 --> 00:07:54,000
in doing so, but certainly there are students who have
188
00:07:55,000 --> 00:07:56,970
for example, the AP CS A-B curriculum
189
00:07:56,970 --> 00:07:59,000
is pretty comparable to this course here,
190
00:07:59,000 --> 00:08:02,510
and so depending on how high quality the course you had was,
191
00:08:02,510 --> 00:08:04,000
it might very well be that 107 is right.
192
00:08:04,000 --> 00:08:06,000
In some situations where that course was a little bit lacking,
193
00:08:06,000 --> 00:08:09,050
there may be some ways that we can help reinforce
194
00:08:09,050 --> 00:08:10,970
the things you've learned and build a stronger foundation
195
00:08:10,970 --> 00:08:14,030
to move forward from rather than jumping ahead.
196
00:08:15,000 --> 00:08:18,000
Any questions about placement?
197
00:08:20,000 --> 00:08:22,000
That sort of thing.
198
00:08:22,000 --> 00:08:23,650
(Am I talking too fast?)
199
00:08:23,830 --> 00:08:27,000
(good, I like that, you can sit in the front whenever you want)
200
00:08:27,980 --> 00:08:30,000
Lets talk philosophy
201
00:08:30,000 --> 00:08:34,000
I think there's a statement about what we officially are,
202
00:08:34,000 --> 00:08:38,000
but I also think that 106 has a long tradition at Stanford
203
00:08:38,000 --> 00:08:40,000
that comes back from student motivation.
204
00:08:40,860 --> 00:08:43,000
I was here as an undergrad in the 80s
205
00:08:43,000 --> 00:08:45,000
when 106s were just getting off the ground,
206
00:08:45,000 --> 00:08:47,000
and at the time, Stanford only had a graduate
207
00:08:47,000 --> 00:08:49,000
computer science department, and
208
00:08:49,000 --> 00:08:52,000
the belief in the nsaid period for computer science
209
00:08:52,000 --> 00:08:53,960
was you should get a math degree,
210
00:08:53,960 --> 00:08:55,000
and only then would you be mature enough
211
00:08:55,000 --> 00:08:57,000
to learn about computers.
212
00:08:57,000 --> 00:08:59,510
You weren't ready as a freshman.
213
00:09:00,000 --> 00:09:02,000
was a groundswell of Stanford students
214
00:09:02,000 --> 00:09:04,950
were like said 'We want access to programming. We want it.'
215
00:09:04,950 --> 00:09:06,000
That made it happen.
216
00:09:06,000 --> 00:09:09,000
and so part of the 106 was a really careful thought about what the 106's
217
00:09:09,000 --> 00:09:12,000
would be a Stanford and what we want them to be
218
00:09:12,000 --> 00:09:13,960
in a philosophical sense.
219
00:09:13,960 --> 00:09:16,210
One is that we welcome students of
all majors and backgrounds.
220
00:09:16,210 --> 00:09:19,000
We don't have a version of 106 that's for the majors or
221
00:09:19,000 --> 00:09:21,090
potential majors and a version that's for the non-majors
222
00:09:21,090 --> 00:09:24,000
and a version that's terminal (you just want to get out of here).
223
00:09:24,000 --> 00:09:27,000
We really think that we can bring you all together
224
00:09:27,000 --> 00:09:31,000
and design a course that addresses this wide
225
00:09:31,000 --> 00:09:32,990
disparate group but still service that well.
226
00:09:33,000 --> 00:09:36,000
Partly because you don't know that
you are a CS major yet.
227
00:09:36,000 --> 00:09:39,000
I'm going to turn you into a CS major.
That's my plan.
228
00:09:39,000 --> 00:09:42,000
At Stanford right,
not having to make that choice about a major
229
00:09:42,000 --> 00:09:44,000
until into junior year is a gift
230
00:09:45,000 --> 00:09:49,000
to allow you to explore
and to feel unencumbered by having made some
231
00:09:49,000 --> 00:09:51,000
decision when you applied,
and I think it's important to respect that
232
00:09:51,000 --> 00:09:53,970
gift that Stanford gave you by
trying to make sure our courses don't
233
00:09:54,010 --> 00:09:56,000
funnel you one way or
the other before you figure it out.
234
00:09:57,000 --> 00:09:58,000
You are all welcome here.
235
00:09:58,000 --> 00:10:00,000
We try to make it accessible to everyone.
236
00:10:00,000 --> 00:10:03,000
We have certain plans
that help to make that work.
237
00:10:03,000 --> 00:10:07,000
We do try to provide a solid,
practical foundation in programming
238
00:10:07,000 --> 00:10:11,000
that given our placement at Stanford
in the middle of the Silicon Valley,
239
00:10:11,000 --> 00:10:14,000
there's kind of a strong influence
for us to try to produce students
240
00:10:14,000 --> 00:10:16,000
who from the get go are
241
00:10:16,000 --> 00:10:18,000
learning things that are actually quite useful
242
00:10:18,000 --> 00:10:19,000
outside of the classroom
243
00:10:19,000 --> 00:10:22,000
rather than teach you a very academic
244
00:10:22,000 --> 00:10:24,000
interesting and mathematical
language like Scheme
245
00:10:24,000 --> 00:10:27,000
that is very
246
00:10:27,000 --> 00:10:29,040
rarely used outside of the classroom.
247
00:10:29,040 --> 00:10:31,000
We're trying to teach you on the tools,
248
00:10:31,000 --> 00:10:34,000
languages and techniques that are actually in active practice.
249
00:10:34,000 --> 00:10:38,000
We are using Java and C++,
two of the most prevalent languages
250
00:10:38,000 --> 00:10:40,070
out in the industry, and
we do a lot of learn by doing.
251
00:10:40,070 --> 00:10:42,000
We assign challenging, full-fledged
programs that you work on and you build
252
00:10:42,000 --> 00:10:46,650
and so it's not designed to be
academic exercises.
253
00:10:47,000 --> 00:10:54,040
You really are building skills
that have applicability here and
outside of the class.
254
00:10:55,000 --> 00:10:58,000
We have a big emphasis on
255
00:10:58,000 --> 00:10:59,050
truth and beauty.
256
00:11:01,000 --> 00:11:04,010
This is one area in which some of the
substitute courses
257
00:11:04,010 --> 00:11:07,000
that we have seen students come in with
have a little bit more trouble with
258
00:11:07,000 --> 00:11:10,000
is tackling this part of it,
which is that there are
259
00:11:10,000 --> 00:11:12,000
a lot of ways you can get a program to work.
260
00:11:12,000 --> 00:11:14,000
Many of them are not pretty.
261
00:11:14,000 --> 00:11:17,000
You can just type and type and type and
(Monkies shakespeare, whatnot)
262
00:11:17,000 --> 00:11:19,000
eventually, you can get your way to
something that works.
263
00:11:19,020 --> 00:11:23,010
Well +1, -1, what if I move it here
what if I copy and paste this there
264
00:11:23,010 --> 00:11:25,020
what if I change that name?
265
00:11:25,020 --> 00:11:27,000
That, in the end,
might produce a program that from
266
00:11:27,000 --> 00:11:28,000
external appearances works.
267
00:11:28,000 --> 00:11:33,720
It plays hangman, or whatever was the
desired goal, but that internally is a mess.
268
00:11:34,000 --> 00:11:36,980
It's not well structured.
It's not well commented.
269
00:11:36,980 --> 00:11:40,000
It's not easy to understand.
It wouldn't be easy to modify.
270
00:11:40,000 --> 00:11:42,000
It makes a lot of decision that are really sub optimal,
271
00:11:42,000 --> 00:11:48,000
and we're really interested in producing
engineers
272
00:11:48,000 --> 00:11:52,000
that have a good sense of design and
really appreciate what is involved in writing
273
00:11:52,000 --> 00:11:56,000
good, well designed software,
not just working software.
274
00:11:56,000 --> 00:11:57,000
We will be giving you feedback on
275
00:11:57,000 --> 00:12:00,000
both the correctness and
functionality of your code
276
00:12:01,740 --> 00:12:05,000
as important if not more so,
277
00:12:05,000 --> 00:12:08,000
also on how well we think you did
at designing and implementing and
278
00:12:08,000 --> 00:12:11,030
writing code that is of
a high quality.
279
00:12:11,030 --> 00:12:12,030
We make a big deal out of that.
280
00:12:12,030 --> 00:12:14,000
That is something that is not
always shared by other classes,
281
00:12:14,000 --> 00:12:16,510
and so in particular, someone who is self-taught
282
00:12:16,510 --> 00:12:20,000
or in a class that didn't emphasize this
might feel that there's a little bit of a gap there
283
00:12:20,000 --> 00:12:21,000
we need to make
that up with you,
284
00:12:21,000 --> 00:12:23,490
and we can work with you.
285
00:12:23,490 --> 00:12:26,000
This is a very individual thing,
because there's not one good example of
286
00:12:26,000 --> 00:12:28,000
the perfect style
287
00:12:28,000 --> 00:12:31,000
in the way that a lot of different people
288
00:12:31,000 --> 00:12:34,000
express themselves in written communication
289
00:12:34,000 --> 00:12:34,990
very well but differently.
290
00:12:34,990 --> 00:12:36,500
The same thing is true about programs.
291
00:12:36,500 --> 00:12:40,000
You will have your own unique style,
and we'll work with you to coach you on getting your
292
00:12:40,000 --> 00:12:44,010
style to come through and
be beautiful and elegant.
293
00:12:46,000 --> 00:12:50,000
This kind of comes back to point 1
we make heavy use of undergraduate
294
00:12:50,000 --> 00:12:53,000
section leaders as mentors in this program.
295
00:12:53,000 --> 00:12:59,000
We have a staff of 50 or so, undergraduates
who work with the 106A, B and X courses as a team.
296
00:12:59,000 --> 00:13:02,000
They have specific responsibilities with their section,
297
00:13:02,000 --> 00:13:06,000
so mentoring and grading and meeting with
298
00:13:06,000 --> 00:13:09,000
sectionees to give individualized
feedback on their programs
299
00:13:09,000 --> 00:13:10,000
as well as
300
00:13:10,000 --> 00:13:13,760
answering questions, solving problems,
being in the lair 30 plus hours.
301
00:13:13,760 --> 00:13:16,000
They're most weekday nights about six hours
302
00:13:16,000 --> 00:13:17,000
and often
303
00:13:17,000 --> 00:13:20,000
well past the midnight when it's supposed to cut off
solving people's problems,
304
00:13:20,000 --> 00:13:23,000
helping when you get stuck,
answering your questions
305
00:13:23,000 --> 00:13:26,000
and making sure you're all
making forward progress.
306
00:13:26,000 --> 00:13:29,000
That comes back to point 1.
307
00:13:29,000 --> 00:13:31,000
In some universities where they're
choosing to use their intro course as a weeder,
308
00:13:31,000 --> 00:13:33,690
it's like let's separate the wheat
from the chaff early
309
00:13:33,690 --> 00:13:35,000
and let's make it really hard and not
310
00:13:35,000 --> 00:13:38,000
provide too much support,
and that way we'll make sure we get the people we want.
311
00:13:38,000 --> 00:13:41,000
We have a different idea.
312
00:13:41,000 --> 00:13:42,000
Programming is hard,
especially when you're learning.
313
00:13:42,000 --> 00:13:46,000
There's a lot of complexity to master,
and there are a lot of details that can
314
00:13:46,000 --> 00:13:49,000
interfere with moving forward,
and we don't want you
315
00:13:49,000 --> 00:13:52,000
to get stuck on something that
we can very easily resolve for you.
316
00:13:52,000 --> 00:13:55,980
So make sure you have accessible
staff members in person, in email
317
00:13:56,000 --> 00:13:58,000
and regularly in section
318
00:13:58,000 --> 00:14:04,000
to help get through the roadblocks
and keep you moving forward.
319
00:14:04,000 --> 00:14:08,000
What do you need to know to be
sure you're going to do well?
320
00:14:08,000 --> 00:14:12,000
There are people who think to
be a good computer programmer,
321
00:14:12,000 --> 00:14:16,000
you need to be good at math,
logic, and drinking Jolt.
322
00:14:16,000 --> 00:14:22,010
I think it it comes down to
personality traits than any
323
00:14:22,020 --> 00:14:24,500
particular technique or skill.
324
00:14:24,500 --> 00:14:26,000
You don't need to be good at math.
325
00:14:26,000 --> 00:14:29,000
How much calculus and trig shows up in this?
326
00:14:29,000 --> 00:14:32,000
Not very much.
A little bit of logic - that helps.
327
00:14:32,000 --> 00:14:36,990
I think it comes down to traits like
curiosity and determination and hard work.
328
00:14:37,000 --> 00:14:37,980
Starting early,
329
00:14:37,980 --> 00:14:41,000
asking questions
when you don't understand something,
330
00:14:41,000 --> 00:14:43,510
trying to solve the problem by logic
I think is very valuable
331
00:14:43,510 --> 00:14:45,000
Knowing how to think,
how to make steps
332
00:14:45,000 --> 00:14:47,960
why this case works and
why that case doesn't work
333
00:14:47,970 --> 00:14:51,720
thinking about that logically
334
00:14:51,755 --> 00:14:55,735
(well its like the movie theater now you guys will all go to sleep)
(oh look they came back) [lights]
335
00:14:57,000 --> 00:15:01,120
I think these are the skills
that serve you the best in this class
336
00:15:01,120 --> 00:15:04,010
And probably
every other thing you'd want to tackle.
337
00:15:04,010 --> 00:15:08,000
There is a lot of time that will be spent
to master this.
338
00:15:08,000 --> 00:15:11,110
I can talk about programming all I want,
(bla, bla, bla)
339
00:15:11,110 --> 00:15:13,000
and you can go oh, yeah, that makes a
lot of sense.
340
00:15:13,000 --> 00:15:16,000
But when you go to write it yourself,
it's a very different experience.
341
00:15:16,000 --> 00:15:19,960
That's where being
focused and staying on task
342
00:15:20,000 --> 00:15:25,040
and getting help when you get stuck
can help you move through that
343
00:15:25,080 --> 00:15:28,080
(Any questions about 106?)
(What we do,)
344
00:15:28,090 --> 00:15:32,070
(Why we do what we do.)
(You guys have nothing to say)
345
00:15:32,070 --> 00:15:34,070
(your afraid of having your)
(voice recorded aren't you?)
346
00:15:34,070 --> 00:15:39,020
(For all time your parents will come and see)
(that you come to class you can prove it)
347
00:15:40,010 --> 00:15:44,000
My unbiased opinion about why 106B is
one of the best courses at Stanford
348
00:15:44,000 --> 00:15:47,000
(of course I am not at all unbiased)
349
00:15:47,000 --> 00:15:50,000
it's going to be
350
00:15:50,000 --> 00:15:53,000
totally obvious when I say these things,
and you guys are going to have to go
351
00:15:53,000 --> 00:15:54,960
along with it.
I'm actually a
352
00:15:55,000 --> 00:15:58,000
geek, really big time,
and I happen to love programming.
353
00:15:58,000 --> 00:16:00,000
That's why I'm a perfect fit for teaching this class.
354
00:16:00,000 --> 00:16:01,490
I have taught 106 B or X more than I've taught
355
00:16:01,490 --> 00:16:04,000
any other class that I've taught at
Stanford in my time here,
356
00:16:04,000 --> 00:16:06,330
and that's because each quarter
when we're setting the schedule,
357
00:16:06,330 --> 00:16:08,000
I say give me B.
Give me X.
358
00:16:08,000 --> 00:16:09,000
Because there's no better course to teach.
359
00:16:09,000 --> 00:16:12,000
Programming is just awesome.
360
00:16:12,000 --> 00:16:15,000
If you love programming,
I think there's almost nothing better to do in the world.
361
00:16:15,000 --> 00:16:17,510
You have this task.
You're trying to get there.
362
00:16:17,510 --> 00:16:19,170
You're coding.
You're making stuff happen.
363
00:16:19,170 --> 00:16:21,940
You're testing, iterating you're running.
You see stuff.
364
00:16:21,950 --> 00:16:25,020
You build things.
When you're done, you know it works.
365
00:16:25,020 --> 00:16:28,000
That feeling when you write a paper and go
"was it good enough?"
366
00:16:28,000 --> 00:16:30,000
"well I dont know"
you could probably go bolster up this argument
367
00:16:30,000 --> 00:16:32,280
When a program works,
you know it.
368
00:16:32,290 --> 00:16:36,000
It does what it's supposed to do.
It gets the right answer.
369
00:16:36,000 --> 00:16:38,020
It plays the game.
It solves the problem.
370
00:16:38,020 --> 00:16:42,000
Finding and fixing that last bug
- although debugging is one of the last
371
00:16:42,000 --> 00:16:45,000
aspects of programming a lot of people bemoan about;
I happen to think that if you
372
00:16:45,000 --> 00:16:49,000
are driven by debugging,
that is one of the most awesome detective stories
373
00:16:49,000 --> 00:16:53,980
Trying to figure out why it happened when you did this,
when you moved that why it went this way
374
00:16:54,000 --> 00:16:57,000
and what this effect caused
and understanding once you make the fix how it fixes it
375
00:16:57,000 --> 00:16:58,930
staying up late.
376
00:16:58,930 --> 00:17:02,000
I have stayed up late more nights debugging
than anything else in my life,
377
00:17:02,000 --> 00:17:04,000
and I'm not sad about that at all.
378
00:17:04,000 --> 00:17:08,000
That means I'm in the right place.
Hopefully, some of that resonates with you.
379
00:17:09,020 --> 00:17:12,000
If that sounds really awful to you,
380
00:17:12,000 --> 00:17:14,000
hopefully we can change your mind a bit.
381
00:17:14,000 --> 00:17:18,000
That is, in some ways,
part of what drives computer science is this
382
00:17:18,000 --> 00:17:21,000
wanting to build things.
We are engineers.
383
00:17:21,000 --> 00:17:24,000
We have this computer science name.
Just remember
384
00:17:24,000 --> 00:17:29,000
- any subject
that's name is something science is not a science.
385
00:17:29,000 --> 00:17:31,950
We're trying to puff ourselves up a bit.
386
00:17:32,000 --> 00:17:34,000
We do a lot of really great work,
387
00:17:34,000 --> 00:17:37,000
and there are a lot of neat scientific
principles and theories that
388
00:17:37,000 --> 00:17:38,000
underpin what we do,
389
00:17:38,000 --> 00:17:41,000
but in the end,
I think what drives a lot of us is just
390
00:17:41,000 --> 00:17:44,990
the engineering
- building stuff that is really neat.
391
00:17:45,010 --> 00:17:49,000
It kind of reminds me that my
husband's a mechanical engineer, and so I
392
00:17:49,000 --> 00:17:52,220
used to be envious, because
he would always build things.
393
00:17:52,220 --> 00:17:57,000
M.E.'s always toting foam core around the campus
on their paper bicycles and stuff, and it's like
394
00:17:57,000 --> 00:18:00,000
they build all these things.
Now, having watched all the things he builds, it's like
395
00:18:00,000 --> 00:18:02,000
mechan-e is really hard.
You need all these materials.
396
00:18:02,000 --> 00:18:05,320
You need all these tools.
You need this mill, you need this lathe
397
00:18:05,320 --> 00:18:07,430
You need the hotmelt glue gun,
which burns the heck out of your fingers
398
00:18:07,430 --> 00:18:08,160
anytime you touch it.
399
00:18:08,160 --> 00:18:10,660
To build anything.
400
00:18:10,930 --> 00:18:12,560
In computer science, you don't need anything.
401
00:18:12,560 --> 00:18:14,000
You need a compiler and you need a computer.
402
00:18:14,000 --> 00:18:15,030
You need your thought.
403
00:18:15,030 --> 00:18:18,000
It's like an abstraction we built out of our brains.
404
00:18:18,000 --> 00:18:20,000
There's this relatively small set of things
that you need to master
405
00:18:20,000 --> 00:18:23,990
and then you can combine them in these very
sophisticated and interesting ways to solve all sorts of problems.
406
00:18:24,000 --> 00:18:26,000
There's a very low overhead,
407
00:18:26,000 --> 00:18:30,000
and the range of things you can attack
with the same set of skills is huge.
408
00:18:30,000 --> 00:18:36,020
Every domain out there can benefit from somebody
applying computers in a useful way without fail.
409
00:18:36,020 --> 00:18:39,080
There's all sorts of problems
where technology is part of the answer
410
00:18:39,080 --> 00:18:41,000
not the only answer,
but certainly something that you can take
411
00:18:41,000 --> 00:18:44,000
whatever interest you have
and combine it with computer science
412
00:18:44,000 --> 00:18:47,000
and construct something cool.
413
00:18:47,000 --> 00:18:51,000
I happen to think that what
happens in the second course is amazing.
414
00:18:51,000 --> 00:18:54,000
The first course,
you've kind of got to get up to speed,
415
00:18:54,000 --> 00:18:57,000
and there's a lot of basic material
that needs to get covered,
416
00:18:57,000 --> 00:19:00,000
and it does set you on the right path,
but in this course, we really
417
00:19:00,000 --> 00:19:04,000
get to blossom beyond the basic things.
418
00:19:04,000 --> 00:19:07,000
There are a bunch of really neat
and very accessible techniques
419
00:19:07,000 --> 00:19:11,000
that a second quarter student can understand
and master and do really cool things with.
420
00:19:11,000 --> 00:19:14,050
You can learn how to do something like
create a database
421
00:19:14,050 --> 00:19:17,000
that has a million entries
422
00:19:17,000 --> 00:19:20,900
and then ask for somebody by name and be able to
instantaneously be able to find that name.
423
00:19:20,900 --> 00:19:23,000
Not by looking through a million
entries trying to find that name
424
00:19:23,000 --> 00:19:26,000
Change the size of it.
Make it ten million, a billion, and still be able to
425
00:19:26,000 --> 00:19:29,000
provide that kind of instantaneous access.
You're going to learn how to do that.
426
00:19:29,000 --> 00:19:32,000
The technique is not some superhuman thing.
427
00:19:32,000 --> 00:19:34,000
It's something very clever, admittedly,
428
00:19:34,000 --> 00:19:36,000
but it's very accessible.
429
00:19:36,000 --> 00:19:40,000
Taking that same million thing and
learning how to sort it efficiently.
430
00:19:40,000 --> 00:19:42,000
What if you happen to know things about how it's
almost sorted but just a little but out of sorts?
431
00:19:42,000 --> 00:19:47,000
Are there ways you can actually make it
even faster to put it in sorted order?
432
00:19:47,000 --> 00:19:50,000
There are techniques, for example,
like recursion that take on problems that
433
00:19:50,000 --> 00:19:53,000
you might not have any idea when you
first look at the problem how to solve
434
00:19:53,000 --> 00:19:57,450
but once you've got your head around recursion,
you can look at that and say
435
00:19:57,450 --> 00:20:01,030
"I can write a five line function
that will solve that problem."
436
00:20:01,030 --> 00:20:05,669
This is the kind of power we're going to
give you with our quarter together.
437
00:20:05,669 --> 00:20:10,000
There's a bunch of really amazing
theoretical and algorithmic stuff to explore.
438
00:20:10,000 --> 00:20:14,000
That really increases the kind of things
you can do with programming.
439
00:20:14,000 --> 00:20:17,840
I'm particularly fond of it.
440
00:20:18,010 --> 00:20:20,010
As always, I think
441
00:20:20,010 --> 00:20:23,000
the section leading program that we have
created and built at Stanford
442
00:20:23,000 --> 00:20:27,030
Is a huge part of what makes our 106
courses so successful,
443
00:20:27,030 --> 00:20:28,000
and so
444
00:20:28,000 --> 00:20:32,990
having somebody who's individually
working with you, meeting with you weekly
445
00:20:34,000 --> 00:20:37,000
and giving you that feedback that's
individualized and personalized for you
446
00:20:37,000 --> 00:20:41,000
and helping you get through the rough spots
is a lot of what helps to make the experience
447
00:20:41,000 --> 00:20:44,000
very fun and very personal, too.
448
00:20:44,000 --> 00:20:48,910
What section leaders do I have here?
Any? Not a one.
449
00:20:49,000 --> 00:20:52,000
Those fabulous section leaders.
Where are they again? section leaders?
450
00:20:52,000 --> 00:20:54,030
Did i say they were fabulous?
I meant. laughs Uhh no.
451
00:20:54,030 --> 00:20:57,000
We haven't yet identified who's going
to what class, so maybe they're all
452
00:20:57,000 --> 00:21:00,851
thinking they're going to go somewhere else,
but they're wrong. We'll get some.
453
00:21:03,940 --> 00:21:05,000
106B - great. You agree?
454
00:21:05,000 --> 00:21:07,000
Have I convinced you?
455
00:21:07,000 --> 00:21:10,000
Is anybody still hesitant?
456
00:21:13,000 --> 00:21:16,000
Is it a lot of work?
Oh, no. laughs
457
00:21:16,000 --> 00:21:19,000
I just exude it. Osmosis. you learn it.
458
00:21:21,980 --> 00:21:24,920
Let me tell you a little bit about logistics.
459
00:21:26,000 --> 00:21:30,000
There are some random things you may want
to know about how the class works.
460
00:21:30,000 --> 00:21:34,000
That the first day I am supposed to do.
461
00:21:34,000 --> 00:21:38,360
We're going to meet here
Monday, Wednesday, Friday 2:15 to 3:05.
462
00:21:38,360 --> 00:21:41,920
In glorious download
[ FIXME ] audiotorium
463
00:21:41,930 --> 00:21:45,060
It looks like we almost
exactly fit in our classroom,
464
00:21:45,060 --> 00:21:47,790
which means we're all
going to be very friendly and cozy.
465
00:21:47,790 --> 00:21:51,131
The lectures are being taped
and are available online,
466
00:21:51,131 --> 00:21:56,540
and so that has the neat side effect that
you can watch them and review them later.
467
00:21:56,540 --> 00:21:58,000
You could watch them lots of times.
468
00:21:58,000 --> 00:22:01,000
It also means that if it were pouring rain and
you were sitting at home in your bunny slippers,
469
00:22:01,000 --> 00:22:04,000
you could just say hey,
I'm not going outside and you could
470
00:22:04,000 --> 00:22:06,000
turn on your computer and watch.
471
00:22:06,000 --> 00:22:09,000
I'm a big fan of having you come in person.
That's because I don't want to
472
00:22:09,000 --> 00:22:11,000
lecture to an empty room.
473
00:22:11,000 --> 00:22:14,000
I also think there's an interaction there
474
00:22:14,190 --> 00:22:19,000
that I'm fond of, and so I hope that you
will make every effort to attend in person
as much as you can.
475
00:22:22,010 --> 00:22:26,990
It is nice to know that if you do miss a lecture or you
476
00:22:27,000 --> 00:22:29,940
get caught up with something, you'll have a chance to review it later online.
477
00:22:30,000 --> 00:22:32,000
We will have sections that will meet once a week,
478
00:22:32,000 --> 00:22:34,970
just like 106A.
479
00:22:35,000 --> 00:22:38,000
The section leader who meets with you is the one
480
00:22:38,000 --> 00:22:41,000
who will be grading your programs and sitting with you
and doing the conferences.
481
00:22:41,000 --> 00:22:45,940
What you need to do to get yourself
into a section - there are several section times listed.
482
00:22:45,960 --> 00:22:47,960
They are totally bogus. (so ignore that)
483
00:22:51,000 --> 00:22:53,000
What you do is you go to the online
- if you go to our class webpage, there's a link that tells
484
00:22:53,000 --> 00:22:56,000
you how to sign up for a section.
The section times aren't up right now, but they will go up tomorrow,
485
00:22:56,000 --> 00:22:58,000
and they'll be up through the weekend.
You go in and put in your preferences
486
00:22:58,000 --> 00:23:03,930
about what times fit your schedule or not,
and there's this big computer program
487
00:23:04,000 --> 00:23:08,790
that does this magic matching that gets
everyone into a section that fits their schedule.
488
00:23:08,880 --> 00:23:11,880
That will happen early next week.
489
00:23:14,000 --> 00:23:18,850
The signups will be up from Thursday at 5:00
until Sunday at 5:00.
490
00:23:18,960 --> 00:23:22,000
If by Sunday at 5:00
you've got your schedule fixed, then you're fine.
491
00:23:22,000 --> 00:23:25,000
If you happen to change after Sunday at 5:00 and after the assignments have been made,
492
00:23:25,000 --> 00:23:27,000
at that point, it's a little bit harder.
493
00:23:27,000 --> 00:23:28,000
We can make adjustments, but it's on a very case-by-case basis.
494
00:23:28,000 --> 00:23:31,000
Where we have space and where we can accomodate you.
495
00:23:31,000 --> 00:23:33,000
The best thing you can do
496
00:23:33,000 --> 00:23:36,000
is by Sunday at 5:00 have a pretty firm idea
about what you can and can't do.
497
00:23:36,000 --> 00:23:37,000
There's a list of preferences,
so maybe what you can do
498
00:23:37,000 --> 00:23:40,000
is pick things that you know will work no matter
499
00:23:40,000 --> 00:23:41,000
what happens.
500
00:23:41,000 --> 00:23:44,000
for antyhing that is variable if you just dont offer things that you know might
501
00:23:44,000 --> 00:23:44,840
go away
502
00:23:44,980 --> 00:23:49,930
so there is a list of 20 times and you say I can make these 5
503
00:23:49,930 --> 00:23:52,390
And that way you wont get yourselves in trouble
504
00:23:52,390 --> 00:23:54,910
in things that might change.
505
00:23:55,000 --> 00:23:59,000
The workload - everybody wants
to know how much work.
506
00:23:59,000 --> 00:24:02,000
It's a five-unit class, and
it's a five unit engineering class.
507
00:24:04,000 --> 00:24:06,000
You get your five units worth,
508
00:24:06,000 --> 00:24:09,990
I would say, so don't worry about that. I won't shortchange you.
509
00:24:11,010 --> 00:24:15,000
We have programming assignments not quite weekly.
I think there are seven of them across
510
00:24:15,000 --> 00:24:18,960
ten weeks, so you can calculate it out.
It's about a week and a third
511
00:24:19,000 --> 00:24:20,000
for any particular one.
512
00:24:20,000 --> 00:24:22,030
The students report
513
00:24:22,030 --> 00:24:25,000
that it's about a 15-20 hour project, each of them.
514
00:24:25,000 --> 00:24:28,000
Some people get them done in less than that.
Some people take a little bit more.
515
00:24:28,000 --> 00:24:33,030
I would say that's kind of the
mode range for what people are reporting.
516
00:24:33,030 --> 00:24:37,000
I do think that of the people who report less,
some of those are
517
00:24:37,000 --> 00:24:41,000
people who are naturally gifted,
but a lot of it has to do with your habits
518
00:24:41,000 --> 00:24:43,000
about how you work and
how you make progress, so
519
00:24:43,000 --> 00:24:46,000
if you are one of the people who feels
you might be more likely to be on the other
520
00:24:46,000 --> 00:24:49,000
end, you can come and talk to
me and I can give you some suggestions.
521
00:24:49,000 --> 00:24:55,630
Choosing to work in the lair where the
helpers are on duty has really positive effects
522
00:24:55,630 --> 00:24:58,000
effects in that when you get stuck,
you have easy access to
523
00:24:58,000 --> 00:24:59,000
somebody helping you work through it
524
00:24:59,000 --> 00:25:02,000
rather than spending an hour or two
fighting something that turns out to be
525
00:25:02,000 --> 00:25:05,000
simple but required knowing something
that you didn't yet know.
526
00:25:05,000 --> 00:25:10,250
I'm a big fan of learning things yourself.
There's also a time when a well-placed
527
00:25:10,590 --> 00:25:14,000
bit of advice from somebody
can save you a lot of time.
528
00:25:15,000 --> 00:25:22,160
There will be a midterm and a final exam.
They'll both be in class, open book, open notes.
529
00:25:22,160 --> 00:25:24,010
The midterm is actually technically out of class.
530
00:25:24,010 --> 00:25:28,870
have it at night because we need more than
a 50-minute period to get any coverage of that.
531
00:25:28,870 --> 00:25:31,067
Our final exam is scheduled in
our university-scheduled slot.
532
00:25:31,067 --> 00:25:36,000
Sadly, that is at the very
end of the exam week,
533
00:25:36,000 --> 00:25:37,980
but that's when the registrar put us,
and that's when we need to go.
534
00:25:38,030 --> 00:25:44,010
You may want to take a look at that before
you head off to Acapulco for spring break.
535
00:25:44,010 --> 00:25:45,010
you need to make sure
you are here for the exam.
536
00:25:45,010 --> 00:25:48,980
Male audience: Is the course leader available online?
537
00:25:48,980 --> 00:25:53,060
Unfortunately, our publisher will not allow me to distribute the course leader electronically.
538
00:25:54,000 --> 00:25:57,000
They're not exactly very in the modern age on this.
539
00:26:00,080 --> 00:26:02,000
I'm working on it is the truth.
540
00:26:02,000 --> 00:26:06,040
By the time the world sees this, hopefully, we will have some other strategy.
541
00:26:06,040 --> 00:26:08,800
We currently are in negotiations.
542
00:26:08,880 --> 00:26:11,000
The nice thing about the course reader is that
we have not changed it in the last year.
543
00:26:11,000 --> 00:26:14,000
If you know somebody who has
it from last fall or last spring.
544
00:26:14,000 --> 00:26:18,000
it has some minor edits and typos that were fixed,
545
00:26:18,000 --> 00:26:20,000
so if you can get a hold of an old one, it's good.
546
00:26:20,000 --> 00:26:23,100
We are getting no royalties on it.
547
00:26:23,100 --> 00:26:26,950
We're publishing it at production cost, so where it
548
00:26:26,950 --> 00:26:31,970
would have been a $100.00 textbook
had it been bound and all snappy.
549
00:26:32,000 --> 00:26:36,000
you're just getting what it cost to photocopy and bind the thing, and Eric and
550
00:26:36,070 --> 00:26:39,980
I are eating ramen.
551
00:26:40,000 --> 00:26:42,000
It's hopefully cheap enough that
552
00:26:42,000 --> 00:26:44,000
you can find a way to get to one
553
00:26:44,000 --> 00:26:47,500
or get an old one without it being
too much of an obstacle.
554
00:26:49,000 --> 00:26:52,800
People in general find the course
reader to be an asset.
555
00:26:52,800 --> 00:26:54,060
We do say it's required reading.
556
00:26:54,060 --> 00:26:58,530
It does have a lot of material that's very
useful in understanding the course.
557
00:26:58,610 --> 00:27:02,000
There are other people who
don't make as big a use of it,
558
00:27:02,000 --> 00:27:05,000
but there are some sections that
are really very valuable
559
00:27:05,000 --> 00:27:08,020
and other ones that may be more
or less depending on your learning style.
560
00:27:08,020 --> 00:27:11,800
Whether you appreciate more of a chance to
read background material and more examples.
561
00:27:11,800 --> 00:27:15,000
There's also a lot of good sample problems in it
562
00:27:15,000 --> 00:27:18,600
and review questions in it that help to test your understanding.
563
00:27:22,000 --> 00:27:23,000
You know, it's tricky, because the university
in general discourages you from giving
564
00:27:26,000 --> 00:27:29,000
alternate exams because of
565
00:27:29,000 --> 00:27:33,000
- you can imagine the issues
of having an exam that has been
566
00:27:33,000 --> 00:27:35,000
seen by some number of students before
some other number of students take it.
567
00:27:35,000 --> 00:27:38,180
Even though we're all bound by the honor code,
it does create a situation where
568
00:27:38,180 --> 00:27:39,480
there is some temptation.
569
00:27:39,480 --> 00:27:43,240
It's possible it could be a little bit
early without a lot of gap, but I
570
00:27:43,240 --> 00:27:46,030
don't think early enough to make alot
of help is the truth.
571
00:27:46,030 --> 00:27:49,000
We can talk about it.
The current plan is not, I would say.
572
00:28:03,011 --> 00:28:07,994
A little bit about compilers.
We use C++.
573
00:28:07,994 --> 00:28:09,050
and we also use
574
00:28:09,050 --> 00:28:11,480
some custom libraries, which limits us
to distributing on a certain number of platforms
575
00:28:11,480 --> 00:28:15,070
we've had a good chance to
test on and work with
576
00:28:15,070 --> 00:28:18,960
The compilers that we have
support for is X Code on the Macintosh.
577
00:28:18,960 --> 00:28:22,040
xcode is apples free developer tools so
578
00:28:22,060 --> 00:28:25,050
Anybody who has Mac OS 10 can freely
download that, and install our libraries.
579
00:28:25,050 --> 00:28:29,000
We're using Microsoft's
Visual Studio Version 2005 on Windows,
580
00:28:29,000 --> 00:28:32,000
we have an arrangement with Microsoft
where they have distributed the software
581
00:28:32,000 --> 00:28:35,930
free of charge to students, so if you would
like to install that on your own Windows computer,
582
00:28:36,000 --> 00:28:38,000
we'll give you some handouts on Friday that tell you
583
00:28:38,000 --> 00:28:43,510
what to do to get the compiler
and get it installed on your systems.
584
00:28:43,570 --> 00:28:48,020
Our cluster computers in the dorms
and the libraries and
585
00:28:48,050 --> 00:28:53,340
the lair both operating systems have both
the compilers and libraries installed,
586
00:28:53,600 --> 00:28:57,000
so if you work in a cluster,
you don't have to do anything special.
587
00:28:57,000 --> 00:29:04,000
You just walk up and it's got the
stuff ready to go.
588
00:29:07,000 --> 00:29:11,000
I'm a Mac person. I've been a Mac
person forever.
589
00:29:11,000 --> 00:29:13,000
I can't get over the fact that you go to
the start menu to shut the machine down.
590
00:29:13,000 --> 00:29:17,000
That makes Windows impossible for me to use.
591
00:29:19,000 --> 00:29:24,970
I would say campus wide, there are more
Windows machines than Macs on campus,
592
00:29:25,010 --> 00:29:29,000
So if you want to take a popular vote,
You could do that.
593
00:29:29,000 --> 00:29:33,980
If you want to be on the side of the Mac bigot,
you can come and be with me in X Code.
594
00:29:44,790 --> 00:29:49,000
I've got ten minutes to tell you a little
bit about C++.
595
00:29:49,000 --> 00:29:54,040
That is the next journey that we're
going to go on together.
596
00:29:54,040 --> 00:29:57,000
The first question is:
Why are we doing this to you?
597
00:29:57,000 --> 00:30:02,000
I just got comfortable with Java and now
you're telling me to throw away my Java
and start over.
598
00:30:02,850 --> 00:30:07,880
Let's generate a little bit of love for C++.
599
00:30:08,000 --> 00:30:10,990
The advantages of early multilingualism.
600
00:30:10,990 --> 00:30:14,000
- I have two small children at home
that are two and four,
601
00:30:14,000 --> 00:30:18,000
and I read a lot about bilingualism.
602
00:30:19,000 --> 00:30:22,000
It's very clear that for natural
languages, when you're
603
00:30:22,000 --> 00:30:25,000
acquiring a language at those
young ages that that is the
604
00:30:25,000 --> 00:30:27,840
best time to introduce a second
or third language.
605
00:30:27,970 --> 00:30:30,920
Where you are building the
pathways and the neurons.
606
00:30:32,000 --> 00:30:35,000
It's been looked at in terms of programming
languages as well,
607
00:30:35,000 --> 00:30:38,000
that when you are learning a programming
language, there are certain kind
608
00:30:38,000 --> 00:30:41,000
of ruts your mind gets into about
the way a language is
609
00:30:41,000 --> 00:30:45,000
that is based on your early experiences.
610
00:30:45,000 --> 00:30:48,940
If you spend a very long time working
only in one language, those ruts get deeper,
611
00:30:49,000 --> 00:30:52,000
and you have a certain way of thinking.
You're a little bit stuck in that paradigm and its approach.
612
00:30:52,000 --> 00:30:55,680
What's easy to do in that language,
what's hard to do in that language
613
00:30:55,830 --> 00:30:59,980
tends to make a stronger impression on
you in a way that makes it harder as you
614
00:31:00,000 --> 00:31:04,000
grow and explore the languages to kind of get
out of those ruts and shake yourself out of it.
615
00:31:04,000 --> 00:31:07,930
There's been some pretty good evidence
that somewhere between one
616
00:31:08,000 --> 00:31:10,960
and two is a good time to think
about branching out
617
00:31:10,960 --> 00:31:14,000
and starting to think about different
ways of doing stuff and seeing some
618
00:31:14,000 --> 00:31:20,230
different syntax and some different ideas
to help build in the flexibility from
619
00:31:20,230 --> 00:31:26,450
an early age in your career to buy you
some strength later.
620
00:31:26,520 --> 00:31:31,000
That's part of what we're doing.
Another part of it is actually that a lot of our upper division
621
00:31:31,000 --> 00:31:36,010
courses rely on a knowledge of
C and C++, that family of languages,
622
00:31:36,010 --> 00:31:39,000
and that the longer we postpone it,
the more painful it becomes.
623
00:31:39,000 --> 00:31:43,950
In the later courses where you're learning
about compilers or graphics or networking,
624
00:31:44,000 --> 00:31:48,000
they don't have the time in those classes to stop and teach you C or C++.
625
00:31:48,000 --> 00:31:50,930
They need you to know C++ to get the work done.
626
00:31:51,000 --> 00:31:54,940
Moving the foundation into a programming class
627
00:31:54,940 --> 00:31:57,000
seems to make the most sense in the context of our curriculum.
628
00:31:57,000 --> 00:32:00,000
We do switch you over here.
629
00:32:00,000 --> 00:32:04,000
The good news is that it's not as big a change as it might sound at first glance.
630
00:32:04,000 --> 00:32:07,000
Java is actually highly derivative of C++ for a start.
631
00:32:07,000 --> 00:32:10,000
They're kind of cousins in the scheme of language design.
632
00:32:10,000 --> 00:32:12,000
633
00:32:12,000 --> 00:32:14,000
They have a lot of syntax.
634
00:32:14,000 --> 00:32:18,110
How much C++ do you need to know to start?
The answer is zero.
635
00:32:18,110 --> 00:32:21,000
You don't even need to know what the word means.
636
00:32:21,000 --> 00:32:22,000
In fact,
637
00:32:22,000 --> 00:32:25,000
you actually probably know a surprising
amount about C++ just by virtue of what
638
00:32:25,000 --> 00:32:28,000
you already know just translated a little bit.
639
00:32:28,000 --> 00:32:32,000
Things like the four loop of Java or the way you declare variables or
640
00:32:32,000 --> 00:32:35,000
the way parameters are passed into a function
641
00:32:35,000 --> 00:32:39,000
is exhibited in Java in very much the same way it is in C++.
642
00:32:39,000 --> 00:32:42,000
There are a bunch of things you already know and you don't even realize.
643
00:32:42,000 --> 00:32:45,470
It is not assumed that you know C or C++.
644
00:32:45,590 --> 00:32:49,000
If you happen to already know those things,
you're ahead of the game.
645
00:32:50,080 --> 00:32:52,000
If you have not,
646
00:32:52,000 --> 00:32:54,000
then not to worry.
647
00:32:54,000 --> 00:32:57,000
How much C++ are you going to learn?
648
00:32:58,000 --> 00:33:00,000
We will spend the first
649
00:33:00,000 --> 00:33:02,000
three or four lectures
650
00:33:02,000 --> 00:33:05,000
just talking about how things get expressed differently in C++
651
00:33:05,000 --> 00:33:07,000
and mostly talking about
652
00:33:07,000 --> 00:33:12,000
the differences in the libraries.
The syntax itself is quite similar.
653
00:33:12,000 --> 00:33:15,000
Some of the more extensive changes have to do with how the C++
654
00:33:15,000 --> 00:33:17,810
string is operated on versus the Java string.
655
00:33:17,810 --> 00:33:20,000
How you do file input and output reading
656
00:33:20,000 --> 00:33:23,000
in C++ is a little bit different than the way it's done in Java.
657
00:33:23,000 --> 00:33:26,000
We'll spend some time saying here are some things you know how to express in one language.
658
00:33:26,000 --> 00:33:29,000
We're going to teach you how to express them in another language.
659
00:33:29,000 --> 00:33:31,000
It's just mapping from your previous vocabulary onto a new one.
660
00:33:32,000 --> 00:33:35,000
Along the way, we will actually introduce some of the C++
661
00:33:35,000 --> 00:33:38,000
features that we need to support our pedagogical goals.
662
00:33:38,000 --> 00:33:42,000
We'll be talking about how classes get designed in C++.
We'll see how to use classes.
663
00:33:44,000 --> 00:33:45,000
those classes, We'll see how to define
664
00:33:45,000 --> 00:33:49,000
and we'll look at things like templates, which is the C++
665
00:33:49,000 --> 00:33:52,000
construct for doing generics that you seen in Java - how you can build
666
00:33:52,000 --> 00:33:56,000
containers that are type unspecific and things like that. We
667
00:33:56,000 --> 00:34:01,000
will learn a little bit of some of the fancier features of C++ like
668
00:34:01,000 --> 00:34:02,000
the pass by reference parameter,
669
00:34:02,000 --> 00:34:05,000
but there's actually a very large amount of C++ that's just off the
670
00:34:05,000 --> 00:34:07,000
table for us.
671
00:34:07,000 --> 00:34:11,000
We will not make extensive use of the standard template library or
672
00:34:11,000 --> 00:34:13,000
the
673
00:34:13,000 --> 00:34:17,000
fancier features of 'static' and 'const' and a bunch of key words that
674
00:34:17,000 --> 00:34:20,000
mean nothing to you and should mean nothing to you.
675
00:34:20,000 --> 00:34:23,000
You will learn enough to have reading familiarity with
676
00:34:23,000 --> 00:34:26,000
C++ and to be able to express yourself quite well in the subset we're using, but
677
00:34:26,000 --> 00:34:29,000
it is a subset of C++ that you're being exposed
678
00:34:32,000 --> 00:34:35,000
to.
679
00:34:35,000 --> 00:34:39,000
If you find yourself really wanting to
680
00:34:39,000 --> 00:34:42,000
master C++,
681
00:34:46,000 --> 00:34:48,000
we are offering
682
00:34:48,000 --> 00:34:52,000
CS106L. CS106L is a lab companion course that is
683
00:34:52,000 --> 00:34:55,000
open to students enrolled in 106B or 106X.
684
00:34:55,000 --> 00:34:57,000
It meets twice a week.
685
00:34:57,000 --> 00:34:59,000
It's actually on Monday and Wednesday late afternoon.
686
00:34:59,000 --> 00:35:02,000
It's 4:15 in Hewlett
687
00:35:02,000 --> 00:35:04,000
103. It's being taught by a veteran section leader
688
00:35:04,000 --> 00:35:09,000
who is very well versed in C++ and who of his own
689
00:35:09,000 --> 00:35:13,000
volition volunteered and created this course because
690
00:35:13,000 --> 00:35:16,000
he himself was a little frustrated as a prior 106 student
691
00:35:16,000 --> 00:35:19,000
in wanting to get at some of those C++ things that weren't
692
00:35:19,000 --> 00:35:20,000
fitting with our goals.
693
00:35:20,000 --> 00:35:23,000
It is a place where you can
694
00:35:23,000 --> 00:35:26,000
get more exposure to standard C++, do some exercises that help
695
00:35:26,000 --> 00:35:29,000
you to test out those things and see how those things are expressed and get another
696
00:35:29,000 --> 00:35:32,000
unit. It's a pass/fail lab course.
697
00:35:32,000 --> 00:35:35,000
You can also just attend or grab the materials if you just want to look at
698
00:35:35,000 --> 00:35:35,000
them.
699
00:35:35,000 --> 00:35:38,000
It's a great way to
700
00:35:41,000 --> 00:35:43,000
broaden that knowledge of C++ beyond what's
701
00:35:43,000 --> 00:35:48,000
useful for us in terms of our goals. I'm going
702
00:35:48,000 --> 00:35:53,000
to ask you some questions, because I don't get to do all the talking.
703
00:35:53,000 --> 00:35:56,000
How much C++ do you need to know? Some of you may know nothing about it,
704
00:35:56,000 --> 00:35:58,000
and that is perfectly fine. Some of you probably know something about it or at least
705
00:35:58,000 --> 00:36:02,000
have heard something about it. I'm going to have you guys tell me
706
00:36:02,000 --> 00:36:04,000
what it
707
00:36:05,000 --> 00:36:09,000
is that people tell you about C++ that
708
00:36:09,000 --> 00:36:13,000
makes you either excited to learn it or frightened to learn it or
709
00:36:13,000 --> 00:36:15,000
interested in how it works. It's
710
00:36:15,000 --> 00:36:17,000
what Java is based off of. It is what Java is
711
00:36:17,000 --> 00:36:20,000
based
712
00:36:20,000 --> 00:36:24,000
off of. That should be a little reassuring
713
00:36:24,000 --> 00:36:28,000
that there is a syntax there that got adopted with some minor
714
00:36:28,000 --> 00:36:31,000
changes. It should feel
715
00:36:31,000 --> 00:36:34,000
more familiar than different when you look at it.
716
00:36:34,000 --> 00:36:37,000
It was very strongly influenced by a generation of
717
00:36:37,000 --> 00:36:39,000
programmers who C++ was their native language who designed the
718
00:36:39,000 --> 00:36:42,000
Java language. That's a good thing to know. What else do you know
719
00:36:42,000 --> 00:36:47,000
about C++?
720
00:36:47,000 --> 00:36:49,000
It's extended
721
00:36:50,000 --> 00:36:53,000
C. Yes. It's extended C. Here's how it fits in the spectrum.
722
00:36:53,000 --> 00:36:56,000
C is kind of a 1970s creation. C++ is a
723
00:36:56,000 --> 00:36:58,000
decade later.
724
00:36:58,000 --> 00:37:01,000
C is the language which it is based on. It is an extended C. It's
725
00:37:01,000 --> 00:37:05,000
called a superset. Everything that compiles and works in C
726
00:37:05,000 --> 00:37:07,000
still exists in C++, but then they added a bunch of features.
727
00:37:07,000 --> 00:37:10,000
Not only did they add a bunch of features but they tried to fix some of the things
728
00:37:10,000 --> 00:37:13,000
about C++ by replacing existing things. For example, there's some
729
00:37:13,000 --> 00:37:17,000
string handling in C that's kind of very primitive. They added a string
730
00:37:17,000 --> 00:37:18,000
object
731
00:37:18,000 --> 00:37:22,000
with much cleaner handling and safer semantics into the C++, but they kind of
732
00:37:22,000 --> 00:37:23,000
left the old one around.
733
00:37:23,000 --> 00:37:26,000
Some parts of C++ feel a little strange
734
00:37:26,000 --> 00:37:32,000
because of this history to it - the legacy of incorporating everything C was plus the stuff
735
00:37:32,000 --> 00:37:35,000
means at times there's a little bit of weirdness there. It also means
736
00:37:35,000 --> 00:37:39,000
that the language, as a result, is very large.
737
00:37:40,000 --> 00:37:44,000
C's
738
00:37:44,000 --> 00:37:47,000
type safety
739
00:37:47,000 --> 00:37:52,000
and runtime features were extended by what
740
00:37:52,000 --> 00:37:56,000
got
741
00:37:56,000 --> 00:38:00,000
added in C++. A friend of mine told me that [inaudible]. That's a
742
00:38:07,000 --> 00:38:08,000
good thing
743
00:38:08,000 --> 00:38:09,000
to know.
744
00:38:09,000 --> 00:38:13,000
C++ might be a little bit more dangerous than Java.
745
00:38:13,000 --> 00:38:17,000
That is true. Java is very
746
00:38:17,000 --> 00:38:21,000
concerned with
747
00:38:21,000 --> 00:38:25,000
safety, in particular since Java was designed for web
748
00:38:25,000 --> 00:38:27,000
delivery of content. It was very important that the program have
749
00:38:27,000 --> 00:38:29,000
very constrained
750
00:38:29,000 --> 00:38:31,000
features on what it can and can't do,
751
00:38:31,000 --> 00:38:35,000
and so as a result, Java tends to be very parental. When you
752
00:38:35,000 --> 00:38:38,000
forget to initialize a variable or forget to
753
00:38:38,000 --> 00:38:39,000
return from a function,
754
00:38:39,000 --> 00:38:41,000
Java's
755
00:38:41,000 --> 00:38:45,000
very aggressive about saying hey, you've got to fix this. C++ is a little
756
00:38:46,000 --> 00:38:47,000
less
757
00:38:47,000 --> 00:38:51,000
parental. Here's the overly protective mom, helicopter mom,
758
00:38:51,000 --> 00:38:54,000
the ones who stand. That's Java. Java's making sure - oh, are you okay,
759
00:38:54,000 --> 00:38:57,000
sweetie? Let me stand here
760
00:38:57,000 --> 00:39:01,000
in case you fall. C++ is crack mom. She's like yeah, I'm over
761
00:39:01,000 --> 00:39:05,000
here with my friends. Don't play
762
00:39:05,000 --> 00:39:06,000
with
763
00:39:06,000 --> 00:39:08,000
the kitchen knives.
764
00:39:08,000 --> 00:39:11,000
It's a professional's tool,
765
00:39:11,000 --> 00:39:13,000
and professionals don't want to feel encumbered. There are certain things they want
766
00:39:13,000 --> 00:39:16,000
to do that require some of this
767
00:39:16,000 --> 00:39:19,000
low-level access, and safety usually comes at a cost.
768
00:39:19,000 --> 00:39:23,000
Any sort of feature where the language is double-checking for you is taking time and
769
00:39:23,000 --> 00:39:26,000
efficiency. There's a cost associated with that. Every time you want
770
00:39:26,000 --> 00:39:28,000
to get something out of an array,
771
00:39:28,000 --> 00:39:30,000
it's checked to make sure that that number was
772
00:39:30,000 --> 00:39:34,000
not off either end. Every array access costs you a little bit more.
773
00:39:34,000 --> 00:39:35,000
C++ says
774
00:39:35,000 --> 00:39:38,000
I'm not going to charge everybody that penalty. If you actually have the bad sense
775
00:39:38,000 --> 00:39:43,000
to write a program that does those things, you deserve to be punished.
776
00:39:43,000 --> 00:39:47,000
As a result, you will at some
777
00:39:47,000 --> 00:39:49,000
point in this quarter get to experience some of that firsthand. Some of
778
00:39:49,000 --> 00:39:53,000
it is a growth experience. Some
779
00:39:53,000 --> 00:39:56,000
of it can be frustrating. It is part of what
780
00:39:56,000 --> 00:39:58,000
professional tools often look like. They are making these tradeoffs
781
00:39:58,000 --> 00:40:01,000
of efficiency over safety that
782
00:40:01,000 --> 00:40:04,000
put more of the work back on you as the programmer to be a little more attentive on
783
00:40:04,000 --> 00:40:05,000
those things.
784
00:40:05,000 --> 00:40:09,000
You can write programs that crash in very spectacular ways
785
00:40:09,000 --> 00:40:14,000
much more interesting and varied and dangerous than the kind of things you can do
786
00:40:18,000 --> 00:40:21,000
in Java. Good to know. You want to
787
00:40:21,000 --> 00:40:29,000
use
788
00:40:29,000 --> 00:40:29,000
pointers.
789
00:40:29,000 --> 00:40:31,000
You're going to get to use pointers.
790
00:40:31,000 --> 00:40:35,000
Pointers are really neat, and they're also very challenging. Pointers are these
791
00:40:35,000 --> 00:40:37,000
ways of building these very flexible and amazing
792
00:40:37,000 --> 00:40:40,000
data structures - the kind of things that we're going to try to build. At some
793
00:40:40,000 --> 00:40:43,000
point, they are going to be the only way to achieve those things well, so building
794
00:40:43,000 --> 00:40:46,000
these things called trees, graphs and lists rely on understanding
795
00:40:46,000 --> 00:40:49,000
a mastery of the pointer type. The pointer type is complicated, and it's part of
796
00:40:49,000 --> 00:40:51,000
that danger thing, which is
797
00:40:51,000 --> 00:40:53,000
having access to
798
00:40:53,000 --> 00:40:57,000
rearranging memory by virtue of addresses opens up a lot of
799
00:40:57,000 --> 00:40:59,000
opportunity for there to be mistakes.
800
00:40:59,000 --> 00:41:02,000
Mistakes can be made in the passive voice
801
00:41:02,000 --> 00:41:06,000
that have consequences. You'll get to experience firsthand what that's like.
802
00:41:06,000 --> 00:41:09,000
There's joy in it, because getting it right is awesome, and there are things that you can
803
00:41:09,000 --> 00:41:12,000
achieve that are really extraordinary with pointers, but
804
00:41:12,000 --> 00:41:13,000
when it's not working,
805
00:41:13,000 --> 00:41:17,000
it can
806
00:41:17,000 --> 00:41:18,000
be frustrating. You're getting a
807
00:41:18,000 --> 00:41:22,000
little
808
00:41:22,000 --> 00:41:25,000
bit of both. It turns out C++ does not have a graphics system built
809
00:41:25,000 --> 00:41:26,000
into it.
810
00:41:26,000 --> 00:41:29,000
Java is actually distinguished from previous
811
00:41:29,000 --> 00:41:32,000
languages. Java tries to solve all problems. Traditionally, a
812
00:41:32,000 --> 00:41:33,000
programming language tends to have a set
813
00:41:33,000 --> 00:41:34,000
of libraries that have
814
00:41:34,000 --> 00:41:38,000
facilities for data management, reading and writing files and sometimes some
815
00:41:38,000 --> 00:41:42,000
networking, but they don't tend to actually solve application layer problems. That
816
00:41:42,000 --> 00:41:46,000
tended to be a different piece of technology. The Mac
817
00:41:46,000 --> 00:41:49,000
OS might offer a graphics library that was written in C++, but C++
818
00:41:49,000 --> 00:41:50,000
the language
819
00:41:50,000 --> 00:41:53,000
didn't have a windowing system or graphics system.
820
00:41:53,000 --> 00:41:55,000
C++ does not have those features
821
00:41:55,000 --> 00:41:56,000
itself,
822
00:41:56,000 --> 00:41:58,000
so any C++ compiler
823
00:41:58,000 --> 00:42:02,000
you get comes with these basic things about handling files and managing these types of
824
00:42:02,000 --> 00:42:05,000
data structures, but it does not come a priori with a bunch of graphics routines.
825
00:42:05,000 --> 00:42:07,000
That said,
826
00:42:07,000 --> 00:42:09,000
Windows and Mac and Linux and all these things have graphics routines that are
827
00:42:09,000 --> 00:42:12,000
written in C++, but they're all different. To say what are they
828
00:42:12,000 --> 00:42:13,000
like
829
00:42:13,000 --> 00:42:15,000
relative to Java? They're all different relative
830
00:42:15,000 --> 00:42:16,000
to Java. It's not standardized.
831
00:42:18,000 --> 00:42:21,000
There's a wide variety of them out there, and
832
00:42:21,000 --> 00:42:24,000
they tend to have a lot of very impressive and different solved
833
00:42:24,000 --> 00:42:27,000
problems, because C++ has a longer history than Java that a lot
834
00:42:27,000 --> 00:42:30,000
of problems have been solved in C++ that are available to you,
835
00:42:30,000 --> 00:42:32,000
too. There's a lot of existing code
836
00:42:32,000 --> 00:42:36,000
other than what you might think is standard.
837
00:42:38,000 --> 00:42:42,000
I
838
00:42:42,000 --> 00:42:43,000
will
839
00:42:43,000 --> 00:42:47,000
see you on Friday, and we'll be seeing some C++. If you have
840
00:42:47,000 --> 00:42:58,000
questions about your situation, come and talk to me now.