Key concepts
Computers
Computer programming
Problem solving

Introduction
You probably use computer programs every day. Every time you are on the Internet, play a video game or use a smartphone you rely on computer programs. Do you know you can learn a little bit about programming without needing to use a computer? In this fun activity you will write a "program"—a set directions for a volunteer to find the way through a maze. Can you help them find the way through without crashing?

Background
A computer program is a list of instructions or commands that tell a computer what to do. For example, when you are typing on a computer, there are commands that instruct it to display certain characters on the screen when you push a certain key on your keyboard. The program for a video game might have different instructions that tell the game to move the on-screen character when you push on a controller. A Web browser has instructions to tell it what to do when you mouse click on different buttons. There are many, many more examples of what computer programs can do. Can you think of more?

Computers are very good at following directions—but that can lead to a problem: What happens if a human programmer accidentally gives a computer the wrong directions? The computer can't think for itself—it will go ahead and follow the directions it was given, even if they're wrong! This can cause the program to "crash," or not function as it was intended to. Computer programmers call errors in computer code "bugs" and the process of finding and removing them is known as "debugging." In this project you will write a set of directions for a volunteer to navigate a maze, using commands like "move forward," "turn left" and "turn right." If you make a mistake with your directions, the volunteer will "crash" into the wall of the maze and you will have to debug your program and try again!

Materials

• Graph paper
• Ruler
• Pencil
• Volunteer

Preparation
• Use a sheet of graph paper to create a small maze that fits on a rectangular grid. All of the maze's walls should be vertical or horizontal—no diagonal or curved lines.
• Start out with a small, easy-to-solve maze. (You can make a more difficult one later.)
• Make sure the maze has clearly labeled "start" and "finish" points.

Procedure
• Imagine that you are a person walking through your maze, starting at the "start" point. On a separate piece of paper write directions, one step at a time, for how you would walk through the maze. For example, use commands like "move forward two squares," "turn left" and "turn right." Continue writing directions until you have enough to reach the maze’s "finish" mark.
• Optional: If you prefer, you can draw arrows for your directional instructions instead of writing out the words. Does it take awhile to write out the step-by-step instructions? How does this process compare with drawing the maze?
• Now, hand your maze, the directions and a pencil over to your volunteer. Instruct them to follow your directions exactly as they go through the maze, even if they see a mistake. They are not allowed to solve the maze on their own or change the directions.
• Watch closely to see if the volunteer successfully completes the maze by following your directions. Did they crash into any of the walls or make it all the way to the finish line?
• If your volunteer made it all the way to the finish line, then congratulations! Your program did not have any bugs. Try making a bigger, more complicated maze and start over.
• If your volunteer crashed into one of the maze's walls, however, you need to debug your program! Carefully trace through your program step by step to see where things went wrong. Did you tell them to move one block too far or turn one block too early? Just one mistake can throw off your entire program and cause a crash later on, so look carefully!
• After you discover the bug, rewrite your program. If you only need to change one or two steps, you can just erase them instead of rewriting the whole thing.
• Have your volunteer try the maze again, following your new program. Did they solve it this time? If not, keep debugging your program until they solve the maze. How difficult was the process of finding and fixing bugs for your maze instructions?
• Extra: Computer programs are written in many different "languages," which all have slightly different formats but very similar underlying concepts. For example, some computer programs use punctuation and spelling differently—this is called the program's "syntax." Can you come up with a different "language" that accomplishes the same task of solving the maze? For example, what about using commands that are defined relative to absolute directions on the piece of paper like "move up," "move down," "move left" and "move right;" as opposed to turning left or right as if you were a person standing in the maze? Although these two languages are different, can you see how they both be used to do the same thing?
• Extra: Try this project with more complicated mazes that include diagonal or curvy lines. If you can no longer rely on a rectangular grid for movement, how would you write the program? What sort of language might you need to introduce? (Hint: You can also try introducing new commands like "move forward until you reach an intersection" or "move forward until you hit a wall.")
• Extra: Instead of using a maze on paper, write a program to navigate a person walking through your house or school. Can they move from room to room without bumping into a wall by only following your directions?

Observations and results
You probably found that it only takes one bug early on in a program to cause a crash. When solving a maze, there is little room for error—make one wrong turn and you can—literally—crash by bumping into a wall or you can get lost!

Have you ever used a computer program that crashed or played a video program with a glitch? Did you find the experience frustrating? This is why companies do lots of debugging and testing before they release a program to the public—and even so, sometimes they have to release "patches" or "updates" for a program after a bug is discovered.

More to explore
Science Activities for All Ages!, from Science Buddies
Scratcha kid-friendly way to learn to program from Massachusetts Institute of Technology
Computer Science Project Ideas, from Science Buddies

This activity brought to you in partnership with Science Buddies