101 comments

[ 0.20 ms ] story [ 3.9 ms ] thread
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.

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.
> 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.

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.
Six months ago I was teaching a beginning-programming course to six kids, using Snap!, so I was reading the forums. And there was a group effort to add documentation to many of the blocks that were lacking it. I haven't been back in a few months, so I don't know how that effort is progressing, but there were definitely some undocumented blocks that were getting documentation completed as I watched, and eventually added to the Git repo to land in the next release.

So it's getting better.

The other thing to remember is that the core Snap! development team is just two guys, Brian Harvey and Jens Mönig. When they're focused on things like trying to figure out how to get macros into Snap!, so that Snap! can truly be a Lisp (right now it's only most of a Lisp), they tend to leave the documentation effort to the community. If they had a larger team I might fault them for that, but with just two guys, I can't really blame them for focusing their efforts on things the community is less able to do, and leaving things the community can do up to the community.

I have to clarify that the Snap! implementation is 99% the work of Jens Mönig. It was 100% Jens for the first two major releases, back when it was called BYOB ("build your own blocks") and was an extension of the Scratch source code. Then we wanted to use it in a CS course for non-majors at Berkeley so I got in touch with Jens and started complaining about missing features! The result was an intense collaboration in which the coding was still 100% Jens but I contributed ideas about user interface and features. I think my biggest contribution was teaching Jens about lambda!

Our team has officially grown to six people, adding Bernat Romagosa, Jadga Hügle, Michael Ball, and Joan i Pelegay. And several Snap! users have made major contributions, especially to libraries that extend the reach of the language. But the interpreter itself is still all Jens.

Glad to know the team is growing, it makes me slightly less worried about the project's bus factor.
The documentation problem is entirely my fault. I managed to stay up to date through version 8.0, but then so many things happened so quickly that I got swamped. Then I got depressed and gave up.

Also I made the mistake of writing the manual in MS Word. At the time, I couldn't find a standard way to insert pictures into a TeX document, or I would have used that. (Now, of course, there is a standard way.) There is an effort underway to convert the manual into a web-based format in a git repo that anyone can contribute to, but that effort is 90% done and you know what that means! :)

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!

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

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.

What device did you get your nephew? When I was looking for one, those listed on the Make Code website were pretty bad and expensive (or unavailable). I would love to find an affordable retro handheld like Miyoo or Anbernic with Make Code support.
Roughly how old was your nephew when he started using MakeCode?
I think four for scratch junior with help, and then make code at six? He wasn't able to use either of them independently at first, it's a learning process.

But it's different for every kid! He was a very early reader and he's autistic, one of the markers of his presentation of which is being ahead of some developmental benchmarks and behind on others. If you have the resources, those kids coding clubs are all over these days and they do a great job of making it a fun, social activity for a certain type of dorky kid.

I guess universities suffer from NIH-syndrome just as much as big tech does.
Not true in this case; the original intent for BYOB (Build Your Own Blocks) was as an extension to Scratch. When the Scratch team decided not to merge it, the BYOB folks decided to build it into Snap! instead of abandoning the perfectly-functional code they'd written.
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.

from someone who can remember how they even got into programming:

it's because this is BS and just a toy, it's got no connection to the real world.

from the angle of someone trying to make some toy to teach programming, maybe in their head it's like: oh this is so simple and easy it should work perfectly for teaching

but from my experience, most of my learning came from "whats this?" "how do i make a thing like this?"

this doesn't provide a way to accomplish that or to promote curiosity

I think same applies to basic CS courses teaching bits and bytes, it's not really useful to know what bits and bytes are if you don't understand what they're even used for or why you should know what they are

however, this is just my subjective point of view, maybe it differs for others.

(comment deleted)
Hardly "no connection to the real world". Have you seen what's actually been build with Snap! and Scratch? The ecosystem is chock full of bridges to physical stuff:

- Arduino / micro:bit / boards (Snap4Arduino, MicroBlocks, many hardware libraries).

How To Setup Snap4Arduino:

https://www.youtube.com/watch?v=Ltzlzk_zkys&list=PL5OeDsbY1E...

- Robots (Finch, Hummingbird, Lego NXT, drones).

Controlling a Finch Robot in Snap!:

https://www.youtube.com/watch?v=6_0EqIbTlkk

- Sewing Machines (TurtleStitch -- driving embroidery from blocks) -- one of my favorites:

Snap!Con 2021 - Turtlestitch: Stitching in Time and Place:

https://www.youtube.com/watch?v=K6ra5ThxkrE

- Cameras, microphones, audio, pen plotters, 3D (BeetleBlocks).

Snap! 12.1 features new blocks for recognizing Body Language, Bauhaus-style shape compositions, first-class Processes and international translation updates:

https://www.youtube.com/watch?v=ID7wYxzHUAc

- Web APIs and IoT (conference workshops on "program the internet" with Snap!).

Reimagining IoT - Snap! Microblocks:

https://www.youtube.com/watch?v=l_P7MoBG250

ML/AI extensions and digital fabrication, like Ken Kahn's eCraft2Learn project.

https://project.ecraft2learn.eu/

>Digital Fabrication and Maker Movement in Education

