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.