The "making a sandwich" demo is definitely a classic.
Here's another I like:
Give groups of kids 10 identical looking items and a balance to compare the weights. Pre-teach how a balance works to compare the weight of items. Ask them to put the items in order from lightest to heaviest. You're basically asking them to come up with a sorting algorithm. Usually, after much experimentation, someone will come up with an algorithm that works. You can work together to try to write down the steps of the algorithm. You can also explore more mathematical ideas like transitivity when comparing different sorted sets of items.
I don't know why but my elementary school taught my grade of kindergarteners specifically to program using Logo. The class before and after me didn't seem to get this. Some Apple IIe machines that would've quite old by that point and a big room full of kids pair programming Logo. Great memories! And I'm pretty sure this planted the seed that led to my career in software.
My oldest is now in kindergarten and I am going to use Logo to help her learn. I started by buying an Etch-a-sketch that we use together for a real-world point of contact with the idea.
You may find yourself quite surprised, as an adult, by what Logo actually is.
I was never taught much of it, but Logo is massively more sophisticated than most primary education ever gets into -— it's really a multi-paradigm language with quite an elegant loose functional programming style hidden in it.
There's a good article about it here with some links:
Also don't ignore Scratch: if you can teach familiarity in Scratch you are going to set your daughter up really well for all sorts of stuff. Scratch is really Logo's spiritual successor and it's a thing of beauty, IMO.
I think the sandwich demo is really good. Once you establish the sandwich idea you can start zooming out to OK now you have a cook making multiple sandwiches, now you have a whole kitchen, and use that to talk about levels of abstraction and how SWEs go from solving one specific problem to more general problems by reusing techniques
Oddly enough, my mom taught computer programming at a community college in the early 80s, and she used the PB&J lesson, though without physically making one. She also used to remind her students: "Computers are stupid. They can only do exactly what you tell them to do, not what you want or need them to do." A series of children's stories, Amelia Bedelia, uses that theme too.
Her first gripe was that the computer didn't recognize the lower case "l" for the numeral "1" ad vice versa. Her old Smith-Corona typewriter didn't have different keys for those characters, or for upper-case "O" and Zero.
There was/is a pretty interesting board game roughly based on Python Turtles created by a middle schooler a while back.
Instead of a turtle you control a bunny and instead of lines of code with commands you collect up and then use sequences of cards with commands (i.e. left, right, forward, back). Eventually, I think you end up using loop command cards, etc.
I'd imagine you could have teams control each bunny.
I think one obvious approach would be to assign "roles" - one person is "operations" and is the only one allowed to read the instructions to you, one person is "research" and has access to the list of ingredients, etc. But that probably bottlenecks things too hard and you have to figure out a fast way to assign roles. You could just increase the difficulty by requiring more precise instructions? Ah, you split the list of instructions into four parts and put one list in each corner of the classroom, then randomly sort people into the corners - one corner has ingredients, one corner has operations, one corner has conditionals, one corner has goals, and the class has to communicate to build valid instructions. Maybe give the ingredients tongue-twister names and make them devise ways to communicate without getting things confused. And obviously the end of the demo is "so why didn't any of you just take a list of ingredients and walk over to the list of operations so you didn't have to shout?".
3rd grade might be a bit young, but you can make simplified version of the 4917 computer https://punkx.org/4917/ and make few funny self modifying programs they can "compute" on pen and paper
Sorry for the digression, but there was an old Soviet children's book about programming called "Encyclopedia of Professor Fortran" that almost had your jelly example -- except that in the book it was peeling potatoes instead of spreading jelly.
I'd take a different approach. Just make a simple game in html and edit it in front of them to add features, change the size of the monster, ... Wait a minute, it's 2025, probably use Kotlin or React to show the game in a tablet.
15 minutes, that's hard. I have to resort to the equivalent of https://xkcd.com/722/ :)
My older daughter works in a software company to make a program to administer collections of videos, lots of videos. In particular a small part is a feature to upload some videos to YouTube using the API. A few years ago, when we told that to my younger daughter, she understood that her sister worked in YouTube. The younger one was extremely happy and and full of admiration. Even if my older daughter gets a Nobel price, she will not reach the same level in the appreciation scale.
I'm not sure how to apply this to your talk, specially because they are older children, but ensure to explain that some guys/gals like you make YouTube work.
While entertaining, I think the PB&J demo is more like "clickbait" than anything.
My suggestion is to start with digital data and logic circuits; how everything a computer does is based on a huge number of switches making very simple decisions.
The approach taken by Charles Petzold in his book "Code" is definitely accessible, though kids don't really need Morse code and flashlights any more when they all have iphones...
Shaggy dog story: when I was 9 my teacher assigned us homework that entailed writing an instructional essay on how to make the infamous PB&J sandwich. At the time I was a budding "programmer" and had recently seen a skit on a TV show that employed hijinks similar to
> * I brought a serrated knife and ketchup packets. When they said put the jelly on the bread with the knife, I gripped the serrated end and pretended my fingers bled (ketchup works great as blood).
> * I brought in vaseline AKA petroleum jelly. When they said put jelly on the bread, I contemplated aloud "Well, you said JELLY, and this says JELLY!"
...and so went into great prescriptive detail about exactly how I'd make said sandwich. After turning it in my teacher chose my essay specifically to repro onto a transparency and place on the overhead as an example of bad writing. Apparently being explicit about choice of ingredients, removing things from packaging, holding the bread, etc. was antithetical to the assignment and dismissed with laughter and eye rolls because "everybody knows" to do these things.
This was a bit of a blow to my fragile ego but in retrospect it was an important lesson in several concepts that you touch on later in your post such as good communication (the importance of considering one's audience), asking clarifying questions (because requirements are hard), and interactions with authority figures.
I say all of this to say that you should absolutely emphasize this less technical side of things. Soft skills are at least as important as technical aptitude when it comes to career mobility and emphasizing them early would give students a real leg up. While considering edge cases and assumptions is clearly important for computers it's also crucial to keep in mind how people understand processes and systems, i.e. when to be explicit and when to avoid patronizing those on the other end of your comms.
> teacher chose my essay specifically to repro onto a transparency and place on the overhead as an example of bad writing
Oh man, regardless of how "bad" someone's writing is, this is terrible terrible teaching. Public shaming in front of peers, especially on something subjective like this? Some people should not be teachers. I'm sorry you had to go through that.
Scratch is a popular way to teach kids programming. It’s very basic but easy for kids to understand and many can do very complex things with it (someone made a super Mario brothers clone).
One of my kids picked up scratch immediately and did that for a couple of years for fun and now he’s doing python and machine learning.
its not "magic" .. children at that age need to experience the senses and play with others. Technology is overused, and brutally so, at the tender ages in the current epoch here in California and elsewhere
The "making a sandwich" demo is definitely a classic.
Here's another I like:
Give groups of kids 10 identical looking items and a balance to compare the weights. Pre-teach how a balance works to compare the weight of items. Ask them to put the items in order from lightest to heaviest. You're basically asking them to come up with a sorting algorithm. Usually, after much experimentation, someone will come up with an algorithm that works. You can work together to try to write down the steps of the algorithm. You can also explore more mathematical ideas like transitivity when comparing different sorted sets of items.
Just a callout to Logo.
https://en.wikipedia.org/wiki/Logo_(programming_language)
I don't know why but my elementary school taught my grade of kindergarteners specifically to program using Logo. The class before and after me didn't seem to get this. Some Apple IIe machines that would've quite old by that point and a big room full of kids pair programming Logo. Great memories! And I'm pretty sure this planted the seed that led to my career in software.
My oldest is now in kindergarten and I am going to use Logo to help her learn. I started by buying an Etch-a-sketch that we use together for a real-world point of contact with the idea.
You may find yourself quite surprised, as an adult, by what Logo actually is.
I was never taught much of it, but Logo is massively more sophisticated than most primary education ever gets into -— it's really a multi-paradigm language with quite an elegant loose functional programming style hidden in it.
There's a good article about it here with some links:
https://blog.codinghorror.com/modern-logo/
Also don't ignore Scratch: if you can teach familiarity in Scratch you are going to set your daughter up really well for all sorts of stuff. Scratch is really Logo's spiritual successor and it's a thing of beauty, IMO.
Thank you, this is fantastic!
I am exciting to try my own hand at Logo again too with a _bit_ more experience as a programmer than I had back in kindergarten.
I have also been looking at Scratch and at Racket as fun programming sandboxes for learning and playing.
This is terrific.
Unfortunately, but actually fortunately, I'm not going to have a computer when I'm talking to them.
Additional recommendation: read Papert's _Mindstorms_ book, which you can get as a PDF:
https://www.media.mit.edu/publications/mindstorms/
3D WebGL Logo: https://turtlespaces.org
Has a 2D physics engine and can use GLB models, among a bunch of other modern features...
You might consider some of the pre made stuff at https://www.csunplugged.org/en/
I think the sandwich demo is really good. Once you establish the sandwich idea you can start zooming out to OK now you have a cook making multiple sandwiches, now you have a whole kitchen, and use that to talk about levels of abstraction and how SWEs go from solving one specific problem to more general problems by reusing techniques
Oddly enough, my mom taught computer programming at a community college in the early 80s, and she used the PB&J lesson, though without physically making one. She also used to remind her students: "Computers are stupid. They can only do exactly what you tell them to do, not what you want or need them to do." A series of children's stories, Amelia Bedelia, uses that theme too.
Her first gripe was that the computer didn't recognize the lower case "l" for the numeral "1" ad vice versa. Her old Smith-Corona typewriter didn't have different keys for those characters, or for upper-case "O" and Zero.
My kids loved that book years ago. I never made the connection. This is a terrific comment, thanks.
There was/is a pretty interesting board game roughly based on Python Turtles created by a middle schooler a while back.
Instead of a turtle you control a bunny and instead of lines of code with commands you collect up and then use sequences of cards with commands (i.e. left, right, forward, back). Eventually, I think you end up using loop command cards, etc.
I'd imagine you could have teams control each bunny.
CoderBunnyz - https://coderbunnyz.com
Quick overview on how to play CoderBunnyz
https://www.youtube.com/watch?v=hCOBtdG3ctI
Some provided lesson plans even:
https://coderbunnyz.com/stem-schools/
Amazon
https://www.amazon.com/Coder-Bunnyz-Comprehensive-Programmin...
I think one obvious approach would be to assign "roles" - one person is "operations" and is the only one allowed to read the instructions to you, one person is "research" and has access to the list of ingredients, etc. But that probably bottlenecks things too hard and you have to figure out a fast way to assign roles. You could just increase the difficulty by requiring more precise instructions? Ah, you split the list of instructions into four parts and put one list in each corner of the classroom, then randomly sort people into the corners - one corner has ingredients, one corner has operations, one corner has conditionals, one corner has goals, and the class has to communicate to build valid instructions. Maybe give the ingredients tongue-twister names and make them devise ways to communicate without getting things confused. And obviously the end of the demo is "so why didn't any of you just take a list of ingredients and walk over to the list of operations so you didn't have to shout?".
This is great. I love it.
I wonder if I could constrain the things they could do to their "instruction set." If they don't do that, I can yell ERROR, SEGFAULT!
*SIGILL
3rd grade might be a bit young, but you can make simplified version of the 4917 computer https://punkx.org/4917/ and make few funny self modifying programs they can "compute" on pen and paper
also maybe get few examples from human resource machine and play them out, this might be more fun than pb&j https://tomorrowcorporation.com/humanresourcemachine
If they have access to devices, I suggest:
- Octostudio ("developed by Lifelong Kindergarten at the MIT Media Lab")
- A series of exercises demonstrating specific features, similar to these: https://www.amazon.com/ScratchJr-Coding-Cards-Creative-Activ...
Sorry for the digression, but there was an old Soviet children's book about programming called "Encyclopedia of Professor Fortran" that almost had your jelly example -- except that in the book it was peeling potatoes instead of spreading jelly.
Ooh, I love adding some Russian or Spanish somehow...
I'd take a different approach. Just make a simple game in html and edit it in front of them to add features, change the size of the monster, ... Wait a minute, it's 2025, probably use Kotlin or React to show the game in a tablet.
Unfortunately, I won't have a computer and probably have 15 minutes max. It's an interesting constraint.
15 minutes, that's hard. I have to resort to the equivalent of https://xkcd.com/722/ :)
My older daughter works in a software company to make a program to administer collections of videos, lots of videos. In particular a small part is a feature to upload some videos to YouTube using the API. A few years ago, when we told that to my younger daughter, she understood that her sister worked in YouTube. The younger one was extremely happy and and full of admiration. Even if my older daughter gets a Nobel price, she will not reach the same level in the appreciation scale.
I'm not sure how to apply this to your talk, specially because they are older children, but ensure to explain that some guys/gals like you make YouTube work.
Don't have any ideas for you, but you appear to be on the right track.
Went to various computer classes at school as a kid. Usually it turned out to be a math class doing bitwise logic on paper.
While entertaining, I think the PB&J demo is more like "clickbait" than anything.
My suggestion is to start with digital data and logic circuits; how everything a computer does is based on a huge number of switches making very simple decisions.
The approach taken by Charles Petzold in his book "Code" is definitely accessible, though kids don't really need Morse code and flashlights any more when they all have iphones...
https://codehiddenlanguage.com/
tell them they're making lots of sandwiches and they can work together in a line or they can work in parallel
Shaggy dog story: when I was 9 my teacher assigned us homework that entailed writing an instructional essay on how to make the infamous PB&J sandwich. At the time I was a budding "programmer" and had recently seen a skit on a TV show that employed hijinks similar to
> * I brought a serrated knife and ketchup packets. When they said put the jelly on the bread with the knife, I gripped the serrated end and pretended my fingers bled (ketchup works great as blood).
> * I brought in vaseline AKA petroleum jelly. When they said put jelly on the bread, I contemplated aloud "Well, you said JELLY, and this says JELLY!"
...and so went into great prescriptive detail about exactly how I'd make said sandwich. After turning it in my teacher chose my essay specifically to repro onto a transparency and place on the overhead as an example of bad writing. Apparently being explicit about choice of ingredients, removing things from packaging, holding the bread, etc. was antithetical to the assignment and dismissed with laughter and eye rolls because "everybody knows" to do these things.
This was a bit of a blow to my fragile ego but in retrospect it was an important lesson in several concepts that you touch on later in your post such as good communication (the importance of considering one's audience), asking clarifying questions (because requirements are hard), and interactions with authority figures.
I say all of this to say that you should absolutely emphasize this less technical side of things. Soft skills are at least as important as technical aptitude when it comes to career mobility and emphasizing them early would give students a real leg up. While considering edge cases and assumptions is clearly important for computers it's also crucial to keep in mind how people understand processes and systems, i.e. when to be explicit and when to avoid patronizing those on the other end of your comms.
> teacher chose my essay specifically to repro onto a transparency and place on the overhead as an example of bad writing
Oh man, regardless of how "bad" someone's writing is, this is terrible terrible teaching. Public shaming in front of peers, especially on something subjective like this? Some people should not be teachers. I'm sorry you had to go through that.
School can be Kafkaesque at times.
What about something about prompt engineering?
Prompt engineering ages like milk and doesn't hold a child's attention. The PB&J demo is evergreen and hilarious.
Scratch is a popular way to teach kids programming. It’s very basic but easy for kids to understand and many can do very complex things with it (someone made a super Mario brothers clone).
One of my kids picked up scratch immediately and did that for a couple of years for fun and now he’s doing python and machine learning.
its not "magic" .. children at that age need to experience the senses and play with others. Technology is overused, and brutally so, at the tender ages in the current epoch here in California and elsewhere
This is too weird. Think about something more hands on and practical.