Snap! lets kids and adults build their own blocks—and study real computer science

Λ Snap – An inviting programming language for kids and adults for CS study

Snap! lets kids and adults build their own blocks—and study real computer science

Snap! is a block-based programming language from UC Berkeley that welcomes beginners while supporting serious CS study. Its drag-and-drop interface lets users create custom blocks, explore projects from games to simulations, and learn through example projects and a reference manual. Backed by UC Berkeley and SAP, Snap! is free and open source.

Snap! is a broadly inviting programming language for kids and adults that's also a platform for serious study of computer science.
  1. aspizu

    Scratch is how I first learned programming. I was building increasingly ambitious projects in it, and at some point the editor itself became the main thing I was fighting. Once a project got to around 10,000 blocks, it could get painfully laggy, and I ended up spending a lot of time engineering around Scratch's limits.

    That is what eventually led me to build goboscript: https://github.com/aspizu/goboscript

    I'm one of the programmers who owe their career to Scratch, this year, I joined https://ente.com as a software engineer. Scratch taught me how to code, and perhaps a bit of real-world engineering indirectly.

  2. sinuhe69

    Snap is designed to be more expressive and powerful than Scratch. But I find debugging them is very painful. Changing the name of a variable or block for example, could create “holes” in the calling sites but the system can or cannot report an error and fails silently. Snap is IMO more flaky and the team seems more eager to add features than polish the existing ones or make the system mor robust and stable.

  3. andrewla

    I don't love graphical programming environments like this and Scratch and I can't quite put my finger on why I find them so unattractive.

    A big part of it is that you can, to some degree, learn programming from this. But you absolutely cannot learn software engineering from this.

  4. Dwedit

    Any name that you can't type is going to be a problem.

  5. brian_harvey

    A note to those commenters who complain that visual programming doesn't help you learn software engineering:

    Right, you aren't our target audience. We're after the people who aren't going to major in computer science in college, but who're curious what all the fuss is about. They've taken high school algebra, so they know what a variable is and what a function is. (They don't have to know about functions as data, but we hope to teach them that.) These days, they probably used Scratch in elementary school, so we don't have to teach them the syntax of blocks, or what a sprite is, etc.

    Nobody's going to come straight out of our class into a software engineering job. They'll have plenty of opportunity to learn that later, supposing that (as happens gratifyingly often) they change their minds about what to study in college because of our course.

    They're not (or at least not yet) hackers, in the sense of people whose instinct on meeting a machine is to take it apart.

    Oh, P.S., there is one sense in which block languages are better for software engineering: you can have arbitrarily long names of things (including spaces between words), because you only ever need to type the name once, so you can give your procedures self-documenting names such as "convert upper case to lower case letters" instead of ugly "convUcLc".

  6. pamelafox

    I am generally not a huge fan of block-based coding, but I worked with the Snap folks while I was at UC Berkeley, and they make a very compelling case for both block-based coding and their functions-first approach.

    While there, I helped develop this middle school curriculum for Snap:

    https://bjc.berkeley.edu/bjc-r/course/sparks.html

    It was really interesting to attempt a functions-first approach that was still fun - I ended up re-making similar projects for a functions-first Python course as well.

  7. stymaar

    For those wondering the difference with scratch, it's on the about page:

    > About Snap!

    > Snap! (formerly BYOB) is a visual, drag-and-drop programming language. It is an extended reimplementation of Scratch (a project of the Lifelong Kindergarten Group at the MIT Media Lab) that allows you to Build Your Own Blocks. It also features first class[1] lists, first class procedures, and first class continuations[2]. These added capabilities make it suitable for a serious introduction to computer science for high school or college students.

  8. jc4p

    I've been spending a lot of time with my nephews working on Scratch and Snap.

    They also attend local classes and their teachers switched from Snap to this which is way simpler and stickier with my nephews: https://www.microsoft.com/en-us/makecode

More from this day

2026-09-11