Ask HN: Is there a modern “power on to basic” computer, for kids to learn on?

387 points by andrewstuart ↗ HN
I want to give some young kids a small cheap computer that "switches on to basic" or some other programming language?

Like in ye olde computer days when you brought home your Commodore 64 and turned it on you were in basic.

I'm guessing everyone will want to say "Raspberry Pi" of some form, but does that meet my requirement? Plug it into TV, turn it on and you're in basic and can start programming. Ideally with some sort of book or resource for learning how to make the computer do things on the home TV screen.

269 comments

[ 3.2 ms ] story [ 220 ms ] thread
TI-BASIC was the first language myself and a few colleagues learned, by automating our algebra homework.
And the great thing about today is, there's a metric ton of free software you can move on to. Like, I would've killed for Godot when I was a teenager.
If it boots to a bash prompt, you can program that :P

Actually, I wonder if kids could learn shell script?

This was going to be my suggestion. You could also make sure some sort of curses library is installed, e.g. https://bashsimplecurses.readthedocs.io/en/latest/

But really the question is misguided. Kids need to want to do something with a computer, and in order to do that they will learn shell script, basic, javascript, asm typed from magazines, whatever, to get it done. The environment itself is instrumental, not terminal.

Colour Maximite is a lot of fun [1]! The BASIC environment it has is quite powerful, and it even runs a full-screen text editor.

[1] https://www.youtube.com/watch?v=XQA8lowEKOo

Beat me to it: I was going to post a link to the 8-Bit Guy's video as well.

There are, I believe, various versions available and if you just want something to learn and write BASIC programs on it's difficult to imagine a better place to start because it boots directly into a BASIC prompt, just like 8-bit microcomputers from the 80s.

Pico-8 was my son's very first introduction to programming. He does much more with the integrated sprite editor and sfx/music editors than he does with actual coding. I would like to get him interested in TIC-80 as a replacement.

Key weaknesses of Pico-8 for kids learning to program:

1. The editor runs at the same resolution that the games do. Maybe this is because they didn't want to make their VM flexible enough to deal with multiple resolutions, or they just wanted to make the illusion that the Pico-8 is its own machine very consistent, but the end result is still a painful code editing experience. When I make example programs for my kids, I need to compromise between descriptive variable names and indenting code blocks.

2. Deviations from the standard lua API/libraries mean that normal learning resources like PIL have to be interpreted with an asterisk.

3. This is a minor thing, but the fixed palette is annoying. In graphical terms, Pico-8 lies roughly between the Atari 2600, 7800, and NES, but all of those systems handled colors more flexibly.

4. Splore allows children to find games that are not appropriate for their age. It's just not designed for kids and parents. My son found a game featuring smoking and thought it looked SO COOL (this was easy to disabuse him of). He also found a game that puts you in the role of a cyberbully, and the subtle psychological effects of that sort of "edgy" game aren't as easily undone with a single conversation. It is possible to mitigate this by putting whitelisted carts into the bbs carts folder and then making that folder read-only.

TIC-80 improves on the first three points. The editor is still running at the same resolution as the games, but uses a higher resolution (and the editor can optionally use a thinner font). The lua implementation is much more standard. And the palette can be changed (even per-scanline, I think). The music editor lets you draw your own waveforms, but in other respects is less intuitive than Pico-8's. (I haven't looked at TIC-80's cart browser so I can't comment on it.)

All of these are explicit design choices, for example a fixed palette is important to give games a "Pico-8" look and also reduce decisions regarding color choice. I suggest you watch Joseph White's practice talk (https://www.youtube.com/watch?v=87jfTIWosBw) if you're curious about design decisions that guided Pico-8.

Multiple resolutions would absolutely break the "Fantasy console" feel of Pico-8, even though I understand why programmers universally hate that. To be fair a lot of people do code editing outside of the Pico-8 editor.

#4 is an interesting point. The trick here is that different parents have different ideas of what is and isn't appropriate, and of course different kids will have different responses. It seems like the answer is to maybe have a version of Pico-8 that removes splore and expands the demo carts with some universally safe, popular titles.

