Advice needed, son wants to learn how to program

Hi all,

My 8 year old is asking if he can learn how to program. He has asked specifically if I could set him up with a ‘programming kit with lessons’ for a Christmas present. I’d like to support this, and it seems like it’s not a transient interest as he’s been all over scratch, and using things like minecraft commands for the last year. I have an old (pre 2017) MacBook Air I can set up for this. How do I / what would you advise I set up for him, to a) keep him safe online (he’s 8!) and b) give him the tools he needs in a structured way.

I am not a programmer. I know enough bash/shell and basic unix stuff to be dangerous and I was a front end dev a very long time ago, but I wouldn’t call myself a programmer and don’t know what concepts he needs to learn first.

Hugely appreciate any advice, thanks.

Edit: So I posted this then had a busy family day and came back to so many comments! I will methodically go through these all, thanks so much.

A couple of things on resources: he has expressed interest in 3D worlds and I noticed comments on engines, but wonder if that’s too advanced?

Totally agree with the short feedback loop rather than projects that take days.

He has an iPad 6 and I’m happy to pop a Linux distro on the Air, so certainly open to that.

So many links to research. Hugely grateful.

Kissaki,

A couple of things on resources: he has expressed interest in 3D worlds and I noticed comments on engines, but wonder if that’s too advanced?

I most certainly wouldn’t start out programming with / in 3d worlds.

Drawing 2D shapes seems like a good way to spark interest though, with immediate visual feedback.

malba,

Some high-level ideas here:

There’s lots of opportunities in programming to make mistakes, or where they’re faced with big open-ended problems that a programmer can build an entire career in dealing with in themselves. Being aware of what resources you need to look for and learn from is one of the first steps to getting what you want out of your interactions with those areas. If he persists in learning programming, he will soon run into these areas, and how well he handles them will play a large role in determining how successful he is as a programmer. A small number of examples of different domains that have unexpected nuances which suddenly become important to a new programmer, and catch them by surprise:

Internationalization Password handling Interacting with the host operating system and filesystem Interacting with programmers from groups with different social norms and standards than they’re used to - this is partly solved by READMEs and project documentation, but only partly. Social skills are important. Interacting with end users Programming languages often have weird corners to them which can waste a lot of time, cause a lot of confusion, and cause bugs. Looking at C and C++ especially, but no programming language is blameless. He’ll have to test his code. If he needs to do involved tests on his code, which he might eventually, there are a few areas of testing code are virtualization, unit tests, and fuzz testing. These all take significant effort to learn how to do. Ethics, legal issues, and politics. GUI programming

There are plenty more areas, of course. I’m not saying this to discourage you or your son - learning about these sorts of things can help your son grow as a programmer and maybe even as a person if he’s fortunate. But my biggest piece of advice is to be very careful where you put your time and attention on, in programming, and probably in life in general. There’s no limit to the time you can waste on being foolish, except the limits you have for yourself.

My second biggest piece of advice is that maybe he should switch to using Linux and Free and Open Source Software at some point. It’s very convenient from the perspective of a programmer who’s very motivated by being engaged with a community or by benefiting others - he can learn about a community he’s likely to want to engage with in the future, he’ll be more able to change aspects of his computer to suit his needs or desires, and honestly, my experience as a Linux user who’s learning programming is that learning how to use Mac and Windows feels more like work than learning Linux does. Learning how to use Linux feels like learning how to program.

Maybe you would want to introduce him to Godot and Blender, since they’re FOSS software, and less at risk of weird decisions being made with them like happened with Unity, where companies pulled a very weird and developer- and user-hostile and security-hostile decision out of nowhere.

HurgletOfficial,

Give him a laptop with Alpine Linux installed on it, and make him setup Root-less Xorg with DWM on it

fbmac,

When I was a kid, this book was fun

archive.org/…/vgmuseum_usborne-hayes_introcomppro…

planish,

Alice is a pretty good 3D programming environment aimed at kids, with little programming blocks to snap together.

You might want to try going back into the archives and pulling out something like MS-DOS and QBasic, or Logo. You can find a good tutorial in book form, and you can get a system that was designed to be programmed offline, with things like local help in the editor instead of behind a Google search, so it should be 100% safe to leave the kid alone with the machine.

hperrin,

If he’s interested in 3D worlds, you could get him started with Java making Minecraft mods.

pap1rus,
@pap1rus@lemmy.ml avatar

Racket is a very good start point, everything you need even the IDE was bundled in the racket installer, as for the textbook I recommend HtDP 2nd htdp.org/2020-5-6/Book/index.html

anzo,

I don’t want to undermine everyone’s suggestions but I think they are failing to understand this is a kid, buying him a laptop and stuff is okay but doesn’t motivate him to much.

Check for authors of books for kids. Invent with python is great, that was going to be my suggestion. But same author has plenty, like this one turtleappstore.com/book/… to echo someone who mentioned Minecraft (indeed, already marked a whole generation into computer science subject!). Good luck! Maybe you can even find something for you, like, how do we teach CS/ programming to kids? How come that moving the Logo turtle was alright for so many years, lol

Tathas,

I see a lot of good advice, so I’m going to suggest something different. Have your son watch this guy or someone like him do some stuff.

youtube.com/

He just picks something that interests him and builds on top of that interest.

My kids (8 and 11) don’t even have any interest in doing programming at the moment, and they like watching him build stuff. We watched the Geographical Adventures playlist twice.

257m,

All the others have great suggestions but I’d just like to add there many open source projects out there and given example code of how something is done and letting him play with it can be tremendously helpful. For example finding some simple 3d programs and lettting him change the source code to do whatever he wants or just giving him a template like editor.p5js.org/1alimaze/sketches/IJpxIEME8 which I made when I was first learning and letting him play with the values and add more objects.

