Scratch



= Scratch - The Constructivist Programming Language =


 * An Introduction to Scratch:** Scratch is a programming language that makes it easy to create interactive stories, animations, games, music, and art. As young people create and share Scratch projects, they learn important mathematical and computational ideas, while also learning to think creatively, reason systematically, and work collaboratively.

Here is a video from the creators of Scratch that introduces this tool:

media type="youtube" key="knFykmLljos" height="315" width="560"

This next video is a simple programming tutorial that gives you an idea of what it is like to program in Scratch:

media type="youtube" key="Kz8PiZ_qk7g" width="425" height="350"


 * Constructivist Approach to Teaching Programming - The Impossible Dream**

Although programmers think of computer code as building blocks to which they can create more advanced structures, the rigidity of programming languages have left many introduction programming classrooms unable to employ a constructivist approach. When traditional programming languages leave no margin for error, many teachers structure their lessons with step-by-step instructions designed to ease students through the very rigid language, but leave little room for students to discover their own understanding of computer programming. Instead, programming class turns into a series of hoops to jump through, and students are never able to express themselves creatively.


 * How Scratches Makes Constructivism Possible in Computer Science**

Scratch is completely different. Because the entire programming language exists and blocks that you can drag and drop graphically, you can immediately begin snapping blocks together and writing simple scripts without any prior knowledge. Because of the way the blocks are designed, you can put any number of blocks together without causing the computer to crash, so students can feel comfortable to just try combining blocks of code together to see what happens. As they run their creations, they are given instant feedback as the results of their scripts, and they can change them accordingly

Students can also collaborate together on projects. Creations from one scratch program can be combined with another program by importing and exporting them. And the Scratch website also hosts a sharing service, so that once you have completed your program, you can share it with the whole world.


 * An Example of a Constructivist Programming Lesson Plan**

My first lesson I teach about Scratch is based on the following workshop done at MIT:

media type="youtube" key="eQGiv53SE4k" height="315" width="420"

When I begin teaching students about Scratch, I first give them some "sandbox time" where students start experimenting with the blocks of code that cause the most obvious changes in the software environment - the animation blocks. These include motion blocks that change the position of images on the screen, the sound blocks that cause sound files to play, and the looks blocks that add special effects to the images such as warping them or changing their color. I usually give 30 minutes of sandbox time, and at the end, we get together and share what crazy creations we have discovered. At this point, students will have, on their own, discovered how most of the blocks work, but we talk about what the different blocks do just in case. Some students will have stumbled upon some advanced tricks, and I encourage them to share with the group.

After sandbox time, the next step is to give students to use the skills they learned in sandbox time to complete an animation project. I usually ask students to animate their name. Everyone has a name, so it is a good starting point. I will show students name animations from previous students to get their imaginations churning and to set some expectations. I also have loose guidelines that ask students to use a certain number of images or scripts, but there is no guidelines on what to create. That is entirely theirs to determine, which allows students to experiment with scratch on their own terms.

As students are working on their projects, I monitor the class, helping when students find a problem they cannot solve. To help, I will do my best to use guiding questions to get them to discover the answer for themselves. Sometimes I will show them a demonstration of something similar to what they are trying to do to give them some hints. Above all, I try to find students who have discovered a new technique and have them show the class what they have discovered. Not only does that make the student feel like a programming expert, but the rest of the class learns from their discovery!

Finally, I have students share their finished projects with each other. Students leave their programs running on their computer and walk around to see other students' projects. They get a chance to talk with the other students to give and receive feedback, and also to ask questions about how other students managed to implement interesting techniques.

Example Rubric To Mark These Assignments


 * How Much About Computer Science can Scratch Really Teach?**

Despite the relatively simple framework and small language size, Scratch can teach a wide variety of fundamental programming concepts and powerful programming techniques The following is a list of these concepts and techniques:


 * **Sequence:** To create a program in Scratch, you need to think systematically about the order of steps.
 * **Iteration (looping):** forever and repeat can be used for iteration (repeating a series of instructions)
 * **Conditional Statements:** if and if-else check for a condition.
 * **Variables:** The variable blocks allow you to create variables and use them in a program. The variables can store numbers or strings. Scratch supports both global and object-specific variables.
 * **Lists (arrays)** The list blocks allow for storing and accessing a list of numbers and strings. This kind of data structure can be considered a “dynamic array.”
 * **Event Handling:** when key pressed and when sprite clicked are examples of event handling – responding to events triggered by the user or another part of the program.
 * **Threads (parallel execution):** Launching two stacks at the same time creates two independent threads that execute in parallel.
 * **Coordination and Synchronization**: broadcast and when I receive can coordinate the actions of multiple sprites. Using broadcast and wait allows synchronization.
 * **Keyboard input:** ask and wait prompts users to type. answer stores the keyboard input.
 * **Random numbers:** pick random selects random integers within a given range.
 * **Boolean logic:** and, or, not are examples of boolean logic.
 * **Dynamic interaction** mouse_x, mouse_y, and loudness can be used as dynamic input for real-time interaction
 * **User interface design** You can design interactive user interfaces in Scratch – for example, using clickable sprites to create buttons.


 * Resources**


 * The Scratch Homepage: Download the scratch programming language for any platform, and share your programs with the world!
 * Scratch Resources: Find sprites, sound effects, animations, and other goodies to put into your projects.
 * LearnScratch.org: This website has a series of video tutorials that teach various topics on the programming language.
 * ScratchED: An online community of educators who use Scratch. This site is a fantastic place for asking questions, getting resources, and getting ideas for your own classroom.