Anyoone have any tips for how to reduce what I call the "fake fart factor" (FFF) when introducing Scratch to students who may not be very mature or used to working independantly on projects? By FFF, I mean not only students who immediately discover the "record new sound" option and spend the rest of the class recording and playing said bodily noises, but also kids who spend a whole class scribbling in the paint editor, importing 75 different random sprites, etc., then quit in frustration because Scratch is "too hard".
As a bit of background, I teach computers to 4th-8th graders in a high-risk/high poverty school in Chicago. Many of my students have low or no reading skills, limited English, behavior and attention disorders, etc. I guess I'm diving into the deep end of the pool a bit by introducing Scratch to all of my classrooms at once, but hey, we're having fun, for the most part...
I guess the big question here is how to provide scaffolding for the students who need it while at the same time preserving the experimentation / play / constructivist learning principles which make programs like Scratch so attractive in the first place. Thoughts, anyone?
Offline
I have been teaching an after-school class for 2nd to 4th graders. My approach has been to give them some basic programs to start. I make them enter in the basic part of the program and we discuss why it works. Then, I let them modify it. Some of that time is just messing with the drawing editor and the sounds and that is OK. But, I also encourage them to add new capabilities. I note that teams of 3 work best because they tend to help each other and also tend to stay on track. The approach I used was:
1. 1st day: no computer, just go through terms and ideas and how to think like a programmer. I find this helps a lot. I use a cutout of mario and a grid to with obstacles. This helps them understand the difference between look-and-decide (what a player would do), pre-arrange (animation), and conditional based decisions (such as always turn left when possible, etc). By introducing control, loops, conditions, variables, you really help them learn to think this way. I tell them to use the next few days to think about any task they are given (such as brushing teeth) and to divide it up into parts and conditions and loops.
2. Next day, I give them a simple animation example with scratch. The 1st step is a repeat loop with turn 45 deg and move 50 steps. This is to get them to think about control and loops. It goes way too fast. So, they then, modify to add wait(0.5) to make it reasonable. Again, it emphasizes the steps of programming. Finally, next-costume and a change to the "hat" (to if-space-key). I do this so they learn how to use Scratch. I then let them play with what it looks like, add sound, add more sprites, etc. They need to "own" it.
3. Next time, I move them to a ball chase game (one sprite is chasing the controllable one). This allows use of key motion, random, conditions, variables (hit counter), collision, etc. They love this because they can play. But, I let them then add a second ball for them to chase. They add new variables and all. Some guidance may be needed, but they usually do this just fine. The more advanced ones will change it to a two player game. Again, customizing is fine, just keep them focused. If you tell them that they are to show the rest of the class what they have done, they are more likely to work on it rather than playing with sound recording.
4. After that, I move to a ball firing "cannon" shooting the dragon. This allows broadcast and receive and emphasizes object oriented concepts. If done right, they can clone the dragon (and change its look) as many times as they like. The hit and miss counters will still work, etc. I leave a few bugs in like not initializing the hit counter. They "discover" this (or I point it out if needed) and then we work out how to resolve it.
5. Finally, I challenge each team to outline a new game they want to do. This then can be reviewed. I work with them to cut the 1st version down to a manageable size and work out how they could add to it incrementally. This is a crucial step in programming: learning to balance ambitions with what is achievable and learning to build in a more modular way. Scratch is not perfect for this due to the lack of "by reference" scripting (so copies become different if you change one), but it is still viable with some care.
My experience is that if they are getting cool playable results each time, they are more likely to focus on it. Good luck.
Last edited by pkimelma (2007-04-21 00:54:07)
Offline
Hi from Morocco,
I use Scratch too in my noisy classroom.
The best way to occupy them is producing a story. fist, begin by choosing a theme, then caracters, places and finally events. All this done without touching computers.
Then introduce Scratch, its sprites list... and create the first scene of the story : Where ? (use stage, backrounds..), who (sprites and their costumes if any) should appear (show & hide blocks). Passing to the next scene will introduce more blocks (wait ...). And so on.
It's exciting enough to make your class noisy but in the right direction.
P.S. please note that english is my second foreign language, i'm not so fluent to express all the ideas i got. Keep going anyway we both have to face the same difficulties even if we are not in the same country.
Offline
Thanks for the tips - pkimelma, do you have the sample projects that you mentioned posted anywhere on the Scratch projects page? The ball chase game sounds like it would be especially useful for the students I'm teaching.
As somebody with a background in painting, not programming, I'm always interested in seeing how a project is "really" done (as opposed to me guessing around and faking it a bit...)
Offline
I have not actually posted any of them to Scratch. I suppose I should learn how.
In any case, you can just get them off my web site. I also have a .pdf file which guides them through the steps along with comments on what different parts are for - that is especially important since Scratch (sadly) lacks inline comments. That pdf has a race car game and the ball chase (I can give you the .doc if you want). I then challenge them to make the chase into a two player game or add other changes as they see fit. You can pull these as:
http://www.nikoosha.com/scratch/scratch_car_and_chase.pdf
for the pdf file. The sb files are all in the same place and are called:
chase.sb, chase_better.sb -- these are the 1st and 2nd forms
car.sb, car_timeout.sb, car_demo.sb -- racecar variants
cannon_multi.sb -- object oriented model. Cannot shoots dragon and bat. You can
make clones of dragon and bat and it works fine. I then get them
to make two player (dragon drops burning eggs for example),
and/or make other changes of interest.
cannon_demo.sb -- same as above except it allows automated mode (when you press
"d"). The idea is to help frame the idea of partitioning, use of
initialization, etc. Helps start thinking about functions.
Note that with all of these, they can customize to their hearts content. As I say, I let them do some artistic customization, but I also encourage programmatic customization, which is the real goal.
As I said, I have tried to get them to only use multiple scripts per sprite when they are function like and not thread like. That is, I note a number of people have created crazy projects with many simultaneous scripts running at once for the same sprite. This is a debugging nightmare and not a good practice for software (since not enough synch and mutex primitives). But, message style "functions" work well to learn to partition rather than repeat.
Offline
I agree that mutual exclusion is hard in scratch, but I have found it very useful to have multiple scripts running at once on a sprite---as long as they are doing different things.
For example, it is very useful to separate the sounds and looks from the motions, so you can have a sprite glide across the screen while alternately changing costume to walk.
Offline
Hi Kevin. I agree that this is often the only way to have concurrent actions. My concern is that this is teaching a method which is not portable to other languages. In general, other than music, I have tried to emphasize serial actions only because it teaches a method that will be used no matter what they go to. For example, walking can be taught using costume changes via next or a variable, and use of delay to control time. This coordinated with the chosen movements gives the same effect. It is slightly harder, but far more controlled.
However, it is up to what goals you have for the kids longer term. I admit that I have been treating Scratch as gateway language, rather than an endpoint.
Offline
Since scratch has so few features, it is important to make the best use of the ones it has.
I believe that multi-threading is perhaps the most important feature of scratch, and encourage students to do multi-threaded code to modularize and simplify things.
Debugging multi-threaded code that lacks semaphores, atomic actions, or other mutual exclusion primitives is tough, but it is good practice for the future---better preparation (I think) than coming up with serial simulations of inherently parallel actions.
Offline
I understand your point, and I think use of Broadcast/wait as a call primitive is a good solution to some of what you are talking about (which is why I am concerned that wait does not seem to work for a broadcast/wait within a Sprite). But, use of threading without synch or exclusion leads to very hard to debug problems. This is not an issue for the simplest little apps, but becomes much worse as the complexity goes up (especially as there is no single step and no control of the speed of the stepping mode).
Learning to debug problems is something they need to do as early as possible; kids will tend to give up quickly if not shown techniques to understand the problem and find the cause. I find that code walking a threaded app is much harder for most people, since they cannot keep track of simultaneous actions in their head easily. Further, unless fully independent, time races are unlikely to be caught by hand walking the code, since they would not try all paced combinations.
I agree that its threaded nature is great, but the fact that each Sprite is a separate thread (lightweight process) already is showing that, including proper isolation. This teaches what would normally be advanced concepts: messaging, synchronization & rendezvous, object orientation, locality, event programming (interrupts in embedded apps like robots), etc. So, that is good stuff. But, uncontrolled local threading teaches bad habits, in my view anyway.
Offline
Hi from Mexico,
I teach computing to 1st through 6th grade , my groups are quite full (30-37 kids). My little helper is a program called synchron-eyes, I can guide them as how to start and show them little by little how to add new sprites and scripts into the program.
With some of the groups I've experimented by starting a program from scratch, but with others I make them open one from the gallery and adapt it to a new topic. Then as the project flows, some might need more help, ex. ... if they want to change the place where the sprite will appear or what they believe it has to do.
We had been working with Drape (drawing programming environment) and Logo. So for them using Scratch was easier since they need not worry about syntaxis.
Take a look at my gallery and you'll see what I mean. The projects are alike but unique at the same time.
Good luck.
Offline
If you want them to stop recording farts remove the microphones
Offline