>The eCraft2Learn project has researched, designed, piloted and validated an ecosystem based on digital fabrication and making technologies for creating computer-supported artefacts. The project aimed at reinforcing personalised learning and teaching in science, technology, engineering, arts and math (STEAM) education and to assist the development of 21st century skills that promote inclusion and employability for youth in the EU. The eCraft2Learn ecosystem supports both formal and informal learning by providing the appropriate digital fabrication.

The "what's this? how do I make a thing like this?" curiosity is exactly how many people get pulled in -- instead of learning abstract syntax first, they're immediately making something move, blink, sing, or stitch on machines they can see. Blocks are the on-ramp, but the project is the motivation.

Different audience than yours, maybe. But "just a toy walled off from reality" undersells what the community has been doing for decades.

It also teaches real world computer science at a college level yet still accessible to kids, not just a stripped down simplified language for younger kids.

"Snap! is Scheme disguised as Scratch" -Brian Harvey

https://forum.snap.berkeley.edu/t/hygienic-macros/3258/6

>I admit that my slogan "Snap! is Scheme disguised as Scratch" would sort of push in the direction of hygienic macros. But historically we built Snap! more with the idea of Logo disguised as Scratch. It was just when we added lambda that we started thinking more in Scheme terms.

I guess I just can't relate to it, because I was fascinated with the computing itself, not just getting from A to B as quickly as possible

so it wasn't the project that was the motivation, it was figuring out how to do it for real, and getting closer to expertise in programming

for example the TurtleStitch, I don't know how to say this exactly, but to me it doesn't strike as something that'd interest people who want to get into programming, but is more like a way to showcase how to do machined embroidery in an accessible way

I might be totally wrong, but my problem seems to be that a lot of this is just about showing off the capabilities of Snap, but it's not really something I would've engaged with for example?

like almost as if the ecosystem simply serves to show off Snap and thus misses the mark?

like Snap doesn't really provide a way to understand how stuff is actually done except for maybe simple logic. So I don't see how it'd be very useful for e.g. learning CS when it's not really something you'd see in the real world, i.e. you're learning a learning platform and some basic concepts

I guess my point is like, if it's not really something that's used in the real world, unlike say JS or Python, why use it instead of getting up to speed in a real language?

again, it could be that I simply don't get it, or that I'm not the target audience, but I feel like there's a reason why these haven't really taken off, and IMO there's no reason why they would need to, because they serve a very specific niche

[delayed]
Where the heck did the sudden vitriol come from? I went through the HN comments of the person you're replying to and found nothing like the kind of thing you're replying to in the first several pages. If he said something months ago that you're bringing up, you might want to link to it, because at it stands it feels like you just suddenly started ranting about politics in the middle of a conversation about teaching kids to code. Which is... kind of offputting, you know?

Could we please try to follow the guidelines and not have flamewars and partisan dispute? Especially ones that seem to spring up out of nowhere, reviving conversations that are months old? I'm here to learn about cool new projects; if I want to read about politics or personal drama I have pretty much the entire rest of the Internet to do so.

Set showdead=true and you can see his fanatical arguments in support of Musk and attacking other people that disagreed that rightly got flagged dead. His arguments are in such bad faith, ignoring and refusing to address other people's counter arguments, the same way he is now refusing to engage with mine, that they don't deserved to be linked or repeated, and they're a distraction from the useful things I actually linked to. You can easily find them yourself if you really don't believe me. Have you looked at any of those links I did post yet, or did you get stuck in the rabbithole of his posting history?

His recent ungrounded comments like "it's because this is BS and just a toy, it's got no connection to the real world" are dismissive and insulting, and I posted several links and evidence refuting him, yet he repeated the same pattern as he did in his defense of Musk's Nazi salutes by ignoring all the evidence, and repeating his unsubstantiated accusations, without providing any evidence himself.

If you'd like to learn about cool projects, please look at the links I already posted, and whata I posted to the Logo discussion. He didn't post any links or evidence at all to supported his mistaken and aggressive accusations, while I refuted "this is BS" by linking to and quoting the Wikipedia page about Constructionist education, "just a toy" by naming and linking to many Snap! projects and demos, and "no connect to the real world" by citing several physical real world connections like TurtleStich. And he ignored and dismissed all of that, because he isn't arguing in good faith, and doesn't know what he's talking about.

If that's not enough for you, and you still thirst to learn about cool projects, read my other recent posts about Logo, and check out some of the other educational projects I've been developing over several decades, which were deeply inspired by Seymour Papert's constructionism.

https://micropolisweb.com/

https://vitamoo.space/

https://github.com/SimHacker/MicropolisCore/

https://github.com/SimHacker/moollm/blob/main/skills/constru...

https://github.com/SimHacker/moollm/tree/main/skills/adventu...

Don't worry, I didn't spend much time digging through comment history. Thanks for the links; I'm about to have to leave my computer and do something else for several hours, so I can't look at them right now. But since you replied to one of my comments it'll be easy to find them again via the "threads" link, so I'll look at them later when I'm back at the computer. (And I did look at the first one; Logo Adventure is exactly the kind of thing I love to come across, so thanks for that!)
I'm not sure what caused him to lash out at me like that, I thought I was being pretty reasonable (albeit very casual with terms like BS), I even made sure to say multiple times that it was my opinions and views, and that maybe I just don't "get it".