0xc0ba17,

I can recommend PICO-8, if you have access to any windows/osx/linux computer.

It’s a “fantasy console”, a self contained gamedev environment that emulates an 8bit retro console (while using Lua, a popular and modern language), is super user friendly, and allows you to get a satisfying and fast feedback loop when learning to code.

There are many resources to learn it and a lively community

tranxuanthang,

This! But I also suggest Tic80 as a really nice free and open source alternative of Pico-8.

tic80.com

0xc0ba17,

Actually I prefer to develop in TIC-80, but the community is way smaller, and TIC-80 games can’t be played on phones without a keyboard. It’s not a 1:1 alternative, tho I’m glad it exists.

JackbyDev,

Pico 8 is super frustrating at times. I wish they’d make a program to be a “Pico 8 dev kit” that has a larger resolution so the IDE is more readable. The IDE being so hard to work with makes me want to use a proper text editor but there are downsides with that too. It could keep the game’s resolution the same and only have a larger resolution for the IDE so the specs don’t change.

0xc0ba17,

I agree with the resolution, and I (almost) never use the built-in code editor.

Most of the time I have a folder per game, with a somegame.p8 whose only code is #include main.p8.lua (+ other includes if needed), and the code itself is inside main.p8.lua. Since the code is cleanly separated from the other assets, I don’t risk overwriting one with the other while juggling between my IDE and pico8

purelynonfunctional,

For general Unix skills, get him a laptop and help him install a Linux distro on it. Show him a few different desktop environments, buy him a Linux magazine with a DVD and articles or projects. Then just let him try whatever he wants and promise to be there to help him fix whatever he breaks (by pointing him to docs, belong him write good forum questions, helping him revise search queries, etc.). These skills are perhaps a bit simpler to pick up but can eventually grow into scripting and programming skills.

For programming, start with simple programming exercises or koans, and maybe give him prizes (like a quarter or a piece of candy or something) when he solves them. Let him solve lots of similar problems/puzzles over and over as he builds his confidence; rather than pushing him to harder material, just offer harder material with higher rewards. You’ll probably have to write your own exercises at first, like just translating arithmetic expressions from a notation he’s learning in school to one used by whatever programming language you’re working in together. Eventually, you can start to do online exercises together.

Once he has been messing with this stuff for a year or two, revisit fundamentals by working through a carefully selected introductory textbook together. You can include shell scripts at this point to tie the Unix stuff and programming stuff together, and maybe use a good Linux magazine or Learn Enough Developer Tools to Be Dangerous as the ‘textbook’ for that side. Then he’ll at least know basic version control and surrounding tools.

After you’ve gone through a chunk of those basics together— full mastery is not required— sign up for an introductory programming class together at the local community college. Taking it together, you can make sure he’s keeping up with the material, encourage him to ask questions, and help him with homework if necessary. If you want, you can also do this with networking or systems administration.

This is based on some things that my dad did with me, including a couple of community college classes we took together. (Idr exactly how old I was during those classes, but I think it was before I started high school.)

MrJay,

minecraft can work really well for learning how tp program, when I was 9 that is how I started, unfortunately its been a long time since I took that course but if you are willing to do the research there should be a some for server programming and java modding at least that is what I took over 11 years ago at this point, and maybe javascript for gametest framework for bedrock edition. there is also minetest which is a little better for learning but isn’t minecraft so is a little bit more annoying but lets you modify basically anything you want which is very fun. also a great way to learn boolean algebra/circuit design in minecraft/minetest, redstone can be used to make micro computers like calculators, fun and can be applicable to making games in minecraft which makes it more engaging as well. also the minecraft commands can be put into a mcfunction file as you can imagine this can be generated by outputting text to the file, this is great because you learn file io and a programming language and mostly he would be using math to generate things so teaches math, its limited but that is something he would find fun that is super easy and can be done in basically any language.

redstone/mcfunctions I personally like this approach on top of the course because it gives him something useful so should hopefully encourage him to play and program after he finishes lessons and etc…

IonicFrog,
@IonicFrog@lemmy.sdf.org avatar

Don’t worry about Linux, and don’t try to over complicate things. If you are set on going the Linux route, get a Raspberry Pi. It will give him something really flexible and cheap to experiment with later on.

Look into modded Minecraft. There is a mod called Computer Craft where you can write programs in Lua. One of the things that makes scratch so good for kids is that the results are instantly visible. This is important for kids.

www.curseforge.com/minecraft/mc-mods/cc-tweaked

There are programs to control your reactor > www.youtube.com/watch?v=N9fC3khXuj8

Unmodded Minecraft has Redstone where you can build logic gates.

Outside of what you already have check into a maker space or a computer club at school. Here in Atlanta there is www.codeninjas.com. Maybe there is something similar in your area.

OldMrFish,

If he likes working with physical objects as well (robotics) I can’t recommend the Lego mindstorms or education series enough. The standard interface is very similar to Scratch so he’d feel right at home, but they can generally also be programmed with more traditional programming languages if using building blocks becomes too restrictive.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • programming@programming.dev
  • DreamBathrooms
  • magazineikmin
  • thenastyranch
  • modclub
  • everett
  • rosin
  • Youngstown
  • slotface
  • ethstaker
  • mdbf
  • kavyap
  • osvaldo12
  • InstantRegret
  • Durango
  • megavids
  • ngwrru68w68
  • tester
  • khanakhh
  • love
  • tacticalgear
  • cubers
  • GTA5RPClips
  • Leos
  • normalnudes
  • provamag3
  • cisconetworking
  • anitta
  • JUstTest
  • All magazines