We program at a particular level of abstraction, which is slowly becoming higher and higher. Programs that do the same thing can be written in different ways. Some ways are more efficient than others. Often it is simple to get a rough estimate of the efficiency of a program. Recursion can simplify definitions and programming specifications.
Recursion is a powerful abstraction mechanism.
We program at higher levels of abstraction by reusing what has already been developed and placed in libraries and by building reusable components of our own. We can translate a rough idea for a program into running code. Along the way we increasingly become more formal. Students need to begin to learn important lasting concepts that go beyond learning a single language, and they need to begin to see how what they are learning fits into a broader context. To this end, the outline below includes parenthetical notes about where each of the components can be mentioned and illustrated by the programming concept being taught.