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.

  • 1
    $\begingroup$ I'm voting to close this question as off-topic because it is not specific to education; the differences between two languages are the same regardless of the education context. $\endgroup$
    – user24
    May 24, 2017 at 7:18
  • 2
    $\begingroup$ 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: cseducators.stackexchange.com/questions/106/… $\endgroup$
    – Peter
    May 24, 2017 at 7:25
  • 1
    $\begingroup$ 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. cseducators.meta.stackexchange.com/questions/24/… $\endgroup$
    – Peter
    May 24, 2017 at 7:39
  • $\begingroup$ Thanks. I realised it was borderline, my initial comment could have been suggesting improvements rather than closure directly, apologies for that. I think it's good like this. $\endgroup$
    – user24
    May 24, 2017 at 8:00
  • 3
    $\begingroup$ I'm happy with it here because Snap! and Scratch are languages designed for teaching programming. $\endgroup$ Jul 25, 2017 at 0:23

3 Answers 3


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.

  • $\begingroup$ ^ 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. $\endgroup$
    – Ryan Nutt
    May 24, 2017 at 10:25

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


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.


Not the answer you're looking for? Browse other questions tagged or ask your own question.