Computer Science Teaching Tool: Snap!
In my Introduction to Computer Science course, we are targetting students who have little to no programming experience. To students like these, traditional languages may be too complicated or intimidating. To help introduce them to the concepts of programming without getting confused by syntax, there has been a trend toward visual programming languages. Two of the most common "block" languages are Scratch by MIT and Snap! by Berkeley. Since I have been teaching mostly with Snap!, I will be talking about it for the rest of this post.
Snap! is a visual programming language using blocks. These blocks can be placed in sequence or even inside of each other to form a series of commands.
The output can be very visual as the user can program drawing on the screen, add sprites and animate them. The system includes many of the logical constructs of programming like "if statements" and "for loops". One can build custom blocks, which serve as a method that can be called from multiple locations to teach about code reuse. Without much experience, students can create drawing apps or even games that are interesting and playable. So far I've noticed two downsides to Snap!. Occasionally they use terminology that it's quite different than other languages so they may confuse students as they progress to written languages. Second, on occasion, there are a few blocks that run slowly, or even stop the program from working. Even a program about programming is not without its bugs. However, Snap! is a work in progress, so they are still adding blocks and fixing bugs.
Snap! is easy to use in the classroom setting, since it is web-based, which means there is nothing to install. Students can create an account and save their work on the cloud, which doesn't tie them to one computer. When the students are ready to turn in their work, they can share their project publically, which will give them a link they can submit to their teacher. The teacher just has to click on the link and will be able to examine the functinality of the program and get to look under the hood to see the block structure.
I think I will stop at this brief overview, but if I've piqued your interest, you can go to http://snap.berkeley.edu/ to read a lot more and view many example programs. If you have any additional questions please leave them in the comments and I'll be happy to answer them.