<p>The analogy is far from perfect, but Snap! is to Scratch as Mycroft is to Sherlock.</p>

<p>For me, the big advantage for Snap! is its provision of custom functions rather than just the custom blocks that Scratch 2 offers - Snap! functions return values that can be passed to other functions and so on, making it much easier to implement mathematical ideas and to build up programs by defining rules and relationships rather than sequences of steps. </p>

<p>In Snap! functions are 'first class citizens', thus functions can be passed to other functions as parameters, or be stored in lists, or (pretty much) whatever, and so Snap! can be used as an introduction to functional programming.</p>

<p>In short, Snap! makes it easier to address much more theoretical CS than is convenient in Scratch, without introducing the need for text based programming. </p>

<p>On the other hand... Snap! doesn't have the same rich range of support materials or vibrant support and sharing community that has made Scratch such a success.</p>

CC BY-SA 3.0
2017-05-24T10:25:23.827Z
^ This. When I used to use Scratch in an intro class we used Berkeley's BYOB for exactly this reason. The ability to create blocks / functions opened up a lot more possibilities.
Ryan Nutt
CC BY-SA 3.0
2017-05-24T07:33:23.833Z
2017-05-24T07:33:23.833Z
Miles
<p>The middle column is Snap!. </p>

<p>In Snap! you can create your own C-shaped blocks, as well as functions (see range block), this is in addition to the procedures that can be done in scratch. </p>

<p>Note: I could not get the last one to work, but some times you only need to get the image. However the others do work (fully functional). </p>

<p><a href="https://i.sstatic.net/uyNNI.png" rel="noreferrer"><img src="https://i.sstatic.net/uyNNI.png" alt="python from scratch"></a></p>

CC BY-SA 3.0
2017-05-25T17:48:08.740Z
2017-07-25T08:30:24.273Z
2017-07-25T08:30:24.273Z
ctrl-alt-delor
<p>The biggest features Snap! has that Scratch doesn't are first-class EVERYTHING and functions.</p>

<p>Scratch only lets you create custom command blocks, not reporter or Boolean blocks. This makes Snap! much more suitable for writing algorithms that rely on return values.</p>

<p>In Snap!, everything is first class. You can pass around scalar values, lists, blocks (and groups of blocks), and even sprites. Try creating a matrix out of Scratch's lists - not easy, but trivial in Snap!.</p>

<p>Essentially, Snap! is much better for teaching higher-level programming than Scratch is.</p>

CC BY-SA 3.0
2017-05-24T10:34:40.437Z
2017-05-24T10:34:40.437Z
Scimonster
<p>I teach a short introductory unit in my course that uses Scratch to get students familiar with programming concepts before introducing the syntax of a text-based programming language. For context, we move from Scratch to C to Python. </p>

<p>My question is this: <strong>what can students be taught in Snap!, as another block-based programming environment, that they cannot be taught in Scratch?</strong></p>

<p>I read on their site that it Snap! combines Scratch with Scheme, but as the latter is not a language I've studied, I don't quite see the motivation for this combination. </p>

CC BY-SA 3.0
2017-07-25T00:23:44.383Z
I'm happy with it here because Snap! and Scratch are languages designed for teaching programming.
Ellen Spertus
CC BY-SA 3.0
2017-05-24T07:25:57.840Z
I made a slight change to the question. Yes, the languages are different regardless of context, but as with another thread, there may be pedagogical reasons to differentiate between languages, reasons that are unique to a classroom. I also want to stray from opinion-based questions, so the differences for the classroom seemed a more answerable question. See this thread and comments: https://cseducators.stackexchange.com/questions/106/scheme-vs-haskell-for-introducing-functional-programming
Peter
CC BY-SA 3.0
2017-05-24T07:39:57.973Z
One more thought...I started a thread on meta that speaks to a broader issue your comment brings up. Thanks, @Keelan, for addressing it and helping to spur on the conversation as it will help all of us give this site an identity over the coming days and weeks. https://cseducators.meta.stackexchange.com/questions/24/language-a-v-language-b-v-language-c
Peter
<language-choice><scratch><snap><block-based-programming>
What can Snap! do that Scratch cannot?
# What can Snap! do that Scratch cannot?

(Asked by: username_0 on 2017-05-24)

I teach a short introductory unit in my course that uses Scratch to get students familiar with programming concepts before introducing the syntax of a text-based programming language. For context, we move from Scratch to C to Python.

My question is this: **what can students be taught in Snap!, as another block-based programming environment, that they cannot be taught in Scratch?**

I read on their site that it Snap! combines Scratch with Scheme, but as the latter is not a language I've studied, I don't quite see the motivation for this combination.

**Tags:** language-choice, scratch, snap, block-based-programming

> **Comments:**
> **username_0**: I made a slight change to the question. Yes, the languages are different regardless of context, but as with another thread, there may be pedagogical reasons to differentiate between languages, reasons that are unique to a classroom. I also want to stray from opinion-based questions, so the differences for the classroom seemed a more answerable question. See this thread and comments: https://cseducators.stackexchange.com/questions/106/scheme-vs-haskell-for-introducing-functional-programming  
> **username_0**: One more thought...I started a thread on meta that speaks to a broader issue your comment brings up. Thanks, @Keelan, for addressing it and helping to spur on the conversation as it will help all of us give this site an identity over the coming days and weeks. https://cseducators.meta.stackexchange.com/questions/24/language-a-v-language-b-v-language-c  
> **username_1**: I'm happy with it here because Snap! and Scratch are languages designed for teaching programming.  

---

## 3 answers

### Answer by username_2 on 2017-05-24. Score: 15 | Accepted answer

The analogy is far from perfect, but Snap! is to Scratch as Mycroft is to Sherlock.

For me, the big advantage for Snap! is its provision of custom functions rather than just the custom blocks that Scratch 2 offers - Snap! functions return values that can be passed to other functions and so on, making it much easier to implement mathematical ideas and to build up programs by defining rules and relationships rather than sequences of steps.

In Snap! functions are 'first class citizens', thus functions can be passed to other functions as parameters, or be stored in lists, or (pretty much) whatever, and so Snap! can be used as an introduction to functional programming.

In short, Snap! makes it easier to address much more theoretical CS than is convenient in Scratch, without introducing the need for text based programming.

On the other hand... Snap! doesn't have the same rich range of support materials or vibrant support and sharing community that has made Scratch such a success.

> **Comments:**
> **username_3**: ^ This. When I used to use Scratch in an intro class we used Berkeley's BYOB for exactly this reason. The ability to create blocks / functions opened up a lot more possibilities.  

---

### Answer by username_4 on 2017-05-25. Score: 9

The middle column is Snap!.

In Snap! you can create your own C-shaped blocks, as well as functions (see range block), this is in addition to the procedures that can be done in scratch.

Note: I could not get the last one to work, but some times you only need to get the image. However the others do work (fully functional).

[![python from scratch](https://i.sstatic.net/uyNNI.png)](https://i.sstatic.net/uyNNI.png)


---

### Answer by username_5 on 2017-05-24. Score: 6

The biggest features Snap! has that Scratch doesn't are first-class EVERYTHING and functions.

Scratch only lets you create custom command blocks, not reporter or Boolean blocks. This makes Snap! much more suitable for writing algorithms that rely on return values.

In Snap!, everything is first class. You can pass around scalar values, lists, blocks (and groups of blocks), and even sprites. Try creating a matrix out of Scratch's lists - not easy, but trivial in Snap!.

Essentially, Snap! is much better for teaching higher-level programming than Scratch is.


---

