Professor David Malan at Harvard teaches Scratch in Harvard's introduction to computer science course. He has made his homework assignment publicly available on the web.
The assignment itself is 7 pages long. However, most of it involves logging in and downloading scratch.
You can view the assignment itself here.
http://www.kidslike.info/harvard_professor_malans_problem_set_for_teaching_programming_with_scratch/children_educational
Last edited by teachcomputers (2008-08-04 16:58:07)
Offline
I like this part: "Your project must have at least two sprites, none of which may be a cat."
I disagree with the stated opinion that this (the simple assignment described in the article) is all that Scratch has to offer. Scratch as it is right now can be used in quite complex ways. With the release of 1.3 this summer and the expected addition of Lists, the class of problems that can be addressed increases in complexity considerably. My current project with the beta involves building a heirarchial data structure editing tool using linked lists and stacks. I'm also working on a library of matrix operations.
Offline
Hi Paddle2See
thanks for your feedback.
1.3 sounds great.
Can you provide an example of how Prof. Malan might modify his project assignment after the release of 1.3? How might he convey it to the students?
When will the new version be out?
Is the official position still that functions and parameter passing is not part of the roadmap?
Last edited by teachcomputers (2008-08-04 18:26:59)
Offline
teachcomputers wrote:
Hi Paddle2See
thanks for your feedback.
1.3 sounds great.
Can you provide an example of how Prof. Malan might modify his project assignment after the release of 1.3? How might he convey it to the students?
When will the new version be out?
Is the official position still that functions and parameter passing is not part of the roadmap?
In my opinion, perhaps more than anything else, the lack of functions, parameter passing, and return values is the thing that disqualifies Scratch as a serious teaching environment beyond about the eighth grade. That is far more important than the lack of lists. Probably next in the line of serious deficiencies is the lack of different types including at least integers, floats, strings, and booleans.
Offline
You can implement a lot of the functionality that you might use functions for by using the Broadcast block and the When I Receive block. By placing "When I Receive" on the stage, you can create global functions. By placing "When I Receive" on a sprite, you can create local methods for the object.
You can do just about anything you could do with conventional functions in this way. Adding functions would be about removing redundancy and teaching conventional coding paradigms more than it would be about giving the tool additional power.
Arrays aka Lists are more important, because without the ability to store data beyond what you conceive when you write the program, you're rather sharply limited in what you can do with the tool.
If the time does come to implement functions, types and return values, how would you go about making these concepts simple enough for a young child to learn them without getting frustrated and giving up?
Offline
teachcomputers wrote:
....
Can you provide an example of how Prof. Malan might modify his project assignment after the release of 1.3? How might he convey it to the students?
When will the new version be out?
Is the official position still that functions and parameter passing is not part of the roadmap?
I'm not sure Prof. Malan needs to modify his project assignment...he is teaching a first time programmer's course and is only using Scratch as an introduction to more advanced languages. My disagreement was with the reviewer's evaluation that Scratch was limited to that type of role.
The new version, last I heard, will be out later this summer.
I can not speak to the official roadmap. There was talk at the Scratch Conference that "Build your own block" capability - which sounds a lot like functions to me - is in active development and may become part of Scratch in the not-too-distant future.
Offline
Paddle2see,
That's great news!
Not that Prof. Malan needs to modify his assignment. Will the Scratch team be providing a lesson plan based on the new capabilities?
Offline
irfoote wrote:
You can implement a lot of the functionality that you might use functions for by using the Broadcast block and the When I Receive block. By placing "When I Receive" on the stage, you can create global functions. By placing "When I Receive" on a sprite, you can create local methods for the object.
You can do just about anything you could do with conventional functions in this way. Adding functions would be about removing redundancy and teaching conventional coding paradigms more than it would be about giving the tool additional power.
As an educator, my objective would be about "removing redundancy" and teaching conventional paradigms, so I don't see that as a bad thing. For "more power", students should learn what they can from Scratch and then move on to more powerful languages such as Alice, Smalltalk, Java, C++, C#, Panda3D, Java3D, etc. Scratch should be viewed as simply an enjoyable interlude for beginning programmers before they move on to bigger and better things and should not be viewed as an end it itself. (Like it or not, C++ combined with various scripting languages is the programming language most commonly used for game programming.)
Most importantly, Scratch should not teach the wrong way to do thing and form bad habits that are difficult to break later. Except for writing books, teaching in educational institutions, and working on government grants, a student will never earn a living programming in Scratch.
irfoote wrote:
Arrays aka Lists are more important, because without the ability to store data beyond what you conceive when you write the program, you're rather sharply limited in what you can do with the tool.
As an educator, I would place arrays about third on the deficiency list after functions and types, and slightly ahead of a natural progression path out of Scratch and into a serious programming language such as Smalltalk.
irfoote wrote:
If the time does come to implement functions, types and return values, how would you go about making these concepts simple enough for a young child to learn them without getting frustrated and giving up?
I would probably copy the way that it is done in Alice. While not particularly simple, that is certainly simpler than hacking together "broadcast", "when I receive", and variables to work around the lack of functions.
Last edited by dbal (2008-08-06 10:23:30)
Offline
I concur with Paddle2See's disagreement about the alleged "low ceiling" of Scratch. Just looking at a few of his projects - or browsing through the channels on the front page - reveals a far greater variety of astonishingly complex and advanced programming projects.
Also, at the Conference there was a very thought-provoking session in which Brian Harvey demonstrated how broadcasting a string-variable contained in a list could be used to effectively simulate a function call.
While Scratch currently may be used primarily as a toy-language luring kids into programming and easing students along to the "real" and hard stuff, consider its potential: What if I could access the features of my OS-shell, word processor, data-base, spread sheet, web-browser, e-mail client, image-editing software etc. using Scratch scripts consisting of just a few carefully crafted very powerful blocks?
Turning kids into computer scientists may be one legitimate goal. Inventing systems which let you express yourself creatively without having to major in CS first may be another
Offline
Jens wrote:
... While Scratch currently may be used primarily as a toy-language luring kids into programming and easing students along to the "real" and hard stuff, ...
Jens, that is quite an admission, and coming from one of the world's experts in Scratch programming, it carries a lot of weight.
That is also a very worthwhile goal, provided that everyone involved understands that is the goal and they don't get confused with thinking that Scratch is a "serious programming language" or a "real teaching language." Unfortunately, most of the hundreds of published articles on Scratch fail to make that distinction, and I suspect that most of the kids that are involved, and perhaps most importantly, most of the parents of those kids don't understand that distinction as well. After all, if it has MIT on the nameplate, we expect it to be technically superior. MIT needs to make that distinction clear to everyone involved - kids, teachers, parents, article writers, etc. Unfortunately, in this case, in my opinion as a long-time computer science educator, Scratch is a technically superior "toy-language luring kids into programming and easing students along to the "real" and hard stuff" --- and very few people understand that distinction.
Jens wrote:
...consider its potential: What if I could access the features of my OS-shell, word processor, data-base, spread sheet, web-browser, e-mail client, image-editing software etc. using Scratch scripts consisting of just a few carefully crafted very powerful blocks?
Turning kids into computer scientists may be one legitimate goal. Inventing systems which let you express yourself creatively without having to major in CS first may be another
That is also a very worthwhile goal, but it sounds to me like a completely different project aimed at a completely different target audience.
Offline
Jens wrote:
Umm, I was actually being ironic with the "toy-language" remark...
Oops, sorry about that.
For awhile there, I thought you had experienced an epiphany
Offline
Cool discussion.
I'm not an educator or a computer programmer, so I'm sort of out of place on this thread, but re my $0.02 I know a lot of successful programmers who caught the "bug" using basic on a trs-80 or apple IIe, and somehow these people were able to overcome the hegemony of the goto statement to learn about encapsulation, etc. without much trouble. In that regard, compared with basic circa 1981, Scratch is amazing. There are some fairly complex projects on Scratch right now, many of which are by Jens and Paddle2See. With v1.3 things will only get better.
My personal theory is that a language that interpolates between Scratch and Processing might be the best way for kids to move on more advanced languages, but that's a separate discussion (and based on my meager three days of using Processing to couple Scratch to an Arduino board). Maybe it's Alice, which looks pretty impressive. I don't know.
Nevertheless, I'm pretty confident that, in a few years when we're in our rocking chairs shaking our canes at the future and the fact that Scratch remains non-strongly-typed, the Slashdot threads will be populated by serious programmers sentimentally looking back at their first Scratch projects and how mletreat and andresmh gave them a "love it"
Last edited by chalkmarrow (2008-08-07 01:39:16)
Offline
Hehe! Honestly Dick, I am very curious about your epiphanic experiences in coding C! Now, I don't want to get into a discussion about the merits of one programming language over another, but I do cringe when you indicate that kids might take on "bad habits" from Scatch which are "hard to break" later, or that students might "get stuck scratching". I myself don't educate children, but I get the impression that the kids on this website not only find out about fundamental programming concepts such as conditions, loops, threads, events etc., but also get first-hand experience in analyzing, designing, debugging, deploying, discussing and reiterating over their projects. In other words, kids (and I guess some of us old warriors, too) get exposed to activities while Scratching which are usually in the realm of teachers, professors, managers or designers. It's not just about coding, is what I'm trying to say...
Another thing I'm doubtful about is suggesting that programming in Scratch isn't for "real". I'm more of a musical guy than a techie and I actually like to compare programming to making music. I studied the violin myself and I can tell you it is a very hard musical instrument, because it doesn't have frets and therefore it takes a lot of practice to just get a clean and precisely pitched tone out of it. There are, of course, other musical instruments, like the guitar, the piano, the recorder or the harmonica which don't have that constraint. Does that mean playing the recorder isn't making "real" music? I don't think so. Likewise, there have been - and probably still are - programming environments which don't have Scratch's multithreading or broadcasting capabilites and are nonetheless considered "real".
Please don't get me wrong: I appreciate and share your concern that children need to explore other programming languages besides Scratch, and also take on more difficult problems than shoving a sprite around a partial portion of their computer screens (although that is considered quite a challenge in many conventional programming languages). And, like you, I do believe that curiosity about Alice, Greenfoot, Flex and just about every programming environment that kids can lay their hands on, is wonderful and should be encouraged! But I also believe that Scratch isn't at all a bad place to get "stuck" in for a while and come back to often.
Offline
Jens wrote:
Hehe! Honestly Dick, I am very curious about your epiphanic experiences in coding C!
Actually my epiphany came when I learned about Java in 1997 after about 34 years of programming in Fortran, Pascal, Basic, Visual Basic, C, C++ and several different database scripting languages.
Jens wrote:
Now, I don't want to get into a discussion about the merits of one programming language over another, but I do cringe when you indicate that kids might take on "bad habits" from Scatch which are "hard to break" later, or that students might "get stuck scratching".
After programming in those languages for many years, I had formed many bad habits which I found very difficult to break when trying to make the transition from procedural programming to OOP. Many old timers like myself with years of experience in the pre-OOP programming world have found themselves incapable of making that transition, so bad programming habits are a real problem.
Jens wrote:
I myself don't educate children, but I get the impression that the kids on this website not only find out about fundamental programming concepts such as conditions, loops, threads, events etc., but also get first-hand experience in analyzing, designing, debugging, deploying, discussing and reiterating over their projects. In other words, kids (and I guess some of us old warriors, too) get exposed to activities while Scratching which are usually in the realm of teachers, professors, managers or designers. It's not just about coding, is what I'm trying to say...
Scratch should be viewed as simply an enjoyable interlude for beginning programmers before they move on to bigger and better things and should not be viewed as an end it itself. (Like it or not, C++ combined with various scripting languages is the programming language most commonly used for game programming.)
Jens wrote:
Another thing I'm doubtful about is suggesting that programming in Scratch isn't for "real". I'm more of a musical guy than a techie and I actually like to compare programming to making music. I studied the violin myself and I can tell you it is a very hard musical instrument, because it doesn't have frets and therefore it takes a lot of practice to just get a clean and precisely pitched tone out of it. There are, of course, other musical instruments, like the guitar, the piano, the recorder or the harmonica which don't have that constraint. Does that mean playing the recorder isn't making "real" music?
I don't know anything about music, but I do remember that my kids learned to play the recorder in about the sixth grade. I also remember that the teachers encouraged the children to graduate from the recorder and to move on to other more serious instruments. My concern is that the Scratch folks at MIT don't seem to have that attitude and they don't encourage the kids to learn as much as they can from Scratch and then to graduate from Scratch.
I had a conversation with a high school teacher the other day who is convinced that Scratch is the best thing that ever happened to computer science education in American high schools. I view that attitude as just one more step in the continual degradation of education in the American public school system. In my opinion, Scratch is appropriate for elementary and middle school education but is entirely inappropriate for use at the high school level.
Actually, you have come up with a pretty good analogy. Scratch could be viewed as being analogous to the recorder of the musical instrument world (albeit a very high quality recorder).
I have previously thought of Scratch as being analogous to the miniature golf course (with the windmills, the clowns, etc.) of the golfing world
Jens wrote:
Please don't get me wrong: I appreciate and share your concern that children need to explore other programming languages besides Scratch, and also take on more difficult problems than shoving a sprite around a partial portion of their computer screens (although that is considered quite a challenge in many conventional programming languages). And, like you, I do believe that curiosity about Alice, Greenfoot, Flex and just about every programming environment that kids can lay their hands on, is wonderful and should be encouraged! But I also believe that Scratch isn't at all a bad place to get "stuck" in for a while and come back to often.
The operative phrase here is "for a while."
The Scratch folks at MIT should be more interested in preparing kids to graduate from Scratch (and come back to visit often) than they are in driving up the following stats:
"There are 184,271 projects with a total of 4,582,182 scripts and 1,394,092 sprites created by 30,440 contributors of our 140,135 registered members. That's a lot of Scratch-ing!"
But I'm afraid that's not the case. I see no evidence that they are doing anything to encourage kids to graduate from Scratch or to provide a natural migration path from the confines of Scratch to a serious programming language.
The Alice folks at Carnegie Mellon have the right attitude on this. Version 3.0 of Alice will continue to support the drag and drop paradigm for 3D worlds and beginning students, but it will also expose the full power of Java/OOP to those students who are ambitious enough to switch over to text-based programming without having to switch to a different IDE. Alice 3.0 will be built on top of Eclipse making it possible for those students to accomplish anything in Alice 3.0 that can be accomplished using the standard edition of Java. (At least that is the promise. Only time will tell if they succeed.
In my opinion, MIT should do something similar with Scratch providing a smooth migration path from Scratch into Smalltalk or some other serious programming language without a requirement to switch to a different IDE and a completely different way of thinking. But first, they need to provide real functions with parameter passing and return values along with float, int, string, and boolean types.
Last edited by dbal (2008-08-07 11:04:36)
Offline
chalkmarrow wrote:
Cool discussion.
... Maybe it's Alice, which looks pretty impressive. I don't know.
Actually, Alice is a good next step. It does have its limitations but at least it supports almost all of the important fundamental programming concepts (including functions and methods with parameter passing, return values, and is strongly typed). And, the folks at CMU seem dedicated to removing the current limitations through the promised development of v3.0. Someday
Alice is also a lot of fun with a drag and drop interface so that it has lots of appeal for beginning students and students in non-CS degree plans. Alice is more difficult than Scratch because it requires the programmer to think in 3D instead of 2D to produce much of anything interesting.
Another strong contender is Greenfoot, which is similar to Scratch except that it exposes the full power of Java/OOP and requires text-based programming (no drag and drop interface). I guess the main similarity between the two is the ease of manipulating sprites in a 2D world. Greenfoot is much more powerful than Scratch in a programming sense, but lacks the easy implementation of multimedia functionality that is the main strength of Scratch.
Offline
Stop the presses! I've seen the future of computing, and it is lolz:
http://lolcode.com/
Example:
HAI
CAN HAS STDIO?
PLZ OPEN FILE "LOLCATS.TXT"?
AWSUM THX
VISIBLE FILE
O NOES
INVISIBLE "ERROR!"
KTHXBYE
Offline
chalkmarrow wrote:
Stop the presses! I've seen the future of computing, and it is lolz:
http://lolcode.com/
Example:
HAI
CAN HAS STDIO?
PLZ OPEN FILE "LOLCATS.TXT"?
AWSUM THX
VISIBLE FILE
O NOES
INVISIBLE "ERROR!"
KTHXBYE
OMG! THTZ SO KWEL! - But is it OO? or just OHOH?
Offline
I think the logical progression is
Scratch to Alice to Greenfoot
http://www.kidslike.info/computer_programming_educational_programming_languages
Offline
teachcomputers wrote:
I think the logical progression is
Scratch to Alice to Greenfoot
http://www.kidslike.info/computer_programming_educational_programming_languages
In my opinion, the Alice -> Greenfoot or Greenfoot -> Alice progression is sort of up for grabs. For example, drag and drop (Alice) is easier than text based (Greenfoot)
On the other hand, 2D thinking (Greenfoot and Scratch) is much easier than 3D thinking (Alice).
There are definitely pros and cons both ways.
Offline
Hi dbal,
Thanks for your comment. But how does the 3D thinking in Alice affect the student programmer, and make it harder to learn than Greenfoot?
Offline
kidslikeinfo wrote:
Hi dbal,
Thanks for your comment. But how does the 3D thinking in Alice affect the student programmer, and make it harder to learn than Greenfoot?
Where shall I begin?
How about the fact that the 3D programming in Alice requires the student to be concerned about the position and orientation of the camera relative to the position and orientation of the actors? The camera in 2D thinking usually has a fixed position and usually has a fixed orientation.
How about the "as seen by parameter" that is available to cause the motions of the actors to take on completely different behaviors depending on the specified value?
How about the visual effects produced by different positions and types of lights?
How about the fact that many of the characters have fully articulated limbs that can be manipulated by program code, completely independent of the actors to which they belong? Thus, a character can be caused to walk by manipulating many parts of the body in the correct manner as opposed to simply cycling through a series of fixed poses. For example, issuing an incorrect command will cause the coach's leg to disconnect from his body.
I could go on and on but hopefully you get the idea. The folks at CMU have gone a long way toward making it easy for the student to deal with these complexities, but I believe that most people would agree that animation and simulation using fully articulated characters in a 3D world requires a higher level of thinking than animation and simulation in a 2D world, regardless of the programming language being used.
Offline
Jens wrote:
I myself don't educate children, but I get the impression that the kids on this website not only find out about fundamental programming concepts such as conditions, loops, threads, events etc., but also get first-hand experience in analyzing, designing, debugging, deploying, discussing and reiterating over their projects. In other words, kids (and I guess some of us old warriors, too) get exposed to activities while Scratching which are usually in the realm of teachers, professors, managers or designers. It's not just about coding, is what I'm trying to say...
I'm a relatively new member to Scratch forums . I teach Computer programming using Scratch as an after school activity for grades 3 to 5. I saw this discussion today and wanted to pass on this comment.
I've been teaching Scratch for three quarters now. In the first two quarters I showed the kids the basics of putting together a script and running it and other than that I was acting as a moderator. In my experience, I found that not all kids got the fundamental programming concepts such as conditions, loops etc. right away. Even those who understood the concepts, struggled in putting them to work. As a result they shied away from loops and other conditional blocks and kept stacking blocks to have a long script (which is a very bad habit). In this current quarter, I changed my approach of letting kids figure out by themselves to telling and showing them how each blocks work and letting them practice on their own. I review the concepts again and again so that those who didn't understand the first time will do so the next time.
Designing a project was also a very hard process. The kids started putting together blocks and expected a desired outcome, rather than analyzing the problem first. This caused more frustration for them.
I'm curious to know how Jens got his impression about kids.
Teaching Scratch as an after school activity has it's own problems too. Kids come to the class for 45min each week and none of the kids use Scratch any time other than the class time. I do a lot of reviewing in order to refresh their memories each time.
Before the start of this quarter, I went through the tutorials in learnscratch.org. It is a great site and I really want to thank the people who have put together the site. From this site, I got the idea of teaching blocks one at a time. I then created my own lessons and worksheets for my class. Now my class is divided into three sessions :20 mins of lecture/demo, 20mins of practice with worksheets and 5 to 10 minutes of free time in which the kids can play around in Scratch. Kids love the learning time and the playing time. Most of them take their lessons to a next level during the play time and explore on their own, which is the primary goal of Scratch. The kids are learning the blocks now. They will start doing projects after a month. This approach seems to give them more confidence in approaching a problem.
It seems to me that kids can learn the stack blocks on their own but control blocks have to be taught to them properly.
My background in programming is in C and Hardware Description Languages. When I wrote my first project in Scratch, I used a lot of if statements and I put all the code under one event, just like a C code. After some time I transformed the same code with much smaller pieces spread across different sprites with a broadcast-receive blocks. It was an interesting experience.
Offline
xyzabc wrote:
I'm curious to know how Jens got his impression about kids.
Those are very interesting observations, xyzabc, they seem to be shared by quite a few teachers I have been talking to, especially if the children use Scratch only in classes or in school activities and not out of their own curiosity.
Actually, my own experiences with kids using Scratch are limited to my greater family and some friends' children. They all have in common, that they were finding out about Scratch by themselves (i.e. not through me and certainly not through school, from teachers or because they somehow "were made to" play with Scratch). Some children became very enthusiastic about Scratch, while others were completely disinterested and went right back to youtube again. So, yes, I am utterly unqualified to offer success stories about the educational merits of Scratch over a "serious" programming environment.
On the other hand, I keep being impressed and amazed at just how quickly those kids who are enthusiastic about Scratch learn programming concepts by experimenting on their own without being instructed by adults (i.e. by myself). They keep asking me questions like: "How can I make Mario jump from one platform onto another?", but most of the time they eventually find out most of the answers on their own, if I resist the urge to "show and tell" them.
I am, of course, quite aware, that this is not how school is working. Scratch might suffer the same fate in school courses that happens to a thought-provoking novel or to a classical symphony once turned into a school subject. Instead of experiencing profoundly disturbing "direct emotional access" students will mostly be bored by listening to an opera in school or by having to read and discuss a prized novel.
But let me ask you this: Would those children who have difficulties grasping control structures in Scratch even as you explain them benefit from switching to a "serious", text-based programming language earlier?
Offline