## Machine Problems

No Loops.
Loops. I like to teach loops right away. They are conceptually difficult, but they are also conceptually beautiful and in some sense the heart of how a computer does its magic.
Advanced Loops. More loop problems, getting more difficult. Yes, this comes before the remaining -- everything uses loops.
Read. Writing programs to read in numbers and then work with them.
Arrays. Arrays are another basic concept of programming.
Read & Arrays. Reading numbers into an array and working with them.

Young Children. Wrapping the instructions around something more meaningful.

All this can be done pencil and paper, but it is more exciting for students to actually build a machine. The Black Box is literally black box that students can write instructions for. A more traditional computer model is The Machine. Both use the language of these problems.

The "machine" follows simple instructions. In one type of problem, the student is given commands and predicts what the machine will do. The second type of problem flows in the opposite direction -- the student writes commands to make the machine accomplish some goal.

Sixty years ago, these machine problems would have been just an interesting and new type of math problem with no practical applications. Even today, they can be taken that way. My daughter enjoys these and does not seem to care about the applications. Most people just see math problems. These can teach a variety of general skills, including the idea of a variable and recursion. But I am struck by how these problems require rigor. The human brain wasn't built to be rigorous, but being rigorous is a useful cognitive tool, not to mention it is needed in several areas of mathematics.

The machine is a computer, and these problems are also designed to teach the basic concepts of computer programming. In particular, the beginning problems teach the concept of a loop, which is a difficult concept yet fundamental to computer programming.

These problems are not designed to teach any particular computer language. In fact, I use my own simple code. I have built a machine that actually follows these commands. You can go to the machine, type instructions, and see what the machine will do.

A prerequisite for these problems is understanding the concept of a variable. You will probably need to explain ground rules, again in the context of solving the problems.

In theory, the student first sees the machine executing a loop, then the student writes a loop. In practice, these problems seem to require a fair amount of explanation (though of course not near as much as if you tried to teach computer programming the normal way, and the instructions should always be in the context of solving a problem.) Computer programming is usually viewed as the second type of problem -- writing instructions for the machine to follow. In practice, the first type of problem is an active part of computer programming -- a computer programmer needs to be able to figure out what the computer will do with instructions, usually when the computer is not doing what the programmer hoped.