Here's my reply with links to my past comments: https://news.ycombinator.com/item?id=49671123

I understand that some consider Elon a Nazi but I don't consider that a common belief, so I don't know why I'd need to support that belief in order to talk about this Snap language and others, like Scratch.

[delayed]
> I already showed you many ways Snap! connectes to the real world, and you are still denying all that. Are you calling me a liar, or do you just have no reading comprehension whatsoever? Do you not think robots, Arduinos, network programming, AI programming, computer science, algorithms, closures, continuations, functional programming, and meta programming are not the "real world"?

I've already made my points very clear about this, sure, you can do that, but how many are actually doing AI programming in Snap? Why would you? It's very niche and real software doesn't get made in Scratch or Snap. I would say the same thing about Arduino and other things. Again, my opinion, beware.

Again, I don't even know you, I don't know about your friends, I never threw any "stones" here on purpose. I don't expect someone to get so hurt over me criticizing a Scratch-like programming language when posting on HN. Should I expect the same for calling Scratch a toy language?

> If you are capable of arguing in good faith, then tell me if you would treat your own children the way Elon Musk treats his own trans daughter? Do you believe he's a good father, or a transphobic bigot? And if you really don't believe he was making a Nazi salute, then record a video of yourself doing the exact same thing Musk did, post it to youtube under your real name, and then post a link to it. Or is there some reason you don't want to do that, huh?

So everyone who thinks Elon did not do a heil hiler salute to show off how big of a Nazi he is, is now forced to do this because Don Hopkins said so? aye aye sir!

"Or is there some reason you don't want to do that, huh?" is absolutely ridiculous.

You need to self-reflect.

> but how many are actually doing AI programming in Snap?

Again you're proving that you didn't read or understand a thing I wrote. I already gave you links to Ken Kahn's ecraft2learn project, but obviously you didn't look at it. Ken arrived at the MIT Artificial Intelligence Laboratory in the 1970s, where Minsky and Seymour Papert served on his committee. During the 1970s (specifically between 1973 and 1979), he taught artificial intelligence to elementary school children as a graduate researcher in the MIT AI Laboratory's Logo Group. He's made his own visual programming languages for teaching programming -- including high level cs concepts like concurrency and message passing -- called ToonTalk. Almost 50 years later, he's still teaching AI programming to kids, now with Snap!. Here are his 172 citations on google scholar:

https://scholar.google.com/citations?user=9hQiyqcAAAAJ&hl=en

Here's Jens Mönig demonstrating the data extensions to Snap! that enable programming neural nets in pure Snap! block code. No JavaScript. No WASM. No WebGPU or WebGL. Pure Snap!, again disproving your stubborn offensive delusions that Snap! is bullshit, a toy, has no connection to the real world, and is not useful for teaching advanced computer science concepts. Not having any idea what you're talking about and refusing to look at evidence does not prove your unfounded opinions are right.

I am still waiting for your definition of what "_real_ programming" is, that classifies Scheme as a real programming language, but not Snap!. Your failure to respond proves you don't have such a definition, and you're wrong.

What's new in Snap! 11 - Data - Extensions - Neural Networks

https://www.youtube.com/watch?v=U9W04TEMBUk

My closing keynote address at SnapCon25 in Heidelberg, introducing deep machine learning capabilities to Snap as an alternative way to create custom predicate blocks.

The projects created "live" during this talk can be found here:

Backpropagation ANN Sprite Layers:

https://snap.berkeley.edu/snap/snap.html#present:Username=je...

Instruments Recognition:

https://snap.berkeley.edu/snap/snap.html#present:Username=je...

Gesture Recognition:

https://snap.berkeley.edu/snap/snap.html#present:Username=je...

I replied at: https://news.ycombinator.com/item?id=49675110

I'm well aware that Snap has this stuff in it, and I understand it is used to teach and get kids interested about programming, I know.

I still do not understand why you'd want to learn AI with Snap/Scratch. I don't think that's a very controversial opinion?

If you just want to show kids some basic stuff okay sure, why not.

By the time you'd want to mess with neural networks, I think it'd be best to just use Python or something, not wrestle with this...

I appreciate you being so thorough with your references and the transcripts, and I think it's cool and interesting.

I'm just saying that for me I don't get why I'd use this or try to do these complex things in this Scratch format rather than jumping on an actual language where I don't need to rely on these extensions or new features, and I'd be learning a real language that is actually used in the real world.

And like, saying that Scratch is a toy language, I don't think that's a very controversial thing to say, so if I said the same thing about this, why be so offended over it? calling it BS, I can get that, but it was never directed towards anyone specifically, it was towards visual programming languages in general like Scratch. They serve a purpose, sure, but in my view, a very limited one. And I still don't see this being used like other languages for real stuff, aside from limited demos and exercises for kids.

You can say I'm wrong, that's completely fine. But I think you're missing my point here.

You need to cool down.

I replied to this comment:

> 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.

And you then showed off some embroidery stuff and things that I explained that in my own opinion, are not connected to real world software engineering/programming, and seem to serve Snap rather than things that you'd actually use in the field.

That's my opinion and I'm allowed to have my own. Otherwise all I could say is that you're right and its awesome. Right?

