00:00:00,060 --> 00:00:02,700 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.