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.
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.
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.)
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.
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.
It did have a slight learning curve, but 5th graders were competing just fine against high schoolers haha.
Visual coding is a pain to change and move around quickly. It’s just clutter ultimately - if you know how to actually code.
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.
But "no connection to the real world" is hard to sustain once you look at what people actually build with Snap!/Scratch. The ecosystem is full of bridges to physical stuff:
Cameras, microphones, audio, pen plotters, 3D (BeetleBlocks). Snap! 12.1 (video from a few days ago) adds body-language recognition, Bauhaus-style shape compositions, first-class Processes, translation updates:
https://www.youtube.com/watch?v=ID7wYxzHUAc
Arduino / micro:bit / boards (Snap4Arduino, MicroBlocks, many hardware libraries):
https://www.youtube.com/watch?v=Ltzlzk_zkys&list=PL5OeDsbY1E...
Robots (Finch, Hummingbird, Lego NXT, drones):
https://www.youtube.com/watch?v=6_0EqIbTlkk
Sewing machines (TurtleStitch -- embroidery from blocks; one of my favorites):
https://www.youtube.com/watch?v=K6ra5ThxkrE
Web APIs and IoT:
https://www.youtube.com/watch?v=l_P7MoBG250
ML/AI and digital fabrication (Ken Kahn's eCraft2Learn):
https://project.ecraft2learn.eu/
The "what's this? how do I make a thing like this?" curiosity you describe is exactly how a lot of people get pulled in -- making something move, blink, sing, or stitch on a machine they can see, rather than learning abstract syntax first. Blocks are the on-ramp; the project is the motivation.
Different audience than yours, maybe. But "just a toy walled off from reality" undersells what this community has been doing for decades.
Snap! also teaches real computer science at college level while staying accessible to kids -- not a stripped-down kiddie language. Brian Harvey: "Snap! is Scheme disguised as Scratch" (though he notes the original intent was closer to Logo disguised as Scratch):
https://forum.snap.berkeley.edu/t/hygienic-macros/3258/6
Re alanbernstein's point about keyboard vs GUI: Snap! is not keyboard-hostile. It has a keyboard editor for scripts -- build and edit whole scripts without the mouse, block search from the keyboard, infix arithmetic expressions typed left-to-right. Manual chapter:
https://docs.snap.berkeley.edu/user-interface-elements/#sec-...
Demo (typing formulas from the keyboard):
https://www.youtube.com/watch?v=ahHAl3p3gEU
Full IDE accessibility (screen readers etc.) is still a work in progress; Jens and Brian document what's there now:
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
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.
> 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.
Jens Mönig was on the Scratch Team (invited by Mitch Resnick). BYOB was presented at Scratch@MIT 2010 explicitly to merge ideas back into Scratch, not to fork the community:
https://scratched.gse.harvard.edu/resources/announcing-byob2...
Berkeley has kept showing up at Scratch conferences (Amsterdam 2015, Bordeaux 2017), and the Scratch forums hosted BYOB/Snap! discussion for years:
https://scratch.mit.edu/discuss/topic/4455/
So "NIH syndrome," "reinventing the wheel," and "fragmenting the community" is pretty much the opposite of how these two actually interact.
Documented cross-pollination:
BYOB => Scratch: custom blocks (Scratch 2.0 took command blocks only, not reporters/lambda). That was an explicit goal:
https://en.scratch-wiki.info/wiki/Snap!
Scratch => Snap!: browser rewrite timing influenced by Scratch 2.0 plans; Morphic via John Maloney; CC-licensed costumes/sounds used under license.
Shared people: Jens (Scratch Team => Snap! lead), John Maloney (Scratch/Morphic; GP session with Jens at Scratch2015AMS), Bernat Romagosa (Snap!, MicroBlocks, Snap4Arduino -- Bordeaux, Snap!Cons).
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!
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.
Most of them will never become professional actors, authors, mathematicians, artists, photographers, etc ... and yet they will rely on those skills, on their own or combined, pretty much every single day of their lives.
Why do we teach them to read, we have text to voice?
Why do we teach them to broom, we have Roombas?
Why do we teach them to do the dishes, we have dish-washers?
</sarcasm>
My first attempt to place a statement (play sound at Hz) failed with a Type Error.
Android Chrome.
[...] 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 well, though it's not as ubiquitous and standard as JavaScript.
Logo would not be as good as Scheme, since it has ambiguities, because you need to know the number of parameters a function uses in order to parse it, since it's essentially Lisp without parens. [...]