And here you are attacking me with things like:

"but it's a waste of your time, because his comments have no value. Have you looked at any of those valuable links I did post yet, or did you just get stuck in the worthless rabbithole of his posting history?"

"dead boot licking comments don't deserved to be linked or repeated"

Because apparently I'm not allowed to have my own opinions of blocky visual programming languages. A bit fascist isn't it?

Anyhow

"I attended Snap!Con in Barcelona, played around with TurtleStitch myself, and still have and cherish the cool textile artifacts (and also cool friends) I made.

And the TurtleStitch presentation included live streaming video of students of diverse genders and cultures and ages enthusiastically showing off and talking about the beautiful physical objects they designed, programmed, made, presented to their parents and the conference, and are rightfully proud of, and discuss what they learned from the experience."

Okay, how does this disprove my point that its more about making machined embroidery accessible vs. learning CS concepts?

And who would attend Snap!Con unless they were part of that community working on the ecosystem or deeply involved with it?

You're projecting that I'm arguing in bad faith, but clearly that's you here, I can't really engage with you properly when your replies are full of things like:

" In a nutshell or TL;DR for someone unwilling to put in the time and effort to learn or even consider evidence, and who talks about promoting curiosity but is incurious yourself, and who performatively refuses to recognize an obvious Nazi salute and feels compelled to repeatedly defend and praise Elon Musk after he does it twice in a row on international television: it's all about Constructionist Education, not promoting or showing off a product, or selling computer controlled embroidery machines, Arduinos, and robots, or even a cynical huckster perennially promising full self driving cars and trips to Mars."

I visited all the links you provided and still arrived in the same conclusion.

and you're saying I'm incurious. Can you just stop lying and spreading lies about me? And when have I praised Musk?

If you're so emotionally attached to this 'language' that you feel the need to dig up "dirt" on me from my post history and spread lies and tell others that I'm some kind of fascist, maybe you should reevaluate your life choices. I wouldn't get this mad over someone criticizing Go or Rust etc.

And it proves that you're unable to take criticism of your language since you're convinced that no matter what, you're right and that with you posting some conference talk links, others should become convinced that it's a super relevant language.

And with regards to Constructionism, from my understanding, the main point seems to be to use existing knowledge to acquire more knowledge, CS/programming in this case.

From the Wikipedia page:

"The following five strategies make problem-based learning more effective:

1. The learning activities should be related to a larger task. The larger task is important because it allows students to see that the activit...

> My belief is that learning is done best when there is a connection to something real, not just a simulation or an exercise.

Okay but you're stacking your unsubstantiated belief based on a sample of just you against an entire field of research where people have dedicated their lives, so maybe you can understand why some people take it personally when you just call it BS off the cuff?

> My belief is that learning is done best when there is a connection to something real, not just a simulation or an exercise.

Okay but you're stacking your unsubstantiated belief based on a sample of just you against an entire field of research where people have dedicated their lives, so maybe you can understand why some people take it personally when you just call it BS off the cuff? I mean, you've spend a lot of time and words here pushing that point yet you don't seem willing to actually understand the other person's perspective.

> since you're convinced that no matter what, you're right

You're the one convinced they're right no matter what. You countered their very many resources with "Yeah but my belief". Okay, well what backs up your belief?

> Okay but you're stacking your unsubstantiated belief based on a sample of just you against an entire field of research where people have dedicated their lives, so maybe you can understand why some people take it personally when you just call it BS off the cuff?

No, I usually don't understand why people take it personally if it's not directed towards anyone, but I do understand why it would come off as demeaning, so for that I apologize.

However it was not to the degree where this guy's response was warranted at all. Not one bit.

> You're the one convinced you're right no matter what. No. I never said I was right. I've literally multiple times said that it is MY opinion, and my view point, and that I'm simply saying what I think.

Okay, decades of research and whatnot, so is the conclusion that Snap is perfect for what it's intended and that there is no room for criticism or opposing views against it? Would I have to do decades of research in order to say anything about Snap? That would basically mean it's immune from criticism. We can say the same things about SAP for example.

again, I was replying to this comment:

> 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.

I am not saying that it doesn't fill a niche, it's literally what I've already said, but I said that it doesn't mean that it is widely applicable, which is *totally fine*

> Have you actually examined if this is true or do you just feel that it is true? Yes, my experience was this. I never said it was for everyone, and you obviously know that, there's no way something will work for absolutely everyone

and I also haven't met basically anyone who learnt programming with Scratch or etc., it was mostly though playing around with real stuff in primitive ways and learning how things work until they became familiar.

I don't understand. There are a few people here who said they learnt programming through scratch, and that's great. However, I'm giving my own subjective experience and my thoughts as to why imo this is not as effective as some might claim, and especially for actually learning programming, not just gaining interest (which would be a small niche)

I think it's totally fine to give your own views, opinions and beliefs on a HN post subject, and I believe that progress happens through people communicating their own ideas and beliefs about things, from which others can then gain new perspectives outside of their own.

I also think it's very much against the hacker spirit to simply shut down everything because there isn't decades of research behind an argument.

You can discard all my beliefs and arguments here and that's totally fine. If they spark some idea or some theory, that's even better. Or if it's something you can relate to and go "oh so it's not just me!" that's also cool. Like how I felt with the original reply.

