Code Nation. Michael J. Halvorson
Чтение книги онлайн.
Читать онлайн книгу Code Nation - Michael J. Halvorson страница 23
By the 1970s, many universities were offering Computer Science degrees that included programming instruction as part of the curriculum. But should American K-12 schools also introduce software development concepts? Would an aptitude for programming enhance core instruction in reading, writing, and mathematics? Or would programming simply overcrowd the curriculum, taking away valuable resources from spoken languages, art, science, music, and physical education? Finally, would learning to program really help most people later in life? Or were programming careers just rewards for a narrow slice of the population? In social and economic terms, could one prove that computational thinking was valuable to study?
The learn-to-program movement posed all of these questions, bringing forth a torrent of ideas, proposals, challenges, and products. Although the movement did succeed in introducing a generation to programming fundamentals, it also led to a splintering of educational resources and growing factionalism about which computer languages and platforms were the best. The educational movement’s gradual decline in the mid-1980s had real consequences. It contributed to a decade or more of ambivalence about Computer literacy computer literacy, which devalued America’s technical infrastructure and narrowed the understanding of who should consider computer-related occupations. As the movement continued, it traveled more corporate and commercial paths, becoming a manifestation of the nation’s largest software companies. Today, pundits in the software industry still cannot agree on the best vocational path for creating new programmers, a problem that has vexed organizations like the Association for Computing Machinery (ACM) Association for Computing Machinery (ACM.Association for Computing Machinery (ACM)ACM) since the 1960s.
We shouldn’t be surprised with these mixed outcomes. The learn-to-program movement fits the pattern of many social and educational movements in American history, especially those that advocate for collective action and deep social change. The learn-to-program movement was inspired by charismatic leaders and economic necessity, and it gained momentum due to social, cultural, and economic factors. The movement benefited from waves of enthusiasm connected to the distribution of new PCs, and it also captivated talented writers and entrepreneurs who sought to teach programming fundamentals to average Americans. For a time, the movement seemed to unify the aspirations of many who sought to saturate the nation with computers, creating a shared reading of mythologies about computing and a vision to realize them. And then, in the mid-1980s, the educational underpinnings of the movement began to fracture, dissipating the cause’s energy and impact, until a new wave took shape in more recent times.
3.1Solving Problems with Computers
Computer programming is a catch-all term for problem solving with a computer. The core task of programming is to create a sequence of instructions in a computer language that will automate a given task or find a solution to a problem of interest.
Although early computer programmers devised their solutions by directly manipulating or “setting up” the wiring and circuitry of computers, by the late 1950s most programmers used computer languages to automate problem solving. Low-level languages Low-level languages (such as Machine language machine language and assembly language) provide instructions that are closely related to a computer’s underlying architecture. High-level languages High-level languages (such as FORTRAN and Java Java) provide instructions that are optimized for specific problem-solving requirements. Programs written in a high-level language usually have an additional advantage—they are more easily moved from one computing platform to the next.
In a modern context, writing a program usually entails the use of numerous software development tools, each with a specific purpose. The activity often takes place in a comprehensive Integrated development environments (IDEs) integrated development environment (IDE), where the programmer can design the user interface, enter program code, adjust settings, review documentation, test and debug the application, and interact with online support communities. Present-day examples of an IDE include Microsoft Visual Studio for Windows, Xcode for Apple platforms, and Eclipse for Java development.
In the early years of computing, however, the programming tools for software developers were much more limited. A typical programmer would write out his or her instructions for the computer by hand, and then prepare them for entry into the computer’s memory using input media such as punched cards, punched tape, magnetic tape, or (in later years) keyboard input. In these contexts, programming was a deeply mental exercise that only involved a computer in the later stages. For this reason, a fundamental step in the programming process was planning and research. Engineers worked to solve a computational problem as efficiently as possible and a major concern was always maximizing limited computer resources. Programmers prepared a program for the computer in its near-final form, and only later loaded the routines into memory. Fixing problems that arose often involved a painful process of trial and error.
Figure 3.1Photograph of the punched paper tape for MITS ALTAIR BASIC 1.0, created by Bill Gates, Paul Allen, and Monte Davidoff for the Altair 8800 microcomputer. Dated March 2, 1975.Altair BASICGates, BillAllen, PaulDavidoff, MonteAltair 8800 microcomputer (Courtesy of the Computer History Museum)
A concrete example of this problem-solving approach comes from one of the first commercial programming languages written for microcomputers, the original BASICAltair BASIC BASIC interpreter created for the MITS Altair 8800.Altair 8800 microcomputer MITS Altair 8800 (See Figure 3.1). This program was written by Bill Gates, Paul Allen, and Monte Davidoff while Gates and Davidoff were students at Harvard.
When the Altair was announced in early 1975, there was no commercial software available for the machine. But computing enthusiasts soon realized that if someone could create a BASIC BASIC interpreter for the Altair, then hobbyists could write their own BASIC programs on the computer and get the device to perform non-trivial work. (Chapter 4 explains why BASIC was chosen for this duty, despite its limitations.) Gates and his friends researched the Altair’s specifications, and then they bought a book about the Intel 8080 microprocessor Intel 8080 microprocessor—the electronic “brain” of the Altair. As luck would have it, they had been working for some time with time-sharing systems, and they also knew how to write Assembly language assembly language programs that could make efficient use of a computer’s internal architecture.
To prepare for this project, Gates studied recent versions of the BASIC language (originally created by Kemeny, John John Kemeny and Kurtz, Thomas Thomas Kurtz) and he scrutinized how the language operated. Then he designed an interpreter program that would provide Altair users with essential BASIC features while consuming as little computer memory as possible. At this stage in its development, the Altair 8800 microcomputer Altair microcomputer only had 4K of system memory to work with (a tiny amount). Gates studied the instruction set for the Intel 8080 microprocessor carefully, and he was determined to fit the new BASIC into available memory and leave a little room for the user’s programs.
How did he go about solving this problem?
We know more about Gates’s solution than we do many of his contemporaries because the program that he built became well known, and Gates wrote about his method in two texts that have attracted the attention of journalists. The first comments about his approach were published in September 1975, followed by a longer interview with Susan Lammers about Gates’s coding procedures in 1986.1 I am especially interested in Gates’s advice to new programmers of the Intel 8080 microprocessor, because I am fascinated with stories about how novices learn to program. In this case, we can observe a 19-year-old coding prodigy teaching others how to code.
Gates suggested that the best way to familiarize yourself