Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Kids don't need tools for kids (lambdaway.free.fr)
109 points by martyalain on March 14, 2022 | hide | past | favorite | 161 comments


When I was a kid, I wanted to write games. I wanted to use the same techniques that "real" games used, not some dumbed down "for kids" thing. I disliked everything that stressed ease-of-use and instant gratification and I liked everything that looked like it was written for professional use. In hindsight, this probably wasn't the smartest decision.

But it did lead to me learning C++, DirectX, OpenGL, 3d math, and so on. And I did end up in a place where I'm more or less paid to do what I did for fun back then.

Also, the learning process taught me frustration tolerance, which is a very useful skill to have in the industry, and which many others seem to lack.


I started learning C at the age of nine because I wanted to make games and somewhere along the way I realized it was a viable career. I still love coding and computer graphics and feel very happy that I'm able to do it professionally.

Right now in the room next to me my son, who is five, is playing with Nintendo's Game Builder Garage. He likes watching me work, he likes using the Game Builder with me to make his own silly games together. And he spends a lot of time goofing off and making his own silly prototypes that don't amount to anything but give him a lot of pleasure. He's also very much into Minecraft and makes some astonishing things in Creative Mode which I didn't think you could (a city on land but encased in flowing water yet dry on the inside?!).

He's at an age where he loves creating and he has a surprising attention span for his age. I showed him code because he asked what it was, but he can't read yet. I've tried showing him actual game development tools since he said he wanted to learn. Despite being very smart and intensely focused that kind of exercise doesn't quite work for him, yet.


> taught me frustration tolerance

You made it through. Many kids don't. I too wanted the "real" stuff, but so much so I didn't embrace the medium I had before me. One could make Battle Zone in Logo or Flappy Bird in QBasic.


Frustration Tolerance should be its own area of study. It is the demarcation line between quitting and enjoyment.


I basically did the same things for the same reasons as a kid. I'm very glad to have learned C++, but I bounced off DirectX pretty hard. The API wasn't great (this was DirectX 7), and the tools available for free were mostly nonexistent. So I never made much progress there.

I'm really glad that kids today can build games with real-world professional tools that are much more friendly, like Unity or Godot.


My story starts in a very similar manner. I started with C as a kid (9) and tried my hand at DirectX 7 when I was a bit older (maybe 12?) but found the API quite hard to understand. I stuck with making text based games for a few years and moved on to 2D programming using a library called Allegro[0] in high school. It wasn't until university that I came back to 3D programming and learned OpenGL. It clicked in a whole other way than it did as a kid and I've loved it ever since. I even ended up with a career as a graphics programmer.

[0] https://liballeg.org/


I learned C without too much difficulty as a teenager, and also began to learn C++ at that point (I doubt anyone ever finishes learning C++), but I abandoned Win32 and MFC in disgust when I briefly tried to learn them at age 18 in the late 90s. Maybe I would have gotten further if I had started younger, or if I hadn't been spoiled by Java first. As it happened, I didn't really master Windows programming until my 20s when I had to do so for a paid job.


I went the opposite way. Started playing with HyperCard and made some fun demos. Only later did I begin to really wonder how someone goes about making HyperCard and got deeper into how frameworks are created.

Different strokes for different folks. Some find the distance between the fundamentals and a working demo extremely frustrating in a lower-level API.