> However it was not to the degree where this guy's response was warranted at all. Not one bit.

Agreed.

> so is the conclusion that Snap is perfect for what it's intended and that there is no room for criticism or opposing views against it?

That's going too far in the opposite direction, no one has claimed that at all. Your opening post was "this is BS and just a toy, it's got no connection to the real world."

That was a strong negative statement so you've elicited strong pushback.

> and I also haven't met basically anyone who learnt programming with Scratch or etc.,

Well what kind of people do you associate with? What age group? I'm 40, people my age learned Logo as kids, which was the first language of its kind but also quite old by the 90s when I learned it. Before Logo, no one really made languages for kids.

The last student I taught who reported having learned from Logo was in 2020 and he was from Greece, so I think it may have some special appeal there. Beyond that, most of my students (I have taught thousands) report having their first programming experience in Scratch, regardless of whether they are majoring in CS or not. I can count on one hand the number of students who started learning naturally via Python or Javascript or even HTML before being introduced by a teacher to Scratch.

> I think it's totally fine to give your own views

It's totally fine to give your own views and you've spent many posts and many characters doing just that, so you haven't been impeded.

What I and others have are asking is for you to consider something beyond your own views. You've already acknowledged that probably you're not the target audience here, and it's exactly that: Scratch is not for you, and that's okay. That doesn't mean your way doesn't work when it works, but if you want to say something more about how far your method goes or Scratch's efficacy, you need something more than your own views.

Look, I'm actually with you -- I started programming on a mechanical typewriter at 5, and kept going from there. I love running enrichment programs for kids who are like that because you can give them anything and they'll just go with it. But really, only <1% of kids are like that.

> That's going too far in the opposite direction, no one has claimed that at all. Your opening post was "this is BS and just a toy, it's got no connection to the real world."

Yes, the phrasing I used was simply to point out that without the possibility of giving my beliefs and thoughts, we'd end up in this loop where you could only chime in if you can back your arguments with all kinds of research and citations, which usually ends up shutting the conversation down entirely, because the people involved in such projects can do so but most can't.

Strong pushback is completely fine and I appreciate it. It's kind of what I try to aim for, because it allows us to get down to the truth, or something of value.

> Well what kind of people do you associate with? What age group? I'm 40, people my age learned Logo as kids, which was the first language of its kind but also quite old by the 90s when I learned it. Before Logo, no one really made languages for kids.

I started programming at around 12, and many people that I know are in their 20-30s or so. I don't have experience with Logo or have heard of anyone in my circles using it.

Many of my friends began by tinkering with games, writing scripts for them or just writing basic scripts in Bash/Batch/JS/Python and moving to C#/C++ etc.

And I don't think Scratch is completely irrelevant, I just simply think that it is a very limited tool, it's got very few use cases, and that you're better off moving off of it sooner than later, rather than trying to use it for more complex projects or exercises.

> What I and others have are asking is for you to consider something beyond your own views.

And I appreciate that, but I don't think this was simply the case (not talking about you)

for example my reply at https://news.ycombinator.com/item?id=49666774 , I was very upfront with what motivated me and what angle I was coming from, and Don seemed to reply to me trying to convince me that I was mistaken and that in fact it was very relevant and that it "teaches real CS at college level"

I then replied in the aforementioned post that I still didn't get it, and what my motivations were when getting into programming and why the examples he gave didn't change my opinions and why I felt like that.

You replied there with "nor is it to prepare students for study in a CS program." but that was part of my criticism because he claimed that.

Scratch/Snap is fine for what it is, as a way to get young kids interested in the simple primitives of programming and logic. That's great! But again, I think there's a reason why some people, including I, don't see the appeal of these for actual "programming", which is what he tried to show me it's useful for.

That's what I meant with "toy". It's not _really_ programming, and it's very niche, which you seem to point out with how young kids viewed it as an "extension of art and play"

And I absolutely agree, don't put a 5 year old on a bash terminal or an IDE, but I'm not talking about that here. Don was giving out links on Arduinos, Web APIs/IoT, ML/AI, sensors, etc. that's what I meant with "missing the mark"

But I know that even in e.g. where I live, if you join an after-school computer club or whatever, they will happily let you do simple Java courses (MOOCs), or at least they used to do so, even at like 6th grade.

> Look, I'm actually with you -- I started programming on a mechanical typewriter at 5, and kept going from there. I love running enrichment programs for kids who are like that because you can give them anything and they'll just go with it. But really, only <1% of kids are like that.

Yes, that's why I'm aware that I may be missing something here, but I don't think even what you&#...

> It's not _really_ programming

You're dead wrong. Prove it. Explain what you mean. Give us your definition of what _really_ programming is, and prove that Python and JavaScript are _really_ programming by that definition, but Snap! isn't.

And while you're at it, post that video of yourself doing the exact same thing Musk did that so many people are calling a Nazi salute, under your own name real, to prove it's not. You seem so confident you're right, you should have no problem doing that either. If you refuse, you've just proven again that you're not arguing in good faith, and that you're a coward who won't stand by his own words and real name and perform what is obviously a Nazi salute.

