As a 13 year old, I learned to program in Small Basic, a Microsoft educational version of Basic. There was a pdf[1] that explained the basic concepts of programming in 69 pages. I loved it.
I don't think I would've even liked programming had I used Scratch (or Snap) instead of Small Basic. Scratch feels too dumbed-down, limited and clunky.
Maybe Scratch is good enough for 5-9 year olds, but for older kids, I think nowadays Javascript + HTML5 canvas is much better. Javascript lets you see your creation in the browser, which feels like the "real world", because it is. Additionally, it lets you do basically anything you can imagine in a browser. And you code using regular text, which feels much better than colored boxes.
And Small Basic is still better than Scratch I think, even though it seems kind of abandoned by Microsoft.
Even better than the browser is the apps that bluetooth-connect to Legos, so that you can build something with Legos and write a program that operates the motors and sensors. That feels even more like the "real world" because it is ;-)
I have tried this and basically all of the kids-programming methods I can find. It’s hard for something to be a good solution “for kids” nowadays if you can’t run it on an iPad. The interface just ends up being much slower and clunkier so it’s harder to stay engaging. There are a number of iPad-based programming introductions, like Tynker and the various LEGO-based apps, that are the best ones IMO.
Do kids care about clunky interfaces? Genuine question, I have zero experience dealing with kids. It's just that I remember that when I was myself a kid I would be attracted by any interface (physical or virtual) with a lot of buttons and toggles to play with.
I feel like clunky is fine, but a lot of these kids programming apps are not just clunky, they're finicky. Weird mouse hit zones, massive slowdowns, glitches, crashes, lost data, etc. Even the "good" ones have most of these issues.
I'm sure it depends on the kid, but my children at least use enough iPad apps that they are quite familiar with the standard gestures and UI controls. For adults it's quite frustrating when an application doesn't use the platform standards - like when a button doesn't look like a button, or if a menu works in some nonstandard way. It isn't interesting, it's just annoying. Kids who are iPad-savvy seem to feel the same way about bad UI as adults who are familiar with their iPhones.
Interesting question. Indeed "kids" may enjoy playing with anything, if considered a homogenous group.
This doesn't remove the fact that basic cognitive constraints will still apply although you're targeting a different level of cognition.
With enthusiasm, easy things may be easy to reach despite clunkiness. Reaching more ambitios goals as the hunger grows still depends on basic ux/ergonomics and is greatly enhanced by doing basic usability testing according to well founded protocol.
Snap! is just a JS web app, it works just fine on iPads. Snap! is also the closest to "real programming" in my experience because you can make custom blocks and reporters (aka functions), lists are first class so you can nest lists or pass them to blocks or whatever with them, has lambdas, and can call JS so you have full access to the browser APIs and the JS ecosystem.
It works on iPads, but it's a pretty terrible experience. Many of the UI elements are much smaller than the iOS guidelines indicate, and in general nothing is using platform-optimal UI controls.
Can you try my Android game https://corepox.net/ and give me advice on how to improve it. I am very much trying to communicate computational thinking concepts without being too overtly educational, but it's not perform any well and I need help.
Exactly my question! Seems to me like they are pretty similar products – to the point of "clone" status, as the two editors have the same blocks in the same colors and seem to be functionally identical. The only difference I can see is that the advanced features of Snap! appear to be only slightly more accessible than those of Scratch (plus the change of "sprite" to "costume," and Gobo's growth of a horn and extra foot).
The Snap! mascot is named Alonzo after Alonzo Church, and the "horn" is a lambda to symbolize Snap!'s functional programming features. I just checked, and both Alonzo and Gobo have three feet.
"Sprite" and "costume" are distinct concepts in both Scratch and Snap!. A costume is a texture, and a sprite is an actor associated with state such as a current costume, as well as program logic.
The advanced features are there - like making API requests, Lambdas and real custom blocks/functions. Beyond, that you can write in JS to extend Snap! within itself.
Since it's immediately obvious from the banner that there's some relationship between Snap and Scratch, the homepage should give a short summary.
At a minimum, I would present the first paragraph from the "About" page in a prominent place on the homepage:
> 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 lists, first class procedures, and first class continuations. These added capabilities make it suitable for a serious introduction to computer science for high school or college students.
Snap! is explicitly based on Scratch and started out as a fork, BYOB. Snap! was rewritten from the ground up. Snap!'s motto is "First class everything," and taking inspiration from Scheme, it supports first-class lists, first-class functions, and other types of data. Snap! had user-defined functions before Scratch added them, and unlike in Scratch, user-defined functions can return values in Snap!. Snap! also supports script-local variables.
Though both Scratch and Snap are open source, I can't see any documentation for building on top of either of them. If you're interested in building something in this space, Blockly [1] is essentially the same and has some great docs for working with it (no affiliation).
It's definitely possible but the Scratch Blocks [1] wiki [2] is indeed a little sparse. VEXcode Blocks [3] seem to be a successful product, so somebody must have figured it out.
I took a SNAP based course in high school before it was part of AP CS principles. I would have preferred if they used scratch. SNAP seemed to have bugs if you wrote non-trivial programs. I tried to write a checkers min-max ai, but it kept on spitting out panics/exceptions at me.
I don't think I would've even liked programming had I used Scratch (or Snap) instead of Small Basic. Scratch feels too dumbed-down, limited and clunky.
Maybe Scratch is good enough for 5-9 year olds, but for older kids, I think nowadays Javascript + HTML5 canvas is much better. Javascript lets you see your creation in the browser, which feels like the "real world", because it is. Additionally, it lets you do basically anything you can imagine in a browser. And you code using regular text, which feels much better than colored boxes.
And Small Basic is still better than Scratch I think, even though it seems kind of abandoned by Microsoft.
[1] (notice: direct downlad) http://download.microsoft.com/download/9/0/6/90616372-C4BF-4...