The whole movement around "teaching kids to code" has been interesting to watch. Multiple goals seem to be conflated together (which isn't uncommon in education):

- Helping kids think in new ways

- Building skills for "the future" / "jobs"

- Encouraging kids to create their own things, instead of just consuming

- Probably some others I'm not thinking about! (e.g. improving odds of getting into an "elite" college)

Each tool, whether it's C or Scratch, should be evaluated against the design goals as well as the embedded context / environment that children are introduced to programming in. This is a rich topic undoubtedly.

My 2 favorite starting resources are:

- Learnable Programming by Bret Victor: http://worrydream.com/LearnableProgramming/

- Mindstorms by Seymour Papert: https://www.amazon.com/Mindstorms-Children-Computers-Powerfu...


This conflation is unfortunate. The push towards teaching critical thinking and creative problem solving is the right direction, IMO, and introducing some basic programming tools can help with that. Unfortunately there are a lot of parents that don't see the value and just want their kids to "get good at computers" so they can find a good job in "the future." They badger the schools to crank up the "STEM stuff" so kiddo can grow up and nab one of those obscene starting salaries and be the next [insert infamous tech CEO here].


You forgot "drive the wages of coders down by inundating the market with people with who can write satisfactory code under pressure"


It's (unsurprisingly) met all the same barriers that other subjects have met in education.

The notion that there are visual learners etc. now doesn't seem to true (and possibly even a bit of a scam). But different approaches do appeal to different people and like any subject, teachers and students need to work together to find the ones that fit.


- Helping kids think in new ways (what teachers want)

- Building skills for "the future" / "jobs" (what politicians promise)

- Encouraging kids to create their own things, instead of just consuming (what I want)

- improving odds of getting into an "elite" college (what the parents want)


And:

- Encouraging parents to buy very overpriced toys


The title says "Kids don't need tools for kids" but is this about kids or just the author?

Different people learn differently, if a tool or method doesn't work for someone that's on them to find another tool or method.

Scratch for example is great for visual learners who haven't mastered what it is there to teach. It will work for some, not for others.

I’m always a bit wary of folks who just “get it” telling everyone about how they should or should not learn something. I remember a teacher who in my first programming class read from a book about C, and told us to now go complete a task. He wanted everyone to understand ALL the details for every line of code as we wrote it.

Took me 20 years before I seriously tried coding again.


Why not have all kinds of tools? I began my career with a "for kids" software creator tool called Klik and Play[0] and I loved it. I also liked typing into the DOS console, creating simple games with batch files and the CHOICE command, but having a nice GUI to create graphical games was really fun and as it turned out, educational. I have no experience with Scratch, but looking at how widespread it is, and how people create projects to help learners transition from Scratch to other languages, I think it's a fine starting point IF someone is interested in it.

[0] https://duckduckgo.com/?t=ffcm&q=Klik+And+Play&iax=images&ia...


Same here. Batch programming was life if you wanted to play some games by Origin Systems. It was a chore. Klik n Play was delightful.

Afterward I was able to get back to text coding and make a career of it.


I hope to teach my kids programming so I started with the older on learning algebra. I have been using the tablet app called dragonbox algebra (which is amazing!). The issue I am facing now is that my kid knows visually/mechanically what to do in the app but they don’t understand why they have to do some things. We have been moving to the whiteboard so they have to translate swipes and taps to regular algebra notation. They literary think in terms of the app. What has helped a lot is to do a problem on the app then do the same problem on the board. Their eyes light up when they see the connection.

I think I will have the same translation dilema if I start with scratch. At some point we will need to get writing textual based code but I am not confident that I can get my kids exited about programming without graphical tools like scratch/dragonbox.

In classroom setting most teachers could not teach the textual form of programming but something like scratch allows kids to explore and build the vocabulary to be able to translate to a textual representation.


I don't think a text representation is intrinsically a problem, but I think Alan Kay was right that the level of abstraction has to be in line with children's intellectual development. Whether one uses Squeak Smalltalk (textual coding) or Scratch 3 (visual coding), the code to implement a Tetris clone for example is surprisingly simple and accessible to kids, because the underlying abstraction is pretty concrete.

I don't think the model language taught in the linked article is going to work for most kids, because the level of abstraction is too high. I'd guess that even most non-CS undergraduates would struggle with the double recursion implementation of Towers of Hanoi that he presents (even with the comments he also adds; without the comments I'd venture most non-CS undergrads would have serious trouble figuring it out).


I think typing skill does matter with text representation. I've seen a lot of 7-9 year olds who might be able to cope with text-based languages conceptually just get frustrated by the slowness of typing when introduced to them. Which doesn't mean it isn't impossible for them to learn to type at the same time but they have to be much more motivated.

Syntax and other errors in many language are also really frustrating and I've seen children give up on text-based languages in frustration with all the errors they get (especially when they make lots of typing mistakes!)


I agree with you. Obviously more explanations should be given around the following examples. This page should be considered as a skeleton used for a guided exploration. More examples from here: http://lambdaway.free.fr/lambdawalks.


Dragonbox algebra uses the normal algebra notation for the later stages, so it could be you just need to persist.

For example initially the unknown variable is the namesake cute dragon in a box, but it later becomes "x", the bubbles become brackets, the green whirlpool becomes 0, the cute animals become other variables etc.


Thank you. You could have a look to this page http://lambdaway.free.fr/lambdaspeech/?view=teaching


Ah cool. I will check it out. Thanks!


My experience with using Dragon Box with my children was that it gave them a way of thinking about Algebra patterns even without knowing all the details of what they are doing. When they actually studied Algebra, they would often look at the explanation of a new concept. Struggle with it for a bit and then a lightbulb would go off and they would say, "Oh I see. This is like what we ere doing in Dragon Box."


Check out Sonic pi, an programming language for musicians. It includes all the complex features of software, a great tool for teachers Imo.


The worst thing you can do to your kids if you want them to program is give them a "smart" device. Part of what drew me into programming at 11 was the realization that I could modify some of the most fundamental behavior of my computer.


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/

[2] https://cseducators.stackexchange.com/questions/112/what-can...


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


I 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


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


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


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


As a kid I had a great time with Game Maker (now Game Maker Studio https://www.yoyogames.com/en/showcase). It's great in that you can start with drag-and-drop game logic like "When right arrow key is pressed, move characters right" and simple 2d graphics, and then move on to a full programming language "GML" which is an ECMAScript (JavaScript) variant and full 3d if you want it. And it can compile for desktop / mobile and web.


While I agree that Scratch quickly runs out of gas as kids get older, I don't think a Lisp shell is the next best step. The number of kids who are going to find recursion and math intrinsically fascinating is small. It seemed kind of obvious to me that something that runs in the browser is the best followup. Instant gratification, an absurdly powerful platform, and they can share it with their friends like they share anything else. If this language worked like ClojureScript, it'd have broader appeal.


Snap [1] goes a bit beyond Scratch.

1. https://snap.berkeley.edu/


I think Racket is a good option, and what I'm planning to introduce my kids to fairly soon. Specifically DrRacket.


Agreed. You have to be able to type, but Dr. Racket makes it easy to create, import, and manipulate images without dumbing down the coding process. This seems to be the best of giving good fun visual feedback while still letting kids experience the need to write syntactically correct code.


LOGO was essentially a Lisp shell with fewer parens, and plenty of kids used it for all sorts of things including math. The actual historical LOGO had a few pitfalls such as using dynamic scope for all variables, but nothing that could not be addressed.


Logo still is very much a thing and lots of kids still learn it, eg https://turtlespaces.org


Thank you. You could have a look to this page http://lambdaway.free.fr/lambdawalks/?view=coding and the two following pages.


turtleSpaces https://turtlespaces.org is an expanded 3D version of Logo that runs in the browser and has sharing features. And it does recursion and fancy math :)


What's great for kids, in my experience, is with scratch they can "see things happening", making simple animations and games, and exploring. Also, scratch isn't (to me) missing anything -- it's a full programming language, the plugable blocks just ensure you build "by AST" instead of by text, which honestly is a feature I've heard language designers suggest we should move to (it would once and for all get rid of formatting questions if everyone could do AST -> On-screen visualisation themselves).

With this language they can... implement functions like reverse, append and length by themselves?

I don't mind people exploring options, but please don't insult Scratch, then make up something for kids which (as far as I can tell) has never been shown to a kid.


I think the most inportant thing kids need is things to be discoverable.

So good, concise, contextual documentation with plenty of examples for anything kid touches.

So like Delphi F1 or PHP online docs.

Scratch doesn't have anything like that I think.

Many tools for kids don't give the kid ability to learn without direct adult instruction or watching long tutorial on something that's not the thing the kid wants to do at the moment.


Scratch has a very comprehensive wiki[1], which contains detailed explanations of even the most basic of concepts, along with example code. Now it also has built-in tutorials.

However, the real strength of Scratch is that it doesn't need any documentation or instruction. A sufficiently curious mind can learn it simply by clicking around and trying things out. The blocks only click together in valid combinations (which you can infer from the shape of the blocks), so it's literally impossible to create a syntax error.

[1] https://en.scratch-wiki.info/


Right. But when I'm in Scratch the wiki is nowhere to be found.

Everything needs documentation for a kid. Even a fork or a spoon.

Without ample examples of what you can do with the things you are just touching you make way slower progress and require much more motivation.


Just curious who would be reading that documentation. The kid?


Yeah. I as a kid read a lot. Of things you might call a documentation.

If it's human friendly and kid friendly with examples, pictures and heck, even a draggable blocks you can drag into your project kids would be all over it. Because it would be contextual. Pertaining to the thing they try to understand at the moment.

Scratch is not designed for a lonely bored kid. It's designed for a kid in the classroom following instructions.


Not just discoverable.

Have enough modules available they can start making stuff they want to actually use. Help them find opportunities to solve problems that matter to them using code.

Your average kid would much prefer to write a Twitter bot than a car parts inventory system or calendar app. (The latter being a typical CS assignment)


Personally, I think tools should go the other way.

The beauty of scratch is that it makes most syntax errors impossible to construct in the tool and provides immediate feedback on how far away the program is from being an acceptable program. Only recently have the tools I use regularly as a professional started to adopt that approach.

How much time has our industry lost in change / compile / error / change cycles? How much in typo-chasing because most languages are represented as strings, not things?

I think Scratch points the way to what professional tooling could be. It lacks polish, there's a lot of accelerators that would need to be added before it could match the development speed of typing lines and lines of text... But there's meat on those bones for an intrepid researcher to pursue.


This code is indented incorrectly:

  {{lambda {:a :b}
            bla bla bla :b :a bla bla bla}
            hello world}
It should be:

  {{lambda {:a :b}
           bla bla bla :b :a bla bla bla}
   hello world}


I agree with you, the lambda is applied to the two words which should be aligned with the second curly brace. Here my choice was to mimick the find & replace request of which it was a rewrite. It's a matter of choice. I hope you have gone a little further ...


I read the full article, but I use Racket most of the time so to understand the code I secretly ignore the parenthesis and use the indentation instead.

I like Scratch for kids for very small programs, and perhaps for programs with some easy to encapsulate subparts, but my feeling is that once you need to use recursion the friendly part of Scratch is a problem. My daughter used it for a month or two, but she preferred to go back to a language with text representation that makes cut&paste easy.

About the rest of the article: Does the compiler use some trick to make arithmetic operations faster under the hood or you are using just the unary/binary representation in lists?


Thank you for reading. In this page everything is evaluated using the minimal toolkit, lambadas & defs. And as usual with numbers as lists evaaluations are slow and limited to small numbers. You could have a look to this page http://lambdaway.free.fr/lambdawalks/?view=oops6 to see how (very) big numbers can computed at the lambda-calculus level, and to http://lambdaway.free.fr/lambdawalks/?view=coding for a general introduction to this project.


I noticed that even `if` are functions that use `lambdas` for the branches. It's good because it's possible to remove another magical special form and it's good for static code analysis, but it's bad for performance.


Our kids love Roblox and Minecraft. Its educational edition has Python 101, programming robots. Those are tools suitable for kids, but also fun for some grownups.


This is not a statement, but a question. And yes, I love SCRATCH and I admire its creators. I'm just saying that there can be another way, just as accessible, with minimalist tools, including the one I use, but not only. I am interested in your opinion.


Your programming language sounds great, and very accessible. But I don't feel that you actually back up your own point in the article. What makes your tool better for children in the age range that scratch is targeting? Have you actually tested it in any way with children in that age range? I know kids who learned scratch and it's definitely "real" programming.

I think you're missing the major point of scratch. The main obstacle in learning to program for an 8-year-old is not going to be learning the concepts, which are no harder for them than anyone else I think, but the typing is a problem. How many times have any of us (especially early in our programming development) gotten hung up on misspelled variable names? There's no inherent advantage to typing every keyword vs dragging blocks.

Additionally, the scratch ecosystem is designed around creating games and animations. As it turns out, young kids like games and animations, and it's a very rewarding experience to make something that you actually want to share with your friends and family. Even if your language is a better choice for a child that age, which I kind of doubt it is, it doesn't matter if the kids aren't interested in what they're making.

Again, I think your language looks great. Just not sure it's good for the same target market as scratch.


> The main obstacle in learning to program for an 8-year-old is not going to be learning the concepts, which are no harder for them than anyone else I think, but the typing is a problem.

I was already touch-typing fairly proficiently at age 8, in the 80s, and I'm visually impaired as well. I started learning to program in Applesoft BASIC shortly after I turned 8, and the typing was never a barrier.

Edit: The teacher of the visually impaired who taught me to touch-type when I was 7 might have been unusually forward-thinking, but still, my experience shows what's possible. I hope the next generation of kids all learn to touch-type just as early.


In the '80s, every computer you could program came with a keyboard.

In 2022, most computers kids use don't have keyboards anymore. Only onscreen low-speed ones.

There's meat on the bones of alternatives to keyboards in programming. It may not be possible to beat the data-entry speed of a keyboard, but it's worth remembering that the "mess around" computer kids have access to these days probably doesn't have one.


The ZX Spectrum keyboard was even worse to type on than modern on-screen ones, and plenty of kids used it just fine. So "data-entry speed of a keyboard" is highly variable in practice. (Of course, I agree that alternatives to mouse-and-keyboard input are worth exploring in all domains, including for software development.)


Then kids with only tablets are also at a disadvantage when learning to compose documents on a computer, which is important for many kinds of work.

Maybe it's time I got my nieces and nephew Chromebooks for Christmas. By then, the youngest will be between 4 and 5 years old.


The only thing that I've seen almost universally get kids to try to learn to touch type with enthusiasm (perhaps too much) are games.

Just like how using Scratch is like (well is) playing a game.

Coming at children's learning from an adult perspective often isn't that useful. They just don't think like us a lot of the time.


I wasn't taught through a game. But in my case, learning to touch-type was a relief from practicing my handwriting, which was tedious for me. And I got to listen to the computer speak what I typed, which I thought was cool, even if the primitive speech synthesizer couldn't pronounce "Matthew" (my name) correctly.

Edit: So yeah, my anecdote is unique and probably worth nothing in this discussion.


I agree with you, it's a little "provocative", but you could have a look to this page: http://lambdaway.free.fr/lambdaspeech/?view=teaching


I think it depends on age, motivation and a few other factors.

Scratch being embedded in an environment with graphics and sound provides motivation, reward and problems to solve that are relatable and interesting to many children e.g. "how do I get the monkey to chase the rabbit".

The block "affordances" mean kids can get to the part where they make things without needing to learn any formal syntax. A lot of young children who are not ready to reason about syntax can nonetheless handle the ideas of events, conditionals etc.

Many young children have difficulty with the motor control required to use a mouse (mostly mitigated on tablets / touch screens). However, many adults also underestimate is how much "implicit" knowledge is involved in using a text editor.

I think anyone who tries to teach something "new" to kids will understand the experience of having it not go as planned.

Scratch looks weird partly because it's the result of people doing actual "user testing" with kids.


I find the real advantage for 5-8 year olds is it's much easier to avoid typing/spelling mistakes with a drag and drop language.

And if the output is also graphical, much easier to write simple games


I don't really look at Scratch as a visual programming language. For the most part, it represents programs as text and using syntax similar to common programming languages. Yes, there are other visual cues and yes, it is drag and drop. Those are better thought of as learning aides and an alternative input method.

Where Scratch shines is in the removal of frustrations. Rather than dealing with broken programs due to a misspelled variable, misplaced parenthesis, or syntax errors the learner has the opportunity to focus upon how the program works. That is far more valuable in the early stages.


I agree with this, and was challenged by the presentation of "cutesy tools are dumb, write words." Some people are visual learners, some prefer reading/writing, others have other preferences. My buddy's kid is an 8 year old native programmer who has really taken to the blocky style of coding, and it's acting as a natural gateway to more traditional styles. On the contrary, my cousin learned some basic Python at 12 without any flashy tools, or even a good IDE. Lots of ways to learn in the world.


What exactly is the point the author is trying to make? From the title, I expected a coherent argument but what I've read therein sounds more like "As an adult, I do not enjoy this thing meant for children." with little substance to why that matters to children.


Specialized kid features are less important, even to kids, than the "boring" adult features like reliability, documentation, examples, support, libraries, and so on.

TFA's experience mirrors my own: when I started programming, people kept trying to get me to use tools that promised to make my life easier (basic, logo, apple script). Without exception, they made my life harder, because their gimmick added less value than their lack of "production grade" polish took away. C was a breath of fresh air -- not because I had a fetish for segfaults and the clockwise spiral rule, but because good APIs and documentation and examples and debuggers were available, and that was much more important.

Today the situation is reversed: I primarily code in python which has sugary syntax, doesn't enforce types, has poor debug/profiling/ui tooling, and still struggles with multithreading 20 years after the death of Dennard scaling. However, it's the lingua franca of the ML/AI space, and that matters more to me than all of its many shortcomings put together.

Ecosystem > language. Every time. It's true for kids, it's true for adults, and I bet it's true for space aliens, too.


From my experience seeing others use Scratch, part of its value is the ease with which it can be used to tell interactive, visual stories. Programming in Scratch is a means to tell a story, not an end in itself. If you're using Scratch to teach recursion, then you're using it wrong.

Another high point of Scratch is that it includes message passing and concurrency. This allows for telling complicated stories, and it also introduces some very hard to track bugs -- so, kids learn some debugging as well.


Plenty of kid-oriented tools and instructional content share that "telling stories" element; it's a compelling way of picking up on humans' raw social intuition and using it to work on complicated problems. Perhaps some variation on Scratch could make for an intuitive and kid-friendly introduction to subjects that are often considered obscure, such as distributed systems and the formalisms used to reason on them like the Temporal Logic of Actions.

Recursion would be comparatively easy; you could even teach linear logic by endowing your "characters" with an inventory of objects that they could pass on to each other and transform by acting on them, a common trope in adventure games.


I think as programmers we forget that syntax is a pain for newcomers. Scratch tackles that problem at least.


There is that. I've seen it a lot when trying to tutor beginner programmers. It takes a lot of time for people to get used to every little symbol and space being critically important. It takes even longer to get people used to maintaining coding standards so that what they write is easy to understand. I start to view Python's significant whitespace as a feature here - it's a net plus to tell beginners that your spacing must be correct right off the bat, or your program won't work right.


> It takes even longer to get people used to maintaining coding standards so that what they write is easy to understand.

Formatting tools with a standard default syntax solve that problem quite nicely, and they do it more effectively than something as error-prone as significant whitespace.


I disagree that it solves the problem I described. For beginner users, every extra tool you set up exponentially increases their setup efforts. They are highly likely to be skipped or bypassed, and it's not like they're contributing to large group projects yet. It's more beneficial for at least a few core standards to be enforced at the language level.


I learned programming as a kid from QBasic, which was included in DOS, and this tool was not kid specific (even though it came with some games and is a simple language, it was straight to the point and generally useful to anyone)

I would have found something dumbed down and kid specific uninteresting, the thing about QBasic that kept me interested was: included example games (gorillas and nibbles) whose code you could see and modify (I've had much laughs by changing radiuses of circles of how the gorillas were drawn), the ability to draw graphics (which is an interesting form of feedback to your code), the excellent documentation and ease of use (integrated good help text of every function and keyword), and the fact that you could use it to make anything including useful software which gave a good reason to want to learn it

I'd have seen something like logo with a turtle that moves around as a game instead of a tool, that would have kept me interested for maybe a few days max


> I would have found something dumbed down and kid specific uninteresting

No one likes the idea of something "dumbed down", but Scratch and block languages generally are not dumbed down, they're just visually different. It's all the same stuff, but a visual instead of text representation.

> QBasic that kept me interested was: included example games (gorillas and nibbles)

Yes, this is what many block based languages provide, examples, and also a thriving online community.


I think a lot of comments are getting caught up on the title and the introduction. There are some good comments sharing other experiences with programming education so I think that's worthwhile.

I read the author as saying "I like playing around with things. I didn't like playing around with 'kiddy' things when I was younger, so I made a simple playful programming language that's not 'kiddy'".

I read the page and thought it was a fun language. I'm not sure I could do a good job of using it to teach a class of young people, but I'm sure there are some out there who would get a kick out of it.


As a child, I enjoyed things meant for adults (with regard to programming). However, this was a different era.

In the 90s, computers needed programs to be useful, and regular computer users needed to be able to make them (not so much as the 80s but it was still around). I saw my elders creating software in the HyperCards and Visual Basics of the day, and thought "Hey, I want to do that" so I did.

They were both tools to get Real Work Done™ AND be approachable to non-programmers. Thus, I didn't feel limited by the stuff that's for children, but they were still friendly enough to be approachable from zero knowledge + maybe a book from the library.

Children's tools tend to only have the approachable part, which is good, but as a kid /knowing/ that anything a "real" program could do was possible with the tool I had if I just tried hard enough was a huge motivating factor in eventually bootstrapping my learning.


With advancing age I return to childhood ...


I learned to program when I was pretty young, the only time stuff like scratch makes sense is kindergarden when you're still learning to read (for me it was the mindstorms stuff.)

I was using Turbo Pascal when I was 11. Many children are way more interested in "adult" conversations and tools than educators give them credit for.


> I learned to program when I was pretty young, the only time stuff like scratch makes sense is kindergarden when you're still learning to read (for me it was the mindstorms stuff.)

> I was using Turbo Pascal when I was 11.

Ignoring the fact that the whole stack was way much easier back in the day (I was a Turbo Pascal user as well at more or less your age), to me it's also a pretty clear case of survivorship bias. There will be kids that will find their way into no matter what, but we should also give tools/resources to help other kids without the same level of interest+capabilities to at least scratch the surface.


I absolutely loved Turbo Pascal as a kid and hold that IDE as the golden standard still to this day because of its simplicity. I think what we need isn't visual tools, we need an extremely simple IDE where you press one button (F5) to run your program without leaving the environment and without any clutter.


The modern FreePascal stack includes a very similar text-based IDE; and FreeDOS still provides RHIDE for C programming. It would be nice to have a modern clone of these vintage IDE's with full support for language-independent tools like LSP, treesitter and the common debug protocol. From what I can gather, such a tool would be highly usable, e.g. over SSH connections that still work with a terminal-like UX, even for novice users who might be less familiar with tools like Vim.


I wonder if Turbo Pascal was any easier to get started with than Rust would be with the right GUI toolkit and IDE.


There's also some ongoing work on Rust REPL, see https://github.com/google/evcxr - though it's still a bit of a hack. Might become even easier than Turbo Pascal itself, and comparable to home computer BASICs.


When is "the day"? I was using Java and PHP as a 12 year old in the 00s. Honestly with the likes of WSL and (hated as they are), curl | sh installers or exes that don't require pissing about with the environment variables window, it's arguably easier to get started with a real programming language now than the 00s.


When is the day, indeed? I learned programming using Kemeny and Kurtz BASIC in the late 1960s. I have long since lost count of the number of languages I've learned well enough to write production code in, but it's somewhere North of 2 dozen. All built on the basic mental equipment I developed with that primitive BASIC - a sense for the relationship and interaction of three basic elements: symbolic code expressing structure and control; algorithm; and data, in and out. This is what a children's language should aim for - making the onramp to that mental landscape as accessible and responsive as possible. You don't need lambda calculus for that, any more than you need group theory or complex analysis to bring the joy and power of arithmetic and math to young minds. The superstructure will follow, if you get the foundation right.


I was referring to understanding (more or less) the whole stack, down to the hardware. Getting started is probably easier today (because of the Internet) than how it was... back in the day, where you need to have some kind of physical contact and where you lived mattered a lot. But anyway, this wasn't my main point.


I know a guy who learned Standard ML when he was 11.

I also know a bunch of smart guys who dropped out of comp sci at Uni because that's what they were taught in their first semester. Some of them became developers anyway, others decided that they would never learn to code and did other things instead (which is fine, of course, but I'm sure they could've learned Python first and moved on to SML later).


Maybe those same uni students would have been more successful with Standard ML if they had learned it at a younger age, when they could more easily learn new things. For that matter, maybe the person who learned it at age 11 could have learned it a couple years earlier.


You should understand that you are the exception and not the norm. Tools like Scratch don't make sense for you and your experience, AND you aren't the intended audience.

Tools like Scratch aren't meant to be anyone's daily driver, they're meant to give people a taste of the power of code without having to be bogged down in all of the complexity.

I was fortunate enough to participate in some day camps about a decade ago designed to get girls interested in STEM. The participants were primarily Girl Scout Brownie troops (pre-K and K) and the camp consisted of 6 different modules. The camp was a half day long and the girls would complete all 6 modules, so about 30 minutes each.

One of the modules was setup by a team from Georgia Tech and in it the girls were asked to create a robot to play soccer either as a goalie or a kicker using Lego WeDo sets, and then program the software to control it in Scratch.

Without knowing the background of or having the time to individually coach each child, in 30 minutes two undergrads were able to teach a dozen 6-9 year old kids rudimentary robotics and software development. Each group was able to build a functional robot.


I think that's a case by case basis sort of thing. I'm in your camp, I had more fun learning C in elementary school.

But I know many programmers that started with tools like RPGMaker and Scratch instead. I think it has much more to do with the individual child's interests and learning style.


I think the real point here is that "stuff for kids" should not be "dumbed down" past a certain point. Kids are often smarter than you think.


I tend to think of it as: people (including kids) are generally smarter than you think, but know less than you think.


Curiously, not all minds are alike or equal so perhaps there's scope for using tools such as Scratch to teach coding principles to kids who might not be wired to so easily Get It as you evidently are.


I think you are misinterpreting the point.

Scratch is actually harder.

Scratch relies on making sense of these big blocks with little blocks and these UI patterns that don't make sense and aren't seen elsewhere. It relies on finding blocks from a palette.

Something like QuickBasic or TurboPascal or Wiring (Arduino) doesn't. You write the program from top to bottom using magic words (syntax) and you press f5 and the computer follows the incantation.


I think it is you who misinterpret the point. As a counter - are there things in life other people were better at compared to you? Perhaps painting or writing or cooking?

That 'easier to parse syntax' of yours might actually be trickier for other minds to work with, where they instead benefit from big blocks, little blocks and coloured abstractions that might be like so much fluff to you.


I understand people have different ways of learning and comprehending.

No way of learning or comprehending makes 5+ discrete tasks easier than 1. There is no mental model that changes the actual bitrate flow of comprehension.

Yes, visual learners are a thing. No, visual learners do not prefer doing more work nor does it help them learn "faster". Recognizing and discriminating colors/shapes/sizes is always more work (and more abstraction! "Blue blocks are conditional statements" is learned behavior!)


"Writing a program top to bottom" is also not really "1 discrete task". It has similar step-by-step structure, just replacing e.g. "pick/drag visual element" with "remember and correctly type text symbols".


I agree that typing a program is not a single step. I broke the steps down in a sibling comment to yours, but the "visual" programmer still has all the same non-visual work and then a bunch of extra UI to deal with and visual discrimination tasks.

We didn't make programming visual. We replaced text entry with a bad UI paradigm.

If you want to see visual programming, go look at SpaceChem or Opus Magnum.

[video warning] https://youtu.be/FhymQvfjMhY


No, it's not "all the same". What you see as extra and harder visual tasks is actually easier for many. Is it that hard to imagine that when coming up with "I need a loop here I guess" a young kid could find it easier to find the loop bubble than remembering the loop syntax and typing it correctly and not getting frustrated by syntax errors?


1. 'coming up with "I need a loop here I guess"', non-visual

2. "loop" -> "loop block", non-visual (the loop block is a yellow thing with two teeth and says "while" on it, this is a recall task)

3. Either typing the thing or executing a "find the block and drag it" action. This is the first "visual" task.

Sure, maybe if the kid genuinely can't type but can do gross + fine drag tasks than scratch is a winner, but this is not "visual programming". All the work is still not visual.


I think you're mistaking easier for quicker, but I can see that neither of us are going to agree with the other here.


Be careful here and don't assume what I mean. Take a moment and write out the steps.

The direct text entry programmer has to:

1. Decide what they want to happen next

2. Figure out the syntax to make that happen

3. Write out the syntax

Our visual programmer:

1. Decide what they want to happen next

2. Figure out the syntax (now "big green two pronged if block" instead of "if")

3. Look over the palette and visually identify the block (expensive! non-facial discrimination is tiring)

4. Drag the block from the palette to the code section (weird UI interaction, also requires both fine + gross movement, also expensive)

Notice that our "visual" programmer still has to execute all the same non-visual steps! We haven't made the actual work visual, we just made the UI really annoying and added a discrimination task to it - which is tiring even for our visual learner.

Text _is_ visual, but it's visually expensive to consume. Brightly colored complex little blocks are also.. well basically just as visually expensive.

We didn't make programming visual. We didn't make the skill threshold lower or easier or even _different_. We just added more work.


The part you're utterly missing is that, depending on the brain, steps 3 and 4 in for the visual tool may be immensely easier than step 3 in the text tool, so that they are performed as a simple no-think direct-manipulation operation that requires no effort at all, while the "write out the syntax" step may be a slow, painful and error-prone process of trial and error until you put in all the right characters in the correct order and get the damn parser to stop complaining. You seem to be wired to accept the later as trivial and the former as hard, but some of us are really exactly the opposite.

I know for certain that this is how I see writing programs in pure text, to the point that I stopped programming in traditional languages; my brain is too high-level oriented to remember all the pesky little details that APIs and formal syntax require; give me high-level programming blocks that you just invoke and place with a few gestures any time.

Unfortunately there are very few general-purpose visual languages, so my options at building automated systems are limited; although fortunately this is starting to change, and a new breed of powerful no-code and low-code tools is appearing that shows promise, so I'll be able to build complex systems again by using high-level concepts as building blocks, without being slowed down by bloody trivial syntax errors.


> Unfortunately there are very few general-purpose visual languages

This is not surprising, because "general purpose" tools have general, highly-composable, extensible syntax. Endowing, e.g. condition operators with their own block shape makes sense when all you have is a simple tool like Scratch where they just "snap" inside if-then blocks, but not so much when "boolean" is simply one of many interchangeable types that might, e.g. be assigned to a variable. Then a condition operator is simply some expression-like element that just happens to return a boolean. Similar things happen with other program elements, like text strings, numbers etc. Custom types start to be needed, and then you need to add whatever the equivalent of a DATA DIVISION is in your Scratch-alike.

At the extreme of generalization, you find things like dependently typed languages where even "values" and "types" are no longer separated by rigid syntax, but are the same kind of program element.


I don't have a problem with syntax. I have a problem with textual syntax, where abstract concepts are represented with words, with little to no secondary notation[1] and lots of repetition. When the syntax is highly visual, it can convey information through much more bandwidth than flat text, which is limited to a few dozens of repeatedly used symbols.

And don't tell me that textual programmers don't realize the benefit of secondary notation and visually-conveyed details. We love when our IDEs full with syntax highlighting for different types of operators, global structure mini-maps and intellisense auto-complete tooltips. All these are visual tools that improve the flow of building a text-based program.

[1] https://en.wikipedia.org/wiki/Secondary_notation


Do you actually program in scratch?

Take a moment if you haven't and boot it up. I think there are web versions available now. Give it a go. Build a (simple) program.

There's a reason it keeps not really taking off.

I'm not saying text entry is free. I'm saying that the palette concept is more expensive - even for visual learners. Obviously languages (block based or text) can be easier or harder, eg python is less fussy than assembly.

What visual/block based languages do you use currently?


I'm not sure what you mean by "not taking off".

I've seen scratch used in dozens of coding sessions for kids, and know it used used in hundreds of schools in the UK.

Yes, people only use scratch for a while, almost no-one is writing huge programs in Scratch, but that's not what it is for.


There are even attempts to teach textual programming to students who already learned Scratch, by translating blocks to javascript (Scratch-LN, Blockly).

I remember someone building a whole environment for making Slack look professional, by providing a text syntax that could nevertheless be programmed like Slack by adding and connecting typed blocks in the text structure (though I can't recall its name).


I'm not saying that Blocks is a good programming language, nor defending it as a go-to tool; I know it is quite cumbersome to build programs in it - but I think it's largely because it's imitating classic imperative languages instead of being designed from the bottom up to take advantage of visual representation and interactive development. Still, it may be a very good introductory tool for learning classic-style programming (certainly better than Python for a primary school classroom; direct manipulation is just so superior for the first impression, when getting the students motivation is make-or-break).

I was referring to your defense of textual programming as inherently superior, which I don't see as justified. Classical languages have a refinement over decades that visual languages lack, but I think it is possible, and I think we are getting to a point where building such languages is starting to become viable.

> I'm not saying text entry is free. I'm saying that the palette concept is more expensive - even for visual learners

This is simply not true. Recognition is easier than recall, even for textual learners; so even if toolbars require more steps, those are way easier steps. Even if you're talking about expensive in time and not actual effort, physically entering code is the task that less actual time takes of programming: thinking what code you need to include takes much more time, so anything that reduces that time will accelerate development. Programmers usually are not aware of this fact because they are distracted by all the thinking, but the actual input method is usually not that relevant except for people with disabilities. (Btw visual vs word learners is largely a myth; the best style is usually to the task you're doing, and we are all able to do both styles. When I say I have a preferred style, I do find visual tasks easier than those requiring word recall skills).

Also, nothing prevents visual languages from incorporating fast introduction tools other than palettes, like keyboard accelerators and contextual search - i.e. you type the name of a component and it appears at the cursor point; this would make them work with identical interactions as pure text programs. (BTW, I consider intellisense-autocomplete to be a visual tool; it favors recognition over recall by showing you the list of available options).

What I consider a programming language is somewhat different from what think of as visual languages (which are primarly the flow-based block graphs; they have their place, but are too highly oriented to bulk data processing). For me, the ultimate visual language is the spreadsheet - a functional reactive environment where the user can freely position information and transformations in more than one dimension, and manually decorate them with as many cues, reminder text and color codes as needed.

Some new development environments are growing a modern style, highly evolved with respect to the classic IDE, which is still based on the batch model of the mainframes in the 60s:

* Jupyter-like notebooks bring some of the spreadsheet benefits to classic languages;

* relational models that show data together with structure, like Airtable, is an example of these breed of visual tools for building data-transforming automations;

* wikis work as visual storage that makes it easier to structure and organize hierarchical content;

and so on. Modern development environments will start incorporating all these models, relying less in pure abstraction and running the program in your head as requirements to build programs.


> quite cumbersome to build programs in it - but I think it's largely because it's imitating classic imperative languages instead of being designed from the bottom up to take advantage of visual representation and interactive development

I agree with this point

> was referring to your defense of textual programming as inherently superior,

This is inaccurate of my views. It's not that "visual programming is bad" it's that everything we call visual programming is not actually visual! Scratch is not visual. It's just text programming with more steps.

> For me, the ultimate visual language is the spreadsheet - a functional reactive environment where the user can freely position information and transformations in more than one dimension, and manually decorate

I'm sympathetic to the concerns here, eg users needing to work in multiple dimensions. I still don't think this is a visual language, but it is maybe more visual than traditional visual languages. A spreadsheet is something like a visual layout on top of a program.

> relying less in pure abstraction and running the program in your head as requirements

Even with a true visual language I don't think the need for a mental model can be removed.


> This is inaccurate of my views. It's not that "visual programming is bad" it's that everything we call visual programming is not actually visual! Scratch is not visual. It's just text programming with more steps.

Certainly "Visual" is a spectrum, not an on/off switch. Adding syntax coloring to a textual program is a step towards adding visual cues that improve recognition of its parts. Scratch adds over an imperative language a more detailed visual syntax that conveys the types of control structures and the relations between actions and parameters, and allows filling them in by interactive recognition rather than pure recall; so it's a step further in transforming a classic language into a visual one.

Further steps in that direction include changing paradigms to functional or logic programs, that more explicitly represent changes in state through visual cues, relieving you from having to work them out in your short-term memory. Everything about visual languages is built towards adding expressiveness to the actual representation to convey as much information about the running program as possible.

> I still don't think this is a visual language, but it is maybe more visual than traditional visual languages. A spreadsheet is something like a visual layout on top of a program.

Programs are visual entities - they have a very concrete physical structure of a tree. That's why good indentation is essential even when the parser doesn't care about it at all.

A program Abstract Syntax Tree is composed of very, well, abstract components; a program keywords represent objects quite separated of their final form during runtime, i.e. their actual values, but their connections can be often understood in terms of their spatial relations. Our brain is really very good at that, even for textual representations.

> Even with a true visual language I don't think the need for a mental model can be removed.

Completely agree. But building a mental model is way easier when working at several levels of abstraction at the same time, i.e. both concrete values and the abstractions that tie together those values in a concept encompassing them (see the concept of the Ladder of Abstraction).[1] And being able to actually see the values of variables and the connections between processes that change them, instead of having to imagine all those by running the program in your head, is a large advantage. The debugger is the quintessential visual tool, letting you inspect the true relations and processes of a running program through interactive manipulation, even for languages that otherwise lack any visual cues while being built.

[1] http://worrydream.com/LadderOfAbstraction/


I wonder why we can't have a unified tool that supports both access modes. A syntax that's "easy to parse" should also be easy to render into visual snap-blocks.


That was the big thing 20ish years ago. Programs where you could 'draw' your application and have code (most often Java) generated on the fly. Or you could feed it Java code and it would generate the diagrams for you and then you could edit the diagrams and get updated code. Lots of companies spent huge amounts of money both buying and developing those types of solutions.

It turns out that creating a 1-to-1 mapping between code and diagrams was basically impossible and you ended up with unreadable code and unusable diagrams.


True, but Scratch is not design-level diagrams; it's just a structured syntax made of "blocks" that snap together, it represents actual code.

I'd also argue that simple diagram-generating tools are quite viable when used to make sense of a large code base at the highest level, even though I agree that the theorized "edit and generate code" workflows don't work nearly as well in practice.


If this is universally true as you claim, then why does practice show that Scratch works better for some kids, especially young ones?


> the only time stuff like scratch makes sense is kindergarden when you're still learning to read

Strongly (well, moderately) disagree, but not necessarily because I think the Scratch language is well designed.

My nieces both started out in Scratch, and I don't know what they liked about it, but they bounced off everything else I had been trying to show them. It might have been the community aspect (I strongly suspect this had something to do with it), it might have been that Scratch is so limited that it stops being intimidating. I feel like there is a culturally taught fear of text editors among modern kids; my nieces are around really supportive people who think they're smart and encourage them, and I still think they still feel this sense that text editors are not designed for them? Could be my imagination.

I don't know what to think about it because I don't really 100% know why they (or anyone) likes Scratch. I can not stand Scratch, everything is way too hard to do, it lacks so many basic features that you have to approach every problem through the lens of some completely alien architecture where you're doing meta-programming to get basic stuff like dynamically allocated objects. This is a tool that is so limited in so many weird ways that it makes programming way harder than it should be. Everything about it from the UI to how it's structured to the performance: for me, it just makes programming into a chore.

But I can't deny that there's something there that makes it more accessible than other platforms -- and watching my nieces get into it was a big lesson to me in the limitations of saying, "but they're smart and understand the concepts of iteration and variables, why can't they just write Javascript?" They could, they're smart enough to do that, but Scratch resonates with them and Javascript doesn't.

I sympathize with the author's point of view (part of the reason I can't get into programming games is that everything enjoyable from them I can also get... programming). But there is something to these platforms like Scratch, Pico8, etc, that undeniably hits some people in a way that a traditional language doesn't, and whether or not Lisp/JS/C could capture kids the same way, something about them or the ecosystems around them is not measuring up for some kids. Some other kids are the opposite, probably. I got into programming with Flash/TI-83 Basic; I'm not sure where they on that spectrum between toy and tool they fall.


> I can't deny that there's something there that makes [Scratch] more accessible than other platforms

Not for blind kids. Yes, maybe I bring up that kind of accessibility too often, but using the word "accessible" was just asking for it. :) And seriously, that matters in a public school environment.

Fortunately, using a haphazardly designed mainstream language like JavaScript isn't the only alternative. Check out Quorum: https://quorumlanguage.com/


> Not for blind kids.

That is a very good point, and yet another reason why it would be good for something else other than Scratch to take off (particularly in schools).

I honestly am not 100% sure what makes Scratch click with people, my best bet is it's the community features, which are one of the few parts of Scratch I think are reasonably good. But it could be other stuff too.

Quorum looks interesting, but I don't know if the problem is that mainstream languages like Lisp/JS/C are too complicated or if it's something else. I feel like both of my nieces would be capable of writing JS without too much trouble if they actually wanted to (but they don't and I'm not going to force them). I also vaguely feel like Scratch is straight-up harder to work with than JS for some problems. So I'm torn with whether the compromises it makes are helping it be popular, or if it's popular in spite of them.

Scratch (on top of being a drag-and-drop block language) is also very visually oriented in the types of programs it encourages people to write. And that might be a contributing factor for its popularity with sighted kids, but obviously is not going to translate very well for blind/vision-impaired kids even if the interface itself was made more accessible. I strongly suspect Flash would have had the same problem back in the day (assuming that was accessible, which... I haven't checked but I also suspect it probably wasn't).

I wonder if there could be some cool things that would be possible to do nowadays with pre-packaging a bunch of decent-quality sound effects in an engine or setting up some of the AI-driven voice tools that have been popping up online and letting kids start programming with them.


That looks like mind-numbing garbage that should be kept out of the reach of children.


Why, exactly? Because it appears too dumbed down for us experienced programmers, or is there a deeper reason? The Quorum team, which I'm proud to collaborate with when I have the chance, has evidence that their language works for beginners. They've been collecting that evidence over several years. I think their work deserves more than a shallow dismissal.


All those type declarations, just yuck. In like the third tutorial page we learn about some cast() thing. This dialect of Fortran prepares kids for a world that mostly no longer exists.


> This dialect of Fortran prepares kids for a world that mostly no longer exists.

This is a weird criticism, learning type declarations will not make someone worse at programming or rot their brain. It's mostly just syntax.

As a point of comparison, Scratch doesn't let you assign object instances to variables. I just can't imagine getting worked up about type declarations in comparison to that.

> for a world that mostly no longer exists.

Also... casting no longer exists? I still do explicit casting in JS on occasion, and it certainly comes up in C-like languages. Correct me if I'm wrong, but I don't think Rust even has implicit type coercion at all.


Pardon me; if your goal is to prepare kids to be software engineers working in C-like languages and Rust, then that may be just the thing.


11 year old me would have hated it.


I think part of the appeal of Scratch evolves around if the kid has learned to type or not. With Scratch being more visual programming orientated, its easier to get into. Other aspects of why it's popular is it being beginner friendly and geared towards fun and games.

Scratch is a great "first step" for getting your feet wet and playing in the shallow end of the pool, as one is learning to swim. Not everybody learned or were even taught to swim their first day at the pool, and everybody has a different schedule on when (or if ever) they will get good at it.


It's also harder to learn to program when you keep running into syntax errors. I suspect that's a big part of the allure of these visual languages.

I don't know if that's good or bad--maybe a little of both. It seems like overcoming syntax errors is a pretty good first-pass filter for determining if one has the mettle for coding. On the hand, not everyone is a professional builder, but it doesn't hurt to know how to tighten a screw or swing a hammer.


That has to be the allure because that is precisely the only problem they address: syntax.


The visual equivalent of a syntax error is not being able to find the button/block/thing you need on the screen, or using the wrong block and wondering why you can't find the right control on it, or not hooking up some required reference/wire/whatever.

The advantage to syntax though is that it's all verbal which makes it far easier to communicate. Visual stuff needs multiple images and often video to fully communicate which is slow and more constraining.

>Learning syntax as a filter

Syntax is one of the most universal things about our psychology. The idea that some people have it and others don't seems a little absurd to me.


>>Learning syntax as a filter

>Syntax is one of the most universal things about our psychology. The idea that some people have it and others don't seems a little absurd to me.

Sheesh. Care to put any more words in my mouth?

I said nothing about whether or not someone _could_ learn the syntax of a programming language. My comment was specifically about the difficulty of learning to program while also navigating arcane syntax rules (in the sense they're unfamiliar and rigid) that come with most programming languages.

If you want to write code you'll probably power through it. If you don't, you might decide it's just not worth the trouble.

This isn't a value judgement on the individual. I'm saying it's a pretty good indication if someone has the temperament for coding. If you're unwilling to understand syntax errors, how likely are you to debug your program?


Not all kids start with mindstorms in kindergarden. The average kid does not have training you had so soon.


But as long as there are future generations, there's always a chance to give more kids early training. We could start by giving them wide open computers where the ability to modify whatever program they're running is always at hand, like OLPC aspired to do. I regret that, so far, my nieces and nephew (ages 7 and under) have grown up with closed Fire tablets instead; that was partly my fault.


that was partly my fault.

Kids are into what kids are into. I have introduced every 'STEM' toy on the market for my kid, plus played with Scratch, Arduino, Python etc with them. Gave them a laptop running Linux when they where 8. They don't care and are completely uninterested in any of it.


It is very likely they learned from all of that tho. Imo, the goal is not to turn them into obsessed geeks or anything like that.

The goal is to give them enough base that they will be able to catch up whenever they decide or whenever they need. And so they dont end up clueless or scared of technology. I think that scratch does that job to large extend - they learn a bit of thinking procedurally, have some fun with moving pictures and them move onto something else.

Also, most programmers were not obsessed by the age they were 8. A lot of good programmers started to seriously approach it only later or after then encountered something that clicked. Or had this as one of many interests. All of that is fine.


As a child I got my hands on the StarCraft map editor, a reasonably complex tool that allowed me to create all sorts of scenarios. Similarly, an older cousin of mine had access to Worldcraft (now known as Valve Hammer) and Flash, all of these tools are complete in the sense that the end product is not a kid's throwaway project but a complete experience, equal to official offerings.

Unfortunately such tools don't really exist nowadays, maybe Roblox, but nothing outside of that.


There are plenty of "game maker" software. Even open source ones.

Check out Godot, which has tutorials for creating a game: https://docs.godotengine.org/en/stable/getting_started/first...

There is also the Blender Game Engine, which got split from Blender, but has a visual logic editor: https://upbge.org/#/documentation/docs/latest/manual/manual/...


Most of these tools are too open-ended and pull the users in the minute details. I've been developing software for over 10 years now and I can handle it without any issue, but there are not many kids who could handle the extreme frustration that software developments sometimes causes.

Kids tools should be far more limited, it's useful both for creativity and to stop most crazy ideas, since they would be impossible.

Finally, it's a giant pain to get anyone to actually play what you make. How is a kid going to handle compilation, executable distribution, and much more. If you send an exe via email, the spam filters will catch it, if you find another way, the operating system will yell at you for starting an unsigned executable. If you want to make a web game, you'll have to figure out hosting, design, JavaScript, and all the rest. Sure, you could teach a kid this, but it would take months and any one impediment can stop the whole process cold.

The fact that I was able to figure out most of this stuff on my own, much of it without internet, goes to show that the tools I used had the perfect balance of complexity and limitations for my age. Of course nowadays I've moved way past them, but I can clearly see there's a gap in the mid-level tools that sit somewhere between a full programming language and Scratch which is too simplistic.

Interestingly enough, Arduino fills a bit of this niche. It's relatively easy but quite deep, perfect for a gifted child. The limitations of the electronic components also force you to push the limits of your capabilities in a way that a blank canvas just overwhelms you with possibilities.


Most of that game maker software is not all that great for a small kid that is just learning that something like iteration exists.


Well there's YoYo's Game Maker Studio and Clickteam's Fusion, for starters. These look like serious tools but also have tutorials, samples and such, and lots and lots of visual help by the GUI to guide the developer. They are actively maintained, and even used to create games "seriously", the commercial successes are Hotline Miami and Five Nights at Freddy's, respectively.

https://www.yoyogames.com/en/gamemaker

https://www.clickteam.com/clickteam-fusion-2-5


I've taught kids both Scratch and JavaScript. I think Scratch is much better for pre-teens, for the following reasons:

- Scratch has an integrated 2d game engine, sprite editor, and asset library. This makes it easy for kids to make something of interest to them right away, including those who don't pick up coding right away. I've had kids who struggled with complex coding but were still able to enjoy Scratch by making lightly-interactive stories / art.

- Most children can drag blocks faster than they can type.

- Most kids these days aren't familiar with a lot of desktop computing concepts we take for granted. For instance, they mostly don't know what files are, or how to copy and paste text. It would be nice if I could teach them all of that before any coding -- but that's generally not what they feel they're there for.

- Scratch shows the current value of variables by default. This helps kids to grasp the concept of a variable and to understand why their program is behaving the way it is.

- Scratch is a website, which makes it easy for kids to show others what they did. This makes it more gratifying for kids and parents. IIRC, the Scratch team also found that this aspect is especially appealing to girls.


Thinking back at my childhood, I think I was lucky enough to have a father who could program Basic on a ZX Spectrum (which stated all the important keywords on its rubbery keycaps!), but not lucky enough to have a parent who knew how to answer questions such as "How do you make a program on a computer from the '90s?".

Maybe, these were some things I lacked the most in my early training:

- Documentation: in the second half of the '90s the Web was too young to provide docs or even answers to my doubts. The open source community was confined to universities and there was little chance for my parents to know how to access a BBS.

- Tools that give a child agency without the need to read documentation: most things I could do as a child were because I either had clear examples of how to do them, or because the tools themselves used visual UX paradigms that any curious human could grow their skills by experimenting. Kids can devour technical manuals, but keep in mind that not all kids (nor their parents) speak English, and this can seriously limit their agency.

- Free (or even just accessible) professional tools to move on once I had mastered their watered-down for-kids cousins. Dad knew about interpreted programming languages, but had he known the word "compiler" (or "synthesizer" for that matter), I could have mastered them much earlier.

- More guidance. Curious kids can do anything, but if there's someone leading the way or offering a benchmark, they can really bloom early. A young cousin of mine, displaying surprising sauvant traits, is lucky enough to have artsy and technical parents, and I can see how far he's going!!

Speaking of the proposed language, I'm not sure kids would particularly like LISP like languages. But when I was a kid I wouldn't have cared, had I known someone knowledgeable.


Perhaps the author would be better off saying some kids don't need tools for kids. My son is 8, he has ADHD, he is also very into level design (Supertux) and making platformers in Scratch. Instant feedback and reward is important for him. There are or were adult tools that probably would have fit - Macromedia Flash comes to mind, but a Lisp without graphics would not fly.

Thinking back to my own early programming on the Commodore 64, the ability to make something flash or move or otherwise resemble a video game was very important to me as well. Some kids are interested in and motivated by math, but that hasn't been my lived experience.


I find it so sad that 99% of the comments are an entre soi between SCRATCH worshippers - of which I am one - and have no relation to the substance of my question. But what else could I expect, everyone stays in their own domain, me first, I guess. I like the presentation of the lambda-calculus made here https://kids.kiddle.co/Lambda_calculus, which confirms me in the idea that the kids could find profit there, far from the certainties of the adults.


I would assume that kids need to learn similar stuff to what they will use in real life.

Scratch looks close enough to Python and JS but made visual that I'm not sure I see the issue. Is there not already a math class in school where people go to learn the low level information?

CS and programming are separate. If we don't work in simple languages with clear axioms, then why not teach what people actually use?

Lambda calculus is probably a fantastic tool to really understand the deep fundamentals and theory though. But I'm not sure starting at a low level like that is the best.


The How to Design Programs with Racket seems to be a very good balance of letting kids work with picture and things that are visually rewarding while not insulating them from writing code.

Our family avoided Scratch for many of the same reasons the author gave. Instead we focused on typing and math and introduced programming when typing out all of your code wasn't going to be frustrated by their typing speed.

How to Code: Simple Data with EdX is a very nice introduction to that approach of teaching programming.


The author seems to have completely forgotten about Logo? Or BASIC for that matter? Some really complex programs have been written in either by adults as well as children...


For me, the "sweet spot" between "tools for kids" and "real" tools is Pico-8. It uses a "real" language (Lua), but the graphics interface is much easier to grok than mucking about with shaders and whatnot. To me, it doesn't feel like a toy, it just feels like a simpler tool.

It's the tool that I use whenever I try teaching kids to program.


So... unrelated to the actual contents of the article, but, that small column of justified text on a phone is a horrible reading experience on a phone (I couldn't keep reading because of it). I have dyslexia, and I really wish it'd be more well known how hard text justification can make stuff to read.


I disagree fairly fundamentally with this, I've been a club teacher in primary schools, and scratch is such a good teaching tool for kids that to this day I marvel at it.

I want to evaluate lamdatalk against scratch on the principals on which scratch was built, low floor, high ceiling, wide walls:

Low Floor: I can show a child the program "when space key pressed, Move 10 steps" they'll need to be able to read, and they'll need to know what the "space key" is (they've been weaned on touch screens remember), and then they'll understand it. further, they can then hit the space key and immediately see state change. They can use scratch on any computer they have access to at home from a browser.

Lambdatalk will also require them to know how to read, and I'll need to explain what "lambda" means to a young child, and probably how to pronounce it. I'll need to say what the arguments to a function are, and what "argument" means, and what way round they should go. I'll need to explain to them why they should care, a moving character is immediately interesting to a child, this lambda has limited use to them. if they want to type it out I'll need to show them how to type a curly bracket. They'll need to download and run a program to use lambdatalk, on a PC they probably don't own. (or use this inscrutable sandbox I guess? http://lambdaway.free.fr/lambdaspeech/?view=sandbox)

High ceiling: There's a lot you can do in scratch, people regularly post rudimentary raytracers or highly polished games on the scratch website. That said it has some limitations. It doesn't interact with the web at large, it's slow & hard to do work in 3d, and impossible to match the likes of a real game engine, kids tend to want to graduate upwards after a while.

I was expecting to find http libraries or some impressive demos for high end lambdatalk, but I can't see them, it may be more performant, but I can't actually see the same level of demoscene work as exists in scratch. I wasn't expecting to but I've got to give this one too, to scratch

Wide walls: Kids make games, animations, toys, mocked-up os'es, sounds, and conversation bots in scratch, there's a lot to do with it

Lambdatalk just, doesn't have so much? if a kid says they want to make something in scratch they often can, unless it's 3d or requires wider internet access, lamdbatalk doesn't seem to provide so much.

In conclusion, don't rag on scratch for clicks, it's an educators miracle, and when kids want to "graduate" up to more, they're looking for more possibilities, not harder challenges, like html, or python libraries that let them interact with the web, or 3d engines that let them make the kinds of games they like to play. As an adult I think lambdatalk seems like a cool toy, and I'll put some time into playing with it.

kids want to make the kinds of things they like to use.


Thank you for your very detailed comment and I agree with much of what you say. Please understand that I am trying in this post to share my experience as an amateur discovering, after having manipulated quite a few "standard" languages, that many concepts can be approached as a simple text rewriting process, (forget the lambda-calculus), accessible to anyone who knows how to handle a word processor. An elementary process that only needs to be judiciously combined to build booleans, data structures and touch closely the functioning of a recursion. The post is only a skeleton that requires of course some guidance and this is what I try to do in the other linked pages. Please take the trouble to check out the site, http://lambdaway.free.fr/lambdawalks where you are welcome.


The author forgets (among other things) that he has the attention span of an above-average adult.


[flagged]


You went so woke you became ageist, racist, and sexist!

You literally could have stated: "There's more than one way to learn something. The older generation who grew up learning machine language think only way to get where they are is to walk in their shoes (uphill both ways)."

But no. You brought up age, race, and sex out of nowhere.


As an 8 year old, I had no interest in playing with children’s toys. I wanted to learn how to what the grown ups around me that I admired did, making professional looking things. VB6 and Adobe Flash were perfect for this circa 2002. They were professional grade tools that were easy to get started with but capable of sophisticated professional looking output. The drag/drop/drawable user interfaces or scenes of these programs was also great for a kid to make something interesting without getting too frustrated with detail. I enjoyed doing things like making clickable buttons change text on a label or pop up a message box or open a file. I also thought making menu bars for applications was so cool and fancy. Likewise, I enjoyed making simple animations with flash. I think the key is having a tool the kid thinks is useful/professional grade and cool (I didn’t find kids toys or kids software cool above the age 8 or 9) but also approachable for early gratification with results that can be seen.


I totally agree with the sentiment of this comment, but what does skin color have to do with it?


Some people need to inject race, gender, sex, age... into literally everything. It is the only lens with which they can see the world.


I am an old man coming back to childhood and I am an amateur, not a smart coder. I just want to understand in deep and I discovered that lambda-calculus helped me better than Scratch. I just try to share this experience. Maybe I'm not alone in this case. You could have a look at this page http://lambdaway.free.fr/lambdaspeech/?view=teaching, it was a good experience with a few children (and students in architecture) who where proud to build their own web page and play with their colorized names. In don't say "It's the way!" I just say there are several ways to learn code.


It's pretty offensive to make up this ageist, racist, sexist projection out of thin air. Who hurt you, who was this older white male programmer?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: