Ask HN: Is there a modern “power on to basic” computer, for kids to learn on?
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 ] threadActually, I wonder if kids could learn shell script?
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.
[1] https://www.youtube.com/watch?v=XQA8lowEKOo
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.
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.)
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.
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.
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.
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 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
http://armpit.sourceforge.net/
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.
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.
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 didn't test if it runs in pure Linux text mode, but if possible that's what I'd use.
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?
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.
Also, playing with an iphone or x-box, is not computer-literate.
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.
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.
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).
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.
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
Monty Python's 'Four Yorkshiremen': https://www.youtube.com/watch?v=26ZDB9h7BLY
Take a look at this:
https://www.hardkernel.com/main/products/prdt_info.php?g_cod...
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.
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?"
They are accommodating. They fit. They are easy to master.
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.
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)
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.
That's pure speculation, not a fact.
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
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
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.
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.
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)
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
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.
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
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.
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.
On Xcode it sucks (buggy, stops refreshing, etc.)
Kind of strange, because it's the same infrastructure...
0. https://microbit.org/
1. https://calliope.cc/en
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.
It doesn't boot directly to BASIC, but I do believe that is achievable with other modern C64s, like the C64 DTV: https://en.wikipedia.org/wiki/C64_Direct-to-TV