Welcome to the capstone course for the computational thinking for K-12 educators specialization. Congrats, it just seems like not enough to say. You have spent a lot of time and effort in developing your skills and teaching students block based programming and hopefully your abilities to help them through the difficulties that they'll encounter as they work on projects. But there's one really, really important thing that you probably, well none of our assignments at least, you haven't been asked to do. And that's to write a program of your own to make it do whatever it is you want it to do. Now I know as a teacher that this isn't something you're going to spend a lot of your time doing but it should be something that you have your students doing very frequently because it's really important to us that students experience with programming in K-12 is that they realize that it's something that can be a tool for them. That it can solve problems that they care about and not all those problems are going to be necessarily mathematical but they can use computers to tell a story or make a movie or make a game, etc. And while we could, we have had you do some of those things, we've always given you sort of the rules and regulations around how to build that and now you get to do something all on your own that interests you. So the key to this capstone is that you're going to develop a program, must have two qualities. One, it needs to interest you. Actually that's not true, it can have one of two characteristics. It could be something that really, really interests you like maybe you want to make a public service announcement to teach kids about bullying or something like that. But it could also be something that you want it to solve a problem. Maybe you want it to, you know, calculate something for you or I don't know something else like that. But there's going to be two components that will need to happen with regards to writing this program. You won't just be writing a code and turning it in. It's important that you experience the development process in doing this. So one of the things that's cool about writing something that is particularly about something that interests you is you're going to have an idea in your head of what was it that you want. And the first time you try to program it, you're not going to do it all in one fell swoop. You might do little parts of it and see how it's going, see what things are working or not working, and this is called iterative development. And software is always iteratively developed because every time you run it, you might test it on something and be like, that isn't quite the way I wanted it to work. The other thing you're going to do besides iteratively developing your program is you're going to be asked at the end to write about it. To write about the experience of it and also write about and explain parts of your code. In particular we're going to have you be following along the guidelines provided for the advanced placement computer science principles create task, create performance task. Now you may or may not be teaching AP. If you are you're going to have a great opportunity to really get in depth with this rubric so that you'll be able to give your students much better guidance on preparation and how to prepare and have them do the create task. Even if you're not doing AP this rubric or scoring guideline as they call it, is a great, great model of something to use for an open-ended programming project where the student gets to produce something all on their own. And this one particularly focuses around algorithms and abstractions, but we'll talk about how you could modify this guideline to sort of support anything. Maybe you just had the kids learn nested if statements. We could modify this to focus on nested if statements. But they're still great components here about not just turning in the program but grading written responses that get the students thinking about their iterative program development abilities and thinking about explaining how code works, not just doing it until it kind of magically happens to do the right thing. So you should really benefit. Let me talk briefly about algorithms and abstractions, which are the key aspects. They're focused on in the AP create task. Here's two definitions of algorithms. Go ahead and take a minute to read them. Those are not identical, they're not even, I mean they're close, they're related but they're not the same. The first one comes from the advanced placement CS principles exam description and the second one comes from the K-12 CS framework. And unfortunately, this is something you're going to need to get used to if you teach computer science because we're a relatively new field and we kind of came about because computers came into existence and different people started working on them in different ways and what not. So many terms in computer science do not have one agreed-upon description by everybody. And what it is to be a computer scientist, I guess, or to feel like you're confident in understanding algorithms in this case is that both of these instructions make sense to you. You have a lot of experience with algorithms that we've shown you, that you've analyzed, that you've moved code around to create an algorithm in a particular order. Hopefully both of these descriptions make some sense to you. The key point for the AP task specifically is that an algorithm explicitly cannot be a single instruction. And the other thing is you're going to need to be able to describe what that algorithm does in English words, and I don't think either of these descriptions, definitions really get to that. So let me give you some examples. Here's something you saw recently in the most recent course. This is a block, a method that we created called paintPicture and it calls for other instructions, which are also happen to be blocks or methods that we created. This would be an example of an algorithm, we could say paintPicture, here's my algorithm. It has four instructions in it and it causes the picture to be painted with a sky first, then the sun, then the grass, then the flower, that would be a pretty good description. This is not an algorithm. This is where we call that algorithm but this is a single instruction and we said explicitly for advanced placement they were saying that's not an algorithm. Now, this is, it says go and do this but this is where we would, we're going to find out, be drawing a circle around the code here and call that our algorithm. Alright, here's another example of an algorithm that you've seen recently so looking at this, you know, it's going to reset and it looks like it's, it's playing a game. It says booting up, try to stop me with your mouse and you have to keep, it keeps moving the thing around, the sprite around, until you're touching it and it keeps moving it and gliding repeatedly. So this is a game that is sort of like a catch me game, but it's not a catching from the sky from the falling, it's like something bouncing, moving all around the screen. You have to try to move your mouse fast enough to catch it. So one of the things that has been very, very clear in the AP graders' report, the head grader report, that is after they go and they grade these performance tasks in June the head grader, they call them readers. Anyway, they're grading. They bring out a report about the things that students most commonly missed etc. And both from that, my own personal interactions with some of the head readers and teachers who've been working with us, it's really, really clear that if you engage your students in making their own block and putting all of their algorithm inside that, that makes it much easier for the grader when you say, here's my algorithm. They're like, it's in its own block. Of course it's an algorithm and it's not just the entire program. The other thing that is overlapping with algorithms but is also focused on in the AP create task is abstractions. Let's look at the definition of those. Okay, so again two different definitions, one, the top one from the advanced placement, reducing information and detail to facilitate focus on relevant content. And really the key thing is reducing information and details. I kind of like the K-12 framework one better, hiding details away. Okay. So it's a new representation of a thing that reframes a problem by hiding details irrelevant to the question at hand, that's sort of similar to facilitate focus on relevant concepts. So what is abstraction? Well, fillSky as a method creating your own block, your own method that is fillSky, that's an example of an abstraction. In this case we're hiding the abstraction is over here, fillSky. We are, the things we're hiding away are setting the pen color to turquoise, putting the pen down and fill. Now that's three instructions that don't have to be in our main program and maybe make it easier, you know, so we hid the details away from the main program, put it in the method fillSky and that allowed us in our main program to just focus on our high-level things. We're doing the sky, then the sun, then the ground, then the flower. Here's another example of an abstraction from that example. So we have paintPicture is an abstraction. And again what the head readers would say and my colleagues is if you tell your students to make their abstractions just put them in a method, make a block, make a method and put it in there. That's going to just make it so easy for the readers to give them their point for this abstraction. So the abstraction here this, we're hiding away the filling the sky, the drawing the sun, drawing grass, drawing the flower, all that paint, the different components are aspects of painting the picture away in a method called paintPicture. And then we don't have to worry about that in the main program, it's just very simple, we call paintPicture. Okay, so let's return to your goal. You're going to be developing a program on your own, you get to pick what you want to do. So maybe you've played with some things that were interesting. So I hope you create something that's either just personally interesting to you, or maybe you want to solve a particular problem and you can use your block place coding to do.