TIC-80 is cool btw and might be a better learning environment for kids. I don't like it (or any of the other fantasy console\pico-8 clones) quite as much as Pico-8 because they remove constraints, making them feel more like generic game editors and less like imaginary retro computers.

>All of these are explicit design choices, for example a fixed palette is important to give games a "Pico-8" look and also reduce decisions regarding color choice.

Indeed, which is why they won't change, which is why (for me) an alternative like TIC-80 is preferable to waiting around for Pico-8 to become what I wish it were.

The virtual console space is tantalizing, but the culture around it has different tastes from mine. For example,

>I don't like it (or any of the other fantasy console\pico-8 clones) quite as much as Pico-8 because they remove constraints

This is a pretty common sentiment on the Pico-8 boards; I understand there are people looking for a certain aesthetic thrill that comes from working within the constraints to make something unexpectedly cool. And yes, when I have time, I would like to make e.g. a metroidvania that uses individual tiles to encode 4x4 chunks of tiles to allow for a big-ass map. It just so happens that those constraints aren't necessary for, and sometimes are in tension with, the goals of a good first-coding-experience learning environment.

I also totally understand why virtual consoles almost all use BASIC or lua, but (for me, not for my kids) I wish there were an option with static types. The combination of not being able to see much code on the screen at once plus no static type checking is pretty uncomfortable for me.

> I also totally understand why virtual consoles almost all use BASIC or lua, but (for me, not for my kids) I wish there were an option with static types. The combination of not being able to see much code on the screen at once plus no static type checking is pretty uncomfortable for me

At some point the question becomes why not just use Unity, BFXR, Bosca Ceoil and ASE Sprite if you want no constraints and better tools with a similar Pico-8-ish aesthetic? That question is outside of the scope of the original post, but as I piece together your ideal fantasy console, it seems like not really a fantasy console but a simple general purpose game IDE with a statically typed language.

Edit: Btw, if what you want is a simple general purpose game IDE with a statically typed language that is somewhere in-between Unity and Pico-8 I suggest you make it or at least spec out your needs more formally! I'm definitely a fan of more people making game creation tools (and software development tools in general) that fit their needs\use cases.

The all-in-one nature of most fantasy consoles is really appealing. They are also not terribly opinionated, which can be nice. When I tried Unity its 2d story was not good and I kind of struggled with its opinions. I've heard that its 2d has improved, but haven't had the time to explore it since.

I actually do like reasonably low resolutions in-game rather than in the code editor. When I play with my kids I want it to feel like good graphics aren't too far out of reach, and low-res makes it easier to get to something in the range of acceptable. My own kids appreciate their own pixel art more than anything they do in Scratch, for example.

