Object Oriented Thinking Sean Tibor: [00:00:00] Hello and welcome to teaching Python. This is episode 61 object oriented thinking. My name is Sean Tibor. I'm a coder who teaches. Kelly Paredes: [00:00:24] And my name's Kelly Schuster Perez and I'm a teacher who coats. Kelly It's Sean Tibor: [00:00:28] a kind of getting into a groove now where we are recording. After school. Face-to-face with plexiglass in between us. But we're in the same room for, I think the third episode in a row. Kelly Paredes: [00:00:41] I know it's pretty amazing. It's such a different Feeling instead of staring at your face in a computer. It's like in. Face, at least you're there. And I can Chuck things at you. Sean Tibor: [00:00:51] I think we've all spent a lot of time on zoom over the last year or so. It's amazing that we're coming up on the the one year Mark of being in this new world. And, I have to say I'm amazed every day at what teachers around the world are doing, what developers around the world are doing to adapt and adjust to this new reality that we have. And it's pretty amazing to see. Kelly Paredes: [00:01:12] It is pretty amazing. I don't know. It's going to be hard going back and I don't know, going backwards. Hopefully you don't go back, but having someone's code and saying to the kids, share your screen. I'm going to miss that. If that ever goes away, share your screen. Sean Tibor: [00:01:27] I don't think that's ever gonna go away. I like the idea of being able to share screens and being able to use the technology to collaborate better. I'm just looking forward to more ways that we can do pair programming. We can do side by side stuff. When white boarding becomes easier, instead of doing digital white boarding, we can just grab a marker and write on the wall or on the table or whatever. Again. So I know that things will go back to normal, but I don't think we'll ever go back to the way it was. Kelly Paredes: [00:01:50] No. I hope not. Sean Tibor: [00:01:51] This week we're going to be talking about object oriented thinking. We've been doing a lot of discussion between you and I and played around a little bit with teaching some lessons around object oriented programming, and we've had some really great conversations through Twitter and LinkedIn about the role of object oriented programming and thinking and how it plays a part in computer science curriculum. So we wanted to go through that in a little bit more depth today and just talk about some of the thoughts. So we have, and also hear from some of our listeners to hear what they have to say. So before we get into that, we're going to start in the same place we always do. I love it. The win of the week. And Kelly, I am going to make you go first this week. Kelly Paredes: [00:02:31] I did just finish finally typing. Is it running properly yet? No, I'm not quite sure, but that chapter one the by Asian code I was working on last time, it is a fairly in-depth code is not long in length, but the coordinates and the rays and. Making sure you don't typo and trying to understand what you're doing. I had to go back and reread. So I think that I feel that's a wind that I'm sticking to our book. The book actually has a nice crease in it. It's opening. Something about the books and being able to just type it. Sean Tibor: [00:03:03] you're getting a lot out of that, you've really dug into that book. And there's a lot of detail in that first chapter with I am show and images and all kinds of cool stuff. Kelly Paredes: [00:03:13] Yeah. I am originally had typed it in CoLab, and then I knew it needed a plugin or something with the, I am show it didn't like it needed to patch. And so I had to go investigate that. So I just finally said, you know what, I'm going back to visual. Studio code and yeah, it was a great learning process. So those of you who think I just copied the code now, it's actually the learning process of going through Google CoLab. Installing and uninstalling visual studio. Cause I had a glitch and stolen all those libraries. It's a huge accomplishment for newbies. I think just to hack that, Sean Tibor: [00:03:43] just to get to the point where you can copy the Kelly Paredes: [00:03:45] Yeah, the copy and the codes that easy part is getting it. Started. So yay me. Sean Tibor: [00:03:49] I have two wins this week. The student, when was one of my colleagues just told me I was out this morning for a doctor's appointment and one of my students. Said to one of my colleagues. Man. I really hope Mr. Tiger's. Because computer science class is going to be boring. If he's not. I thought to myself for this particular student to say that it means that something's going that she's getting into it. And she's really liking it. So that was a pretty cool when a little one, but I'll take it. The second one that I had is just a program that I wrote. Talk about automate the boring stuff. I think I have a new chapter for Al Swaggart. If you're listening, I have 400 iPads that need to get boxed up and shipped out to. Like an electronics, reseller, recycler, so that they can be disposed of properly. I hate putting stuff in landfills and if it can be reused and repurposed, great. So they shipped us a bunch of boxes to put these all in. And I was looking at the daunting task of hand typing in 400 different serial numbers or barcodes to be able to look them all up. Delete them from our management system, logged them as being departed all of that stuff. And I thought to myself, there has to be a better way. So I started learning the typer library, which is by the same same developer as the fast API library, but it's a type aware command line interface framework. So it makes it easy to write a command line programs. And so I started writing a little command line program that I could hook up a barcode scanner to this thing. And you can scan barcodes with it. And every time you scan a barcode, it deletes it from our system, using the API for the management server. It logs it to Google sheets. It logs it to a CSV. And it even lets you put in the box number that it's going to go into so that I can verify that I've got the exact number of devices in each box. So I probably spent like hours upon hours getting the code working, which was a lot more fun than typing in barcodes. But I think I just scanned in 240 iPads and about. Like a little over an hour into the system and verify that they were all removed from our systems, logged into this Google sheet and ready to go. And so I was pretty pleased with myself when I got that working, it was really cool. Kelly Paredes: [00:06:00] And these are the skills that we try to steal from Sean and teach into our, with our students. It's Sean's been, you've been talking about this, I don't know, a couple months. you were talking about Sean Tibor: [00:06:09] procrastinating on doing this project. for months, but Kelly Paredes: [00:06:12] And it's quite funny when he starts to get, he gets an idea for a project Okay. we're going to do this and we're going to, we're going to code this and I'm just like, huh. We're going to do it. And then we walk around the Lake and you talk through the problem. I'm like, aha. Totally. That sounds. Exactly right. Maybe another if statement in there. And then you'd work through another problem. And then all of a sudden it's working and I think it's that. That thought process, which is. Where I was going with this O P this thought process that real. Programmers real coders have and the way they think about their code and the objects and the items that they need to do, that's my, I don't know if I, I didn't look at the code. I have to, I'm not going Sean Tibor: [00:06:51] Oh, it's pretty messy right now. You don't want to look at it but I think the raise a valid point and, I wouldn't say that it makes me a real coder because I can use objects and define classes. And I know about polymorphism, or I know about, Factory models for designing things are designed. Skeuomorphic sir. I don't know what all those things are and I don't use them all the time. The only thing that makes me a real coder. Is this idea of finding a problem, designing a solution, breaking down that problem into smaller pieces that I can solve with smaller solutions. And finding a way to integrate that all back together into something that actually works. If there's anything that defines me as a real coder, that's probably it. I wouldn't say it's because I write the most beautiful Python code or it's the most Python. Nick fluent code. It's being able to break it down into small parts and solve those parts. And right now I've got a bunch of code that really should be refactored into something a lot nicer, but it works for now. Kelly Paredes: [00:07:47] That's pretty cool. Sean Tibor: [00:07:47] Yeah. And so I have plans, like I want to make it into something where I can do other actions other than just deleting items. Maybe there'll be something where we can check in and out the iPads to students at the beginning of the end of the year, or we can have other actions that happened with these barcode scanners. Hopefully it turns into something more. Kelly Paredes: [00:08:02] I think you're just preparing for the day when you don't have to take The temperature of students and you still have the gun, like beep. Sean Tibor: [00:08:09] to have something beep Kelly Paredes: [00:08:10] Alright, let's get. Sean Tibor: [00:08:11] the fail of the week Kelly Paredes: [00:08:12] Oh fails. Oh, goodness gracious. You can go first. Sean Tibor: [00:08:15] Fail of the week. Okay. I had one student today that we were going through some stuff with API APIs. And there's a bunch of cool APIs that I found that we, talked about a few weeks ago, simple, clear API APIs that you can get without any sort of access. We found one that you can get random kitten photos, or photos of kittens that meet a certain size requirement. I put up one, that was the weather on Mars. I thought that was really cool. Like you can get the weather currently on Mars, like the average pressure, all of these things. exactly. And there's, this student was like spinning on her, on the stool that she has. She's got like a spinning top bar stool at her table. And she's just spinning because this is not cool for her at all. She was like, whatever don't care. Kelly Paredes: [00:08:57] Yeah, I zoned out too. But then when you started, when you put kittens up, I totally was like wait, how did you do that? Sean Tibor: [00:09:01] You got to connect it to people's interests, Kelly Paredes: [00:09:03] even have a cat. That's Sean Tibor: [00:09:04] was, it was pretty fun. It was a big fail that she just did not care. So I have to keep trying. Kelly Paredes: [00:09:09] Yeah. I'm trying to think of. I don't really think I have any fails right now. I don't think. Yeah, it's been a pretty, a nice. I'm just going to leave. I have no fails. Sorry. typos. Oh, tons of typos, but is that really a failure or a learning moment? Sean Tibor: [00:09:24] They're all failures are Kelly Paredes: [00:09:25] failures. Okay. So I had tons of typos that's not abnormal I'll just say typos from now on. Sean Tibor: [00:09:32] Nice. Nice. Okay, so let's talk, or object oriented. It's something that I wasn't necessarily planning to teach this year to eighth graders. And I think I've mentioned on the show a few times, I've done one lesson plan with object oriented programming, and the goal of it is not to teach students how to use object oriented approaches or techniques to be able to solve problems. It was to give them a glimpse of how objects, methods and properties are fields work in Python so that they know what they're seeing when they see it. So when they see a string dot lower, they know that's a method and that's different than a function. At least to the point of being able to use it. There's this idea that. They do a lot of copying of what we type, right? So here's a pattern that we've typed in. They mimic the pattern. And they change it a little bit to know what it does, but they don't really understand how all the different pieces fit together. So this object oriented lesson was really about trying to get them to understand that this is an object. And when you see the dot there, it means that you're accessing a method or a property on that object. It can be a little confusing cause that whole dot pattern. Pertain. So a lot of other things too, but. But I think that's helping, at least for some students they're seeing, Oh, this is a method now, or, Oh, here's a property of an object. Kelly Paredes: [00:10:44] I guess I, for me, it was, it. And I had asked you before does do classes because I don't get it objects and classes. And you open up these books and nothing on the books because I loved the books, the game books and everything, but you open them up. And the first. I don't know, 15, 20 pages. You're making a Sprite class. And you're doing some of their Sprite and I had no clue. I've had absolutely zero understanding. Really what I was doing. I copied it. It works. Okay. Yeah. I know I'm making some copies of spice, but. Like I know physically what it's doing. I can see it in the code, but I don't. Understand it enough. And when I say understand it, I need to be able to explain it to a 10 year old or 11 year old or 12 year old. And I can't do that. So if I can't explain it, I don't know. It. And so as I watch you to cheat teach this object, I'm still seeing the same. I was still seeing the same thing. This is a class and that's a capital letter and here's the things that are in it. And I started thinking to myself, like, when does it. become. This process that we understand, and you brought up the topic of not necessarily teaching object oriented programming. We're not worried about that object oriented programming, but we're talking about the object oriented thinking. And of course, like I always do. I start Googling, what is he talking about? Object oriented thinking and. And it's just this linguistic. Aspect of really this way of thinking. Yeah. Sean Tibor: [00:12:12] mean, it's. It is definitely a way of thinking a way of organizing your thoughts. It's a way of organizing your code and making it more reusable now. For those of you who are not object oriented programmers, the good news is you're not alone. You're not alone. You're not alone. There are plenty of people who write a ton of perfectly valid and decent Python. That works and does the job and everything that doesn't touch. Object oriented design principles at all. It doesn't, they don't never define the class and it's fine. Just the same way that in Python, there are people who do a ton of functional programming and that it's also fine. There's plenty of room under the tent for everyone and everybody's styles. Object oriented programming is something that was, has been around for a long time. It's not a new concept in programming. If you haven't used it before, it's just this idea that you can create things. Objects in code that have properties, which are like ma like variables that are attached to an object, a group together. And you have methods which are like functions, but attached to that same object. So that's the way I try to explain it. And there's plenty more that you can do with it. And you have these ideas of, you can have sub classes, so classes that are inherit properties and methods from their parent classes and all kinds of really interesting stuff that you can do with objects. Kelly Paredes: [00:13:35] But this is the point where, the kids start spending on the chairs. And that's my point with Anne. And I'm thinking through this as I'm speaking, but I've done a lot of reflection about Oop. We do it, or we wanted to touch on it because they needed it in AP computer science. Sean Tibor: [00:13:51] Some of that. Yes. Kelly Paredes: [00:13:52] wanted to prepare them. And. And we know that our kids don't necessarily need to be needed right now in middle school. We're not saying, Oh, listen, everyone, we're coding in classes and everything. But saying the words and getting our students to that point. About object oriented program or even. Even where it came from, The point and I'm trying to. You'll edit this out. And I guess what I'm really touching it is. In the past, thinking about my progression over the years, I would say to the students, okay, we're going to use a library. We're going to open up the library, some really smart people or some other coders back in you. Somewhere made this library and we can type these functions or here's turtle. And why do I have to do turtle at first? I didn't understand it. And kids. And I just said, just copy it. Just copy it. But if we keep saying that, just copy it. It's irrelevant. I'm pushing them down the same path. So really understanding that. That's a thing that's a new told me that's an instance of turtle. I can name it, whatever I want. Bob, Sally Shakira. Sean Tibor: [00:14:58] I like Abbott and Costello for my examples. Kelly Paredes: [00:15:01] Oh, I had Brittany Spears and Shakira this week. Sean Tibor: [00:15:03] Nice. Nice. And so there is definitely that. Why are we teaching this question? Like, why does this matter? And. Yes, the AP computer science is valid, but also the fact that they use objects all the time, they are users of objects in Python, whether you're creating a string or using a date time, or you're doing something with requests and you've got to request object and the response object, there's a lot of things where you're using objects all the time. And you may not know that what you're using or how to use it. The idea that a student has the ability to learn. This is what an object is, and this is a class. And this is how people define object types. Using classes gives it to them at least some. Possible insight into how these things are organized and structured. So when they structure it in that way, Then. Kelly Paredes: [00:16:01] Then they Sean Tibor: [00:16:01] get more hopefully out of it, they know which pieces they can manipulate, which things they can change. I can move this object from. here to here. I can put a method here, our method there, and that gives them the ability to start using those objects more thoroughly. Now, if you're sitting at home going, there's no reason why students ever need to worry about object oriented programming, right? Or you're sitting at home saying everybody needs to learn about Oop it's vital that they weren't. You're probably both right. Th there's definitely plenty of strong feelings and viewpoints and opinions about all of this, but I think everyone can agree. That if you're going to be a coder. In most languages that have object oriented programming, you're going to be a user of objects and you should know which things that you can move around and which things you can adjust. Whether that means that I know that this string variable that I have this object that's named something. Has a dot lower on it. That also means that it has a dot upper and it means that it has a dot title and it has all these other methods that I can use. And if I'm looking at the documentation, it tells me here are all the methods. I know, Oh, I can use any of these. I can swap it out. Kelly Paredes: [00:17:04] and I think that's what happened. And we do this a lot and shit. Sean sees it in the background when I'm sitting there and I start looking and all of a sudden I have this look on my eyes. Holy cow, I just had an enlightened moment. And that happened to me last week, when you were teaching it. And I started to see the patterns. I started to see something forming when you were teaching the classes and this is not the first time you taught it. I guess it's the third time, right? And I also read for a chapter four. And the book about an its and Dunder methods and all classes, and I still didn't get it. But. I saw something and I, I was like, Oh my God. It's there. I get it. What did I do that made me finally see. And understand and get that mental image. And I started to do my reflection piece where I'm like, Oh, deepen my thought. Where, why is that making sense to me now? And it has to do with the fact that I transitioned this year. Into using the word objects I transitioned into using the word methods. And I started showing kids in sixth grade, not teaching him object oriented programming. But I started showing them, this is an object these data types, these are objects, and we're going to call them this and not, instead of just saying. Make a variable name and make a string. I changed my terminology. And by me changing the terminology. I'm not saying the kids are gonna. Honestly just get Oop right away. But I started to use that over and over again. And I could now identify what an object was a method. And so when I saw you type, but I was like, Holy cow. That's a good first step. Sean Tibor: [00:18:48] Yeah. And I think some of this too is maybe going to be better. I have this idea for an anchor chart in my mind, or a series of anchor charts. That basically diagram the parts of an object and a method. So if you have a, string dot lower method or whatever it is, Abbott dot lower Abbott dot forward, 100. To be able to diagram that and say this part. Abbot. That's the object. This part here. Forward. That's the method name, right? Here's your parentheses. And then this argument here, like 100, that's the argument and have this. Elegant bracket or grouping that shows like here are the different parts of the function call or of the method call or a property, and even have it go more complex. So if you want to get this property on a method or on an object, like here's an object that's associated with this object and that one might have a method on it and you can call those and chain them together. But that idea of having visuals and having diagrams of being able to see how this fits together, I think is the logical next step. The kids who do need to see it or need to have that reference that they can look at. We'll have something that they can see that says, Oh, that's the object. That's the method. That's the argument because it's hard to keep all this straight in your head. Kelly Paredes: [00:20:04] Yeah. And I started doing that too, because that mental image, we need that mental image. So I remember it was a class. I don't know, three weeks ago. I was. It was a class three weeks ago. And I said, here's my cup. It's an object. What's inside my cup. Or what does my cup do? It holds things what's inside my cup. It's a water. So here's my object. Here's what it does. Here's my water inside the parameter. And I was showing them and we went over and over or here's an oven. What does it do? It bakes. Or we talked about frying, making chicken. Chicken can be made in an oven. It can be made in a toast, toaster. A toaster oven, and we can fry it. And again, talking about objects and methods in order to produce stuff. So starting to bring in those mental images. Not only cleared up my mind. And then I was starting to see, Oh turtle. Here's it. As an object. Sean Tibor: [00:21:00] And that's also a very PR. Big part of this object oriented thinking approach is this ability to model objects, right? To be able to take real world things or to take virtual things. Theoretical abstract ideas and model them and turn them into classes. Give them structure, give them skeleton, that you can work with. And there are people who are amazing at this sort of thing that have these beautiful, object oriented models and everything, but that whole idea of thinking this is a. Kelly Paredes: [00:21:30] cop. Sean Tibor: [00:21:31] how would I represent a cup with code? It goes to your idea of how do we represent the constitution with code and our humanities, our government classes. There is a way to do that. And if you were to break down all of these things, you could represent any of these. As a model. Kelly Paredes: [00:21:46] with classes. Sean Tibor: [00:21:47] Yeah. Kelly Paredes: [00:21:47] I was just thinking that we can do all that. Sean Tibor: [00:21:49] Think about it. So there you have a constitution object, right? You could have what articles in the constitution. You can have sections. Each article could have sub pieces and everything is probably actually just going to. A lot like Jason when you're done, but it totally works. The real question is, There's there are so many different kinds of objects that you can create. In Python, they have this concept of data models now, which don't really have. Your own defined methods, they have they're there to represent data, but they come with a lot of the built-ins on length of items and being able to see some of those Dunder methods and stuff like that already built out. And one of the things that I like about Python and I think is fun for the students to see is that. They don't always get the fact that everything in Python is really an object, right? Most things in Kelly Paredes: [00:22:37] not yet. Sean Tibor: [00:22:38] Not yet. But when they start to see it, when you can show them that Oh, you can use a Dunder string method. To create the string representation for an object. So now if I want to print my object that I created. And I just say print this course or what print the cup. It prints the cup the way I want it to walk right. That I can make it work like a built-in object in Python and do some cool things. And that sort of thing. When they start to realize that they can create their own stuff in Python. That behaves like the other stuff in Python that they're already familiar with for some kids that seems to just really. Make their eyes light up and get excited about it. Kelly Paredes: [00:23:14] That's what I'm hoping for. Cause, we do this progression in sixth grade. I think the sixth grade I. Our curriculum, not sharing too many secrets, obviously, we do. About three weeks of. Python concepts. And we get them cornered because someone was asking me, how do you get them coding? And I was like, I don't know, we just do Sean Tibor: [00:23:32] We start Kelly Paredes: [00:23:33] We just start coding. We do a lot of coding. I would love to see how many lines of code. The sixth graders actually code or write in a quarter. It'd be interesting, but then we do the turtle module. And again, showing them that here's this method, here's this object, we're doing this to the turtle. We did this to the strings and now we can do whatever. And then we're going to go into the BBC microbit. And I just had this lightning, idea. Oh, the circuit pilot, maybe that's what I'm missing because I couldn't ever figure out, we're going to do this circuit. Why was it circuit, playground, CP, whatever. Sean Tibor: [00:24:07] So there's your moment to make the connection when you import that board dot circuit playground as CPX, cPX is an object and an instance of the circuit playground that has things on it has buttons that has Neo pixels. It has sound, it has all these different components that you can Kelly Paredes: [00:24:22] I have a tip for anyone teaching beginners, because this is the problem. So a lot of people import turtle as T that right there keeps the kids from seeing that object. Sean Tibor: [00:24:31] So import turtle, Kelly Paredes: [00:24:33] import turtle. And Sean Tibor: [00:24:34] then make a T Kelly Paredes: [00:24:35] name T and Bob and Sarah and Judy and whatever. Sean Tibor: [00:24:40] and Costello. Kelly Paredes: [00:24:40] and Costello. I know you love that kids don't get it. Until you show them. Sean Tibor: [00:24:45] And then even then some of them are like, this is amazing. And other ones are, I know this is awful who watches us? that's the Kelly Paredes: [00:24:52] thing is showing those kids and then import. Important circuit playground as CPX. It doesn't make sense to beginners. So that process of showing them the thinking, showing them where it comes from, breaking it down and really getting into, again, the object oriented thinking, not necessarily teaching the classes, but showing them where that comes from. That has helped me finally go aha. Three years later. Aha. I get why those books started with sprites Sean Tibor: [00:25:19] And I think. The interesting thing, even when I'm teaching objects and teaching classes, is that I see some of my students who were like this makes so much more sense why we're even bothering to teach me about dictionaries to store data. When I could've written classes instead, this makes, this is great. I love this right. And then you have other students who are like, but I liked dictionaries. Dictionaries are my friend. Why would I use a class when I can just write a dictionary? And you get to see that preference emerge, right? It's one of the cool things about teaching beginners. As you can see those early preferences that they have as developers and what they like to do and what they don't like to do and how they like to think about things and solve problems. There are a lot of programmers who are comfortable programmers. I know how to do it this way. I know how to make it work. It's really great. And then you also have the people who never can do the same code twice. In like there. They're like last time I did it with object oriented program, but this time I'm going to do it with this new functional programming paradigm that I learned about, because I think it'll be really cool to do it where none of it is, destructive. Okay. Like that's also cool. Kelly Paredes: [00:26:20] And they get to do that. I think again, we honed in on that part of our curriculum. We did the schedule in seventh grade and we did five versions of the schedule using all the basics. Of Python concepts and adding a few libraries and then you do it again, showing them, Hey, we can make a class out of that. And I think that's why I finally got it. I was looking. Sean Tibor: [00:26:41] And there's a reason why I chose that. One of the reasons why I wanted to use the schedule of course, classes that people are taking their daily schedule. The reason why I wanted to use that as one of my examples is because they had coded it. They were familiar with it. They're like, okay, I get the idea of the structure in a list of dictionaries. But then when we changed it to be class-based right with us schedule class and a chorus class, then they could see, Oh, it's some more ideas, but a different implementation. And that's one of the things that I think is. Really important about teaching computer science compared to the way that some subjects have been taught. Traditionally, how many times when you were growing up, did you think that there was only one way to do something? Or this is the one answer. But if we show, Hey, there's five different ways that you can solve this problem or 10 different ways, or potentially an infinite number of ways that you can solve it. Then I do think a lot of students, not every student, but a lot of students become much more invested in their answer to their problem. How do I solve this? What could I do that makes this work? And you have to praise them. Equally for the really sophisticated, elegant. A solution as well as the, maybe it's the brute force or it's the comfortable way to get it done, but they're like, look, I know how to do this. And I got it to work and it's great for me. Like it works for me and that's something that's valuable too. Kelly Paredes: [00:28:04] Absolutely. Yeah, so I guess the question. Sean Tibor: [00:28:08] Which Kelly Paredes: [00:28:09] could ponder, and this is going to be applicable to. Anyone who's teaches computer science. And at what point. Whether you're a middle school or high school, AP college, or as a learner. When. And we're still struggling with this, but when do students need to really understand classes? We're going to cycle back into that, Sean Tibor: [00:28:29] and your options, can be from the very beginning. To absolutely never, right? Like you have this whole range that you can choose from. And I think it's okay to be a little bit provocative here and say, From the very beginning or absolutely never, but here's why. Kelly Paredes: [00:28:43] I would like to say, and I, and hopefully, maybe colleges are listening. But instead of saying, Oh, you need to teach. Classes or you need to teach object oriented programming. You need to give them an instance, you need to give them a problem. And then they should. If that problem. Thrives or works better with a class I II. Arcade game. Then, yeah. Okay. Let's teach the objects and Sean Tibor: [00:29:11] I think the choices are what makes it interesting because when students have to make choices and it's not an easy and clear, Oh, this is the best option. The that's when they really start to learn and think when they have to make trade-offs and they're just decisions. That is really interesting. Why did you choose a class over a list of dictionaries? I knew that a list of dictionaries would get the job done, but I also felt that it would be clunky and hard to read over time, especially as I did more of it. So I chose classes because I thought it would be more readable. It would make it easier to do, but I knew I would have to invest more time upfront to define the classes. That's an interesting trade-off conversation to talk about the cost of design versus the cost of use. And where do you want to spend your effort? And depending on how much you're going to, how much time you're going to spend in either area. Either a situation could be, or either design approach could be perfectly valid. Depending on those trade offs that you want to make. Kelly Paredes: [00:30:06] And I think that's that just raised another idea. And this is maybe my fifth tenet that, you know, from my art. I'll add a fifth one on my article. In that design process. Wouldn't it be cool as someone who's writing a book, not me. During their arcade that you have them draw out. How they organize it. Here's your little Sprite person. And that's your, that's just a class of Sprite. But what attributes does that Sprite have? Does he run fast? Does he have spiky hair? Does he bite? Fly. I don't know, whatever we're making games. But I would be willing to bet if there was a place where the kids would actually have to draw out and set those attributes and said, what methods or what they're going to do. that they actually drew it out before you had them copy. Here's my class Sprite. And here's my self. And. Everything else in there, which. Sean Tibor: [00:31:05] No, I, and I. Yeah. And I've done a ton of paper design. And having to know what is the difference between when you create a new instance of something and you just set different variables or different parameters and methods on it. Or when you are sub classing it, right? So you're creating a whole new subclass of objects. And this really gets into that idea of, Abstraction and the ability for students to make abstract concepts from specific examples. And that kind of induction process that they go through to be able to take a lot of the different stuff that they're seeing in the real world and come up with abstract classes, come up with concrete classes, subclasses things, figuring out what to make a class versus when to make an instance. All of those things are helpful for building this idea of . Abstraction and the skills of being able to abstract things. And so that's one of the things that I believe is helpful about object oriented thinking and object oriented programming. Is it natural lends itself to abstraction? There's obviously a lot of other ways that you can do it, but I always liked it because I could map it usually to real-world things or some real concept that I'm trying to create. Kelly Paredes: [00:32:09] Interesting. I don't know what else to say about that. It's there's a lot going on in my head. So these are, again, this is why Sean and I have these great conversations because as he was thinking, and I normally write down stuff Just processing the thought, I want to touch base on something that you had said to me and I wrote in the blog was it's often hard for people who finally can see, and this is one of the reasons also it's good to have a podcast. It's really hard for people that already see the classes and can say instances. And do I do a subclass. It's hard for them to think about what it felt like when you couldn't see it. How do you unlearn what you have already learned? Thought metacognitive thought. And. I go out there to all these people that who have been teaching computer science for so long. I'm telling you from. Beginning. It's hard to see it. It is so hard. At that point and. W hold onto that point when you finally get that. Aha. When I saw the pattern. And I was like, Holy crap. I need to write this down because what did I do to see it? It's Sean Tibor: [00:33:14] is amazing because it is a very personal thing for each individual. Who's going through the process, your journey of learning, something like that. And I wouldn't say it's specifically object oriented, but it is that all whole idea of a transforming moment in your thinking a mind shift, an epiphany, like whatever word you wanna use for it. I first started learning object oriented design more than 20 years ago when I was in college and learning it. In computer science programs. Okay. I can't remember what it was like before I knew about classes and objects. And I still wouldn't say I'm particularly proficient at using them, but when someone says objects in class, I know what they're talking about. When they talk about object inheritance or sub classing, something, I know what they're talking about. But there was a time when I didn't and I don't remember for me what it was when I. Crossed over from not knowing to knowing. And so if you are a teacher who's going through that process to Kelly's point, hold on to those things. What was it for you? Kelly Paredes: [00:34:15] And write it down, write Sean Tibor: [00:34:16] it down. for us, please. Like for me specifically, Write it down because I don't remember what that was. What was it for me that said, Oh, I get it now. And I can't tell you if it was some way that someone explained it to me, if it was just. Banging it out, like writing out the code enough times and how I was like, Oh, I get it. Or trying to make my own class. There was something that made that work out. I just can't remember what it was. Kelly Paredes: [00:34:40] Yeah. I think it's a great opportunity for anyone who's beginning to learn how to code those teachers who are making that transition. We have something huge to offer. We have something huge to offer to a lot of experienced coders, experienced teachers. And we have that newness. We have that, that apifany moments. Those opportunities to remember what it's like to struggle with. It's, that saying that kids always say, I'm so confused. I was literally so confused. I just, I don't, sometimes I tune out Sean, cause I'm just so confused. But at the same time, I don't want to be that child who says I'm so confused. I just want to stop and figure out what point. Or where am I confused? And so we have something to offer there as newbies and, if you start feeling that imposter syndrome don't because that, that feeling of not knowing, or maybe not feeling that you're good enough or whatever. That's a moment to share. Sean Tibor: [00:35:38] Yeah. I think being new as a beautiful thing, being new to something gives you a license to ask dumb questions. And two. Challenge in an inappropriate way or question the assumptions that other people make. What do you mean by when you say class? What does that mean? And so for someone like me who throws the word around without really thinking about it, I have to sit back and say what do I really mean by class? How do I explain this to someone who may not understand? And it's always worth it. For that. So if you are new to this, if you're trying to figure it out and you're like, Oh, there's more. So much more than I don't know about programming embrace that newness. It gives you a licensed ask, dumb questions and those dumb questions are not that dumb. We had a couple of Westerners email us about this, about Kelly's blog posts. It's gotten some good traction on LinkedIn. There's been a variety of different responses from, I can't believe you guys are already teaching object oriented programming to why the heck would you teach object oriented programming? And that's one of the things we love about this topic is that everyone has strong opinions. Please respectfully share yours, right? Don't want to get out of control, but we would love to hear your opinions. About when and how and where to teach object, program, object, oriented programming, or other things that are similar to this that maybe should, or shouldn't be taught. Functional programming or some sort of, of new language. When should this language be taught versus this other one? I'm having the question right now. When do I introduce HTML and JavaScript to my students? Do they really need to know. Kelly Paredes: [00:37:06] I don't know, it was fun. Just saying HTML and web scraping and beautiful soup and, NTL K library the other day. I wish I, can't say it enough. I wish we had more time in our class because there's so many cool things that we could be doing. Sean Tibor: [00:37:20] Yeah. Kelly Paredes: [00:37:20] Object oriented thinking. Let's not confuse it. Object oriented programming, necessarily this, that concept of object oriented thinking in that process of changing the design. Exactly. Sean Tibor: [00:37:30] Exactly. So if you'd like to talk more with us about this, you can always hit us up on Twitter. We're at teaching Python. Kelly is at Kelly Paret on Twitter. I'm at SM Tibor on Twitter. Let's see here. What am I Kelly Paredes: [00:37:43] I'm on LinkedIn. Oh, yeah. Sean Tibor: [00:37:44] Kelly. Is that on LinkedIn? So you can search for her. I'm on LinkedIn as well, though. Not as well, published as Kelly is. But share some information with us. Let us know what you're thinking. Share your opinions. Tell us what you're thinking about, how to teach this. When did teach it, why did teach it? Does it have value? We'd love to hear from you. We're also looking at bringing in some new channels for us because I'm, like I like to procrastinate on more than one thing at a time. We're looking at starting a live stream for some of our video I'm recording so that you could chat with us there. We're looking at a couple of different ways that we can make our experience a little bit richer together with you, our community. I'd like to take a moment to thank all of our Patrion supporters. There's a link on the show notes. To support us on Patrion, we are bringing in bias, a cuppa or bias a coffee as another option for those of you who would like to try Kelly Paredes: [00:38:30] or a weird tea. Sean Tibor: [00:38:31] Where we are T Kelly. Enjoys her weird tea. Kelly Paredes: [00:38:34] And we are presenting@livecuriousandgobeyond.com. So that's a presentation that's on February 20th. Sean Tibor: [00:38:41] And we're going to be summarizing all the things we learned from teaching kids to code. Is that right? Kelly Paredes: [00:38:46] And we're going to try to do that in a short amount of time. So we're going to have to pick our favorites. but that's out of the international school in Monterrey, Mexico. It's Sean Tibor: [00:38:55] gotta be pretty exciting. There's a lot of great speakers there and we are lucky to be part of Kelly Paredes: [00:38:59] yeah. And it's free. I think so I will we'll post the notes on there. The link on there and hopefully you can join Sean Tibor: [00:39:04] Don't get us wrong. Even if it's free, you can still pay us. That's fine. I'll be mercenary. Send us a tip. Whatever. But we would love to have you come out and support us, let us know what you think. I think that does it for this week. Any other announcements or anything? Kelly Paredes: [00:39:18] Nope. I think that's it. I've Sean Tibor: [00:39:19] got a new library I'm checking out. That is built on the arcade library. So hopefully I'll fire that up this weekend and check it out, supposed to be even more beginner friendly than arcade, which is great. Kelly Paredes: [00:39:29] And we had a listener send us a whole bunch of cool. N L T K library projects. I can't wait to dig into Sean Tibor: [00:39:35] Yeah, I think they're all in Jupiter notebooks. Okay. So we're going to dig into those. We'll post the link to that in the show notes. So you can check it out. So lots of great stuff coming from our listeners. Please keep it coming. We're looking forward to hearing from you. So for teaching Python, this is Sean. Kelly Paredes: [00:39:47] and this is Kelly. Signing off.