So, why should you teach programming with Parsons' Problems? We're going to look back again at cognitive load and this idea of all the things that our brain needs to do when we're programming to see why this is the case. Secondly, I'll do a small caveat or warning here, although we don't know any negative impacts on people doing Parsons' Problems, but the concept of Parsons' Problems as a process for learning is really just been looked at in the last two to three years. Although, a very recent PhD thesis out of Georgia Tech and looked at it in more depth. But particularly, with regards to Parsons' Problems and block-based languages and studies of students in K12, we don't have them there, but this is one of those cases where the theory just makes so much sense that I think, well, I'm happy to recommend it. That's obviously true since I'm choosing to teach this course using a lot of Parsons' Problems or didn't I say that yet? You've been doing them already. So, coding is a very high cognitive load activity. You mean you've got to figure out there's this thing, I want it to have it happen, there are these very restricted set of instructions that the computer can do and I have to give specific values to them like how much of this percent, how many degrees should this turn. I have to figure out how they fit, the instructions go together, and use these concepts like repeat or maybe even events, et cetera to figure out how to make the program make the outcome that I have in my head. We've seen a little bit how block-based languages can help. Let's review that. So, block-based languages compared to languages like Java or Python where you have a blank white screen and you have to actually type in all of the letters to build up the instruction instead, benefit us in three ways. First, rather than having to type in the instructions, I just recall them out of our head, what are the various possible instructions I can give the computer. We instead have this palette of possible instructions and we just have to recognize the instruction that we want, not actually come up with it out of our head. Secondly, these block structures should allow us to chunk computational patterns to indicate that a repeat has instructions that maybe go in it so that they get repeated and we'll see others as they go along. Then finally, the use of the blocks allows us to reduce syntax errors in particular in that we don't have these miscellaneous characters, there's very minimal typing that you change, as long as you change the number 10 to another number, is not quite as bad. But when you have Python and you're typing every single character, there's many more chances for errors. All right. So, let's focus in on one thing because this is actually where Parsons' Problems are going to allow us to go even more deeply into reducing the cognitive load for real novice learning of programming concept, and that's with recognition instead of recall. See, even with the recognition, there's still a lot of instructions that I might need to look at, and if I am just, just learning the basics of programming, then this may be an overwhelming list to look at. So, this is the idea behind Dale Parsons, by the way, this Parsons' Problems were named after a real person. This woman, Dale Parsons, and she lives in New Zealand and specifically in Otago and she, this is many years ago now, I think at least 15, she originally thought, "You know what, my students are being overwhelmed with the amount of different things that they need to remember and do altogether to practice programming in an efficient way." So, she came up with these as interactive online exercises that her students can do that they could get more of them done, and hopefully, just focus in on the concept, not so much of all the other things that have to happen when programming. But that brings up a good question. What are all the things that one needs to do, even just in a block-based languages, when you're writing a program? Right. I think all of those are necessary when you're creating a program. So, again, we were talking about even just adding the next instruction to a block-based program. First, you have to identify and drag out the instruction that you need, and as we saw, there could be an overwhelming list. You have to connect it under the appropriate instruction that it follows, and most of the time, maybe that's easy. But maybe if you've been coding in pieces, it's not necessarily a given. You might have to change that instruction. Maybe you didn't want to repeat 10 times and that's the default that comes there. Maybe you wanted to repeat four times. So, oftentimes, you'll see these white areas on snap instructions and that's a place where you can type or change a value. That can be a number, it could be text, other things. You have to decide if any instructions go in the construct like in the repeat or around it. You have to decide if the instructions come after it. Then, of course, when something takes the most amount of time, you have to test the program to see if that next instruction did what you wanted it to do. So, how can Parsons' Problems help us in reducing maybe some of these steps and to reduce the cognitive load of creating a program? Well, here's what they look like, just as a reminder. So, you've seen these, but the idea is that you're in this snap environment. There are already a series of instructions that are pulled out and made available to you. In this case, this was supposed to be code that would draw a square. But obviously, right now, the only thing that happens when the green arrow is clicked is that our reset method is called. So, how does the load differ for this? So, I think there are two ways in which Parsons' Problems reduce the cognitive load or the number of steps even that we need to take to do a program. The first one is really, really important. It totally removes that being overwhelmed by all of the instructions that you will see listed when you click on a particular palette option and just giving out instruction you need right away. That's really important with novices, and programming is often considered to be very overwhelming by students and I think having all of the things that you need already available for you and you just choose among them is really important. Secondly, that instruction that's dragged out already, we've put the correct number or maybe something else in any of the white areas of the instructions that can be changed. That I think is also a really good way to get people started. But you could imagine a Parsons' Problem where maybe you provided students stuff with zeroed out white areas and they will have to think about that. But there are still a number of activities that need to go on that will cause some cognitive load but maybe you can see, it's a little bit smaller, right? It's a little bit less of a cognitive load. So, particularly, I think this removes the needle in the haystack problem for finding the thing that you want and then this constant potential for iteration where the student puts in the number four, maybe repeat four times, or might wanting to repeat five times, et cetera. Again, since they're usually trying to match a video, for example, of a behavior they're trying to make happen, this can be a challenging thing to really nail down. So, really, what I think are the two big benefits that come from removing these two steps is a great reduction in the amount of time needed to complete a program, okay? Our students want gratification, we all want instant gratification. If I can lose two pounds like in the next hour by doing something, I'd probably do it. But so students will often feel like they have to work a long time on a program before they get a final result that's what they want. With Parsons' Problems, you can have that time reduced dramatically. Secondly, of the steps that remain, most of these are really focused around the construction activity which I think is really important in getting students to focus on and understand the concepts that we're covering. Is it repeating or is it doing it until something, and so that really gets them figuring about this ordering of things in the construct and whether what order the instructions come in. Honestly, it gives them more time to focus on the debugging process which is an incredibly useful skill. So, I think the key benefits of teaching programming using Parsons' Problems in a development environment like we have you do it at the beginning of every new concept, is that you get a lot more practice in a lot less time because you can just finish more programs much faster by losing that hunt and peck needle in the haystack, et cetera. It really focuses you on ordering and placement of instructions which is really core to understanding the core concepts and by combining both of those, I think it's possible that we can even expose students to patterns around how say repeats work, et cetera. So, finally, if I had to put the whole big takeaway of all of this into some images, then I guess I would say that creating a program, even in a block-based language without the Parsons' Problems, is more like being sort of a professional-ish carpenter where you've got to find the materials that you need, do I need this wood or do I need that wood, do I need a hammer or do I need a screwdriver, and you've got to identify those things and maybe you've got to modify them a little bit, change the numbers on them, change the length or whatnot, and to see how this is all going to fit together, and maybe the Parsons' Problem version is a little bit more like IKEA instructions. All the pieces come in the right shape and size and they're pre-drilled with everything you need and you're given just the screws that you need and just the, I don't remember what those, their equivalent of this sort of tightening things. So, just the very pieces that you need and some, well, they give you explicit instructions, but just the things that you need to build what you need to build. So, that's going to allow you to of, course, produce more furniture far more quickly and efficiently if that's your goal.