How Do You Explain Software Development To 2nd Graders?
First time accepted submitter zimania writes "At the start of every school year, my kids' teachers invariably ask if any parents have any special skills they can present to the students. As a software engineer, I'd like to give a presentation to the classes about developing software. The tricky part is making a presentation fun, inspirational, and easy enough for 2nd and 4th graders to grasp. Has anybody been brave enough to attempted such a thing? Are there kid-tested prepackaged presentations freely available? Would it be best to present the development of a simple game? Web page? Any advice is welcome."
But I think that 2nd grade is a little bit too early.
Have them stand together and execute a "program" as if each of them are "utilities". Something like getting an apple onto the teachers table, but each person does one thing and one thing alone. Then let them have fun seeing what they can figure out to do - so long as they still only do that one thing. This isn't about "code" it's about a way of thinking!
CS majors know the time/space tradeoff, but they never get taught the 3rd, crucial, tradeoff of the set: comprehension!
I'd suggest hooking up your laptop to projector and building a game in front of them. Take some easy-to-use framework, like cocos2d for python or anything native to your language of trade, but readable enough for 2nd graders to understand. Make a game of walk and jump (a.k.a infinite scroll), tetras, or any other arcade/puzzle thing.
You can explain how worlds are created in Minecraft, or if that turns out to be too complex to simplify, show that software like Minecraft is capable of creating fun and interesting things, and that it's much more than a black box that pumps out endorphins.
Back in primary school (15-20 years ago) i was introduced to programming using the Logo language (drawing the path of a turtle on the screen).
Syntax was something similar to:
FORWARD 100
LEFT 90
FORWARD 100
LEFT 90
FORWARD 100
LEFT 90
FORWARD 100
LEFT 90
OR:
REPEAT 4 [FD 100 LEFT 90]
Heh heh heh.
The intro-to-CS exercise they used back in my day was for the instructor or another student to pretend to be a robot that would follow instructions literally, and other students would have to devise instructions to a simple task. It gives you a good grasp of what talking to a computer is like, without having to go into technical details that second graders probably wouldn't understand or talk about binary math which second graders also probably wouldn't understand.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
Use abstract language and flow charts to explain, for instance here is pseudocode for a function called doSoftwareEngineering:
function softwareEngineering outputs betterBonusForBoss and meagerSalary
do until tooOldToEmploy
change jobs
do until bossFiresYouForBonus
do TPSRepeatsReportsUntilYouWantToCry
repeat
repeat
repeat
gosub without return
Monstar L
It's hopefully pretty straightforward to assume that no 2nd grader will really be interested in the process of software development.
My suggestion is to start off trying to relate it to something they know and use. There has been educational software for as long as there's been the hardware to run it. OG Oregon trail (spacebar for hunting) to Newschool oregon trail (mouseclick for hunting), to that time traveling mathdog game that I always forget the name of. Try to find out if they play any educational computer games in their curriculum, and then divulge the dark underbelly of the development process that would to into such a game!
And of course, even that isn't without methodology. Children of all ages (incl. us) all love a good story. They will most likely learn more from an example story of a funny situation regarding the software development process, in relation to a game they play, than any template directly trying to assault the subject matter, regardless of how well done it is.
One of the most engaging presentations I've seen on this was the making of a peanut butter and jelly sandwich where the students write out the instructions and you execute them -- very literally, as a computer would do -- illustrating the attention to detail and error checking required for programming.
I recall seeing the knife go through the lids for the peanut butter and jelly jars, the jars being placed directly on slices of bread, peanut butter being spread on the bread wrapper, etc.
This would be something to incorporate into a larger talk, probably at the end (to keep their attention going).
I started getting my kids into programming at young ages... not 2nd grade, but close: my son was in 3rd grade, my daughter 4th. I tried a couple different approaches... gave him an old Commodore 64 (yes, a real one!) and the original BASIC manual that came with it and let him try to figure it out himself (he's been way beyond his age reading-wise for years now so it really wasn't as bad as it sounded). That didn't work. I tried coding a simple Pong game in JavaScript with him following along... that kinda/sorta worked, he was at least interested and went off and tried some things himself.
In the end though, what kept his interest the best was Scratch and making games. If I was going to do what you're talking about I'd do a simple game with Scratch right in front of them. Be sure to mention that Scratch is free and they can ask their parents to get it on their computers at home to play with. Being a game will keep their interest and make it relate-able because, after all, what kid these days of ANY age doesn't play video games? You can throw in some comments about software development generally, vis a vis, how you'd go through a beta test phase, maybe draw a simple wireframe on the blackboard before you start, explain debugging briefly, etc.
I think you won't have much luck with 2nd graders no matter what you do frankly... they just don't have the attention span to get very far... but a game with a visual thing like Scratch might keep them into it for at least a few minutes, might even get one or two of them interested enough to go do it on their own... so long as they don't come trying to take my job the next week! ;)
If a pion (n-) collides with a proton in the woods & noone is there to hear it, does lamdba decay into the source pa
Take a very simple application that keeps a list of what money you get, and what you spend it on. A simple display screen of Amount Reason Then explain you need to add two buttons - add money and spend money. Each button opens up a screen where you enter the information, explain how you need fields to enter the data, and buttons to go OK. Then you can go, what if you hit the button by mistake? You need a cancel button. Around this time you need to talk about how dumb computers are, and how you have to tell them every single little detail of what needs to happen. Then assuming the OK button is hit, you need to update the screen to add the new Amount and Reason. After you explain the above (use a blackboard to draw simple versions of what the screen should look like), you will have spent probably 15 minutes explaining what you had to go through at least. Then, if you have the resources, open up something like excel. Explain that each and every little menu and option and button requires just as much if not more analysis like what you just described - and that keeping track of all that information with such detail gets very difficult. And voila, you've largely explained what software development is all about, without touching code.
Open Your Mind. Open Your Source.
A projector, and Scratch?
http://scratch.mit.edu/
Mindstorms could also make sense?
To explain a programming I would demostrate how changes to a simple piece of code changes something that you can see, like an animation (scratch) or a robot's behavior (mindstorms).
.: Max Romantschuk
More details, please.
This "present special skills to students" is a vague goal.
Is this like parents coming in for 10 minutes and explaining "I am Timmy's dad. I'm a carpenter. I build houses." That would be pretty easy: show them what software does (xbox, ipad, cell phone, internet(club penguin), a tickle-me-elmo or some other toy with software. Tell them you build software, and that software makes these things "smart". What *doesn't* use software in 2011? They're like what, 8 years old? Don't overshoot.
If they want volunteers to help students acquire these skill, you're going to needs lots of prep time.
http://www.briggs.net.nz/log/writing/snake-wrangling-for-kids/
You might tell them you are going to pretend to be a robot, and tell them to give you instructions to pick up an object (let's say an apple), carry it across the room, and set it down. Write out instruction cards they have to use, cards that say things like "lower hand", "close hand", "raise hand", "walk forward", etc.
The fun will be when they realize that robots don't have common sense, and if they tell you to walk you just walk until you hit something. Or maybe they didn't tell you to line up the hand with the apple, and your hand closes on air.
Perhaps with fourth graders you might just bring a laptop that is set up with Python, and use Python's "turtle graphics" features to draw progressively cooler things.
http://code.google.com/p/python-turtle-demo/
steveha
lf(1): it's like ls(1) but sorts filenames by extension, tersely
no no no, that's the protocol for asshole managers who have no technical background but try to micromanage you. The sugar part is where you bring in donuts and such often so everyone loves you and it makes the asshole look even worse by comparision
children, on the other hand, will pay attention to something interesting and fun, and respond to positive role model.
If you have any lego mindstorms build a shooter bot (one that can move and shoot balls) and then show them how you put a simple program together to control it and get them to help design a program to make the robot hit a target (like the teacher's foot if they don't mind!). The lego system uses graphical programming which is not great but nice and visual and is so simple that even my son - who just entered second grade today - has been able to write simple programs with it.
If nothing else it might encourage a few of them to go home and ask their parents for a Lego mindstorms set which is a good way to get them thinking of science and engineering in the future!
2nd grade might be too young to teach anything other than a vague concept of what it means.
I think a simple game would be the best bet - but I suspect the only thing you could convey to them is some demonstration of "i type this code, turn it into something the computer can understand, and when you run it, it looks like this".
I taught myself programming at ~10 years old by borrowing books from the library where you could type in the 10-50 line BASIC programs and run them. I learnt to tweak them to do other things, and eventually had a breakthrough in grade 6 where I discovered how to move characters around on the screen, in response to keyboard input.
I'm not sure if a 2nd grader would be ready to do that, but who knows in today's world? These kids grew up with computers - whereas I only got access to my first computer when I was 8. And it was an Amstrad CPC6128.
Anyway, I suspect what you're really trying to do is impress them with what it means to become a software engineer. You're not teaching them software engineering - you're showing them that if they like to create things, and invent things, using computers, then software engineering can take them there. Show them what is possible, and some idea of how to get there, and you'll have several class members decide right then that they're going to be a programmer when they grow up.
I knew from 10 years old that I wanted to be a programmer. Now, 20 years later, I'm living that dream.
Never underestimate the impact of a simple demonstration on young minds. My motivation was initially game development but as I grew older my love of games faded. I still like to create games, but I'm equally interested in other applications too.
This seemed like a reasonable sig at the time.
Introduce them to Logo. 2nd graders can grasp the concept of a turtle that leaves a line as it walks. I say this from absolute experience: my father was a 2nd grade teacher for over 20 years and he introduced them all to Logo. It was always a HUGE hit, and the kids picked it up amazingly well. Remember, 2nd graders are only around 8 years old. They don't care about for loops and binary systems and memory and stacks. Logo is such a wonderful thing to introduce young children to "making computers do things." It allows them to explore the concepts of telling the computer to do what THEY want, and it keeps the lesson fun and simple.
Make it even more interactive and have the kids execute their own Logo program physically, either in the classroom, a gymnasium, or (better yet) out on the playground with that colored plastic safety tape.
Again: Logo, Logo, a million times Logo.
http://en.wikipedia.org/wiki/Logo_(programming_language)
Their may be a grammatical error, misspeling, or evn a typo in this post.
I suggest showing them some simple programs in Scratch (http://scratch.mit.edu). It's like turtle, but with a block programming interface, and a built-in graphics editor. You could bring in a computer with a projector to show them basic commands and what the commands do. Kids that age are able to understand it, and have fun making a simple animation or game. Our elementary school has a computer lab; if yours does you could bring the kids there after your demonstration for some hands-on work. If there isn't a room with a lot of computers, you may be able to ask a few parents to bring in laptops so that the kids can try it.
Get a good lawyer...
For justice, we must go to Don Corleone
I do workshops for 15 year olds +, so this may be useful to you: There are many great stories of disasers that have been caused by software. This lets me explain how my job is to create software that does not make those mistakes. :-)
I'd say tell them the truth. It's a job that sucks the life out of you.
Most of your days will be spent:
a) in "requirements" meetings: Where people who have no idea what they want hope for some reason that you do.
b) in "testing" meetings: where those same people get pissed that you didn't do what they didn't say.
c) in "bug report" meetings: where people can't fathom that in a hundred thousand lines of hastily written code (because we had a due date, and had too many testing meetings to actually test anything), there could be a mistake somewhere.
d) "developing": where you write some shitty business software that most people are forced to use during jobs that they also hate. Meaning no one will ever be happy with the work you're doing.
e) looking for a new job: And not being able to find something interesting because your experience is in fucking business software, because it was the only decent paying job available when you were first out of college and didn't know any better. And everyone that's going to pay you decently wants experience in whatever they hell their doing, not business software. Even though you have a god damn master's degree in CS, not "business software".
f) Oh god please make the hurting stop.
g) Drinking, and trying to avoid people who want to talk about work.
Feel free to pass this out as a pamphlet to the kids.
Introduce them to Scratch. http://scratch.mit.edu/ It's an easy programming environment where they can actually create something. You can demo programs other kids have written and depending on the time you have, they could actually create programs themselves.
Be glad you aren't like me and support mainframes...
"Hello class, I work on this really big black computer the size of a refrigerator and the weight of an elephant...No, it doesn't play Angry Birds.... but it's older than both of your parents"
I'm still trying to figure out how to explain what I do to Adults...
10 PRINT "YOU SUCK!"
20 GOTO 10
Pretty much every Apple II in my elementary school ran that program almost continuously... what more do you need?
[Bonus - it was a gateway program to writing Eamon expansions by Jr High. Double bonus if anyone actually knows what the hell I am talking about...]
Dunno whether I'm troll-feeding, but this is a good way to get one's teaching licenses revoked.
Give them a copy of the C++ standard. Tell them if they don't understand it within one week Santa Claus will poison their pets.
Really. You don't explain to 2nd graders what it's like to be a farmer, a preacher, an engineer, a politician, an author, a doctor, an ecologist, a chemist, a clerk, a physicist, a professor, a teacher, a police officer, a cabinet maker, a candlestick maker, a fireman, an astronaut, a pilot, a nurse, a proofreader, an electrician, a builder, a seamstress, an artist, a race driver, a GIS specialist, a mountain climber, a kebab maker, a bearucrat, a paramedic, a storekeeper, a herdsman, a psychologist, a film director, a lawyer, an artist, a husband, or a wife, a giver, or a carer, a baker, or a master brewer. You just don't "explain" these things to a 2nd grade student. There is no point, because they have not yet developed the understanding, passion, drive, abstract thought, whatever; what I am trying to say is that there is no way to "explain" because they don't have the background. You're over-thinking things I think -- just go in and say why you like your work. That's about as much as they could understand I reckon. You surely can't expect them to be enthralled by the source code of even a simple game.
Just think back to when you were a kid. What got YOU interested?
For my cousin and I, it was this badboy.
http://en.wikipedia.org/wiki/Big_Trak
Man, the fun we had with that thing. The absolute top was getting the thing to fire a spring-action Crossman BB pistol (taped to the top of the unit) by using the dump function of the optional dump-trailer and a piece of string to pull the trigger when programmed.
If that doesn't get kids excited about programming, I don't know what will.
Or you can just fall back on the "In the Old Days..." spiel and start with "Back when I was a kid, we had old ladies weaving code..."
http://en.wikipedia.org/wiki/LOL_memory
Could you come by and explain it to some software engineers? I think quite a few of them could do with learning about it too.
Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
Why don't you just let kids be kids?
A big part of the reason why America is falling behind other parts of the world is because they have not learned the concept of "work smarter not harder". You can only get a certain amount of productivity out of a worker where keeping them chained to their desk for more than 7.5 hours a day for 5 days a week.
The same problem exists with schools in America, children are forced to go to school far too early when they would rather be learning social skills and playing with their friends. A lot of european countries start schooling at a much later age but those students end up not only catching up within a year but exceed their North American counter parts the year after. Not only are children in school too early but now some parents are enrolling their children in summer school as well even when they did not need it.
Jesus was a compassionate social conservative who called individuals to sin no more.
That's a great idea. I'd add to that, not to treat them like idiots - it's amazing at what a second grader can understand. I know I was amazed with the stuff my nephew came out with.
What do prostitutes and programmers have in common? They both have trouble explaining their jobs to 2nd graders!
I rarely respond to comments. Also, don't ask for clarifications: a brain and Google are faster, believe me!
Caveat - I have never actually tried it, and I developed it for adults. I still think it might work with 2nd graders (probablu too coplex)
Ask for a volunteer. Write a bunch of numbers on the board, and tell the volunteer to sort them.
Explain that this is not programming.
Now, cover the volunteer's eyes, write some more numbers on the board, and tell him to tell you to sort them. Allow asking "what is the first number" and such.
Explain that this is, also, not programming.
Now, tell the volunteer to tell you how to sort the numbers before they are written on the board. Explain that once the numbers are written on the board, you will not hear any comment from him. Write the instructions down on the board. When they are done, write down numbers and carry the instructions out. Try to pick numbers that won't work with their instructions. Allow the class to fix the instructions, but any time they do, restart the whole thing.
This is programming.
Shachar
I started in 1978, when I saw a film on computers. The I took a couple of courses at MIT (Fortran and LISP.)
When I wanted a computer, my aunt told me that only rich people had computers at home for toys. Then she told me that, computers were just a passing fad.
Fight Spammers!
Remember they're still very young so just cut it down to the basics - maybe start by introducing some design patterns from GOF, explain the main software development methodologies and processes and their respective pros/cons, and maybe finish up with some quality management strategies such as Six Sigma and perhaps introduce some basic formal verification theory.
Edit game config files, to begin with.
Then find something that requires a loop, if they still have the interest in fiddling around.
You go up to the front of the class and say, "Abandon hope, all ye who enter this profession". If they want you to expound on it a bit, you add "Are you fucking crazy? Go play some foot ball, score with some cheer leaders, drink booze, smoke pot, do anything BUT become a software developer. Your peers are almost universally morons, and those are the ones in THIS country. It's entirely likely that by the time you graduate, you'll have to move to India or China to find work. Oh, and your managers will constantly challenge your faith in humanity."
Mod me down with all of your hatred and your journey towards the dark side will be complete!
Last week I felt like writing a little code with a simple game framework. The tutorial they had was a basic jet flying to the right shooting at and avoiding oncoming items. All the graphics and sounds were in the tutorial with copy and paste code so it was quick to throw together. My kids ages 3 and 6 were hanging out with me watching it come to life. I let them move the jet around when all I had was a moving jet. They saw it as we added targets, then bullets, then explosions, then sound.
What they really loved was me bending the rules of the game. I changed the rate of targets from 1 to 10 to 100 and showed them how it changed the game. They got a real kick out of me changing the bullet logic. I made the jet fire stationary bullets and let the targets run in to them. I also made the bullets fly backwards. I would point out how silly it was and they would laugh. I basically explained that we were in control of how everything acted and we could make it as serious or as silly as we wanted.
Make a simple game but comment out or turn off all the functionality. Then turn each piece on one at a time showing them the result. Have a few things that you can tweak that the kids can see make a difference in the game.
Im a gamer, not a grammer major. This post is full of spelling and grammer mistakes.
Now demonstrate a variety of different effects you can apply to the photo, comparing and contrasting the UIs, discussing various design/programming decisions that go into developing this kind of program.
Then take some pictures of the students and invite them to try the program, demonstrating the good and bad aspects of the UI for new users.
This will give you an educational presentation that is engaging and interactive, on a subject that is relevant to the students.
Don't forget to Email all the files to the teacher.
Say, "Computers are like dumb robots that need very exact and details instructions to do a task. They don't have common sense to figure things out on their own. They are kind of like young toddlers in that they don't know how to do very many things on their own. However, unlike toddlers they do listen if you talk to them just right."
"You have to give them very careful instructions to tell them exactly how to do things and not skip any steps. Each step is split up into finer and finer steps until it's simple and thorough enough for a computer to understand. That's what a software developer's job is like".
"If you tell a computer how to brush teeth, you can't just say 'move the brush back and forth.' You have to tell it where to put the brush with exact measurements, as if you were using a ruler; and tell it how it exactly how many times to repeat the movement of the brush from one side of the mouth to the other. You can't say 'kind of a lot', but give it a number such as 50 times."
Table-ized A.I.
The best robot to bring in is a Bigtrak. http://www.thinkgeek.com/geektoys/science/de2e/
It is programmable on the spot, and it isn't as fragile as something like a lego robot. At $25 it is also cheaper than most other robots as well.
If you had one of those programmable toy car things that could work. Set up basic functions like "move forward one unit" "Turn left" and then make tasks or a maze for them and see if they can get the car through. The PB&J example earlier sounds similar and might be easier and more fun though.
Hey kids do you want to make your own modern warfware game?!?!
We are talking about US children and not a road building machine? Tell those 7 and 8 year kids that programming is making those games they play on their xboxes and that it can take many lifetimes of programming to make a few minutes of fun something that many programmers don't have that much of. I have an 8 year old and I haven't tried to explain programming to him but I think that if I show him how to assign a keyboard macro in Starcraft he will get the idea.
its more like getting a charity box of lincon logs, lego's, stickle bricks, and parts to an erector set and getting it all to work together on you 2011 pressure-washer to preform something useful on your "WTF are you thinking" platform
Software engineer is a quite abstract job to describe, as opposed to programmer.
My best bet would be - depending on the time you have to spend and how far you want to get them involved: If you have a LEGO mindstorm or something, build a small car out of it and ask them to describe when it should stop, turn etc. to drive a given course and implement it.
Over 20 years ago we were using LOGO programming language. It is visual where you see "turtle" who you command to move, turn left or right and so on. ...
So that's visual and even children understand simple commands: go forward, turn left, pen down, go forward, turn left, go forward, pen up
Also even more visual if you can have physical robot with a pen control. Children can see robot crawling on floor as you program. Control pen and even change color.
Later they can learn loops and other more complex things. See Wiki: http://en.wikipedia.org/wiki/Logo_(programming_language)
There are also links for teaching programming languages for children.
Scratch is very good, I agree, but for a presentation (if it's hands-off for the kids), the risk is that the kids will concentrate on the pretty 3D graphics and miss the point of those funny little grey oblongs (and they probably won't be able to read the instructions if it's projected on a big screen).
How about Shoes (http://shoesrb.com/)? It's a really simple IDE designed to let kids explore Ruby. It lets you create Windows and buttons and event handlers and stuff really easily, so you can create a 'real' app in a few lines of really quite readable code. You can probably make the font big so the kids can see what you're typing.
Bubblesort is a good way to show it to children.
You can show it on the blackboard. Then assign each child a number, shuffle them, and then let them move around, and do the comparison.
If many children, you can make smaller groups, and finish with a merge sort (lowest number of the 3-4 rows steps forward).
Another simple one is making a maze. Then ask them how to get thru, given that you have breadcrumbs at your disposal. The algorithm might be turn right at every opportunity. Backtrack if cul-de-sac, and turn left, then stick to turn right. You need to make some special case, like a loop in the labyrinth (So you will get back to your breadcrumbs). Development is figuring out how to describe it in a way a computer will understand. It does only what it is told.
These are two examples of different difficulties. But gives a view into development. And the maze is a bit game like.
I don't have children and I'm not a teacher but instinctively I would attempt an analogy with books. Hoping they have at least read fictional books. I would start by avoiding all computer terms and simply explain the process of writing a book. How pieces of the book are usually written separately and then assembled and re-arranged until it becomes the awesome story you immerse yourself in.
Once they understand this concept switching the analogy to computer programming would be simple in my mind, but I don't have the mind of a 2nd grader. I think it's important to avoid the magic of computers, because they are truly magic to most of us, while books are tangiable and everyone can start writing but not everyone can make a good book. Much like programming.
Let them type in 20 pages of BASIC programs just to be able to shoot white pixels on a Black and White 127x48 display. (Ah I loved my TRS-80 model I)....
The first phrase of the course should be this:
"Dear class,
All the code that you write in the next 15 years will be shit."
That, bizarrely, should motivate some to become programmers. It'll also help others choose different paths more quickly.
And they will love you for being the teacher that said "shit".
I don't know why no-one suggests Inform 7 in these cases. http://inform7.com/
I mean, it's not the simplest programming language, but it's fairly intuitive. I really think it could make it easier to learn programming.
Just use whatever presentation would be appropriate for your board of directors. Maybe bump it up a notch or two so the kids don't feel insulted.
I keed! I keed! I know a lowly programmer would never be permitted to speak to board members.
Comment removed based on user account deletion
Good God, man, that's genius!
I was going to suggest drawing-by-instructions (sort of like a live LOGO) -- it's good fun, but it's a bit abstract. The sandwich is perfect. OP: do this. Do it.
HAL.
Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
Just tell them it's magic, and show a video of Hugh Jackman creating a virus while sipping wine.
I've seen a kid that age program in mine craft. They're ready, they're just not into stuff that's boring.
Then again, TFA doesn't ask about interesting children in programming, but in software development. This seems silly to me. 2nd graders might be interested in learning how to count just for fun, but teaching them to do book keeping will require a massive carrot & stick.
10 PRINT "HELLO WORLD"
and keep changing / adding to the listing until it's about 10 lines long and your presentation time is up. You can illustrate the full SDLC this way. I'd make sure to use GW-BASIC in fullscreen mode, and finish the presentation by running a PACMAN clone (*) that the kids can play with.
(*) written in BASIC in case the kids want to see the code.
This is just a prefect opportunity to expand on a basic example that seems to be in about every textbook ever: the polymorphism demonstration with an Animal parent class and the makeNoise() function.
Build a simple app that has a list of animals. Selecting an animal displays a picture and plays the sound. After showing them a very quick VB style "drag and drop" form creation you can demonstrate how the basic idea of classes works, and how basic design principles make coding easier, simpler and more maintainable. Obviously not stated in those terms, but with a practical demonstration of these concepts the kids with the right interest and mindsets will catch on.
I imagine the demonstration of an animal making the wrong noise for the picture being shown should be a pretty clear demonstration of a problem for anything, and at worse case should get some laughs even from those who aren't following.
I don't think its a topic that most are going to grab hold of, but I do know if I saw something like this in grade 2 I would have been intrigued.
www.alice.org
It's a 3d world, which is programmed using visual programming language. For kids.
A free one, also have source code.
License is apache 1.0
What ever you do don't expect all of them to get it or care. but if you can engage one or two of them then you've done something good. They are young people, not aliens. Just like adults some get it and some don't....just read all the comments. Scratch, LEGO WeDo are good starting points. MIT Media lab has good stuff.
I know the web site says "12+", but it IS easy enough for any third grader smarter than a house plant.
If you scrap the timer and let them "pair program", if necessary, they'll get it.
To the OP: if you're gonna go with this idea, it might also help get the kids attention if you wore a costume that makes you look like a computer. I'm thinking a box that looks like a CRT monitor on your head and maybe a shirt with a keyboard drawn on it. You got the idea. BTW, good luck on your noble quest!
Your Ad here
Don't worry about teaching them computer science, focus on sharing what you do. Bring in some pictures and video. Maybe make a little powerpoint with a wireframe mock up, an UML chart, ERD or flowchart, some code and a screenshot of the finished product and talk about how you take an idea, plan how to implement the idea (or solve the problem), and then create code. Kids will really be interested in what happens if you make a mistake and how you boss decides you are doing a good job (if you are the boss, then talk about finding good people, and what makes a person good or bad for the job). They'll also be interested in the place your work (big picture, the building, what it looks like) and the kinds of people you work with.
Maybe go around the office and explain what people on your team do (analysts, testers, etc) and ask them simple questions like "why is your job important" so the kids get a sense that you are part of team, and that everyone has their part to do. Adults forget a lot of times that kids are just as smart as adults, they just don't have any experience... so they are VERY interested in what your life is like even if they aren't ready for CS120 yet.
-- $G
Yeah, but you know what's the difference? :p
If the prostitute's boss or client is riding her ass, chances are he'll finish in a couple of minutes
A polar bear is a cartesian bear after a coordinate transform.
The cardboard computer
http://www.porticus.org/bell/belllabs_kits_cardiac.html
There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
csunplugged.org has many great activities to help teach computer science concepts to kids (without the distraction of using computers). I've done a couple at my kids' school and it went very well.
there's a science / robotics / etc summer camp program run near me. sent my kid (3rd grade) to 'jr video game maker' camp for a week. he had a blast, and they also used scratch. free, and it introduces a lot of the structured decision making you need for programming and algorithm development.
the first thing they made was something like pong. you make sprites and assign scripts to the sprites. then you create event structures, etc. "when sprite 'ball' touches sprite 'paddle' reverse direction", and things like that.
You can't expect kids at that age to type. And the 'start by using Python as a calculator, then introduce basic functions, then variables', etc., etc, is crap for kids of that age. Kids interact with programs through video games. That's how you hook them into programming. you have to show them there's something fun to do.
teach them a dance that represents the register states, with a few rules that show how to take an input, manipulate it, and get an output
Yep, that's the trick part, way I see it. He asked about software development, not programming. Programming what you want, especially in a game, is fun. Software development, on the other hand has lower average job satisfaction than being a garbage man, according to a survey from a couple of years ago.
Mind you, it might still be able to explain it via an exercise, but I don't think anyone has the heart to do that to some innocent little kids. I mean, it would probably go like this:
"Hi, kids, my name is Moraelin and I'm here to show you how software development goes. I must thank Mrs Crabapple for letting us come to the park for this exercise. We'll be making this a role-playing exercise, so it's easy to understand. I brought a few friends to help with some key roles. Say hi to Tom, Dick, Harry, Jack and Jill.
"Now the first thing to remember is that we're not in this for the fun. You'll get a grade for this, so try to do your best.
"The most important skill in my profession is to sit in meetings and look interested. It may not be the greatest percentage of the day, unless you really draw the short straw, but you'd be surprised how much more important making a good impression to the boss is than actual work...
"You over there? Yes, you in the blue sweater. What's your name? Well, Billy, you get a minus one point on the grade for fidgeting instead of paying attention. Yes, I know it's boring, but that's the whole point I'm trying to convey. Let this be your first lesson in real world employment.
"Well, anyway, for the purpose of this exercise, you'll be divided into teams and have to draw something on the pavement with chalk. As a team. Remember, what matters is the whole result, not just your own personal performance.
"Now to make things more educational, I brought a second class to pad the teams with. The assignments will be big enough to include them, but they've all been assigned some secret roles to play. Most... let's just say it sounds like 'mazy loron', but occasionally you'll get the guy who just tells you how to do your job instead of his own doing his, the guy who keeps adding pointless "THIS IS A FLOWER" comments to your work instead of doing his own part, the guy who keeps trying to tell you about his vacation instead of letting you work, and so on. Some may even be naturally inclined to go beyond even the assigned role in their being useless and counter-productive.
"I probably don't need to tell you that you're not supposed to beat them up even if they 'accidentally' erase your part of the work. In fact, you're not even allowed to complain about them. Doing so will get you a bad grade for being a bad team member.
"You have a question? Oh, WHAT you'll have to draw? I don't know myself either. Tom and Dick will role-play the customer. You'll have to make them tell you what they want drawn.
"Now they'll be as vague and occasionally wrong as humanly possible, and occasionally obnoxious, but you must extract exact information from them. You don't get points by just doing close enough. If they say they want a flower, you must get out of them exactly what flower and what colour. If they say they want a boat, you must find out exactly what kind of boat. And if they say they want a cow, well, better make sure they don't ACTUALLY mean the kind that meows and catches mice.
"They'll also change their mind or demand changes at random times, and at the end will blame you for not guessing they actually wanted something different. You'll also have to change it to that, and repeat about a dozen times.
"Harry will play the Pointy Haired Boss in his exercise. He'll give you extra directives, like only using blue and yellow chalk because of trying to consolidate into fewer technologies, or drawing with the chalk on paper because he read that that's the latest buzzword. For your grade, you'll have to figure out a way to satisfy both him and your customer. If you end up trying to mix
A polar bear is a cartesian bear after a coordinate transform.
1. Get involved with FIRST lego league at the school
2. Bring in robot
3. ???
4. Profit
while(1) attack(People.Sandy);
Here: http://www.agentsheets.com/index.html
That is a site dedicated to programming for kids, little kids even.
What is it?
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
If you have a computer and projector, consider logo. You can start by making a square (forward 20, right turn 90, forward 20, right turn 90, etc.) and then you can show how loops save time with its REPEAT command. Then, by wrapping a few repeats, you can make a lot of shapes (like, fill up the screen with squares to make a grid) very quickly with just a few lines.
One cool thing about logo is it goes slow so you get to actually watch the shape being drawn and you can really see what's happening--it's not just like "enter commands, hit return, and BANG there's a square."
Dear Slashdot: next time you want to mess with the site, add a rich-text editor for comments.
Can you do something with robots? If you can show kids how putting in this command makes the robot drive forward/turn/etc they will think that is pretty cool.
Obviously 2nd graders are not going to understand technical terms they're not familiar with (or are familiar with but misunderstand their meaning), but I'm shocked to see how many people commenting on this question underestimate the intelligence of 2nd graders. When I was a child I had been using computers since before I was in kindergarten; back then there were still many people back then who didn't have computers at home. If they hadn't encountered computers at home, they were certainly exposed to them in school. Nowadays, computers are ubiquitous in homes, and that's not counting other electronics that generations of Americans have grown up with. Kids are familiar with computers because they're a fact of life.
Personally I'd love to talk to kids about computers, because they'll be eager to learn and will have lots of questions because they are aware of the fact that computers are present in their lives and that they have gaps in their understanding. You just have to give them simple and clear explanations so that they can establish their general knowledge more, and don't delve into really specific technical issues or nuanced examples (I know we love to do that, but restrain yourself). Tell them a little bit about what computers do, why they're important, what programming has to do with computers, and why programming is important. I'm sure they'll eat it up as long as you don't bore them with overly lengthy explanations. It's just like talking to any adult who is not familiar with computers, except the children will comprehend more and learn faster than a computer-illiterate adult would (don't be surprised when the kids get what you're saying but their teacher doesn't). Kids are biologically equipped with learning super powers--use that to your advantage.
Just pretend that you're giving a presentation to your parents on software development; only you won't have to 'dumb it down' so much for second graders.
I dunno... I definitely didn't start in college with programming. In fact, I was already good in several programming languages, including Z80 assembly by the time the muppets in college even tried to teach us the first thing about computers.
But on the whole I still say that I used to find it a lot more fun before it actually became a job. Sure, I could still do it for fun at home, and actually still do, but... somehow it's not the same thing any more. Too often after dealing with yet another moron whose clever optimization is to use Integer instead of int, because, I kid you not, "then the runtime only copies a pointer to it on the stack, not the whole int", or another moron customer who thinks 90% of the work is done after he saw a HTML mockup (after all, that is the hard part, right?), or some moron whose idea of managing or testing is to count pixels with a magnifying glass and woe if a label is rendered differently in his browser than in the Paintshop images in the requirements, or some moron whose idea of performance testing is to time the unit tests and call a meeting if this week it runs slower than the last week (e.g., because extra tests for fixed bugs got included), etc... too often I just want to forget that programming even exists.
My personal advice to any kid who loves programming would be: find a different job to pay the bills, and keep doing programming just for your own fun. That way you'll both keep your fun hobby untainted by such crap, and probably have higher job satisfaction in that job that pays the bills too. And while it may seem like an eternity until you'll be a boring 40-year-old or even 30, trust me, it'll be sooner than you think that you find yourself on the shit end of a bigger age-ism stick than porn actresses do.
A polar bear is a cartesian bear after a coordinate transform.
Demonstrate using the Logo turtle to draw graphics. Write simple programs. Maybe get the kids to pretend to be turtles and walk around the room following your instructions, or draw on the chalkboard following your instructions.
Secession is the right of all sentient beings.
Here's how I explain what I do to people who don't understand programming.
I just say, "I tell computers what to do. They tell me to go screw myself..." (insert hand gesture here) "and do something else. Then I spend the rest of the day trying to figure out why."
You might have to change the hand gesuture and verbage a bit for second graders, but I think it would still work.
i presented something like this before
i had an old ti99 computer and asked the a/v department to bring me a t.v.
i hooked it all up and ran a few programs for them that drew shapes on the screen
might take a while if you want pretty colorful graphics but kids will understand the concept of:
lots of gibberish (code) = fun stuff!
I wonder if Americans are surprised on a daily basis that there is life outside the US.
I wonder if this false assumption about Americans will ever wear out.
If you aren't suspicious of your government's actions, you aren't doing your job as a responsible citizen.
As a 2nd grader in 1987, I had a class to learn the Logo programming language. This turtle graphics based language was simple enough to present quickly, and was designed to be engaging for youth. My first class involved a game with a circle randomly placed on the screen. There was a turtle also randomly placed on the screen. I had to guess at the angle I needed to turn my turtle (right 45 degrees) and then guess the distance in pixels. The turtle would then move to the location, and I would score if it landed in the circle. Simple game, but then we could look at the code and understand how it worked. That one class engaged me enough to turn me towards IT as a career later in life. It also inspired me to try an understand how things (like games) work.
I have had a few past teachers ask me to come in and talk to their classes about computer science/programming. The key to it is to show them the flashier sides of programming. Don't get into information theory, inheritance, memory usage, blah blah blah. Show them some javascript that makes all the images on a web page fly around. Show them a game you wrote. For the older kids you can usually bust out a TI-86 and show them that with a little code you don't really have to think about the math(let them figure out that to code it they will have to learn the math anyway).
For younger kids I recommend the Peanut Butter and Jelly Sandwich algorithm. Bring in a loaf of bread, a jar of peanut butter, a jar of jelly, and a knife. Set them out on a desk and tell the class that you are going to be a computer and they are going to program you. They need to program you to make a PB&J. Tell them that as a computer you can only do what you are told, you don't know ANYTHING about making sandwiches. They will generally start out with "Open the bread", to which you reply, "What/Where is this bread you speak of?" You can get as specific or as general as you like, generally you can leave out things like how to undo the twist-tie on the bag, but when they tell you to spread the peanut butter you can really mash it in there and tear up the bread. It takes 15-30 minutes depending on the class to get an edible sandwich, but the kids love it.
back in the 80s after HS I T.A.ed in a computer class for the lower grades.
The curriculum was basically explaining what programs do (role-play a robot making a peanut butter sandwich, have the kids tell the robot to do...). After theat we went into turning on the computer (Commodore 64) loading programs etc. then for the programming we did a type in, simple graphics demo, something they can type in the the length of a class period and be able to modify easily to produce new effects.
I think this could be done with a simple python script, have it draw something pretty and let kids go crazy the adjusting the values the make the design.
Don't expect them to retain any of that... unless they are really interested then they will be back asking questions and progressing on their own. Main point is to show the kids computers/programming ins't so unapproachable, so later computer experiences don't worry them as much.
"Enjoy what you're doing! If it becomes drudgery, you're doing it wrong!" - Jim Butterfield
Try this out: Tutle Programming Game its designed with jong age in mind
Oblig. xkcd http://xkcd.com/722/
No left turn unstoned.
Have gnu, will travel.
Pretty much all of them should understand Legos, so use Legos (Kinex, Constructor Set, Lincoln Logs, etc.) to build something. As others have suggested, involve the children - decide what to build, how to build, etc. as a group.
Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
the risk is that the kids will concentrate on the pretty 3D graphics and miss the point of those funny little grey oblongs (and they probably won't be able to read the instructions if it's projected on a big screen).
So do an interactive presentation. The code being in blocks makes it really easy to have the kids code along 'cause you can point at a block and ask the room "so how many steps should he go" and "what should he do next" and run the code every time you add a block.
open source modern art: laser taggi
AFAIK this is the only approach that has a proven track record for motivating just about all kids in schools (elementary, middle, high) including girls (average ~50%) and providing early evidence of actually relevant skills that can transfer to other school topics such as science. It is used in entire school districts as part of the curriculum. Most importantly, it can be used to make games as well as simulations actually relevant to schools (STEM courses). Some movies showing kids making games and simulations:
http://scalablegamedesign.cs.colorado.edu/gamewiki/index.php/Videos
If you have one hour do this: hook up AgentSheets to a projector and start making a game (e.g., a frogger like one: http://scalablegamedesign.cs.colorado.edu/gamewiki/index.php/Frogger_Design)
- good: you walk them through the design and implementation process and build part of the game. And, YES, this can be done in an hour and with elementary school kids.
- great: have a kid come up and talk it through, with the help of the rest of the class, on how to make the game.
Have a look at teacher created instructions: http://schools.bvsd.org/aspencreek2/computer/Frogger2/frogger_tutorial.swf
http://penny-arcade.com/comic/2002/05/17
Logo was my first experience (alongside BASIC) of programming.
It's quite a simple thing to pick up and it shows them how to make shapes.
It was designed for education too:
http://en.wikipedia.org/wiki/Logo_(programming_language)
http://en.wikipedia.org/wiki/Logo_(programming_language)
I was in either second or third grade when our classroom teacher showed us how to control LOGO, a programmable turtle that could be used to draw shapes. She put me on a carpet in the center of the room, with a ball of string to unwind in a trail behind myself. She told the class that they would use me to create a shape on the carpet, by telling me where to go.
She asked the class:
When the square was finished, she discussed how I had repeated some steps (turn 90 degrees, walk forward) and used that as an introduction to for loops. Next, she lead us to the conclusion that we could make a shape of N sides by having me turn 360 / N degrees. Last, she let the class figure out that they could have me approximate a circle with a high value of N.
This whole exercise took maybe two hours. We spent the rest of the afternoon in a lab, programming with Logo, in pairs. Don’t feel bad if you can’t lead a bunch of kids through basic programming and geometry before lunch, this woman was a genius teacher. Her class size was maybe 30. Looking back it’s clear that she must have used some form of mind control to keep us in line.
Obligatory XKCD: http://xkcd.com/722/ (Computer Problems)
I'm an elementary school teacher, and we have 2nd graders using Scratch at my school with great success. Having them create interactive multimedia may be a better way for you to start - create some characters, program them to do or say things in sequence and interact when they touch each other. Be sure to check out the in-program help section and print out the "Scratch Cards" as an easy way to get kids started. Also, check out http://scratched.media.mit.edu/ for lesson plans and ideas from teachers around the world.
Another idea - I just downloaded and started reading some documents on "CT" - Computational Thinking from ISTE and CSTA ( http://www.iste.org/learn/computational-thinking.aspx - free registration required to download). Haven't read it all or used it with kids yet, but it looks interesting. There are suggested activities that don't involve computers, similar to a few mentioned in previous posts to get kids to think about processes, algorithms, etc... including stuff for younger kids.
To me, software engineering is like solving a puzzle. You may want to create "puzzle pieces", or bring Lego blocks, and label each one with either a system or a function and explain that this, like math and engineering is really just an advanced form of what we do with puzzles or Lego blocks. Sometimes it means connecting pieces together, and sometimes it means creating new things from scratch.
Explain it the same way you would to upper management, in small words and with color filled graphs and useless spreadsheets.
errr....umm...*whooosh* *whoosh* Is this thing on ?
to read through, so maybe someone mentioned this already, but I think it would be fun to teach them to count to 1023 on ten fingers using binary numerals.
It's not directly related to computing, but it gets them thinking about symbols and numbers in a new way.
Next, make sure they've done the 'wire, battery and lightbulb' experiment they used to have us do in the 4th grade. Show them how they can combine the lights with the counting system they learned to signal information to friends.
Then maybe go into processing that information, or how arbitrary sequences of information can represent letters.
http://www.masturbateforpeace.com/
why don't you use tools to help them to understand the principal of programming? kodu game lab from microsoft is a good tool to start. it allows you to define programming procedure and logic in GUI so kids would be able to understand it better than if you tell them IF X THEN Y. good luck!
The simplest definition I use is "Breaking problems into smaller problems until they disappear".
Do a basic form in HTML (maybe a sandwich ordering form) and have the kids make suggestions for improving the form.
Make the change live and ask them if it made the form better or worse (save different versions).
That's requirements gathering/testing/approval all at once.
In 2nd grade, they introduced us to logo. I loved it. Do that.
Show them Alice. You build a program by plugging bricks together, including math functions, tests, while, etc ..
The result is a 3D animation than can be interactive if coded properly.
A simple program can fit on one screen, so good for overhead presentation.
If a young kid is not interested by Alice, you know he'll never be interested by programming!
http://alice.org/
At this year's Young Rewired State - a week for kids under 18 to do cool stuff with code and then present the results - @pixelh8 on Twitter had a bunch of kids under 10 at the Ipswich center. They didn't appear at the eventual presentation, but he did and showed this video (YouTube) of them explaining what they'd learned and doing a little programming. He explained how he did it in his talk: 1) he made it fun for them; 2) he took the group outside and they had many play breaks; 3) he used a *lot* of metaphors to explain. I thought it was immeasurably cool that he was able to do this.
wg