3 ms·
To nitpick, the block code screenshot at the top of the post is not actually Scratch, it's Snap![1] - which is essentially a superset of Scratch[2] Scratch it
by Retr0id 5y ago
To nitpick, the block code screenshot at the top of the post is not actually Scratch, it's Snap![1] - which is essentially a superset of Scratch[2]
Scratch itself has no concept of "custom reporters" - i.e. functions that return a value. If you want a function to return something, the closest approximation is to assign the result to a global variable. But you can't do recursion like that, so you'd need to use a "List" variable to emulate a stack.
If you wanted to write a recursive factorial function in "pure" Scratch, it would be significantly more convoluted than the one shown. Scratch cannot elegantly express the concept of recursion, so if you want to teach it, you probably shouldn't be using Scratch to do so.
I suppose this means I agree with the author in general, but I do think that Scratch is great for teaching the concepts that it can express well - i.e. very basic imperative programming, with sprite-based graphics.
[1] https://snap.berkeley.edu/ https://snap.berkeley.edu/
[2] https://cseducators.stackexchange.com/questions/112/what-can-snap-do-that-scratch-cannot https://cseducators.stackexchange.com/questions/112/what-can...
- ethbr0 5y agoThat's a great illustration of where "kids tools" tend to break down: on the top end. They over-focus on the onboarding and initial experience, but then forget to provide an escape hatch into more powerful concepts and methods (that all already exist!). IMHO, we'd do kids a better service by just wrapping adult tools with "first steps" guidance, and then allowing them to click through to the full mode + additional docs when they're ready.
- sitkack 5y agoThat escape hatch is just the rest of computing. Onboarding is always the hard part. How many people get started just fine with the language and then can't figure out how to compile and link their program? I think you underestimate how needlessly complex and also boring many parts of computing are.
- ethbr0 5y agoIt is. But there's a difference between "more of a tool you're familiar with" and "an entirely new tool," especially for kids who don't have a boss breathing down their neck, and have endless attention distractions a click away.
- Retr0id 5y agoI wouldn't quite call it the top end, more like the middle. I don't see the lack of escape hatch as a weakness. It just gives you a stronger motivation to move on to a "real" language, when the time is right. I don't think you can really wrap adult tools into something nearly as ergonomic as Scratch. Bear in mind that you don't need to be able to read, write, or type, to use scratch (although basic reading ability certainly helps). I am certainly an outlier here, but I enjoy implementing advanced concepts in Scratch, for the challenge of working in such a constrained environment - I suppose in a similar way to how demoscene coders still enjoy working with the C64. For example, I recently implemented X25519 elliptic curve scalar multiplication in scratch[1] (I'm slowly working my way through most of libsodium's cryptographic primitives). It's a turing complete language, so there's really no limit to what you can do with it. As an adult, progamming by dragging blocks around feels like wading through treacle, so I wrote some codegen tools in python to speed things up. [1] https://scratch.mit.edu/projects/656881761 https://scratch.mit.edu/projects/656881761
- ethbr0 5y agoI can't speak to Scratch, but have been using a variety of low code tools over the years, both kid and not. To enunciate my issue more clearly, I'd phrase it more as "Turing efficiency." I.e. "How cleanly and concisely can I implement an arbitrary advanced concept in a language/tool?" If you have to construct a Rube Goldberg machine from the primitives afforded... that's interesting (in an Incredible Machine kind of way) but probably not ideally educating. I certainly wouldn't want to have to support similarly architected code in production! ;) And I think it isn't always clear to kids that "clever hacks" picked up over years of experimenting aren't the same as "good code" in more powerful languages. By that point, some of "well, that's what coding is" has been internalized.