Chapter 2 outlines an intellectual framework for FITness. But the specifics of the committee's articulation inevitably lead to concerns about two related issues. First, the role of programming as an essential element of understanding information technology is an issue that has been long debated in the computer science community. And, because the issue may seem like an esoteric diversion for the non-specialist, some words of explanation are appropriate. Second, for many years the library science community has promulgated the notion of information literacy. Because information literacy and fluency with information technology share certain elements, an explicit comparison between the two is warranted.
3.1 The Role of Programming
Algorithmic thinking is a valuable ability for many educated people, yet programming—the act of expressing an algorithm in a specific form to solve a problem—is widely seen as the purview of the specialist. Algorithmic thinking and programming were listed together as a concept in Chapter 2, because they are very closely related forms of the same phenomenon. They are an implied constituent of many of the skills, concepts, and capabilities that embody the intellectual framework of FITness. This central role of programming coupled with the perception that it is the domain of experts mandates a careful explanation of what programming is and why it is so critical to FITness.
3.1.1 What Is Programming?
Many activities have been called programming, but not all of them meet the definition appropriate for FITness. For example, setting a video cassette recorder to tape an upcoming TV show is not programming, despite the fact that it has become a cultural icon for a technological task. Nor is scheduling the fall TV series programming as used here.
Programming, for the purposes of this report, is defined as the construction of a specification (sequence of instructions or program) for solving a problem by an agent other than the programmer. The action entails decomposing the problem into a sequence of steps and specifying them sufficiently precisely, unambiguously, and primitively that the interpreting agent, usually a computer, can effectively realize the intended solution.
Computer programming in a standard programming language meets this definition, of course, but programming arises in many other cases in which the agent is a human and the language is English. Giving directions to soccer players to find a particular field in a city, especially one not identifiable by numeric street / avenue coordinates, constitutes programming by this definition. A player is the agent interpreting or executing the instructions. Recipes with precise quantities of ingredients and precisely described preparation and cooking steps are programs executed by cooks. Toy manufactures write programs, called assembly instructions, for parents to follow, and the Internal Revenue Service (IRS) writes the program for "deductible IRA contributions" that taxpayers follow. (No comment is offered about the comprehensibility of such programs to an individual human being.)
Setting the VCR does not constitute programming by the foregoing definition, because only start / stop times, i.e., data, are being given. The data is input to a hard-wired program in the VCR. (This is parameter specification in technical terminology.) The situation does not call for the user to identify any sequence of steps. Using a phone menu is another instance of data presentation, though setting up the phone menu may constitute programming. One's ability to set a VCR, however, does benefit from using and understanding some of the FITness concepts and capabilities, e.g., dealing with unintended consequences, illustrating the point that components of FITness can translate to other technical settings.
Critical to the programming enterprise is specification that meets the conditions "precisely" and "primitively."
- "Precise" specifications are essential to provide assurance that the agent can determine which actions are to be performed and in what order, so that the intended result is achieved. Avoiding ambiguity is obviously
- crucial, but even seemingly unambiguous commands can fail. For example, "turn right" fails if the soccer players can approach the intersection from either the east or the west, so "turn north" is preferred. Similarly, "beat" and "fold in" are not synonyms for "stir" when combining ingredients, so successful recipes use precise terminology selected with great care. An important non-technology advantage of programming knowledge is that the need for precision can promote precision in everyday communication.
- "Primitive" specifications are essential to provide assurance that the steps to be performed are within the operational repertoire of the executing agent. The programmer may understand the task as "pi times R squared," but if the executing agent doesn't know what "squared" means or how to accomplish it, then the programmer must express the task in more primitive terms, perhaps revising it to "pi times R times R." For many taxpayers, the word "qualifying" in the IRS's instruction phrase "subtract qualifying contributions" would likely fail the test for primitiveness, because they would not readily understand what the term means.
Although programming can be as simple as giving a few commands—preheat oven to 350 degrees, combine dry ingredients, stir in eggs, press into greased loaf pan, bake for 20 minutes—most solutions require the use of conditional instructions and repetition of groups of instructions.
Conditional instructions are those that may or may not be performed, depending on the input to the program. This means that for different inputs, different sub-sequences of instructions will be performed. For example, in Box 3.1, the conditional instructions are presented for determining what happens in a baseball game when a batter walks. Programming with conditional instructions allows for solutions that can respond to different situations, leading to potentially more complex computations. Thus, one sequence of instructions is executed if there is a runner on first base, and a different sequence is executed if there is not.
Repeated instruction execution is a second essential programming construct, since it allows a program, for example, to process any number of data items rather than just a fixed number. Repetition is usually accomplished by enclosing processing instructions in a loop that repeats the processing until the data items are exhausted. Determining when the loop is completed requires a conditional test. Box 3.2 illustrates the use of iteration to calculate a batting average.
FITness-level programming experience implies facility with conditional instructions and repetition constructs. Though there are many types of instructions used by trained programmers, most are built on the
Box 3.1 Conditional Instructions for a Walk
The sentence shown in (a) is a specification in English of how the batter and runners advance when a batter walks in baseball. The indentations group the true and false alternatives of each conditional phrase. Though the solution in (a) is entirely satisfactory, a programmer would notice the redundancy of this direct solution and might reorganize it as shown in (b). The (b) solution tests for the presence of a runner on base and resolves that case, rather than treating the absence and presence of runners as separate cases. Notice that in program (b) a semicolon is used to separate consecutive statements, and parentheses have been added to assist in understanding the programmer's intent.
If no runner is on 1st base then the batter goes to 1st base
otherwise there is a runner on 1st base, so
if no runner is on 2nd base then the runner on 1st base
goes to 2nd base and the batter goes to 1st base
otherwise there are runners on 1st and 2nd, so
if no runner is on 3rd base then the runner on 2nd base
goes to 3rd, the runner on 1st goes to 2nd base
and the batter goes to 1st base
otherwise the bases are loaded, so
the runner on 3rd goes home, the runner on
2nd goes to 3rd, the runner on 1st goes to
2nd, and the batter goes to 1st.
If there is a runner on 1st base then,
(if there is a runner on 2nd base then,
(if there is a runner on 3rd base then
the runner on 3rd goes home);
the runner on 2nd goes to 3rd);
the runner on 1st goes to 2nd);
the batter goes to 1st.
principles of conditional and / or repeated execution. In addition to experience with conditional and repetition constructs, FITness requires experience with at least two other fundamental programming ideas: functional decomposition and functional abstraction. These are the powerful mechanisms used by programmers to solve large problems (functional decom-
Box 3.2 Using Repeated Instruction Execution to Compute DiMaggio's 1950 Batting Average
Figuring a batting average requires that the hits and times at bat for each game be accumulated, so a loop is used to consider the outcome of each game. The processing instructions are conditional on whether DiMaggio played in the game. The "game" is the date value that is changing with each iteration of the loop. Notice that this program assumes DiMaggio batted in at least one game in 1950.
Let the count_of_the_number_of_hits begin at 0.
Let the total_times_at_bat begin at 0.
For each game of the 1950 season beginning with the first,
if DiMaggio played in the game then
add DiMaggio's hits in this game to count_of_the_number_of_hits;
add DiMaggio times at bat in this game to total_times_at_bat;
DiMaggio's batting average is number_of_hits / total_times_at_bat.
position) and to reuse their earlier programming efforts (functional abstraction).
Finally, it is necessary to address the question of what programming language should be used to teach programming. This question has absorbed much energy of computer scientists, but the committee believes that while FITness does imply a basic programming ability, that ability need not be acquired in using a conventional programming language. For example, certain spreadsheet operations and advanced HTML programming for Web pages, among others, demand an understanding of enough programming concepts that they can provide this basic programming experience. Such applications will often yield more personally relevant opportunities to learn programming than programming in a conventional programming language.1
This is not to say that the study of a conventional programming language cannot be sufficiently interesting, exciting, and rewarding for some students. But it is important to emphasize that being an accomplished programmer in a conventional programming language, e.g., C or Fortran or Java, is not sufficient by itself for FITness. Recognizing the centrality of programming, some traditional "information technology literacy" curricula have focused almost exclusively on programming in a conventional programming language. But programming cuts across the FITness spectrum, being essential to some aspects and nearly irrelevant to others.
3.1.2 The Importance of Programming Knowledge
The foregoing section outlines basic programming principles that are as fundamental to algorithmic thinking as multiplication and division are to mathematical thinking. Indeed, the parallel with mathematics is worth pursuing somewhat further.
At one time, arithmetic was considered the realm of specialists—reckoners—who were considered to have spiritual or magical powers.2 Now, everyone learns arithmetic, calculators free us from the tedium of the actual symbol manipulation, and computers perform trillions of arithmetic operations per second. Educated people in industrialized societies give arithmetic little thought—it is an essential of modern life, a tool in their world of quantities.
Analogously, programming, the medium of algorithmic thinking, has traditionally been the realm of specialists. But, as is evident from the discussion above, programming principles are comprehensible and accessible. Universal knowledge of these principles is fundamental to an information society. To apply and exploit information processing technology that creates, manipulates, searches, and displays information, the population must be able to think algorithmically. As with arithmetic, the point is evident to those who think algorithmically, though it may be less obvious to those who do not yet do so.
How programming knowledge and experience can benefit one in an information society is made more explicit in the following three reasons for learning these concepts:
1. Exploiting information technology systems.
Many prepackaged applications can be customized, extended, or enhanced using basic program-
ming concepts. Serious use of spreadsheets requires programming, as does creating a sophisticated Web page. Furthermore, while not every personally relevant application will be available as prepackaged software, a person with a basic knowledge of programming may be able to "script" a solution using some of the large number of software building blocks now available commercially. Construction of complex systems from commercial software using macros, scripting facilities, shell commands, or other compositional tools is one way for non-specialists to use information technology in a personally relevant way.
Such activities constitute programming—developing a series of steps for an agent to solve a problem—where the "primitive operations" can be huge, e.g., whole database searches. In essence, this type of programming gives the non-specialist user the power to exploit tools fully and to transform computing resources so that they more completely meet their needs.
2. Gaining knowledge assumed for capabilities.
Some of the capabilities that are at the heart of FITness rely explicitly or implicitly on programming knowledge. Thus, even if one does not expect to write programs, fully applying the capabilities requires some degree of familiarity with programming. For example, problems arise routinely in computing, even for the most casual computer user, so troubleshooting or "debugging" (a capability listed in Chapter 2) is needed. Yet, figuring out what device, system, or application is failing, and how, presumes at least rudimentary knowledge of how it is constructed and supposed to work. Rebooting the computer, restarting the application, or "jiggling" a connection may ultimately be necessary to solve a problem, but the need for such actions (and the likelihood that they may not solve the problem) can be reduced by understanding the algorithmic nature of the device or system and hence its possible failure modes. Other capabilities that assume programming principles are those related to sustained reasoning and managing complexity.
3. Application to non-information technology problems.
Since programming concepts arise in situations not related to information technology, formal instruction in information technology-related programming can be directly related to such problems. For example, returning to the situation of giving directions to a soccer field, a person who understands programming would likely provide directions that are independent of orientation, include "sentinels" of the form, "If you pass a church, you've gone too far," and are unambiguous, preferring "at the third light" rather than "after three lights." It hardly justifies studying programming, but it is a benefit. An example from an unexpected quarter: English professors
are authenticating Chaucer's tales using programs designed for testing DNA similarity that the professors modified to compare literary texts. 3
In addition, the continual use of abstract thinking in programming can guide and discipline one's approach to problems in a way that has value well beyond the information technology-programming setting. In essence, programming becomes a laboratory for discussing and developing valuable life skills, as well as one element of the foundation for learning about other subjects.
For example, one difference between an algorithm and a program is that the algorithm embodies the basic structural features of the computation independently of the details of implementation, whereas a program commits to a specific set of details to solve a particular problem. Understanding this interrelationship is basic programming, but the principle applies throughout life, as the giving-directions example above suggests. One observes that a solution technique (corresponding to the algorithm) can be used in different problem situations (corresponding to the programs). Inversely, one expects that a successful problem solution embodies a more general process that is independent of the situational specifics. These observations are well-known life experience that most people actually acquire in daily life. But, these observations could be taught in the classroom, since programming provides both a concrete context for discussing the more general point, and a multitude of instances. This is an exciting possibility. Of course, there is no substitute for experience, but the ability to think abstractly, and to understand one's experience using abstractions, can be benefits that arise from an understanding of abstraction in programming.
3.2 The Relationship Between Information Literacy and FITness4
"Information literacy" is a term long used by the library science community to denote a competence to find, evaluate, and make use of infor-
mation appropriately. Information literacy and FITness are interrelated but quite distinct. Information literacy focuses on content and communication: it encompasses authoring, information finding and organization, research, and information analysis, assessment, and evaluation. Content can take many forms: text, images, video, computer simulations, and multimedia interactive works. Content can also serve many purposes: news, art, entertainment, education, research and scholarship, advertising, politics, commerce, and documents and records that structure activities of everyday business and personal life. Information literacy subsumes but goes far beyond the traditional textual literacy that has been considered part of a basic education (the ability to read, write, and critically analyze various forms of primarily textual literary works or personal and business documents). By contrast, FITness focuses on a set of intellectual capabilities, conceptual knowledge, and contemporary skills associated with information technology.
Both information literacy and FITness are essential for individuals to use information technology effectively. Today, the acquisition and shaping of information are increasingly mediated by information technology. Information technology shapes the channels of publication, access, and dissemination of information. The nature of increasingly common digital documents raises new issues in the activities and practices of analysis, assessment, evaluation, and criticism. Much of today's information technology and supporting infrastructure is intended to enable communication, information finding, information access, and information delivery.
As it relates to FITness, information literacy implies that the skills and intellectual capabilities usually associated with traditional textual literacy—authoring and critical and analytic reading (including the assessment of purpose, bias, accuracy, and quality)—must be extended to the full range of visual (image and video) and multimedia communication genres. This includes an appreciation of interactive media, and also a recognition of the fluid nature of many digital forms, plus an understanding of the growing ability to use computers to edit or even fabricate what have traditionally been viewed as factual records of events (such as images).
Furthermore, as computer-based searching becomes increasingly central to information finding and research, FITness will require an understanding of how searching systems work, and of the interplay between indexing techniques, descriptive practices and organizational systems (cataloging, abstracting, indexing, rating), searching, and information accessibility, visibility, and impact. One important point is the limitations of both digital information resources (much material will not be available in digital form for the foreseeable future) and also of various searching techniques.
FITness also involves an understanding of information resources and how they are mapped into technological and economic structures, and how these resources interrelate. In essence, individuals need to form a conceptual map of information space. For example, they need to be guided in developing mental models of the relationships among documents on the Internet and in proprietary databases, library collections, and the like as a basis for learning to evaluate what information sources are likely to be most appropriate for their various information needs.