In a typical mathematics classroom, the student desks are arranged in proscenium theater fashion. From the front of the room, the teacher presents definitions of new terms, new theorems, proofs of these new theorems, and demonstrations of how to apply them to example situations. The teacher writes a mathematics problem on the board, solves it, and asks for questions from the class. After this interlude for questions, the teacher writes a new problem on the board, then leads the students step-by-step through the algorithm used commonly to solve it. Teachers vary this process according to their preferences, but it is essentially the same for all who use it. Next, the teacher writes another problem or two on the board and instructs the students to solve them without guidance. After a short time, the teacher gives the solution and asks for questions. If time permits, the teacher assigns homework, the students begin working, and the teacher strolls around the room responding to student requests for help. This method is called, “I-do, we-do, you-do.” It is the prevailing method of teaching mathematics in the secondary schools. Most teachers vary their methods, but, even among those who do, most of them use it most of the time. Although the community of math education researchers with which I’m familiar recommends different methods, many, probably most, math teachers still lecture, demonstrate solutions to homework problems and test student recall in the same way we did in most math classes for the past century.

By this process, the teacher programs students to execute algorithms. Which algorithm to execute depends on the data fed into the students. A teacher’s lesson plan consists of four stages:

- Present the material—load the program for students to compile;
- Test the program—run it with sample input data to test the students’ compilation of it by working through a problem or two with them;
- Debug the students’ compilers—walk through the program step by step to find compilation errors;
- Input new data for processing—assign classwork and homework. The students run their new program(s) in class, first, then, at home to check their compilations for efficacy.

The next day, everyone checks their results. For those students with no results or with error messages and given enough time the teacher checks the program for errors, tries to fix them and the students run the debugged program to check its efficacy: Repeat debugging their compilers and programs until all or “enough” students produce acceptable output and receive no more error messages. No one knows what the students whose programs don’t need to be debugged do during this period.

Consider the process known as “solving for the unknown” or “solving for *x*.” To present this method, the teacher writes a specific example on the board at the front (or side or rear) of the room and determines the value of the variable. If her example is “x + 3 = 11,” we subtract 3 from both sides of the equal sign and produce the statement, “x = 8.” To enable this algorithm to handle more complex data, we call another subroutine. Given, “2x + 3 = 11,” we call two subroutines, the subtraction and division subroutines: 1) “subtract 3 from 2x + 3 and from 11 to obtain, “2x = 8”; 2) divide 2x and 8 by 2 to obtain, “x = 4.” For some students, the latter algorithm becomes *the *algorithm for solving problems involving subtraction and division; the former algorithm becomes a special case of the latter (i. e., when the coefficient of x is “1”). They have one program (composed of two routines) to call; the students who don’t realize that the two simple algorithms are special cases of a single algorithm still have two routines to call.

Because everyone’s working memory is tiny, students acquire and store these algorithms in their long-term memories. These algorithms become more complex and more numerous during the school year. To use them, students must first locate them in long-term memory, then choose an appropriate algorithm to apply to a particular problem, third, call it into working memory, and finally apply the algorithm correctly. As they learn more—acquire more algorithms—this process of applying their knowledge becomes more difficult exponentially. To mitigate or cope with this accumulation of algorithms, teachers have three options: do nothing, letting their students figure out how to cope with it; repeat IWY often with small variations, thereby imitating the practice and rehearsal used (successfully) in sports and performance arts; or, introduce new algorithms to automate the choice process, such as, “If ‘2x’ appears as a line in the derivation”, “then, ‘Get ‘division algorithm’ appears as a line in the derivation.” This second level of programming can be as complex and sophisticated as we wish. The question in the classroom is who programs whom? Mathematicians and logicians learned in the twentieth century that most of mathematics can be produced or reproduced, depending on your philosophical perspective, by algorithms from a tiny number of symbols, sentences, and rules. As students journey through their various mathematics classes, subjects and topics in their schools (by “school” I mean grades K-12), some students are more proficient at assembling the routines and subroutines they learn into programs they can apply to a wide spectrum of problems; some students are proficient at collecting these algorithms and identifying appropriate situations for their use; some students are proficient at both processes and some are proficient at neither process. At which of these a given student is proficient appears to be serendipitous or a combination of factors that are difficult to control. Eventually, the education system rewards those students who learn to simulate the behavior and produce the output of computing machines best. The “best” students are identified and their rewards are distributed solely according to the results of such tests. The tests don’t differentiate the processes the students use. The best students continue to accumulate and apply more of the algorithms they are fed, and commercial and academic societies esteem their accomplishment. The best of them become, in effect, carbon-based, biological computers. Or, they become mathematicians, physicists, or artists.