DAVID MALAN: --to get all the
more familiar through practice,
and practice.
All right, so let's actually--
DOUG LLOYD: You know, one
of probably the biggest
questions that we get, and we've
answered in a couple of places,
is why do we teach C?
DAVID MALAN: Oh my god, you're going
to ask that question, aren't you?
DOUG LLOYD: I'm asking
you, why don't we do it?
DAVID MALAN: No, it's a
very conscious decision,
and I actually do think it serves us
well overall, and hopefully serves
our students very well overall,
even though we definitely
pay a price in complexity
sometimes, pointers in particular
is a particularly sophisticated
subject that a lot of students
understandably wrestle with.
But the reality is, it's such
a relatively small language, I
mean we use almost every
feature syntactically in logic
and even functionally of it that comes
with the standard library at least.
It's pretty low level without
going into assembly language,
and there's really no magic
or not much magic at all.
You get a little bit of help
from the compiler here and there,
but the reality is things are not going
to be in memory unless you put them
in memory, and something's not
going to be copied unless you
copy every one of those bytes.
And so there is this
deliberateness to the language
that I think is really helpful because
there really is so little magic.
DOUG LLOYD: Yeah, it
gives us the opportunity
to talk about things that you can't
even talk about in a lot of more
modern high level languages.
And C has been around
for a really long time
it has inspired so many of
these other languages, so even
a language like Python that looks
really different, it sort still
has the same flow to it,
and certainly JavaScript,
or when we used to teach PHP.
They can all sort of
count C as ancestors,
and so that's another I
think good reason to use it.
DAVID MALAN: Yeah, and I'm
so proud of our students
honestly, like mid-semester,
by which we have already
looked at what's going
on underneath the hood
and they can speak to memory
management, and the stack, and the heap,
and they really understand
functionally what
is going on underneath the hood, what
is the runtime or the computer doing
for you, what is the compiler doing
for you, and having that appreciation.
So that when we do get closer
to the end of the semester
we introduce Python, and
JavaScript, and others
you have a much greater
appreciation for,
and understanding of what the language
is doing for you and how it's doing it.
DOUG LLOYD: Yeah, you can
take those things for granted,
but you still know what
you are taking for granted.
DAVID MALAN: Even in Python which
has good documentation to the time
complexity or running
time of various data
structure algorithms like lists,
and sets, and dictionaries,
and so forth, you can
actually imagine, all right,
well how must Python be implementing
some data structure in order
to achieve this running time.
And we've looked at a very
low level by having students
build those structures themselves.
And even the security aspects,
it's ridiculous, but to this day
we still suffers a society from buffer
overflow attacks and various exploits
based on that, and being able to have
a conversation and talk about what's
going on and really demonstrating that
this is a pretty low level attack.
But it all makes sense
if you just understand
these basics, these first
principles on top of which we've
been building these systems.
Like you can infer, even from
that alone, how these attacks
are taking advantage of systems.