> You're dead wrong. Prove it. Explain what you mean. Give us your definition of what _really_ programming is, and prove that Scheme, Python, and JavaScript are _really_ programming by that definition, but Snap! isn't.

Nobody is using Snap in production or writing real applications with it. The same can't be said for Python or JS. When you're writing Python or JS, you are truly writing code.

I would say Scheme is programming because it's literally a Lisp dialect, and Lisp is still used so.. yeah.

With Snap/Scratch, you're playing around with Snap/Scratch. Do you understand my point here?

By the time you'd reach for the complex functions of Snap, you're better off just learning actual languages, do you get what I mean? Unless you just want to make stuff happen fast.

I would disagree with the guy saying you can "learn software engineering from this". No you can't and you really shouldn't try to.

Otherwise we can go and argue that Factorio blocks or Minecraft redstone is programming because you can make a CPU in them.

> And while you're at it, post that video of yourself doing the exact same thing Musk did that so many people are calling a Nazi salute, under your own real name, to prove it's not. You seem so confident you're right, you should have no problem doing that either. If you refuse, you've just proven my point again that you're not arguing in good faith, and that you're a coward who is afraid to stand by your own words and real name and perform what is obviously a Nazi salute. Because you know you're wrong.

Again reminding you to self-reflect because this is unhinged. What is wrong with you?

> I would say Scheme is programming because it's literally a Lisp dialect, and Lisp is still used so.. yeah.

Snap! is literally a Scheme dialect.

So by your own definition, Snap! is a "real" programming language. I'm glad I finally convinced you to change your mind when confronted with irrefutable evidence!

But that's an weird definition that makes languages like Scheme and Snap! stop being "real" programming if Lisp stops being used. Is that really what you mean? A language can change from "real" to "not real" depending on how much another language is used?

Again, please elaborate and refine your definition of what a "real" programming language, because it has a lot of holes and inconsistencies in it. See if you can whack all those moles.

> Nobody is using Snap in production

Teaching children AI programming and Computer Science concepts IS PRODUCTION. It's producing the next generation of human beings. Those children are live and shipping in the real world. There is no dev or qa deployment.

> Again reminding you to self-reflect because this is unhinged. What is wrong with you?

Musk making a Nazi salute twice on live international TV was definitely unhinged, we can both agree. Are you unhinged enough to do it too? Even recorded on youtube, under your hn handle, if you're too cowardly to do it under your own name like unhinged Musk did?

(comment deleted)
> like Snap doesn't really provide a way to understand how stuff is actually done... So I don't see how it'd be very useful for e.g. learning CS when it's not really something you'd see in the real world

The point of scratch is not to prepare students for the professional world of computing, it's to expose students to computational thinking. It's the same reason we teach the Bohr model of the atom before exposing kids to orbitals and probability distributions -- the Bohr model is false but at least it can provide a model and scaffolding for future learning. They're not ready for the real Python of Javascript yet. You as a child might have been, but scratch is for teaching all students, not just the ones with a preexisting aptitude for coding.

> if it's not really something that's used in the real world, unlike say JS or Python, why use it instead of getting up to speed in a real language?

Why do you feel like exposing young children to professional development tools is important? Have you ever tried to get a class of students up to speed in a real language? Give it a shot and it might answer a lot of your questions.

> it could be that I simply don't get it, or that I'm not the target audience

Yes, this is very likely. Few years back I did a survey of elementary school students and their opinions on programming. Young kids exposed to Scratch reported that programming was "fun", "exciting", "enjoyable" and "something they wanted to continue to do". They viewed it as an extension of art and play. On the other hand, older kids who were then exposed to Python no longer reported feeling the same way about programming, instead using words like "frustrating", "hard", "confusing" and most damningly described it "like math class".

Exposing kids to the frustrating and confusing path first is a good way to make sure no one wants to go into the field.

> I feel like there's a reason why these haven't really taken off,

wdym Scratch is wildly popular with students and widely used throughout the world. You see people here in this thread stating it's what got them interested in programming. Something like Snap! is nice because it provides a higher ceiling for Scratch programmers. It's not as popular because it Scratch serves much of the role, but its existence is an important bridge for older students who will eventually transition to Python.

Here's how teaching kids goes without scratch:

"This is python, we use it to do professional development work. Here's VS code, we use it to do professional development work. Let's learn them."

6 year olds: "Okay!"

Proceeds to mangle whitespace, variable names, scope, indexing, ==, forgets :, doesn't understand what def is, even after they get all that the program is basically "hello world" print to console.

6 year olds: "Programming is hard and frustrating with little payoff, I don't want to do this anymore"

The one 6 year who who will grow up to be a greybeard sysadmin "What do you mean, this stuff is great! I can't wait to learn more!"

Teachers: "I have no idea what I'm doing, Python is supposed to be easy but I'm just confused."

--

Here's how teaching kids goes without scratch:

"This is scratch, you snape these colored shapes together and they do things like make this character move"

6 year old: "Okay!"

Proceeds to make games and stories with graphics, sounds and interaction, which they share with their friends, fully editable and runnable in a web environment with zero setup: https://scratch.mit.edu

6 year olds: "Wow programming is fun! I can't wait to learn more!"

