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.
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.
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."
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 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 decomposition) 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.
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 programming 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.
"Information literacy" is a term long used by the library science community to denote a competence to find, evaluate, and make use of information 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.
1 And, programming has advanced significantly in recent years. Readers who may have been familiar with programming in the past, but have not stayed current, might be surprised to see how great has been the progress. Achievements such as object-oriented programming and program development environments have combined with graphical user interfaces and browsers to change a person's contact with programming in two significant ways. Furthermore, programming has been greatly simplified because of convenient access to a large reservoir of software. New scripting languages such as PERL, Java, and VBScript allow nonprofessionals to write modest programs that solve their problems.
2 See, for example, Carl C. Boyer and Uta C. Merzbach, 1991, A History of Mathematics, John Wiley and Sons, New York, or Eric Temple Bell, 1991, The Magic of Numbers, Dover Publications, New York.
3 See Adrian C. Barbrook, Christopher J. Howe, Norman Blake, and Peter Robinson. 1998. "The Phylogeny of The Canterbury Tales," Nature, August 27. Based on their adaptation and application of computerized techniques used by biologists to reconstruct evolutionary trees of different species from their DNA, the authors conclude that a number of neglected manuscripts of The Canterbury Tales are close descendants of Chaucer's original version, while many manuscripts often used by scholars are actually more distant relatives.
4 This section is largely adapted (by permission) from Clifford Lynch, director, Coalition for Networked Information (CNI), "Information Literacy and Information Technology Literacy: New Components in the Curriculum for a Digital Culture," position paper submitted to the Committee on Information Technology Literacy, February 1998.