Join the discussion
Write your take first — we'll ask for email only when you're ready to publish.
- Hacker News
- Nice! I did a few chapters of this when I was learning.
I'll have to add it to my list to go and check out any new updates/features they have.
I can NOT wait to get my little one into something like this!
by anguishe - The website seems to put significant weight on the fact that it allows you to create your own block. I'd just like to point out that Scratch allows you to do that as wellby Muhammad523
- You can't make a block that returns a number in Scratch, let alone another block. It's really frustrating.
- Nice! Can this be used with a LEGO Wedo set? It would be cool to have some alternatives to the deprecated/unsupported official software, some of which no longer works (like the iOS app)by nico
- Snap is a little intimidating compared to Scratch.
It's clearly designed for older students, but at that point some of the advantages of blocks are lost.
Most of these systems suffer from the 'canvas' model, where you have many stacks of blocks scattered around the canvas as they are created, possibly in no particular or logical order. It's difficult to find things or to get a good overview, and really becomes a navigation problem as projects get bigger. I think they would greatly benefit from a more traditional ide/file type structure, or some other way to structure 'stacks'.
by jacknews - In Snap! version 12 they have added the ability to create tutorials, which are projects that load up with a limited set of blocks (you choose what set is available when creating the tutorial). This fixes the intimidation problem: you can even create a set of tutorials that, if the student goes through them in the recommended order, teaches the basics with just four or five blocks available at first, then slowly introduces concepts over time.by rmunn
- 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
by jc4p - Yeah, my nephew loved scratch but he's endlessly devoted to make code. I got him a little Gameboy thing that can play the games he builds, and he keeps sending me games of his and then mercilessly mocking me for not being good at them :(
A couple years ago I went through Flexbox Froggy with him out of curiosity, and the really interesting thing was that he was able to complete all the levels but only by dictating to me what to write, because his eye hand coordination wasn't yet up to the task of typing. He has a laptop now and he's getting better but his fingers just don't work very quickly and accurately yet. It's such an interesting thing developmentally that the visual coding approach is helpful for.
by crushinator - 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.
by stymaar - Scratch already allows you to create custom Blocks and features lists. This seems like a perfect example of reinventing the wheel (and fragmenting development communities).by biofox
- 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.
by pamelafox - Any name that you can't type is going to be a problem.by Dwedit
- That's more of a problem in text-based coding. One of the things I genuinely like about Snap (well, in my case NetsBlox, which is a fork of it) is the ability to have spaces and weird characters in a variable name.
Edit: Oh, you meant the lambda in the post title? It's not really part of the name, but you can at least type it into Snap itself.
by gs17 - > Any name that you can't type is going to be a problem.
Fortunately the name is Snap! so typing it isn't much of a problem. (With the !, which was stripped from the submission title and when most people write about it.)
by Jtsummers - 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.
by andrewla - I have the same gripe and I think it’s just simply that when you are used to being able to just write code, everything else feels like it’s in the way.
Visual coding is a pain to change and move around quickly. It’s just clutter ultimately - if you know how to actually code.
by jonplackett - To some extent, that’s not the point. You don’t need to learn all of CS in one tool.
That said, I think you can learn good fundamentals of SWE with tools like Snap!. You can still learn testing, design patterns, working with APIs, modularity etc.
No it’s not a distributed system, and perhaps the biggest pain point is collaboration is tricky. But still you can learn a ton of cool things without going that far into CS. :)
by cycomachead - LEGO created NXT-G for programming their Mindstorm NXT. It has since, in my opinion, been the best graphical programming I've seen to date.
It did have a slight learning curve, but 5th graders were competing just fine against high schoolers haha.
by JoeOfTexas - If you appreciate when keyboard interaction gets added to a GUI, then you might think of a graphical language as the opposite, as it essentially removes keyboard interaction from what is normally a text-based system.
- You also can't learn to be a great novelist from the alphabet song, but it has its place!by crushinator
- This supports making your own higher order functions. You absolutely can learn software engineering from this. What you can't do is get syntax errors, which makes teaching a classroom of kids by yourself intractable.
- I learned to program from block programming, starting out when I was 12. I'm now a full-time developer and funded startup founder. You absolutely can learn complex concepts from simple primitives, and there is a large underground community pushing the limits of languages like Scratch. See for example Linux running on RISC-V running on Scratch:by poly2it
- I would love to see the opposite emerge, a programming environment focused on teaching architecture, security, separation of concerns, etc. All while letting LLMs deal with the fussy programming bits.
The script is already flipping, with kids making software using AI but they can only fumble forward inch by inch while burning tokens. It would be great to introduce programming in the way it functions in the workplace - we want to make a Mario clone, start with the goal, hammer out the elements to a certain fidelity then let the AI cook.
by lubujackson - 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".
by brian_harvey - Thank you for your work on Snap! and for finding the time to respond to our comments.by dr_kiszonka
- Wasn't one other neat thing about Snap! and Scratch that you can translate the entire code (except for the user-named parts) to any other language on the fly without worrying about it breaking? Because in a sense the language is just part of the "presentation layer" of the blocks?by vanderZwan
- There's a limit to how long the name can be, even in Snap! — not an enforced limit as far as I know, but a practical one. You don't want the block you're dragging around to be thousands of pixels wide, it's very inconvenient. So people are naturally going to rename "convert all the upper case letters in the input text ___ into lower case letters" (where ___ represents the input slot) into "convert ___ to lower case" at some point, because they get tired of that one block being so much wider than every other block around it. (Edit to add: especially if they're snapping it into the input of a `map` block, which itself is the list input of "keep items (predicate) from (list)" block. That would get unwieldly really fast).
But you know some wag is going to paste the Pevear and Volokhonsky translation of War and Peace into a block name, just to see if he can. :-) So perhaps there does need to be an artificial limit, at 4096 characters or so, on block names.
by rmunn - 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.by sinuhe69
- They've fixed surprisingly many of the quirks, but my biggest gripe with Snap is that they don't like to add documentation with new features. A lot of the older content has a nice "help..." context menu option with a description of what it does (which is often out of date itself, e.g. the "split" and "join" by blocks feature isn't shown on those blocks), and newer blocks have the context menu option... but nothing pops up.by gs17
- > Changing the name of a variable or block for example, could create “holes” in the calling sites
WTF. Isn't the whole point of visual programming that you are NOT bound by the limitations of text as a medium? A block refers to a specific variable. It shouldn't matter what it's called, it shouldn't matter if what it's called changes, it should still refer to the same variable even after renames.
by Xirdus