<#77#>And as imagination bodies forth
The forms of things to unknown, and the poet's pen
Turns them to shapes, and gives to airy nothing
A local habitation and a name.
<#77#> ---Shakespeare, <#80#>A Midsummer Night's Dream(v(i))<#80#>
Our claim that everyone programs or should learn to program might appear
strange considering that, at first glance, fewer and fewer people seem to
program these days. Instead, the majority of people use application
packages, which are typically tailored to a particular task. Even
programmers in certain sub-disciplines are nowadays using ``program
generators,'' packages that create programs from, say, business rules or
law cases. So why should anyone learn to program?
The answer consists of two parts. First, it is indeed true that <#83#>traditional forms of programming<#83#> are useful for just a few people. But,
programming <#84#>as we the authors understand it<#84#> is useful for everyone:
the administrative secretary who uses spreadsheets as well as the high-tech
programmer. In other words, we have a broader notion of programming in mind
than the traditional one. We explain our notion in a moment. Second, we
teach our idea of programming with a technology that is based on the
principle of minimal intrusion. Hence, our notion of programming teaches
problem-analysis and problem-solving skills <#85#>without<#85#> imposing the
overhead of traditional programming notations and tools.
To get a better understanding of modern programming, take a closer look at
spreadsheets, one of today's popular application packages. A user enters
formulas into a spreadsheet. The formulas describe how a cell A depends
on another cell B. Then, as the user enters a number into B, the
spreadsheet automatically calculates the contents of cell A. For
complicated spreadsheets, a cell may depend on many other cells, not just
one.
Other application packages require similar activities. Consider word
processors and style sheets. A style sheet specifies how to create a (part
of a) document from yet-to-be-determined words or sentences. When someone
provides specific words and a style sheet, the word processor creates the
document by replacing names in the style sheet with specific
words. Similarly, someone who conducts a Web search may wish to specify
what words to look for, what words should be next to each other, and what
words should not occur in the page. In this case, the output depends on the
search engine's cache of Web pages and the user's search expression.
Finally, using a program generator in many ways relies on the same skills
as those necessary for application packages. A program generator creates a
program in a traditional programming language, such as C++ or Java, from
high-level descriptions, such as business rules or scientific laws. Such
rules typically relate quantities, sales, and inventory records and thus
specify computations. The other parts of the program, especially how it
interacts with a user and how it stores data in the computer's disk,
are generated with little or no human intervention.
All of these activities instruct some computer software to do something for
us. Some use scientific notation, some may use stylized English, some use a
concrete programming notation. All of them are some form of programming.
The essence of these activities boils down to two concepts:
- relating one quantity to another quantity, and
- evaluating a relationship by substituting values for names.
Indeed, the two concepts characterize programming at the lowest level, the
computer's native language, and in a modern fashionable language such as
Java. A program relates its inputs to outputs; and, when a program is used
for specific inputs, the evaluation substitutes concrete values for names.
No one can predict what kind of application packages will exist in five or
ten years from now. But application packages will continue to require some
form of programming. To prepare students for these kinds of programming
activities, schools can either force them to study algebra, which is the
mathematical foundation of programming or expose them to some form of
programming. Using modern programming languages and environments, schools
can do the latter, they can do it effectively, and they can make algebra
fun.