Earlier in this course, when Susan was interviewing Jessica Abrams, Jessica quoted one of her favorite lines from one of her favorite movies, Finding Nemo. Dory tells Marlin to "Just keep swimming." Well, this is the point in this course where we advise you to just keep swimming. We have three important programming constructs yet to cover this week. Before getting into the event processing and gain building part of the course, starting next week. First, we need to introduce arrays. Arrays are collection of like objects in our case. For example, if we have a large number of bunnies that we'd like to have hop at the same time, an array of bunnies will make this much easier. Instead of needing to drag in one hop instruction for each bunny, which is a lot of hop instructions, with an array, we can just have one special hop instruction that works for all the bunnies. Using an array, if we have 30 bunnies in our array, we only need one line of code versus 30 lines of code if we don't have an array. Or maybe, we have a group of dancers that we'd like to have do a dance step one at a time in order. Again, an array of dancers will be much easier to use to accomplish this task. Once we learn how to create arrays, we'll then learn two new Alice programming instructions for each in and each in together, to iterate through all of the elements in an array. That's just a fancy way of saying that we want all of the items in the array to do the same thing, either one at a time in order or at the same time. We're going to be using arrays throughout the rest of this course, as they are so useful. The second important programming construct we'll cover this week is functions. Alice has many built-in functions that we have already been using, such as to calculate and return an object's height or the distance one object is from another. However, it is often the case that we need to write our own functions, such as how many revolutions a ball should make as it moves forward a certain distance, or which is the closest object to the white rabbit. We'll learn how to create our own functions. In a sense, functions are the opposite of procedures. Procedures perform animations. Procedures do not return information. In contrast, functions do not perform animations, functions only return information. Finally, we'll learn about creating and using our own variables. Variables are a bit different from everything else we've seen so far in Alice. Variables are similar to constants in that they are storage location where you can store information just like a constant. The important difference is that you can also change that information. Like constants, they are not visible, that we'll later learn a trick for displaying the value of a variable when a program is running, but they are very useful. We'll build a fun guessing game to begin to explore the power of variables. The player of the game tries to guess a secret number from 1-10. When the player guesses incorrectly, we'll tell the player to guess higher or lower. We'll want to keep track of the number of guesses it took the player to guess. Suppose the secret number is seven. The player guesses five, which is too low. The player has now made one guess. Then the player guesses eight, which is too high. The player has now made two guesses. Then the player guesses seven, which is the right answer. It has taken the player three guesses to guess the right answer. A variable is needed to keep track of the number of guesses it takes the player to guess the secret number. Like arrays, we'll be using variables a lot during the rest of this course. Let's keep swimming and learn about arrays, functions, and variables.