Today, in my RubyStory class, I attempted to introduce the kids to Ruby functions. I won't go so far as to say it was a disaster, but it didn't go particularly well. They just didn't get it.
OK. Functions are a pretty big concept for a new programmer to grasp.
I also made a major mistake: too much talking, not enough coding. The kids are much happier and seem to understand better when actually writing code, making things happen and experimenting on their own.
I did experiment with a different kind of example, however, and it seemed to bring some fun and understanding: "human functions."
Basically, the kids became functions and we interactively ran the program by talking to each other. Here's how it worked.
First, I took one of the students, Sophie, aside and gave her some secret instructions:
Take the word you're given and use it in a sentence.
Then, one of the other students would "call" her with a word: "Sophie: donuts." Sophie would respond "I love to eat donuts."
We had some fun with it, as 10 year old kids will, and changed up the examples a bit. As I explained, this pretty much equates to the following code.
def sophie(word) puts "I love to eat " + word end sophie("donuts")
This seemed to help the kids understand a lot better. I think next class we'll start out with more exercises like this before moving to the code. We could get multiple human functions involved to demonstrate how functions generalize tasks within a program.
For example, here's a simplified version of our storytelling program.
def prompt(choice1, choice2) print "Which do you choose (%s or %s): " % [choice_1, choice_2] answer = gets.chomp return answer end def story puts "A zombie appears. Do you run or fight?" action = prompt("run", "fight") if action == "run" puts "Chicken! Bawk bawk bawk!" elsif action == "fight" winorlose end end def winorlose puts "Rolling the dice..." diceroll = 1 + rand(6) if diceroll > 3 puts "Yay! You win!" else puts "Sorry, you lose." end end
My human functions can run this program.
- Kendall starts the story, and passes the the prompt to Arden.
- Arden asks Teddy the question and returns his answer to Kendall.
- Kendall either ends the story ("run") or calls Sophie ("fight").
- Sophie rolls a die and, depending on the roll, tells Teddy whether he won or lost.
We'll have to see how it works. Looks like I've got a bit of writing and scheming to do before the next lesson.