Shameless plug: in Hack Club (https://github.com/hackclub/hackclub), our approach to teaching is to not actually "teach". Instead, we have a bunch of open-source workshops (https://workshops.hackclub.com) that walk high schoolers through the process of building a real thing (using real code), like a website or game. We don't expect them to understand everything that's happening. In fact, we expect learners to not understand 90% of what's happening -- our goal is to get people excited about hacking and have most of the learning happen when they're googling to build their own projects.
I have taught kids as young as eight JavaScript. They really take to it. JavaScript is not an ideal language for teaching beginners, but the availability means you can do it anywhere.
I made a little library to provide easy to use functions and start with programs of the sort I would have written in basic when I was young.
This is the program I start kids off with
http://fingswotidun.com/code/index.php/TinyDraw (You can edit and run the code from within the wiki)
The etch-a-sketch program is a program kids like playing with and it is small enough that they can look at it and understand how it works.
"If their age is on the clock, they're too young for malloc"?
But at 4 years old my kid was already applying loops and subroutines in LightBot (and later Robot Turtles). At that age kids can already get the thrill of command and begin to play with abstractions, if you give them a domain of discourse that's non-textual.
Agreed. There is evidence that capability for true abstract reasoning does not properly develop until 12 or so, and that students who are taught basically no math before then catch up to their peers in a matter of years anyways. Before a certain point it is just wasted, probably.
The logic of programming however, exposes the developer to exactly the same mental processes as programming with a typed language would. I've watched my son programming Scratch and I can guarantee even the typical the bugs are there in same form as in C++. "Why is this not working - oh, I need to initialize this variable not here but inside this loop" and so on.
"I remember one of the coolest things about the apple II was that you could 'poke' the right memory address and get the speaker to click. "
My 8 year old enjoys drawing characters in Scratch and then programming game and movement logic for them. Personally, I fail to see which experience has more objective value. Personal experiences such as you describe are mystical in the way that there is no rational way to share them with anyone else or make them understand it unless they've felt it themselves.
I don't really think there is a "wrong way" to have fun with a computer.
I think it's incorrect to view kids programming environments as a part of vocational programming curriculum. Rather, they are yet one more platform where kids can be creative and enjoy building things for themselves, like with Legos.
Also, K&R for kids ages 12-14?!
So, if unusual, it's not totally unprecedented.
It's amazing what you can accomplish when you don't know what is hard.
I think by going through chapter 1 of K&R in slow motion you'd learn more than a year with mr turtle.
But was already aware of Assembly with age of 10, when I started reading the Input magazine series with their hexdumps of microcode listings.
Since I have recently ventured into learning how to draw (I am pretty horrible at it) my mind is kind of blown at how much that influences my general thinking and thought modes. Maybe identify these general activities and nurture them first before jumping into the actual programming (logic, drawing, thinking in processes and parallel etc.).