Please share what tools & approaches you use - it may Scratch, Python, any kids specific like Linux distros, Raspberry Pi or recent products like Lego Boost... Or your experiences with them.. thanks.
My daughter is almost 5 and she picked up Scratch Jr in ten minutes. I am writing my suggestions mostly from the context of a younger child.
I approached it this way, I bought a book on Scratch Jr so I could get up to speed on it. I walked her through a few of the basics, and then I just let her take over after that.
One other programming related activity we have done is the Learning Resources Code & Go Robot Mouse Activity. She has a lot of fun with this as you have a small mouse you program with simple directions to navigate a maze to find the cheese. It uses a set of cards to help then grasp the steps needed. I switch to not using the cards after a while. We now just step the mouse through the maze manually adding steps as we go.
One other activity to consider is the robot turtles board game. This teaches some basic logic concepts needed in programming.
For an older child, I did help my nephew to learn programming in Python when he was a freshman in high school. I took the approach of having him type in games from the free Python book. I have always though this was a good approach for older kids to get the familiar with the syntax.
Something else I would consider would be a robot that can be programmer with Scratch. While I have not done this yet, I think for kid seeing the physical results of programming via a robot is a powerful way to capture interest.
Friends of mine have the boardgame roborally. You get a bunch of cards with instructions to your robot and have to predict which ones in which order work best. Of course, the environment has some hard-to-predict elements, including other people's robots...
Scratch is a great community, where it's easy to explore others' creations, and share. The language is block-based. The output is graphical. And you can run anyone's program, and then view the source to see how they did it. Not many data structures, iirc.
Thanks for sharing about Scratch Jr. I had never heard about it before that I think my son is going to love it, not for the programming aspect of it but because he loves to make up stories with characters and being able to make them move around the screen I'm betting will be something he enjoys quite a bit.
It feels like a nice mix of Kidpix and Flash, both of which I spent a lot of time with as a youngster (obviously much less of a youngster during the Flash time).
one of the features kids seem to love most about Scratch Jr is the character editing ability. You can also take pictures of yourself and super impose it on the characters.
Thank you for this. My daughter will be 5 later this year and, I myself have started learning to code. I feel like it will be good time with my kid teaching and helping her. I even built her a game with tkinter to help with math and reading that we can do together.
Yeah, I'm going to start finding games that are educational in different topics to encourage learning that her and I can both play. Have you had any success with other educational board games with your little one? I looked into Scratch JR and the robot turtles game which I'm going to get her for her 5th birthday.
have you heard of Magnetic MightyMind? Those puzzles are really great for the mind. You have to figure out how to place these different shaped magnet pieces into different puzzle shapes.
I had heaps of trouble with this. Kids have an obscene amount of choice nowadays, and it's crippling.
Back in the day, we had no choice: you learned BASIC, and when you realised it was too slow, you learned assembler. I was shown my first ever BASIC program on a Commodore PET by a sixth-form student when I was about 13 or 14. There was no-one to teach you, so you were pretty much on your own. I swear that experience of learning Z80 assembler by typing in the hex or decimal opcodes (I couldn't afford an assembler), was the single most important event of my programming career.
With my kids I was pretty hands-off. Pushing them too hard would probably result in rebellion. But when my son started asking what language he should start with, I found it very hard. We tried Minecraft modding, in Java. Then some Python, which he took to fairly quickly (age 12 or 13). Now he's well into C#, which is a language I'm not even fluent in, because they study it in CS at school. He launched into it full throttle in his spare time and now he's developing a game. He occasionally asks me to help with debugging a tricky problem, which is where I think I'm most useful now.
My daughter is now 12 and she's also interested. She pretty much exhausted Scratch in primary school. I'm trying to introduce her to Python and then Arduino - she wants to build some colour-changing lights for her bedroom, so it's an ideal Arduino project.
I'm trying not to go down the whole pink, let's-make-it-fun, girls-can-code-too stereotype, but since she genuinely wants to build this project I can't really refuse.
The key thing is wait until they feel the need - don't push it onto them too young. There's a whole world of non-programming stuff they need to learn first!
>I swear that experience of learning Z80 assembler by typing in the hex or decimal opcodes (I couldn't afford an assembler), was the single most important event of my programming career.
I eventually graduated to doing the same thing - in my case writing out assembly programs on paper, putting the decimal opcodes next to each instruction.
Once the main program was "assembled" you'd then go put in the jump targets - which had to be calculated last, as you didn't know how many bytes each instruction you'd used was until that time.
All my programming started by accident, as the family-computer arrived as a Christmas-present one year. The tape-deck didn't work, so we couldn't load any games, and I was "forced" to read the manual instead. At least back then computers had decent manuals..
The technique I used was to always leave a few bytes spare at the end of each subroutine so I could add code later on without breaking every single jump address. The pain we went through!
I'm all too familiar! I used to pad any routines with five NOPs at the start, just in case I needed to add a jump, or call, to handle something I'd not forseen.
I'm waiting till he shows significant interest. If that never comes then I'm not going to try to make it happen. Much as I would like to be teaching programming to my kids, if they aren't that interested then such is life.
I've loved programming since I discovered it, while I'd love my daughter to share my passion I've been reading around and largely agree with this point, particularly poignant was a tennis forum, swathes of warning that if you want your child to love tennis, let them discover it themselves, also anecdotal but my friend tried to enforce a love of disco, that's not worked out to well either...
You don't see it as an essential skill like other branches of math that he should at least be exposed to? Most kids never show an interest in algebra without someone first introducing then to the basics.
yes! the most important lesson from neurostudies and psychology is usually ignored: you can only learn when [feel like] you have control over how to do it. learning simply does not work when you push it. pushing will kill motivation.
I usually only need to get obstacles out of the way and answer questions (if I can). the rest comes from sheer interest from my child. scratch was interesting for just a couple of weeks, now it is java script, raspberry pi / linux, arduino, smartphone app programming using appinventor or any scripting language.
the issue is not programming language, the driving question is "what machine do I want to build".
you might want to check out "coderdojo" at a place near you. usually other kids are better teachers to your kid than you are.
your best instrument to teach tech is to wait and take your kid's questions seriously. patience pays.
what age am I talking about? my child wrote programs and apps long before he was able to read or write. pushing as a motivation killer also applies to adults. so I guess, this "advice" is universal.
What age range are we talking about? For most kids aged 6-12 writing code is too abstract to start with. For my kids, I started making really simple projects with a Makey Makey. After that, I taught them the basics with Scratch, since there are tons of fun tutorials for kids. Right now, I'm building a Raspberry Pi-powered robot with my 10yo (basically it's a poor man's Lego Mindstorm).
The key is fun. The focus is much more on 'building something together' than 'I'll learn you how to code'. I'm pretty sure that if I were to press them into learning how to code it will only put them off. Sometimes we go for weeks without building on the robot, and all of the sudden she will ask me to work on it with her again.
http://www.tynker.com. My daughter started with Scratch Jr. When she turned 9, we got her a chromebook for her birthday, and I read about this site in a WSJ article. She took to it right away. Kids can progress through extensive programming-puzzle tutorials and make their own projects, using a "block" language, python, or Javascript. They can switch between the three supported languages within projects. She is still most comfortable with the block style, given that it abstracts away free-form syntax, but has started working through the python tutorials. A year later she has made dozens of her own projects (mainly simple games) of increasing complexity, which can be published and shared with other kids. She now understands relatively complex concepts like generating random behavior, method calls, variables and even physics engines. Highly recommended.
While we are here, I'd like to ask another question that If kids need to be taught to code before they turn 12. First of all, HN being a place where board games are lauded before Digital Smartphone games, How is teaching kids to code (using digital devices) seen.
Also, a day back, Woz made this comment:
"Woz advice on coding for children. Meanwhile, Wozniak cautioned parents to not force coding skills to their wards until the age of 12. He explained that the first 12 years are pivotal and crucial in shaping cognitive and thinking mind. “Coding is very important. It doesn't need to be taught before 12 years."
I'm seriously looking for some thoughts to validate my idea that coding could be started from Kinder garden (as young as when they learn to count numbers)
I don't think it's a question of "need to be taught". Rather, you can have a lot of fun with code, but how are kids going to find out if nobody shows it to them? If they don't show interest in any of the things you can do with code, then don't push it.
I was a bit older than 12 when I learned programming with AutoIt, Ren'Py and Blender, but I would absolutely have enjoyed it if I had found out earlier. I didn't learn those because some adult told me to, I found out about them through my friends.
AutoIt is a programming language geared towards automating interaction with GUIs. A friend of mine was using a program written in it to bot in some MMORPG, and being able to control the mouse pointer also lent itself to prank programs we'd send each other. I learned quite a bit just by modifying that original program, and later implemented Gaussian elimination in AutoIt to take care of my math homework.
I learned Ren'Py when another friend showed me a simple visual novel he'd written in it, and I got inspired to write my own. For some aspect of it (I think it was to keep track of health points?) I needed to use Ren'Py's Python scripting, and so I ended up learning a bit of Python.
Later, I was doing a stop-and-go movie with Lego figures together with that same friend. We really wanted to have awesome 3D effects and had heard that it was called animation or something. So I googled it, downloaded Blender, and went through the tutorial on modeling. I mean, how hard could it be, right? I think Blender is somewhat renowned for the complexity of its interface, but at that time every interface was complex for me. After weeks of painstakingly remodeling Lego pieces down to the little notches, we finally had our space battle with lasers, and it was awesome. Later, I repurposed those models for a game using Blender's built-in game engine, and it was easy in comparison (although I still don't fully understand how rotation in 3D space works).
In all of these cases, programming was something I lucked into as part of some other activity. I wanted to do something else, and writing code happened to be easily available as a solution. So I think what a parent can do is give their children the opportunity to play around with lots of different things, and when something they want to do requires a little code, show them how to do it.
I don't think you can start teaching coding before grammar. And without any arithmetic it's going to be a bit tricky to do any 'proper' coding.
Although in the most abstract sense programming is just thinking about what effect a certain sequence of commands has. Like with all kinds of abstract reasoning it can be a good idea to encourage kids to play around with it.
However it's possible that some kids aren't ready, or don't have the motivation, to learn those concepts; and forcing them will only make them hate it more. In that sense programming and mathematics should be considered the same.
Microsoft has also released a scratch-like environment for programming Minecraft at https://minecraft.makecode.com with a bunch of pretty good course material for teaching programming
Minecraft. Redstone and commandblocks. Later set up a server that allows for plugins to install (spigot). Then install the javascript plugin and the kids can manipulate the minecraft worlds with javascript. Show them all the plugins available and they'll become annoyed with that one plugin that does not quite do what they want. And start to write their own. My 14 year old nephew is now writing a Harry Potter world with the spells and wands, in java.
But the most important thing however is to keep it fun. Let the kid choose his own path. ("Eclipse?! Really?! But Vscode is.... Oh well ")
I have two kids aged 7. They've been playing, on and off, with ScratchJr over the last two years. They were first interested mostly in the "Paint-like" part of ScratchJr, but now are starting to make animations using the block language, and have much fun doing it.
I've recently installed the Lightbot app on my phone for them, and they like it too. It's a series of programming puzzles using a block language where you need to program a robot to move around a circuit and do some actions. It introduces programming concepts (subroutines, loops...) progressively and seem quite fun and challenging.
A few months ago, I let them play with Human Resources Machine, another similar game, but slightly more abstract, and with dark humoured theme. They didn't get the humour, but enjoyed it nonetheless. However, it was a bit too difficult for them, and I had to do most of the challenges for them.
I wish Microsoft would invest 1 or 2 of its many million $ to re-include a simple QBbasic like they did back in the DOS days. I can attribute 95% of my interest in programming to that one single program.
I've heard this sentiment before and I think it's just nostalgia. Things are soooo much better today for kids interested in programming than they were in the 1980's when I was a kid.
Even back then, other machines did more to push kids into programming. Turn on a C64 or TI-99/4A (what I had) and you were in a BASIC interpreter.
Or the snake one called Nibbles - my 6th grade computer class teacher had made modifications to it adding levels, etc., and had his class play with what he had created. I was just starting to learn Qbasic at the time and he wouldn't let me have the source code :(
The BBC Micro:bit would be a great starting point. It's a simple microcontroller module with Bluetooth Low Energy, an accelerometer and easily accessible IO. There are browser-based IDEs supporting drag-and-drop code blocks, Javascript or Python; you can also program the device from a smartphone app over Bluetooth. There are hundreds of lessons and projects for the micro:bit, including a 14 week introduction to CS course. A starter kit costs just $16.50 from AdaFruit.
In my opinion, it's the best introduction to computer science for children.
Show them how computers can help them automate the things they want to do.
We play Minecraft on a local server, and sometimes try and build large structures that take a lot of work - I showed her the /fill command which got her interested in the command line.
She is a bit young to understand Cartesian coordinates to use it without help but was very impressed with the automation side of things - it got her interested to look up other commands (she has far too much fun with the /kill command but that is another story).
Minecraft Windows version absolutely has tools that let you program in different languages. You need to download a program called code connection (also from MS).
What age? I've got a 7 year old and recently started helping out a local 'Code Club' for 9-11 year olds. The projects provided by Code Club are definitely worth a look and include Scratch, Python as well as stuff for the Raspberry Pi https://codeclubprojects.org/ They're quite nicely structured with optional challenges.
I think reading ability and keyboard skills make a difference to what is possible as well as the stage of cognitive development. Typing is hard even for a kid who can read well - it takes my 7 year old forever to find keys on the keyboard and although it's good for him to learn, I think python would be frustrating for him at the moment (and I know the indentation makes it hard even for older children!) We've had fun making stories in Scratch though and he made a game of his own design with some help from me on the harder bits. We played quite a lot of the board game Robot Turtles when he was younger too, so that's worth looking up for smaller kids, although I have to admit that as an adult I never really enjoyed it massively.
I'd say we shouldn't try hard to teach our children about computers/coding from an early age. Don’t get me wrong; I do believe that engineering and programming are important skills. But only in the right context, and only for a matured brain willing to put in the necessary blood, sweat and tears to succeed. The same could be said of many other skills. I'm not sure about US but, here in South East Asia, school mathematics & science courses are more than enough of cognitive load for a 10 to 15 years old.
When I was in school, I was passionate about Chemistry, fascinated with the idea that how proper composition of chemicals could produce useful compounds until I got to play with actual physical instruments in the lab when I reached high school. I'd decided that I was going to become the best mechanical engineer to ever live (you know childish talks).
Alas, however, I started loving computers more than ever and now they are my life. My point is, Focusing on coding inflates the importance of finding the “right” method to solve a problem rather than the importance of understanding the problem.
My elder one is 7 years old and more inclined towards drawing/arts(seems natural though), he might not be in good stage to write code but flow charts could help him to build logic regardless of a computer. In this way he can enjoy drawing while start building algorithm and logic too.
Thanks for this question which made me to think this idea. Will start working on it soon.
You may want to take a look at flowgrid.org. I think the main problem (compared to tradtional code) is that drawing is quite "verbose"... Perhaps it could make sense to re-focus the project on AndroidThings GPIO...
I set up a Raspberry by with Kano OS for my 7-year-old (at the time) son. There were some toy coding apps, like Make Art and Hack Minecraft, and he had some interest, but I didn’t see anything that he could grow into over time, in terms of making more sophisticated programs as he gets more practice. They all seemed quite limited, although engaging.
I then set up my old Mac with Love 2D and Atom, but he wasn’t interested, because he’d also have to learn about files, directories and the command line.
He spends a lot of time on the iPad, so I recently bought Codea. With a bit of help, he was able to write code to draw some shapes and became very excited about it. I evaluated it myself and was able to make Pong in a few hours. It has loads of examples and can actually be (and has been) used to make quite sophisticated iOS games, right on an iPad. It helps to have a Bluetooth keyboard so the on-screen keyboard doesn’t occupy half the screen.
While shopping the toy section at Target a few weeks ago, in the science/educational section, I came across a few variations of a "//code programming game series"[0] by Thinkfun[1]. The titles I saw were "Robot Repair" which focusses on boolean logic, and "On the Brink" focussing on procedures.
The target age group indicated on the box says 8-adult, but I suspect it's quite likely that younger ages can also play along, with some help or guidance.
I haven't played or looked at them in depth, but from a superficial overview, these do look quite beneficial for understanding some of the core concepts.
My two oldest kids have created plain html web pages with me.
They run on my NAS so not available to the Internet. I try to teach different things to each of them and hopefully they'll start copying and pasting.
I also created the "guess a number" game in Java with my oldest (~10 y.o.) recently. We started by writing comments explaining what would happen, then I filled in the code and we ran it and single stepped our way through it a few times.
I love the debugger as it helps new coders get a feeling for how the computer "thinks".
Java might seem like a weird language to teach kids but for all its verbosity and comments it ended at less than 50 LOC, is extremely readable and has really good support for single stepping, peeking into variables etc.
We started by writing comments explaining what would happen, then I filled in the code and we ran it and single stepped our way through it a few times.`
The most traditional tool we've used is probably http://www.codecombat.com Also PBS has a Crash Course in Computer Science video series that's excellent for ages 10+ -- we pause it a lot to make sure they caught the main points.
I also show them what I'm working on for fun and invite them to help with parts of it. Usually Arduino and 3D printing/modeling. We've started (but not finished) a few web-based games together. I don't know if either of them will ever catch "the bug" like I did at their age (9 and 11 now), but I want it to be an option for them if they do.
Rather than just coding, which can be pretty abstract for kids, I introduced my (almost) 11-yo son to the Arduino. The interface is pretty simple to explain for kids of that age - you have 2 places to put your code - the setup() and loop(), and the results are concrete - an led blinks, a motor turns, a car moves forward, etc. My son "got" Arduino programming easier than the graphical programming languages, but that might just be him.
He was also introduced to QBASIC at school (a year later), and he loves it. There are no INTs to declare, etc. Just your program. And graphics, sound, etc. is so easy to program.
A long time ago, I saw someone else's brilliant answer to a similar question, so I will repeat it here. All you need is paper and pencil for your students. The idea here is to focus on concepts, not code:
Ask them to write down all of the steps required to to make a peanut butter and jelly sandwich. For example, a student may come up with the following solution:
1. Get the peanut butter and jelly.
2. Spread on bread.
3. Put other bread on top.
As the instructor, you must "break" their solution with a funny skit (as opposed to being pedantic). Try to do step 1 in front of the class: You flail your arms around like an absolute madman, reaching for the peanut butter, but you cannot reach it. Eventually, the students realize step 1 isn't clear enough for you. They come up with:
1a. Walk to cupboard from table (i.e. the peanut butter is stored somewhere; we need to go there).
1b. Pull out peanut butter and jelly (we need to acquire the goods).
1c. Walk back to table.
If you think about step 1b, you can see a potential problem if your hands are full. So, you proceed to get the ingredients with full hands, only to drop the jelly on the way back to the table; you didn't have enough free hands to get the jelly! At this point the students are facepalming you, which is good, and it encourages them to be even more explicit in their instructions; perhaps they include a check to make sure your hands aren't full before getting the ingredients.
This comedic, adversarial process between the students and the teacher continues until the students land upon an imperative, explicit way to make a peanut butter and jelly sandwich. Breaking down problems into imperative, unmistakeable steps is exactly the kind of skill which is used in programming, as computers lack linguistic pragmatism.
The lesson here is that computers are dumber than we think, and programming is the art of making them smart. The instructor plays the role of a dumb computer acting out the students' instructions. The students quickly get the point: their instructions aren't good enough for a computer, even if they are good enough for a human, and it's not that hard to be explicit if you take some time to think about it!
Awesome question, because I'm in the mids of teaching my 9 and 7 year olds how to program.
They get Scratch in school (and like it), so I wanted to dip their toes into 'real' programming. I thought a lot about it, but decided to start with the interactive shell of Python and let them do basic calculations, variable assignments, etc.
I then went on to simple scripts such as "What is your name?" input, with a print of "Hello <name>"
Next up with be the guess a number game, and go on from there. I want to end up with programming games of course :D
I was introduced to Turing Tumble today, and I thought it looked pretty rad. It's not out yet, but the idea is to solve puzzles by building mechanical systems that do computation. Ages 8+.
Ideally, I'd like to dive right into Android Studio and Kotlin. Since the inherent interest with phones, mobile gaming, cameras, videos, etc is already extant ;)
Another alternative, and I think a strong curriculum could be built around this. Is an intro to systems via Nintendo GameBoy and GBA. Using emulators and custom ROM development. A few college level courses already experiment with this route.
(due to horrible layout and inability to edit, here is the list again, second attempt)
here is a incomplete list of my findings:
soft skills list:
* don't push;
* accept if they are not (yet) interested;
* support emotionally ;
* trust your kids;
be patient even if it looks like bullshit;
even if you know the solution, wait for the question;
tools:
* coderdojo;
* guest net;
* don't try to create a website whitelist;
* buy / borrow hardware they like to try out;
misc:
* watch spin offs;
some remarks might need explanation.
don't push:
if you do, any kind of motivation will turn to become the opposite.
support emotionally:
one of the differences between adults and kids in terms of learning is how to deal with ambition. kids might start to cry or get aggressive when things don't work the way they planned. dealing with ambition is part of the learning process.
the best answer for your kid might be non-technical, just hugging.
even if you know the solution, wait for the question:
you can only learn when it feels like you have control on how to do it. if it's not yet time for the answer, there is no problem and no learning motivation.
coderdojo:
look it up and discover how kids learn programming. best to wait for your child to discover projects of other kids.
guest net:
separate your internet from your kid's internet. the risk of viruses or exploits caught from discovery journeys on the internet is extremely decreased.
don't try to create a website whitelist:
I tried to maintain a whitelist of allowed websites and waited for requests to come. after less than a week I gave up. same is true for search platforms or websites designed for children. trusting your kid looks like the better choice to me.
buy / borrow hardware kids like to try out:
we are buying heaps of hardware (raspberry pi / arduino / camera / smartphone), most of which financed out of our child's pocket money. his decision.
spin offs:
spin offs are the most interesting discovery to me.
my kid writes short stories to be integrated into his self created apps, so he can share them with other kids.
math is easy if it is related to solving computer problems (compared to torture if the only reason is memorizing unrelated stuff)
I have been working on a programming environment for Android phones / tablets for a while in my spare time. I'll do a proper ShowHN when I have some more reasonable writeup about the motivation and background: https://github.com/stefanhaustein/codechat O:)
I used Python to introduce my son to the concepts of programming. I found it very interesting that his school used Construct as an introduction. I was skeptical, however it DID reinforce his logical construct skills and his understanding in python is increasing quickly. I will start pointing him to javascript next (as well as others down the road).
Lots of people have mentioned Scratch Jnr, which is a great place to start, but don't stop there. The full version of Scratch is fantastic. My daughter (9) and son (11) both enjoy it, though my son is really into it. They both particularly like the fact that you can remix other people's code - it's a great way to get started.
I believe PICO-8 (https://www.lexaloffle.com/pico-8.php) is one of the most simple and fun environments for kids to learn programming (specially game programming).
It's very accessible and affordable.
A friend of mine runs Code Wizards HQ, a startup that teaches coding to kids through teacher-led online classes. Check out their website: http://www.codewizardshq.com/
in Roblox; i am building a simple game with my 7-year old daughter on the Roblox platform. A nice combination of gui-based building and scripting and a cool objective (a completed game added to the registry of games on the platform so others can play it.
I think it depends on your objectives. What abstractions are you trying to have your kids develop?
* Are you trying to teach your kids simple blinky-light programming?
* Maybe you want them to develop into C++ coders?
* Do you want your kids to understand underlying computer architecture constructs (bits, bytes, cores, caches, etc.)?
I learned LOGO as a 7 year old & Lisp shortly thereafter. Later we got a TRS-80 w/ a built in BASIC interpreter and out of a mix of necessity and curiosity taught myself Z-80 Assembly and eventually started playing around with ALUs & 7400 series logic on breadboards.
My offspring isn't interested in the low level details, but was VERY interested in making art on the computer. We started with MS-PAINT-a-likes, moved on to Gimp & eventually to Blender, using Python to automate some processes.
So... my advice is to think about what you're trying to accomplish. If your kid is interested in low level stuff, maybe start with a soldering iron. If they like art, think about the tools they'll use to model the abstractions they want to work with (Gimp, Blender, Maya, Adobe CS, etc.) and then look at the languages that are easy to integrate w/ those tools.
Also, remember that modern spreadsheets are a powerful data-flow modeling system.
Modern educators tend to follow the Constructivist model, a simplification might be: "Give your kids some tools and see what they do with them, possibly nudging them towards techniques or solutions when they identify a specific intent or goal." Constructivist educators would probably tell you the interaction between the learner, the educator and the tool is probably more important than the specific tool.
Constructionalism takes constructivism a bit further and seeks to support the creation of mental models and abstractions by the learner. LOGO, eToys & Scratch were built by teams that were largely influenced by Seymour Papert & his constructionalist ideas. In education circles, there's a little bit of debate over constructionalism, but it's definitely produced some great tools. And heck, I've had a pretty decent career as a software engineer, so learning LOGO at MIT as a 7 year old in the early 70s seemed to have worked out well for me.
I'm personally less of a fan of Scratch than I am of TI LOGO running on an old TI-99/4, but that's probably because I find Scratch MUCH too cluttered. But YMMV. Scratch is definitely worth checking out.
So to sum up my advice:
* try a bunch of things to figure out what your kids interests are.
* understand the tools you present your kid(s) with so you can help solve problems when they're blocked.
* show your kids a few simple things and let them discover the rest (and then unblock them if they get in a jam)
* if your kids are mentally checking out, it's time to try a different approach.
* don't be afraid to let your kids "waste time" on things they enjoy, even if it doesn't immediately seem like they're learning something (my offspring knows boolean logic ONLY because we found some youtube videos about redstone circuits in minecraft.)
Also, you can buy a copy of Papert's "Mindstorms" book online (or heck, it might be available as a free download by now somewhere.) It's a tiny bit controversial in education circles, but it's relatively short and it's a decent intro to Constructivist ideas.
So... all that being said... I was pretty impressed with how cheap & fast it was to set up Scratch on a RasPi w/ Raspbian. Under $200 even with a new mouse, keyboard & video screen.
The LEGO Mindstorm products all seemed to be a little overpriced to me, but if you don't want to spend the afternoon hobbling together a cheaper educational robot system, they're probably not that bad. Seymour Papert was really big on getting kids to interact with physical objects, so if you buy into Constructionalism, this is definitely the tool for you.
I'm a fan of the LittleBits electronic toys. My offspring ignored them after five minutes, but I've seen other kids spend hours putting blinky light creations together w/ them.
If you're handy with a soldering iron, it's a snap to put one of these pencil circuit tools together. I personally love it. My offspring liked it for a while before disappearing into the purple cloud of sullen adolescence. It was also a bit of a hit w/ my niece.
I tried to make sense of the Dash robot, but honestly, I couldn't figure out how it was supposed to be educational. YMMV.
Ditto for Cubelets. At $26 per cube, they were a little pricey for a system that seemed to come with waaay too few instructions.
I really want to try the makeblock drone airblock system, but I'm probably projecting my own desires on this one. Still, I used an early version of the makeblock neuron system and it was at least as good as the littlebits (though littlebits in-box documentation was better.)
I approached it this way, I bought a book on Scratch Jr so I could get up to speed on it. I walked her through a few of the basics, and then I just let her take over after that.
One other programming related activity we have done is the Learning Resources Code & Go Robot Mouse Activity. She has a lot of fun with this as you have a small mouse you program with simple directions to navigate a maze to find the cheese. It uses a set of cards to help then grasp the steps needed. I switch to not using the cards after a while. We now just step the mouse through the maze manually adding steps as we go.
One other activity to consider is the robot turtles board game. This teaches some basic logic concepts needed in programming.
For an older child, I did help my nephew to learn programming in Python when he was a freshman in high school. I took the approach of having him type in games from the free Python book. I have always though this was a good approach for older kids to get the familiar with the syntax.
Something else I would consider would be a robot that can be programmer with Scratch. While I have not done this yet, I think for kid seeing the physical results of programming via a robot is a powerful way to capture interest.