The one 6 year who who will grow up to be a greybeard sysadmin "I agree this stuff is great! I can't wait to learn more!"

Teachers: "It wasn't hard to get up and running with scratch, it's very easy to teach and I get it."

You also can't learn to be a great novelist from the alphabet song, but it has its place!
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.

This has 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 intractable.
I skimmed the manual. It's more powerful than I thought. You can do metaprogramming directly in the language, which will deconstruct blocks into lists. It's basically Scheme as blocks,
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.
Snap does have a limited keyboard mode (shift click), but it's not really as good as "real" IDE.
Not based on an official Blockly implementation. But you can add keyboard navigation to Blockly(-like) scripting reasonably easily:

https://www.youtube.com/watch?v=ITWSL5lTLig

The video above shows keyboard, but the main motivation for the key-based navigation was actually gamepad.

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.

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.

This would be so exciting. The implementation language would be less of a concern, but it worth wondering about... Would you use Rust, Racket, Lisp, Clojure, etc? I had a lot of fun teaching adults to program using DrRacket and didn't focus on the language as much as the concepts you mentioned above. They ended up being easily able to move to Javascript, Swift, and others at the end of the course.
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:

https://turbowarp.org/1201938491

In my experience, there’s no better way to learn more complex programming techniques or tools than running into a brick wall with the simple tools you’re familiar with, spending a ton of time on an unreasonably irritating solution, only to realize that you’re running into a classic [n] problem and some clever person figured out a simple logical trick to address it. I mean, it can be enraging but that knowledge tends to stick.

Though I doubt that happens much anymore.

Couldn't agree more. To add on I think you can learn so much by doing something incredibly stupid you're really not supposed to in an intentionally constrained environment (in a good way, like the grandparent comment). The sort of absurd things that get posted here occasionally and get a few commenters genuinely annoyed that they're doing that with their time instead of curing cancer. Plus it tends to be easier than it looks.

(I think some people have caught on to this and found out that Claude is pretty good at it.. not sure what the point of that is but whatever)

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. :)

https://news.ycombinator.com/item?id=38016554

[...] I'm also a huge fan of Snap!, which has all the advantages of Logo (Lisp without parenthesis) and Scratch / eToys / Squeak / App Inventor family of block based visual programming languages, but all the power of Scheme.

If you know Scheme, then it's easy to think about Snap!: it's just Scheme with a visual block syntax, but with some functions renamed to make them easier to learn, plus all the stage and turtle graphics stuff from Scratch, running in a web browser!

I didn't realize until watching in amazement as Jens Mönig used his own creation, that it also has full keyboard support, so you can create and edit programs without using the mouse!

It's much easier to teach Scheme to kids by teaching them Snap!, because the user interface is so much better than a text editor.

I attended Snap!Con2023 in Barcelona recently, and we discussed some interesting possible extensions to Snap:

Grammar defining blocks. Right now you can create your own custom vocabularies of blocks that fit together in particular constrained ways, by writing JavaScript Snap! extensions. Develop a set of blocks for visually defining new grammars and vocabularies of custom parameterizable blocks.

For example, a grammar for representing plants with seeds, roots, stems, leaves, flowers, petals, etc. You can assemble and edit them manually by dragging and dropping from a palette, or write programs that generated and interpret and transform them, and pass them around as data, for example as instructions to the embroidery machine to sew, or logo turtle to draw.

Turtlestitch - Coded Embroidery:

https://www.turtlestitch.org/page/about

Ken Kahn led a discussion about integrating LLMs like ChatGPT with Snap!. He's the developer of eCraft2Learn for teaching kids AI programming. Ken recently made some cool Snap! extensions for integrating LLMs with the speech synthesis and recognition system, and orchestrating conversations between different characters.

Snap!Con2023: Creative uses of Snap! blocks using large language models like GPT:

https://www.youtube.com/watch?v=d2rNGsbzkXI

Enabling children and beginning programmers to build AI programs:

https://ecraft2learn.github.io/ai/

But when it comes to LLMs, code generation, and code understanding, JavaScript has two huge insurmountable advantages over Snap! or any other block based visual programming languages:

1) First of all it's extremely well known, by both humans and LLMs.

2) And second of all, there's typically no efficient and faithful way to textually represent block based programs in a way that ChatGPT (or humans) can easily understand and generate.

Of course you could just dump out the XML or JSON save file, but that wastes your token budget, and doesn't work well, because the LLM doesn't inherently understand the syntax and semantics of save files the way it deeply groks JavaScript.

You need to define some equivalent text based language to serialize and deserialize your visual programs, or define some equivalency to an existing language, so you can translate back and forth without loss.

Like Relax/NG has an XML syntax and also a simple concise human readable syntax, both which can express the same things.

But no matter what equivalent language you come up with to serialize your block programs into, it'll never be as well known as JavaScript (unless it IS JavaScript).

I think Snap! could take advantage of its equivalency with Scheme, and you could just parse Scheme into Snap! blocks, and the other way around. And ChatGPT knows scheme pretty w...

> I think Snap! could take advantage of its equivalency with Scheme, and you could just parse Scheme into Snap! blocks, and the other way around. And ChatGPT knows scheme pretty well, though it's not as ubiquitous and standard as JavaScript.

