Explaining Programming to Six-Year-Olds
dev.to
dev.to
The first thing I did was make a game in Unity (very simple, no death just collect things) that featured their faces and school uniform (had written permission from all parents). The kids were amazed at it and asked a lot of questions. The main point I tried to explain was computers are also for 'working' and 'creating' games, not just playing them and you could make games by 'programming' and explaining a bit what that is.
After this, I tried to explain what an algorithm is. Sounds strange to try to explain this to such young kids, but you can relate to real world situations (in this case, they have a 'routine' for lunch that never deviates, so I related to this and other routines) but to make it interesting, at the end we played a little game where we drew a grid on the floor, and we had to program a 'robot' to go forward or turn to get from one place to another. The robot was usually one of the kids and the others had to give instructions. We started to have one instruction, do movement, one instruction, do movement to having them try at least to do 4-5 instructions to get to the end. The kids loved the game and the teacher even created a small table based one for them to play by themselves.
After I took a Sphero ball, did a small app to control it based on the game we played before, and let the kids try to do the same, but this time controlling an actual 'robot'.
While I didn't show them any code, they understood that they could create 'routines' in the computer to control or display things. Was pretty cool (and the parents loved it as well when they saw the game and the kids explained to them what an 'algorithm' is :))
(this was over the course of a few weeks, so it wasn't a full day of them trying to learn everything)
The main idea of the kids learning is through experimenting with things. They are also VERY keen on parents going there and spend the day with the entire class talking about their jobs, or just general things (some parents did gymnastics, other baked cakes, my ex-wife did a hands-on demonstration of what a paramedic may do on an accident. I mostly focused on science stuff, built paddle boats with them with rubber bands to teach them about physics, made the games mentioned before, etc)
If this isn't available, try Montessori schools as they share a lot of the ideas with Modern School.
EDIT: just noticed lightbot jr. That wasn't there when I used lightbot, but if it's at the same standards as normal lightbot I'm interested.
https://en.wikipedia.org/wiki/Turtle_(robot)
Part of Seymour Papert's pedagogical idea of programming the turtle seems to me to be that the the students can put themselves mentally in the position of the turtle and ask "how would I know what to do next?", ideally with the insight that we're looking for a rule that can be expressed in language and that answers the question in every situation. That sounds very akin to your lesson!
I guess the Sphero ball might be a kind of update of this.
Kid walking away from lightbot: "I completed all the hard challenges"
Kid walking away from Logo: "I drew this flower using code"
Wish more kids coding tools aimed for the latter.
The programmer is the instruction writer, the computer is the lego builder.
Like any analogy, it isn't perfect, but for a 5 year old, that was enough to satisfy him for now.
Also: "Please resist commenting about being downvoted. It never does any good, and it makes boring reading." Though I'm personally fine with legitimate questions about expected behavior.
This court can find no meaningful difference between computer language, particularly high-level languages as defined above, and German or French... Like music and mathematical equations, computer language is just that, language, and it communicates information either to a computer or to those who can read it.
- Judge Patel, April 15, 1996
Source: https://www.eff.org/deeplinks/2015/04/remembering-case-estab...
They think I'm just being silly and we all have a laugh but they're getting the hang of it!
"Be precise." It's something we take for granted as engineers. A lot of people don't understand the importance of exact instructions and algorithms, expecting the other party to intuit the desired meaning of a command. I think this is a clever way to teach kids early on.
camel_Snake.sit()
BoneFractureError: coccyx
SIT DOWN;
Exception of type 'Room.OutOfChairsException' was thrownOnce they understand the concepts, THEN show them how to make them happen on a computer.
Well, no.
(Here comes my 2cts)
Recently, at the age of seven, my son discovered how the remote control works. He was proud that he figured it all by himself.
And I was proud that my son discovered that at the age of seven and not at the age of two or three.
When my children wakes up in the morning they don't switch the tv on or any other screen.
They play.
They build stuff with Lego or wood game. They draw. They go in the garden to play with the dog or with their bikes.
Of course they sometimes play a game on my tablet or telephone, it's not 20th century anymore.
But they don't own any. And they don't choose when they can watch a screen. (Steve Jobs did the same with his children after all [0])
Despite that, I will start to teach them programming next school year, I've bought a PI for each, and I welcome the article ! It's just I think this is important, but not a priority for youngs.
[0] https://mobile.nytimes.com/2014/09/11/fashion/steve-jobs-app...
Is there any reason to believe that Steve Jobs is an authority on raising children?
This would have been an enforceable rule, a decree to be obeyed by nanny. So ideals from Steve Jobs could be valid even if delegation was involved.
It seems like you may be conflating the medium with the activity, and that you're not a fan of exposing kids to computing devices until relatively late. Which is fine, of course! Good parenting comes in many forms.
That said, I don't feel bad that my son prefers playing/building in Minecraft to Lego (although he does that too) and started relatively early. For us, any activity that isn't passive media consumption is a win.
But I guess when they grow up and have the opportunity to access it, say, in their bedroom, something like that might actually be useful.
So thank you for the tip !
My five year old is starting to understand a bit about programing and computers, and we enjoyed going through the following book: https://usborne.com/browse-books/catalogue/product/1/9570/li...
It's a pretty good basic introduction, in my opinion. It doesn't get too complicated, either, presenting different types of computers, the basics of binary numbers, input and output, and also has online resources available as supplement. If you can find a copy at your local library (which is where we picked it up), give it a look-see.
Arguably, a kids experience is all over the place too ;). But I guess that's one of the tasks in education, and what you're getting at: teaching them to stay concentrated.
To add a thought: I'm coming around to, in non-group situations, trying to accommodate distraction rather than steamroller over it.
I teach clay pot throwing. Younger kids particularly are often highly distracted. In part that's because of the tactile nature of the medium. I'm finding that if I go along with the distraction, playing with how the water feels say, then we can usually get the central activity (making a pot) done "better".
For me it's key to recognise that distractions are often moments when something is inspiring the child, aside from the central task, and that the child is learning still in such situations (just learning about other things than are included in the 'lesson plan').
Just a thought to mull over.
I was teaching at a uni for a year - bachelors, masters, so all young adults. However, especially the bachelors were still in the process "unlearning" the high school attitude, that is: learning what you have to in order to pass, not because you want to understand the subject.
When teaching theory, the most effective way to shift them to the second mode of thinking and keep them engaged, was chopping up the lectures into ten to fifteen minute chapters, with two to five minutes of mini-discussion breaks. These would include an optional topic starter, "now discuss how you would apply what I just explained to X", where X is something that at hopefully least one in the group can directly relate to from their own lives.
I think replacing long lectures of passive listening with that type of short loop - passive listening/active discussion doing - would also work for younger ages. I don't believe long lectures are good in general, even if you're into the material. They make you wait until you can actively engage with what you've learned and force you to keep it all in your head until then. Just adding short breaks of talking about it with the person next to you already helps a lot.
- "I think it is a little too subtle"
- "it introduces some basic computer science ideas, without being too technical"
--
src: Ask HN: How should I teach code to kids? | https://news.ycombinator.com/item?id=13675268 (4.5 months ago)
I'm also working on my own programming based fantasy story. Will definitely post up on HN when it's done.
I've build with them a robot mask from a cardboard box. (fun!) Put on the mask and told them that the robot is stupid, just understands 2 commands: step forward and turn right.
Put them to teach the robot to go around the room. Asked how to make the robot turn left. Created a command to turn left. Abstraction! Simplified some commands with loops.
We all had a good time.
All children can relate to physical movement and giving commands, lets start there! It's like we're throwing all the knowledge we got from Logo over board (2017 is Logo's 50th birthday!)
There's no easy way to explain programming to the majority of kids that doesn't involve oversimplifying it.
There's simply: the group of kids who are curious about it, who want to learn about it, who are willing to go through the rigor to learn it and then there's the other kids who don't.
If a kid isn't interested then there's no amount of simplifying it that will make them get it.
This confuses me.
Formal operations typically develop at around age 11 (cf. Piaget); this mental capability is necessary to (among many other things) comprehend abstraction, isomorphism, algebra, recursion, and most of the other mathematics-originated components of computer science. How can children without these capabilities, possibly comprehend programming, to any extent beyond the trivially concrete?
At that age, you're not teaching them (programming) concepts, you're stoking their curiosity
With current US primary+secondary curricula, most non-remedial students still only get as far as differential calculus before graduating high school - electronics and discrete math are already missing from that, and "concrete programming demonstrations" would strain the schedule even more.
The key is keeping a direct, concrete connection between program and output. Multiple steps of abstract thinking don't work well.
Sounds like one of the old OWI MOVIT robots - they used to sell a version (I think it is discontinued but still available from some vendors) called the "Binary Player Robot Kit". It doesn't look the same as the original version in the 1980s, but the internal circuitry is probably identical.
Without abstraction/generalization capability, how are they able to learn the entirety of the concept rather than merely analyze your concrete examples?
I did this when I was 6 with the older lego RCX brick. I didn't understand the limitations of the graphical programming language at the time because nothing I thought of was complex enough to push them. It still probably helped me understand intuitively how "dumb" computers are which can be pretty hard for beginner programmers to grasp for some reason.
Grasping the dumbness of computers can also be done via a bottom-up approach: transistors, then gates, then boolean-logic/state-machines, then binary-numbers/ALUs, then processors, and so on. "You think it can do X? Then show me how that could be built, using what you've learned so far!"
(Analogous, of course, is learning mathematics starting with a 3-column-proof-based approach, rather than ... err, whatever they call the typical American approach.)
I was part of a study where this was attempted, at about age 8 or 9. IIRC, it worked well for about half of us. The teacher totally blew my mind when she took all of my boxes and tokens, put them in her larger pencil container, and told me that my game was now just a piece in a bigger game.
Personally, my parents got me a Commodore 64 when I was 6, it happened to come with a copy of 'An Introduction to Basic Part 1', and I successfully worked through it.
Of course there is much more to programming than writing HTML, but setting the entry bar low enough can help tremendously getting one interested in learning it.
I think this is the first time in my children's lifetimes (roughly five years for the oldest) that I've considered the fact that their understanding of where movies are kept is different from most people due to our goals of going mostly streaming when it comes to media.
It would use a very simple and systematic flowchart representation to model control flow. The great thing about it is that once you understood < > = (also taught in the class) the whole program could be readable.
I think I was the only one to read it and pretty much got the feeling it wasn't important as nobody, even the teacher, payed any attention to it.
How do you have test cases without first solving a number of problems in the space without the program you are writing?
With programmable graphing calculator that's sorta possible. At least, I've done it a few times.
Alas, it was most often banned from exams because "I can't see what you have done there to get that answer".
Also, most of the class ended up using my program for a specific class of problems we had to do in maths. In retrospect, I probably caused some harm by getting my classmates to be that lazy during exams.
Think of the potential when someone learns to program at 6 years old, and keeps at it! I hate to use the word "disruption" but I really wonder if education could potentially be "disrupted."
Even for designated geniuses, the ones who excelled all life and ahd strong parental support and become world-famous mathematical achievers, calculus at age 8 is unusual.
There's plenty of room to increase the level of achievement across many inherent-skill-level bands, though, with focused training.
It is, but it shouldn't be. I taught my niece calculus, programming, foreign languages (mostly swear words, her mom got mad!) She was like a sponge and just soaked it all up, I made it fun and she loved it.
I think all kids have that potential but the education system lets them down, class sizes are too big and can only go as far as the curriculum or slowest kid there.
There's a collection of children's games waiting to be made from kits like this: https://www.sparkfun.com/products/11006
0) https://www.kickstarter.com/projects/primotoys/cubetto-hands...
Used a deliberately home made looking game that looked like Angry Birds (using a child's sketches of the birds) and exposed a few lines of code that the children could tell me how to edit. Worked really well, but it's partly like thinking about putting on a small stage show
Very young children aren't ready for abstract concepts as the first introduction. We need to progress very slowly and relate to the familiar.
1st: we talk about a recipe for no-bake cookies. I bring the ingredients. I show them the "program" (recipe), and the kids play the part of computer -- following the instructions.
Then we take a look at the LOGO language. The move commands issues to the "turtle" demonstrate visually the commands being given. Again, very high level, very concrete.
Next, we talk about a variable. I pick some kids and they each "hold" a number written in marker on a large sheet of paper for everyone to see. The variable name is their name (Joe, Sue, etc.). They know they can only hold one value at a time. So if I give them a new number they throw the old one away.
Then we step into Basic and learn to print a simple message.
Eventually we combine the two and end up with something like the old favorite:
10 for i = 1 to 10
20 print tab(i)
30 print "joe"
40 next
which, if you've not seen it looks a little like
joe
joe
joe
joe ...
From there, I let the kids' interest guide me. We might talk about how a "Guess a number" game works, or even graphics and "Snake Byte" (Chuck Sommerville -- early 80s).I've had pretty good luck with this approach.
His way of teaching instantly draws a connection between the work of a programmer with the world that the kids live in, which is terrific value for a child. Sure, they're not walking away with any technical knowledge, but that wasn't the point of the presentation.
Throw some wheels and a motor on a board and create a simple abstract language:
drive()
stop()
turn()
wait()
Boom, now you have them programming and have a freaking robot moving around!
I don't think we should be starting out with even mentioning binary to college students in the intro class, let alone 6 year olds. How are either of them going to use that knowledge? The college kids will use it when they get to their assembler class...otherwise that's about it.
Messing around with a super abstracted language will give them the only thing they should get out of the lesson: you tell a computer what to do and it does it.
What is the point of that lesson at that age, then? As far as I can tell, it will be of no consequence to them until high school.
> I don't think we should be starting out with even mentioning binary to college students in the intro class ... How are [the college students] going to use that knowledge?
Ideally, CS would be taught in a "bottom-up" fashion, from transistors to gates to adders to processors to higher- and higher-abstracted concepts; with Haskell etc occurring last, or nearly so. Then we'd actually have a much more solid grasp of what's going on "under the hood" and can make more informed decisions (e.g. for iterating quickly through many structs, better to actually have 1 struct of arrays/B-trees than 1 array/B-tree of the many structs; both of which are better than anything that involves a linked list; all due to how processor caches work).
In such a situation, binary would indeed be important for assembly and arithmetic units; but also for e.g. knowing to replace expensive integer divisions with cheaper right-shifts when possible by making the divisor be a power-of-2.
Perhaps it's just a natural stratification of the industry, but it leaves me feeling uncomfortable and frustrated when a jr engineer doesn't understand what's happening underneath the veneer of Rails (not to pick on Rails solely, this could also apply with many other frameworks & languages - I just see this the most because it's the latest fad) and/or doesn't understand why reentrancy, interrupts, or parallelism with mutable items is dangerous and hard-as-hell to get right.
I would love to see more developers with at least a passing familiarity with the basic concepts of computing, of the sort presented in Chuck Petzold's book CODE (which I highly recommend).
[just read my post - I really am sounding like a grumpy old man these days, but I'm clicking "reply" anyway. Stay off my lawn. ;)]
(Of course, being an undergraduate CS student, from my point of view the idea is better expressed as, "I would love to see more companies who value internship candidates with more familiarity with the basic concepts of computing, of the sort ... ".)
This doesn't mean everybody would be -- and I think your approach of having a board moving a robot car is a great idea that probably has a broader appeal -- but it's probably good not to rule out the idea that there could be even a natural curiosity about binary numbers.
When they do/did multiplying by 10, and doubles, it's a good time for a review (why does a decimal shift produce a x10, etc.).
You can use that to talk about codes (crypto), communication (Morse, etc.), computation using "switches", logic. It's a good base for a lot of interesting stuff IMO.
Also toy train sets with rail switches and loops are a perfect, tangible example of how a program executes.
There are a ton of children who would get right into such an updated Logo turtle.
IIRC FreeMiner may be better in this respect? Minecraft had fallen out of vogue with my kids so not played around with this for a while.
10 PRINT "Hello World"
Tell kids that you can make computer print any message. After some fun suggestions, put next line, 20 GOTO 10
Kids would immediately get it what just happened. Then introduce, how to print message just 5 times, 5 FOR i = 1 to 5
Then ask them to sum numbers from 1 to 5 verbally. As they do it, ask them to sum numbers from 1 to 100 and watch the frowns. Now ask them what they would want in return if teacher really told them to do it and how long it would take them. As they reply, write 5 lines of code that does that. 10 SUM = 0
20 FOR i = 1 to 100
30 SUM = SUM + i
40 NEXT
50 PRINT SUM
At this point kids with programming aptitude should be hooked. Rest would be still puzzled a bit. To get them onboard, switch to graphics mode and start writing code for fun stuff like expanding circles. Making series of beeps. Doing piano tunes. Gradually move towards more visual stuff like basic fractals, equation plotting, random color noise. Generate sound waveforms and play it. Before you run code ask them how things would look and then run. Start adding interactivity. If you are doing great, there would be suggestion to make a game. Go for it! Watch wishlist keep flowing and hours pass by.Note that I have purposely chose BASIC language above. It's fairly forgiving with syntax. It gives error messages which are much more digestible.There is no overhead of includes and imports that very often trips off new comers in mystery land. All you really need is kids to understand just two constructs GOTO and IF-THEN. Its extremely easy to understand these two and they would be able to grow from there.
PS: before anybody cries about GOTO considered harmful and suggest everyone needs to start with functional programming, I'd suggest try that idea first on real group of kids. There are always 1 or 2 kids who would be lucky enough to survive through and "get it" but you will turn rest of them against programming very quickly.
http://cs-unplugged.appspot.com/en-gb/topics/unplugged-progr...
Alan Kay on kids...
Children need to learn how to use the 21st century, or there's a good chance they will lose the 21st century. - Alan Kay (2016)
Television is the last technology we should be allowed to invent without a Surgeon General's warning on it. - Alan Kay
With a good programming language and interface, one - even children - can create from scratch important simulations of complex non-linear systems that can help one's thinking about them. - Alan Kay (2016)
Most of my ideas come in "waking dreams" (this is a state that most children indulge in readily, but it can be retained in a more or less useful way - I don't think you quite get into adulthood by retaining it, so it's a tradeoff). Main thing about ideas is that, however they come, most of them are mediocre down to bad - so steps have to be taken to deal with this major problem. - Alan Kay (2016)
... from my fortune clone, http://github.com/globalcitizen/taoup
You have input (ingredients), a procedure (recipe), output (what the recipe is for). From there you can start a transitioning towards more abstract ideas.
Knitting is another analogy that can be used.
And it's not mere coincidence that one of the first programmable machines was a loom that took paper-tape instructions, in the year 1725. https://en.wikipedia.org/wiki/Basile_Bouchon
Of a class of like fifteen kids, I believe I was one of the only kids to end up with something that was recognizably a sandwich (slice of bread with jelly on a crumb face, slice of bread with peanut butter on crumb face, slices put together such that the edges of the two slices line up and the peanut butter and jelly are on the inside as opposed to the outside).