I also think I might be slightly younger than most fantasy console fans, maybe? When I was very young I had an Apple IIc, which was good for booting straight to BASIC, but most of my childhood programming occurred in the era that spanned from CGA cards to VGA, and then I left programming for a while when 3d acceleration became a thing. One quirk of this era was that tradeoffs between color depth and resolution were just a normal thing. So for me, it would be a natural thing for a retro game dev environment that simulated a fixed framebuffer size to support, say, a 256x192 256 color mode and a 512x384 4 color mode. An editor in that higher-resolution, low-color mode would be way more comfortable than in low-res. (Pico-8 does have an alternate resolution, but it's 64x64 and still 16 color- somewhat evocative of the old 40x40 mode that Apples had).

TIC-80 does almost, um, tic all my boxes. I mostly just want a higher-resolution code editing mode (for both me and my kids) and a static language (for me; my kids don't really have a notion of types (yet)). So obviously the solution is to fork TIC-80 and see what I can make it do...

My ideal pallete would consist of all the C64s colors and all the ZX Spectrums colors combined. A few of them would overlap, and the resulting pallete would be restrictive but pixel artists could work magic between both the familiar old hues.

My ideal machine would be a C64 and Spectrum combined, 4 commodore sound chips, screen resolution increased only about 50%, 256kB ram, possibility of running 6502 and z80 in parallel, at quadruple speed.

Could be just nostalgia, but the continuing demo scene for these computers is incredible[a] and beautiful new games also get made to the old frugal specifications.

[a]https://www.youtube.com/watch?v=5UN2HHVScUw

Your personal experience is not the only correct one. I assure you that the people coming before you, making their own computers out of chips and resistors with a soldering iron, would say the same thing about you. And people who grew up with Windows 98 say the same thing about people only exposed to iOS and Android, and so on.
They are all more justified than the person who claims Swift playground on an iPad is the pinnacle of CS for Primary School.
I understand, in a sense, what you mean (since I am of an earlier generation than the one which learned programming on that particular platform), but why should that necessarily be true? Hasn’t it always been the case that the current generation skips learning about useless lower layers used by older generations? How could it be that the layers you grew up are the special ones which are still useful, when all the layers which came before, which people at the time thought essential, have turned out not to be so?

I am, below, trying to imagine what an argument could be for any specific example to be worse than the previous ones.

One could make an argument that when the level of abstractions eliminate Turing completeness, they have eliminated an essential quality. (But this does not even eliminate Swift playground, I think, so in this case it does not apply.)

Or one could make an argument about a lack of program interconnectedness, which, I am given to understand, is very much a problem in modern smartphone and tablet environments. But I could be out of date and/or misinformed. Nevertheless, it would be a reasonable argument (and I don’t know if it applies to Swift playground on an iPad or not).

Very constrained environments, like Minecraft, can also be argued against on practical grounds – it’s simply too difficult to make something useful within them. Not technically impossible, just too difficult once you get up a bit in abstraction levels. In my opinion, this argument also applies, sadly, to BASIC: The lack of functions and other methods of abstractions is, I think, a killer.

Or one could argue (which I think I personally favor doing) that software freedom for end users is an essential quality which must never be lost, for reasons which are only tangentially based on what is good for learning. It is almost special pleading, but has its own reasons for doing so, and the logic, on its own terms, is sound.

But none of these arguments are insurmountable by some theoretical device and environment which avoids any or all of these specific criticisms. Therefore, I think that any argument based solely on the age and abstraction level would not be valid.

Despite being an open language, Swift (and Playgrounds) is an effort to usher children into the Apple tent.

BASIC (essentially any 3GL) never wore such a veil. To suggest discrete logic and IC-level assembly compares to issuing commands via the LEGO Mindstorms protocol perfectly illustrates the chasm between learning and understanding.

Agreed. I'm a python beast, but really struggled with Assembly language in school. I'd have been better off with a ZXSpectrum earlier in life so I could've learned hardware. IMO high level languages (as insanely useful as they are) are similar to writing spells like a wizard and using assembly or even basic when you know all the registers...etc is more like a real science. Both are valuable, but I really wish I knew more about hardware.
Having a ZX Spectrum would in no way actually help you learn hardware. The only thing it would do is to reinforce its realness, so to speak, which would help to motivate you to learn it. But it would not actually help you learn it – the design and learning curve of assembly language is what it is, and having access to running hardware (compared to having an emulator) does not change that.
It makes it easy to learn the hardware because it has a simple processor and makes it dirt simple to access. Windows on the other hand runs on modern chips and it isn't easy to run assembly without 3rd party software and graphics is also not something a child can easily handle. I suppose a good emulator would be similar, but emulation is a little bit of a lie :)
> Despite being an open language, Swift (and Playgrounds) is an effort to usher children into the Apple tent.

Yes. That is certainly a good argument against that specific example, and it is one I agree with. But it does not apply generally.

> To suggest discrete logic and IC-level assembly compares to issuing commands via the LEGO Mindstorms protocol perfectly illustrates the chasm between learning and understanding.

But learning and understanding what? Why is it (as I imply that your argument is) important to understand assembly-level instructions when it is not important to understand the underlying electronics? Why is this level special?

In addition to all the general arguments I outlined above, there is one additional argument to be made against assembly language: In today’s processors, I am given to understand that these assembly language instruction sets are largely a high-level language, emulated by microcode – the assembly instructions you write have very little to do with what the processor is actually doing in a modern hardware architecture, and therefore teach you exactly the wrong things about how a modern processor works.

I think you misunderstand me. You are talking about computers and technology, I am talking about crayons, paint, musical instruments... Things that you can immediately use to create without restrictions. There was a small window of time when computers offered that for kids. There is no reasons why this could not be achieved with modern technology, but somehow our current culture prevents it. I'm sure it will be reinvented one day.
If it was my kid, I'd use any single board computer or an old laptop (pro: integrated keyboard and screen, e.g. Dell D630), and install a Linux that boots straight into QB64: https://www.qb64.org/

I didn't test if it runs in pure Linux text mode, but if possible that's what I'd use.

For those of us who grew up in the 8-bit era, this has a lot of appeal since that's how we got engaged. But for most kids today, is this sort of ab initio approach really the right way to go about it? Based on my experience with a few different types of kids/personalities, I'm skeptical.

Dropping them into the command line / IDE of any language / environment is likely to leave them both unimpressed and lost. Neither the Raspberry Pi (more software oriented) or Arduino (more hardware oriented) is going to be terribly impressive from a standalone point of view compared to the PC/iPhone/XBox they're used to. But the thing they've got going for them are a lot of cool projects other people have done with them, step-by-step tutorials, and pre-built stuff that's relatively easy to re-create and/or integrate. Will the 8-bit recreation you have in mind have any of that?

> they're used to

Maybe they're not used to them, because we haven't given them one? Or largely restrict their use? Necessity is the mother of invention for kids.

Only if they don't have friends. I have a family member who tried that and failed miserably: not only are the kids computer illiterate (from not having any positive/useful exposure to technology when they were younger) but now they are hooked video games and social 'stuff' from their friends / school. The parents have now thrown in the towel and use technology as a pacifier for their adolescents. Just because you don't allow it at home, don't assume they're not getting it somewhere else.
Nope, my daughter is very social, an avid reader, and can program minecraft too. The fact that friends have toys doesn't solve the learning/boredom drive at home.

Also, playing with an iphone or x-box, is not computer-literate.

Kids have it too easy today, they don't have to work very hard to get decent computing experiences, and its not like they have to do any programming at all to have fun. It is also super easy to get addicted to just consuming all the time. It is quite depressing.

My kid is still a toddler, but I think I might put a stripped down CLI-only computer in his room when he reaches 5 so he can at least play with it if he wants. It doesn't need to count as dangerous screen time, there is no internet to worry about, and he probably won't get addicted to a CLI at least. I mean, the alternative to that is probably no computer in his room until he is 16.

Is this so new? 25 years ago kids were addicted to cable/phone/Genesis/VHS and never "had" to do any programming to have any fun, either.

There was a phase where people expected that people starting on iPhones even younger than people started on Windows in 1993 would make them more technologically literate, but that was optimistic - they're iPhone-literate to the same level kids then were Windows-literate.

Actually understanding things at the machine level was very rare back then, too, though.

Somewhat affluent kids maybe. As a preteen in the 90s I had an uncle's hand-me-down 80s console (NES) with like two cartridges and 80s computer with a few pieces of shareware game demos that I hand to know CLI commands and manage files to start plus a basic interpreter. My (nearly infinite seeming now) time was spent staring at the wall, sitting in rural nature, building things out of my whopping ~80 off-brand lego bricks, socializing with kids that I didn't understand at all (rednecks who didn't comprehend the idea that one might read on purpose, for fun) or messing with the interpreter.

Later on as a teen I'd hear about a "free" OS that was good at running on limited hardware, which would be exciting to me in the very free-as-in gratis sort of way as a kid with an aging (different than previous paragraph, mid 90s) hand-me-down PC, no money or anyone to ask for money -- I had to go on a waiting list to get a CD mailed to me IIRC -- but then then I was up and running with my first linux server (RedHat 6), albeit isolated from the internet at large, but I'd get a whole slew of new interpreters and compilers to mess with (C, Python, Perl, PHP), and they all came with documentation, and stuff had sources I could read!!

During both periods my single mother would sporadically (when a sales guy convinced her) subscribe to cable for a few months at a time before realizing she couldn't afford it. We didn't own many VHS (to a detriment, renting favorites multiple times -- math and planning weren't in my mother's toolbox). Even if there were any real content available for our television, we just had the one and she used it for the entirety of her own downtime. There were internet trial floppies/CDs or ad-supported dial-up schemes etc., but I didn't have regular access to a reliable internet connection in my family home until I got my first job out of high school (writing C for embedded controller of a machine tool platform) and could pay for that with my own money.

If my mother were born 20 years later and made the same kind of life decisions, that rural backwoods is now served by a community project that provides affordable 100 megabit fiber to the premises we could probably keep on despite a late payment here or there (better service and value than the cable I have access to in a real metro area today, frustratingly). I would have hand-me-down iPad and iPhone (as would my mother -- giving us each our own screens with which to consume entertainment in parallel), little money with which to purchase software for these, no way to pirate software for them, no general purpose computer, and my mother could probably manage to keep her Netflix subscription paid for keeping us both with a tap of easy entertainment. My more curious forms of bored energy would probably be satisfied watching other people play PC games on Twitch or something or bulshitting with my peers (who would exist, me being less nerdy and society in general having become a bit more nerdy). By 18 I'd know a lot more about internet culture and games (and probably have more friends) but I wouldn't be able to raise my hand when the careers counselor comes by asking if any of the students knows C (and that machine would probably have a proprietary runtime instead, and that company would probably have offshored those tasks before reaching out to the local high school).

How many of your peers took the same path you did? Sounds like 0, and instead that they had completely different interests. I'm skeptical that (a) having a hand me down computer with a Basic interpreter but also (b) not having "more addictive" TV, music, or more video games/rentals/friends with consoles was a common situation.
It's new, passive screen time and active screen time are getting a lot of attention in the pediatrics community.
Kids today have it difficult!

A real computer, by definition is something you can program.

Today you don't just find accessible devices meeting that requirement in the wild.

In the microcomputer era you pressed the power button and you had a REPL prompt.

Today there _is_ a computer hidden somewhere inside you laptop or mobile device, but you need to know where to dig to find it.

In the 80s a newly hatched geek just had to crawl over the beach sand until he reached a device and it was a computer.

Today's kids are surrounded by computers, but they are all deeply embedded in the devices around them.

After hatching, a modern geek needs someone needs to break the husk around their device to get at the computer first.

So your recipe is exactly the recipe for exposing him/her to a computer.

I think you are selling kids/newly hatched geeks short. They have also been raised on google and youtube - both places they can find out how to do nearly anything related to programming and game dev. I would have done anything to get access to that info when I was 11 and trying to figure out how to make sega genesis games!
Information overload. Sure, those gems are there. But they are buried under a proverbial mountain of crap.
You should see what kids are doing with Minecraft. I've had to watch videos made by 12 year olds because I couldn't figure out how to install mods. They not only are doing the videos, but creating the mods.
Kids like you had it way too easy. When I was young you had to solder your own components together to make a calculator.

Kids like me had it way too easy. When they were young they had to look things up in log tables and use slide rules.

Etc. back to hunting wild beasts and digging vegetables out of the frozen ground

I'm sure I would have found some charm in using punchcards, but I think being 6-7 when PCs just first starting coming out was kind of a magical time on the threshhold, similar to when crystal radios started showing up in the 50s or cars started becoming viable in the early 1900s.
I think the issue is learning by tactile experience.
Yes and no. I agree they have it too easy as users. But it is harder to start programming because of the complexity of the tooling. Also, achieving something cool in code can be a bigger stretch than it used to be. When the pinnacle of gaming was a text adventure, a kid could come close to emulating it with a few dozen lines of code. Now kids are playing Fortnight which is not replicable without a large team of coders, artists, and millions of dollars.
And it it will sit in a dusty pile in the corner
I've been thinking along those lines, with some external GPIO pins hooked up to toys and simple commands to control them. So the kid could type "ON 4" and the pin labeled 4 hooked up to a light would turn it on. Or "VOLUME 3" to set the volume of the sound output. File system commands like LS, CD, and PLAY <name> to play a music file to sound out. Maybe more commands that control RC channels where you have lots of flexibility on what you put on the other end.
Truestory. I was and embedded engineer and I still find this stuff pretty dull. I can't imagine a kid caring unless they have a specific project in mind. Especially when everything these days has nice graphics and there are so many options for apps, games, websites etc that are easier and more engaging.
But did you ever find it interesting/fun or was it always just a job? I suspect that the OP is trying to find a way to convey the fun they experienced getting into tech as a kid... either that or they're sadistic ;-)
Truestory. I graduated with EE degree and a few years after that I still get a kick out of making an LED, connected directly to my desktop printer port, blink on and off. Different strokes for different folks, yeah?
Besides the novelty of the actual 8-bit machines, that era pushed the 'kid hacker hero' character (hard!) Whiz-kids Richie, Wargames David, Ferris Bueller, kids programming supermodels, spaceships etc. What came first the enthusiasts or the role models? A generation of kids might have easily been bedazzled into chef'ing or carpentry instead. Mightn't have been a bad thing.
"Plug it into the TV" as a requirement would restrict the choice. Why not something that can be programmed through a PC, fun enough to attract the kids attention, with great instructional value, powerful enough to be used for serious tasks (LCD+wifi+bluetooth+buttons+battery=IoT terminal) and cheap?

Take a look at this:

https://www.hardkernel.com/main/products/prdt_info.php?g_cod...

I think it will help once they release the new firmware that lets you more easily access disks stored on a USB stick. Doing LOAD "$",8,1 etc. is rather tedious with the virtual keyboard.

Also, they have promised a bigger version with a fully functional keyboard. That will be awesome once it's out. I'm waiting for it since it was actually the thing that made me join their crowdfunding campaign.

Yep, my daughter plays minecraft with it about 98% of the time. Not what I had in mind, haha.
Nothing wrong with it. However, I think an 8 year old seeing a 30 year old computer turn on instantly to the same thing a supposed "better computer" takes 10 minutes to boot to might surprise and teach them something.

I think your question, although sincere, is a variation of "why not give a child a 4 wheel drive suv instead of a silly old go cart?"

Kids simply like Kid-sized things.

They are accommodating. They fit. They are easy to master.

It's more like "Why not let the child put stuff on the bottom shelf of the fridge instead of buying them their own kid-fridge?"
There's always 'web browser and Javascript'. Start with document.write, ease into more complicated input/output methods.
>why not use pi + python?

Do you have experience with teaching python to kids? I am afraid to try it with my son because white space is important, I tried only Scratch and making him think as "a machine" is hard enough adding syntax errors on top would make the job much harder, let me know if you have experience with this and if you think I am wrong.

Only the leading space is important and editors take care of it when you hit the tab key.
Or just use a language that doesn’t have that problem, then you don’t need a magic editor.
It's not a problem, it's a lot simpler than typing matching braces everywhere. Python is one of the easiest languages to learn.
I am not the person you replied but in C style syntax when you type { in an IDE the { is inserted automatically so there is no risk to forget about it, also if you copy paste a piece of code you just run the action to reformat the file or the selected code and the braces will correctly fall onto place.

I am not saying that Python syntax is a big issue, but is one more thing to keep in mind and it potentially trip up children(probably something more visual that is impossible to make syntax errors is better but I did not find something that is engaging enough)

His point was about not needing a "magic" editor. Neither does python, it works with spaces or tabs as long as you are consistent, and tells you where you aren't.
My point is that if I define a metric for easier to use by a beginner programmer (child) then C syntax > Python syntax

If you define a different metric, maybe pretty syntax then it would compare in reverse.

Though I don't have experience or seen people testing this on children and "proving" that having to keep in mind spaces/tabs is harder then the braces and semicolumns (when using a decent IDE) so I may be wrong.

> My point is that if I define a metric for easier to use by a beginner programmer (child) then C syntax > Python syntax

That's pure speculation, not a fact.

My speculation is based on the FACT that python syntax involves the programmer to indent correctly where C like syntax is not , so the only way you could disagree is that maybe

1 the cost of keeping indentation in mind for beginners is 0

2 or the cost is greater then zero but there is some different cost in C like syntax that affects beginners

Keep in mind I am talking about syntax here and not the C language

If a kid can understand a for loop, I think the kid should be able to understand indentation.
Hardly. One you can see, one you can't. And that's without accounting for the real cause for consternation: tabs vs spaces, and tabs being magically changed to spaces or vice versa because of your too-smart-but-not-smart-enough editor.
As mentioned previously, Python warns about inconsistent indentation. Also, I learned programming at age 12 and understanding indentation didn't take more than a few seconds.
If you use a nice text editor, whitespace shouldn't be an issue. Even with any other language, you would want to show them how and why to indent. If it becomes an issue, they may be writing code that's too complicated.

In other words, I think a child will more easily learn about indentation, than handle writing flat code, which can get difficult to understand pretty quick

You did not mentioned if you teach python to kids, things that are intuitive to us are not for them, yesterday I was working with my son on Physics exercise, something like how much Km are 1234cm (we are using metric system here) and in all similar exercises he did everything reversed, like a few centimeters are a few millions of Km which is obvious absurd but it was not easy for me to make him understand(plus the teacher at school).

My point is that something that is obvious and simple for us for someone else makes no sense(he is 12 and I don't have experience teaching other children),

For now I gave up on teaching coding to him, maybe he needs to grow a bit more to understand the abstract thinking required.

This is why extremely rapid feedback is the key to learning for these kids. BASIC and Logo have a decades long proven track record for your first language as a child. Python is something a highschooler or talented middleschooler could maybe pick up, but it's not suitable for a 6 year old unless they have a very strong driving personal interest.

When you're trying to get your kid into something that doesn't come naturally, they're more liable to give up quickly if they can't make rapid strides.

That just sounds like a direct result of not memorizing the prefix orders; not of anything related to actual understanding (or failing thereof).

What happens if you give him a reference sheet? (I have little experience teaching kids but I’m a firm believer in that the only good test is one where all the puzzle pieces are provided; its the composition thats worth testing, knowing the pieces by heart is just to speed things up)

It is not that, he knows that 1Km=1000m and 1m=100 cm, the issue is when you want to transform Km in cm or reverse, I assume he memorized how to do it in school but it was not natural, did not understand it and at home it applied the things he learned but in reverse. What surprised me was that he could not realize how absurd the results are.

A thing I learned by doing the homeworks with my son is that is also easy to think that the child learned/understood your nice explanations/graphics/examples he does all the exercises/problems correct and then 1 week later he won't be able to do the exercises again, so I will repeat them again after 1 or 2 weeks to make sure he still knows how to do it. This may be different with other children or different teachers

Python seems like a nice update to what BASIC was in the 8-bit era. Real-time interpreter so you get instant feedback, including very simple imperative syntax. (IMO any introductory programming environment that doesn't let you do something like 10 PRINT BUTTS <RET> 20 GOTO 10 <RET> and get BUTTS BUTTS BUTTS... out of it is a failure to launch.)

But unlike BASIC, Python will grow with you and you can use it for non-trivial projects without fighting with the language. I certainly wish my old Apple II had Python; it would have prevented the immense jump to a "real" programming language, because I kept trying to go from AppleSoft BASIC to C and banging my head into a wall, nothing about it made any sense. (Perhaps I would have had better luck going from BASIC to Pascal or QBasic, but for some reason I never thought to try it. I think because the very few computer-literate adults I knew were minicomputer people and led me to believe that C was the only thing worth learning.)

Not that working up from a text prompt is the only way to learn how to interact with computers, certainly. I know a fair number of people who learned to program due to environments like HyperCard, which are much more visual, and let you start with the art and storytelling and then glue things together with code, rather than start from the code.

But for some people, including myself, the feeling of interacting directly with a computer via a simple prompt, and making it do things each time I pressed the Return key, was quite powerful.

I too regret staying for 12 years on GW/Visual Basic and never finding my path to C. How to start a programming career slowly...
(comment deleted)
>MO any introductory programming environment that doesn't let you do something like 10 PRINT BUTTS <RET> 20 GOTO 10 <RET> and get BUTTS BUTTS BUTTS... out of it is a failure to launch.

But Python doesn't let you do that - there's no goto...

While I'm being somewhat tongue-in-cheek, I do think it's true that

  while true:
    print("BUTTS")
carries quite a bit more conceptual overhead than the BASIC equivalent, and is not exactly a "very simple imperative syntax". You don't have the simplistic and obvious "goto" - instead you have the ungrammatical and obtuse "while true". And then there's the indentation, the colon, and the parentheses around the argument to print... all explainable of course, but all requiring explanation. To fully grok it you need to understand booleans and conditions, block structure, and function calls. Of course it's all perfectly obvious to experienced eyes but remember the mountain you have to climb when you're first starting out - more than one or two seemingly inexplicable things when you're first starting out can be very discouraging.

Worse, to my mind, is the loss of that small moment of enlightenment regarding complex behavior emerging from computer programs - with 10 PRINT BUTTS : 20 GOTO 10 you are composing two atomic, individually obvious statements to create something more - an infinite loop. When one of the statements is a slightly more complex line that essentially means "do an infinite loop", some of that magic is lost.

I run a Python user group for my city and there's a number of people who teach python to kids there. One tool that's gained a lot of traction is Pythonista (http://omz-software.com/pythonista/) which kids can use to code graphical games directly on an iOS device. Code Like a Girl introduces python to kids 8-years old and up as well. Personally I've had lots of success teaching python to my 12-year old step daughter. She's being taught javascript at school through App Lab and hasn't found the transition to be particularly difficult.
Thank you for the links , I will check/try Applab in weekend, I do not have iOS so I can't try the other app.
There's also going to be the http://mega65.org/ which is a spiritual successor to the C64. It's completely open source, even the FPGA code implementing the 6502 (although the FPGA is most likely not going to be open source), and it has better specs than the C64, but it should still be compatible with the original C64 and its games from what I understand.
Any idea when the mega65 is going to be released?
While that's what I grew up with, too, it's probably too isolated anymore.

Find a cheap laptop or desktop, or a pi, install Python3, and make IDLE easy to reach. For graphics, "import turtle" and later "import tkinter".

Grab any learning Python book. It's not that far from how we learned back in the day.

I mean, you have to click an icon to open Scratch, but other than that, the Raspberry Pi is what you want.
I think it would come down to if you can get the lesson books in Xcode's Playgrounds (or if they have a separate Playground application) that you can in the iPad app. Those are most of the benefit right there.
Thanks, very helpful !
Also, one more thing, the Playground functionality on the iPad is great.

On Xcode it sucks (buggy, stops refreshing, etc.)

Kind of strange, because it's the same infrastructure...

I would consider something like the BBC MicroBit[0] or Calliope Mini[1]. Similar to an Arduino but much more accessible for first time coders. And, as many have mentioned, the Raspberry Pi series.

0. https://microbit.org/

1. https://calliope.cc/en

Couldn't an old (or a new?) HP graphic calculator do the job? It's not technically basic, but you can do tons of stuff on it in addition to arithmetics and function plotting - including programming games, etc.

Plus, it's organized as a LIFO stack. To do e.g. 2 * (2 + 2) you'd enter: 2, 2, 2, +, *. Which helps train the mind to think far ahead about what you want to calculate and how.

Surely Bjorn Stronginthearm's my uncle?