Hello,
I've been using Scratch since it was on the BBC news website and trying it out as a teaching tool - as both a native programming tool and using it to produce simple simulations.
One enhancement that would make programming a lot easier for children would be to automagically bounce off another sprite
e.g
in Pong, the ball bounces easily off the sides but the programmer had to use complicated syntax to make it bounce off the paddle.
Additionally I like to see a message being sent automagically between 2 sprites if touching so that script actions in each sprite can be easily synchronised
e.g a ball is moving around the screen and when it touches another sprite- each sprite sends each other (and no other sprites) a "your touching me" type message.
I think these additions would make it a lot easier for young minds to implement ideas themselves without having to be shown and understand additional workarounds and coding.
regards
Simon
PS Is there a date in the offing for the next release?
Offline
"Automagic" blocks are not a good addition to the language. I even feel that the "if on edge, bounce" is bad pedagogy, because it is not easily generalizable.
It is far better to do what the Scratch team is now doing: providing small projects and snippets of code in sprites that students can read and understand.
Bouncing off a paddle is complicated only because the desired action is complicated---there is usually a random component to the bounce desired.
Having a broadcast when two sprites touch is an easy snippet to write,
but there are different variants with different effects. Rather than choosing one of the variants, isn't it better to teach the kids the fundamental blocks and let them make up their own variant? Here are some variants for the broadcast when touching snippet:
forever if touching sprite2
broadcast touch12
wait 0.1 sec
forever if touching sprite2
broadcast-and-wait touch12
forever if touching sprite2
broadcast touch12
wait until not touching sprite2
Still other variants are possible.
Offline
To build on Kevin's response, we actually got rid of "if on edge bounce" in one version of Scratch, because we also saw it as a bit of a programming dead end (if you want something else to happen on the edge, then you need to build the code using individual blocks: e.g., forever if <touching edge> ...).
However, some of our student beta testers were very vocal about wanting "if on edge bounce" back. Also, we recognized it is one of the actions people want to early on, so perhaps it was okay to make an exception.
I think this is a good example of the balance between making Scratch easy to use but also making it an extensible programming language--that you can use in many different ways and learn important ideas in the process.
Natalie
Offline
Its interesting to see other peoples points of view.
I work with primary school age children in the UK and am using it with 9-11 year old children.
To me, it is the ease of use of Scratch that makes it so great. To me it is full of "automagic" blocks.
Move itself alllows animation without the use of incrementing x and y object values. You just say move and off it goes :-)
Then there are, touching, glide, point towards, say, etc, etc (as well as if on edge, bounce :-)
I want to be able to easily hook the kids into using it, witout having to say, at an early stage "Sorry, I'll need to show you how to use variables" to do that.
(Its tricky enough having 30 children on 15 wireless laptops without having to run a computer science 101 equivalent lesson! :-)
Other people have asked for trig functions, string parsing, file I/O - I can get these in many other languages - I see Scratch as the LEGO (tm) of programming - e.g. you CAN build anything you want to but I'd like a few more pre-assembled blocks please :-)
My final bit of evidence is
some of our STUDENT beta testers were very vocal about wanting "if on edge bounce" back. Also, we recognized it is one of the actions people want to early on,
Give the customer what they want - ignore the grown-ups :-)
regards
Simon
Offline
Some of the kids on the forum have been asking for pretty advanced features, so I'm not sure that age will tell you who to listen to.
There are a lot of people who feel that Lego lost their way when they started making highly specialized kits and parts that were only good for one model. The debate is here is more about Lego bricks vs. Lego Technics. The bricks are very easy to use, but somewhat limiting in scope, which the Technic pieces are more versatile but require a more sophisticated user.
The "pre-assembled blocks" are now being supplied as sprites with pre-written scripts.
This provides the ease of use you are seeking, but allows kids to look under the hood and tinker with the code.
Perhaps what is needed for your kids is a larger collection of pre-built sprites, or a collection of scripts that can be easily copied into sprites. I think this will serve them better in the long run than adding a bunch more blocks to Scratch.
Offline
This thread has given me pause to think about perhaps another way of doing a "subroutine" that could be done "the Scratch Way(tm)".
For "commonly" used blocks like "if on edge, bounce" perhaps ought to be written as a sort of "function library" of common blocks that can be customized or expanded upon in the user interface. And have them appear in their own section (aka "motion", "looks", "sound".... and have a new section called "custom") where kids can use these blocks in their projects but instructors or advanced users can add new blocks to this list. They can also be loaded from external files like is currently done with sprites.
In terms of a classroom setting, the functions could be put into a common sub-folder from the main Scratch folder that could in turn be write protected if you want to keep the kids from adding function names with obscene words. Perhaps two folders in this sort of situation would be useful in terms of having a group of blocks that can be shared in a classroom setting (in a networked server situation where the Scratch folders are on a network resource) and something found on the "local" hard drive as well for the individual student.
I know the idea of functions/procedures has been discussed before, but blocks like "if on edge, bounce" would be a a very good idea of something already preloaded, but has the "code" behind it to demonstrate how it works for advanced users. And it reinforces the idea that blocks are something that somebody came up with, and can be customized. Functions should not be something very different in terms of appearance from the rest of the Scratch blocks.
Offline
I like this idea! Having "if on edge, bounce" be a user-defined block from a standard library is an excellent compromise between minimality of blocks and ease of getting something simple done quickly.
When scratch adds user-created blocks, it would be a very good idea to move things that are not fundamental operations into libraries. Of course, there would need to be ways to create three types of blocks:
1) straight-line blocks that execute once, with one or two windows for parameters.
2) function blocks that return a value and can be used in places where expressions are expected. (This would require a new "return value" block.)
3) control blocks that wrap around a chunk of code. Note that then weird blocks like forever-if could be moved to the library
forever if <expr>
<body>
is defined as
forever
wait <expr>
<body>
...
Offline
sounds like a great idea. would that mean if i frequently used a similar scripts (in different projects) i could save it to bring up easily when ever needed.
Offline
one idea i had was a way to compress scripts. for example if you have a script with a very big 'if' or 'repeat' section it may be useful to be able to compress this to see other parts of the script more easily. (i think lego mindstorms has a similar idea)
it would also be good if (like the sprite gallery) there was somewhere in scratch (the program not website) where useful scripts could be taken. building on this idea it would be good if a user could save scripts he/she regually uses to open in any project.
Offline
For creating new blocks, there could be a "create-a-new-block" option on the sprite selector panel, and new blocks could be treated a lot like sprites.
Initially, I would recommend that new blocks be given a choice of only 2 flavors:
straight-through block
control block (which surrounds a chunk of code)
but later additions may make more choices available.
and be given a choice of 1 or 2 parameters, with the following types:
boolean (better call it true/false)
number
message
sprite-name
when the parameter types are chosen, then the parameters appear as blocks (or in the pulldown list for messages or sprites) . Perhaps they could all be colored pink, to represent their special status as parameters.
For loop blocks, a special block would be needed to represent the body of the loop.
A defined block would be allowed only one script, and a control block should use the special <body of code> block (possibly more than once).
One useful feature would be to be able to define variables "for this sprite only" in the defined blocks.
Offline
@Kevin
Stuff sounds good - could you knock up some pictures (in Scratch type blocks) of some examples of what you suggesting?
regards
Simon
Offline
The machine I'm on now does not have Scratch installed (a Linux box with a broken sound system, so there wouldn't be much point), but I might be able to put something together tomorrow.
What specifically, are you looking for?
Offline
SimpleScratch wrote:
One enhancement that would make programming a lot easier for children would be to automagically bounce off another sprite
Or to generalize this, could "bounce" be a motion block by itself? Then I could write a script "if sprite1 touching sprite2 bounce" or "if touching color blue bounce". I wanted to do the latter in my sons' "nanobot attacks virus" project ( http://scratch.mit.edu/projects/tommyturtle/19517 ), i.e. make it simple to keep the virus bouncing around in the artery.
Offline
"bounce" is not a really well-defined concept.
Bouncing off an edge makes some sense, as one can look at the move that cause the x or y value to cross the edge and negate the x or y component of that movement.
Bouncing off other objects is much more complex, though often similar special cases can be worked out. What does it mean to "bounce" when touching blue? Does it mean the same thing if the blue is part of the background as it does if the blue is part of a bullet?
This is why I like the idea of being able to define one's own blocks and put them in a library. If you have a clear idea what "bounce" should mean, then you could create the block you want.
Offline
You need to get down to our level to understand our need here :-)
"bounce" is not a really well-defined concept.
O it is - if you hit something - bounce - what more explanation is needed :-)
Bouncing off an edge makes some sense, as one can look at the move that cause the x or y value to cross the edge and negate the x or y component of that movement.
There you go again - making things complicated - just bounce! :-)
Bouncing off other objects is much more complex, though often similar special cases can be worked out. What does it mean to "bounce" when touching blue? Does it mean the same thing if the blue is part of the background as it does if the blue is part of a bullet?
Same as with any other "if touching colour" commands - its up to coder to decide that to check for.
This is why I like the idea of being able to define one's own blocks and put them in a library. If you have a clear idea what "bounce" should mean, then you could create the block you want.
I'd lile to do this as well (but just really for me - not for my 8-11 year olds)
The thing with bounce is - its SUCH a great function for youngsters to understand and it could let them do such great things (IMHO) if it was freely available and not just restricted to one block.
Its a bit like having "if touching red" but not having "if touching blue" :-) (That last bit is a bit of exaggeration but should give an idea of passion/need for this extension)
regards
Simon
Offline
Simon, I disagree that "bounce" is an obvious or well-defined concept. Doing a bouncing ball requires a fairly sophisticated scratch program (see, for example,
http://scratch.mit.edu/projects/calculus/2200
).
Bouncing off a horizontal or vertical line can be made fairly simple, but there are also fancier implementations that involve momentum transfer, friction, or gravity. Bouncing off a circle is quite different from bouncing off a straight line.
I really like the idea of libraries of blocks, and I see nothing wrong with having a crude "bounce" operation in such a library. I think you might find it difficult to write a general-purpose bounce code that would work in many situations though.
Offline
Your just thinking too much. :-)
Come down and enjoy the mud :-)
At our level - yes - how the bounce works is important. I (that is me as programmer who saw Pascal take over from Algol 68) want options for bounce - straight bounce (180 return) - reflect (like what the current command does at the edge) etc etc
At kids level - just let the Scratch team decide what "bounce" does (reflect probably as consistent with current edge bounce - but its up to them)
The kids will then decide if "bounce" is useful or not - maybe the Scratch team will just implement "turn opposite direction" - it would still be quite useful.
Feel free to ignore "bounce" if it arrives :-)
I'll still support your in your drive for user definable code :-)
regards
Simon
Offline
Very informative to hear the discussion on both sides.
And the specific suggestions for the define your own blocks for a library are really helpful!
Kevin wrote: "For creating new blocks, there could be a 'create-a-new-block' option on the sprite selector panel, and new blocks could be treated a lot like sprites."
To clarify--by "sprite selector panel" do you mean the sprite list in the bottom right corner of the screen?
Any additional visions or requests for the build your own block/library would be very helpful to hear.
Offline
Check out this project it's really helpful - http://scratch.mit.edu/projects/oliversb/1765356
It teaches you how to make the if on edge, bounce block but you can change what it's touching to make it bounce.
Offline
Meowza: Look at the time of the above post before you bump or post.
Offline