There's already a right-click menu option called "Lisp code". Take the "turn left 15 degrees" block (the "15" is the default value but of course it's a parameter that can be set to anything), drag it out into the editor, and right-click the block. Choose "Lisp code" and `(left 15)` will be displayed in a results bubble; you can then right-click the results bubble and export it to a file or copy it to the clipboard. If you have two blocks put together then the resulting Lisp code looks like this:

    (
        (left 15) 
        (move 10)
    )
I haven't checked recently to see if they have finished the other half of that feature, the parse-Lisp-into-blocks half. But I know they want it to be in there; I forget what its status was last time I checked.
You can use the split and join blocks to get the code and turn it back into blocks, but it's not well documented like I mentioned earlier. You split a ringified script "by blocks" to get a list version, which you can then use the "[text] of [list]" block (it's the one with length selected by default in the dropdown). That allows you to get the "Lisp" version in code.

Once you have the text version, you put it back into a split block set to split "by blocks", which gets the list version, which can then be put into the input list of a join block to get the code again.

Parsing basically works!

Whether using text with LLMs in Snap! is actually a good idea is up for debate, but it is doable.

Question (serious) - Why teach kids programming anymore?
Programming encourages analytical thinking, and also if no-one learns to program it'll become magic, and that'll be a major societal step back.
I'm a software engineer turned public middle school science teacher.

At the moment, I would never encourage any of my students to go into software engineering. It seems to me that's rapidly becoming a field where a small competitive handful will be making millions and everyone else will be unemployed.

That said, I have no problem teaching some programming. We're going to be making autonomous greenhouses soon, with windows that open or whatever, and they'll be using Scratch to program their micro:bits.

Anything that empowers you to do stuff is a good thing.

Why build pine wood derby cars? Why paint pictures? Or take photographs? Why memorize poetry? Why build things with Legos?

Because it makes your brain think through problems, breaking them down to the point you can build a solution from the smallest pieces. AI may be a big part of the future, but we need to maintain our own human creativity and problem solving skills, and learning the tools that are available will help us to build and create useful things throughout our lives.

If you're thinking that LLMs will be doing all the coding, well, in my experience I get far better results from the model when I say "Write me a function that does X. It should take parameters Y and Z, and its validation step should check for conditions A, B, and C" than when I say "Write me a function that does X" without any further guidance. With no guidance, the LLM can run off in weird directions, and if you don't have any programming experience, you might not realize why those directions are bad ideas.

LLMs, at least the current crop, are skill multipliers. If your skill is positive and large, you'll get great results. If your skill is positive and small, you'll get small results. If your skill is negative, the LLM will harm you more than it helps you.

[delayed]
It's an odd quirk of Snap that they never cleaned up. Some blocks have a "friendly" error message. Delete a variable and uses of it get "Hmmm... a variable of name 'name' does not exist in this context". That one just regurgitates the JS error when it should say "You need to add and select a sound to play a sound".
[delayed]
You have to add one, in the sounds tab you can record one, or in the file menu they have a library of them you can load (they also have libraries of sprites and backgrounds which are pretty useful when we use this with students).
Any name that you can't type is going to be a problem.
(comment deleted)
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.

same here! I got into Scratch at the age of 7 and without it (and the Scratch community), I wouldn’t have any career (or even a plan for one). I also worked as an intern on the Scratch team at the Scratch Foundation.

I also know that one of the important developers for the Asahi Linux drivers also started on Scratch. I think there’s a lot of real software engineers who started on Scratch (and the Scratch community, which is often overlooked)

This is what happened with me and BASIC. I had to upgrade to C when my programs became limited by complexity, speed, and difficulties robustly integrating audio.
same, switched from Scratch to C at age 8, but I only really wanted my programs go fast back then :)
I also learned programming with Scratch first, at around age 11, but i soon left it for Python
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)
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'.

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.
TY I was not aware of that, it sounds extremely useful.
Welcome to the esoteric church of functional programming!

Sure, you could use a Scratch for loop and be done with your cat piano program but have you considered constructing something that theoretically works like a for loop from obscure calculus?

We even have the occult symbol!

Joking aside, if base Scratch does lack a way to express trees as claimed Snap! may in fact be better from the perspective of teaching computer science concepts.

It did as of six months ago when I evaluated Scratch and chose Snap! instead for teaching the beginning-coding class I had signed up to teach. Scratch had lists, but they were only allowed to contain text or numbers, not other lists. To make a tree, you need to be able to nest lists inside other lists. Snap! allows lists to contain any kind of data, including other lists, or even blocks. And it allows blocks to take lists as input, which is another thing lacking from Scratch. Snap! also includes the standard basic list-manipulation functions like `filter` and `map`, which aren't in Scratch at all (naturally, since lists in Scratch can't be passed as input to blocks).
I feel like HN shouldn't auto-capitalize "λ" in this instance. An anonymous function is a λ, not a Λ.
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".

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.

Thank you for your work on Snap! and for finding the time to respond to our comments.
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?
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.

[flagged]
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 well
You can't make a block that returns a number in Scratch, let alone another block. It's really frustrating.
. o O (Maybe Ubuntu users can use snap to download Snap! from the Snap store…)
inserting an exclamation point into the name is desperate.
How does this compare to blockly?