Читать книгу Code Nation - Michael J. Halvorson - Страница 23
2.6The Computing mythologiesbirth of computer science Birth of Computer Science Computer science
ОглавлениеTed Nelson emphasized liberating computer users and fixing software problems at an important moment in the history of computing. Although his ideas struck a different tone than many of the dominant paradigms in corporate computing, we should not try to separate his critiques too dramatically from earlier principles in the history of technology. This is an important caveat as we work to untangle the many strands of intellectual and cultural life that contributed to America’s programming culture in the 1970s and 1980s. To understand why this is so, it is instructive to examine a few related developments that were taking place in the burgeoning discipline of computer science.
In the 1960s, as the Beatles invaded and IBM produced computers that put astronauts into orbit, the discipline of computer science emerged in universities across America. In a sense, this new academic field offered an institutional response to the radical changes that were taking place in the research labs of Cambridge, Massachusetts, and the San Francisco Bay Area. For those not steeped in academic teaching and administration (I have now worked as a college professor for 20 years), it is perhaps helpful to emphasize how daunting it can be to design and administer a new academic program—both for those who want to develop new fields of inquiry in a university setting, and for those outside the university who hope to benefit from a degree program and hire its graduates.
Most of the early digital electronic computers were not built by people that we would call “computer scientists.” If the inventors who worked on computers were connected to universities at all, they came from the departments of Mathematics, Physics, Electrical Engineering, or Psychology. Often the computers were created by partnerships between academic institutions and government agencies. If financial support did come to the universities involved, they spent the money on new computing centers, research labs, student-faculty research teams, or other administrative projects. The first American universities to benefit from this type of support included Harvard, Princeton, Massachusetts Institute of Technology (MIT) Massachusetts Institute of Technology (MIT), Carnegie Mellon, the University of Pennsylvania, and Stanford. Despite the funding for computer-related research, however, actual courses in programming and computational logic were rare. When they did take place, they were distributed widely across the university. For example, a course in Formula translation (FORTRAN) FORTRAN programming might be as likely in a physics department as in the mathematics department or the school of engineering.
During the 1950s, some momentum was established to begin a new academic discipline called “computer science” that might take up the theoretical analysis of computers and formal computing methods. In this context, Computing mythologiesbirth of computer science the Computer science world’s first computer science degree program may have been the Cambridge Diploma in Computer Science, initiated at the University of Cambridge Mathematical Laboratory (UK) in 1953. This is the location where the pioneering Electronic delay storage automatic calculator (EDSAC)stored-program computer EDSAC stored-program computer was first developed, and the new degree program was devoted to understanding and expanding this important system. (See Figure 3.5.) I will introduce the inventors of this computer and the first programming primer written for the system in Chapter 3.
In 1959, Louis Fein published an article in the newly-minted journal Communications of the ACMAssociation for Computing Machinery (ACM) suggesting that computer science should be introduced as an academic discipline wherever universities could support it, including within the U.S.30 According to Fein, the goals of this program should include fostering fundamental research in computing, educating graduate students, and preparing programmers for useful work in science, business, and industry. Universities were encouraged to build their programs by drawing expertise from across the institution, including the departments of Mathematics, Library Science, Economics, Business, Physics, and Engineering. Not long after this invitation, the first American Computer Science degree program was founded at Purdue University in 1962. In the following years, computing courses and new computer science programs were founded in several colleges and universities across the U.S.
Characteristic of the founding years of computer science programs was the leadership of administrators such as Professor Perlis, Alan Alan Perlis of Carnegie Institute of Technology (later Carnegie Mellon University). Perlis managed his institute’s computing center, recruited faculty and graduate students, chaired the Department of Mathematics, and encouraged his colleagues to establish a new curriculum in computer science.31 We first encountered Dr. Perlis in our discussion of the 1968 NATO conference, where Perlis served as a conference organizer and panelist. He is remembered as a seminal figure in computing not only for his publications, but for his effective leadership and skill in negotiating across academic boundaries, a task that he approached with political savvy and a sense of humor. After about 5 years of preparatory work, Carnegie Tech formally established a Ph.D. program in computer science in 1965, and Perlis became its principal director.
Professional Professionalorganizations organizations were also useful in the founding of university computer science programs, and none more so than the ACM. In 1968, the Association for Computing Machinery (ACM) ACM Computing mythologiesbirth of computer science Computer science proposed a formal curriculum for computer science in a report that recommended an appropriate selection of thematic courses. The organization advertised their plan with a series of articles about major concepts and theoretical concepts in the new field.32 Over the next decade, the ACM and its standing committee, the Curriculum Committee on Computer Science, hosted conferences that helped smaller universities adapt the initial recommendations for their specific contexts. Although smaller schools might not have graduate students or large budgets, the interdisciplinary nature of computer science adapted well to the distributed curriculum of many liberal arts colleges, especially those with strengths in writing, mathematics, art, history, music, and philosophy. (Several of the PC industry’s early leaders studied computing in these small college contexts, such as Ted Nelson at Swarthmore College, Cynthia Solomon at Radcliffe College, and Jobs, Steve Steve Jobs and Norton, Peter Peter Norton at Reed College.)
During the 1960s and 1970s, the computer science curriculum accentuated mathematics, including courses in calculus, Boolean algebra, numerical analysis, and statistics. The courses that introduced Cprogramming language programming taught fundamental concepts in high-level languages like Formula translation (FORTRAN) FORTRAN, Algorithmic Language (ALGOL) ALGOL, Pascal Pascal, and C. In later courses, students received an introduction to data structures and algorithms. (COBOLCOBOL and BASIC were offered less often, and remained controversial because of their perceived lack of structure, an issue that will be explored in Chapter 5.) Assembly language Assembly language was often introduced as an aspect of computer architecture. In the years to come, computer science departments expanded their offerings to include courses in operating systems, artificial intelligence, automata, and theories of computation.33
Representative of the emerging computer science faculty is Edsger Dijkstra (1930–2002), a Dutch scientist who started his undergraduate career as a student of theoretical physics but switched fields and completed a doctorate in 1959 on assembly language programming strategies for an early Dutch computer.
Dijkstra Dijkstra, Edsger entered computer science during a time of rapid growth in computer architecture. Riding a surge of interest in computing in the Netherlands, Dijkstra worked as a programmer at the Mathematisch Centrum in Amsterdam from 1952 to 1962. In 1962, Dijkstra accepted an offer to become a professor of Mathematics at the Eindhoven University of Technology, where he developed theoretical concepts in computer science and supervised numerous graduate students. (Many of these students became leading figures in the field in the following years.) Soon Dijkstra weighed in on the looming “crisis” in software reliability Computing mythologiesbirth of computer science Computer science and complexity, and he attended the 1968 engineering conference in Garmisch. To address his concerns, Dijkstra introduced new engineering practices, Algorithmsdevised seminal devised seminal algorithms, and he emphasized the importance of applied mathematics in the new field—all contributions that influenced the subsequent development of computer science. He also advocated for structured programming concepts and famously attacked the BASIC BASIC programming language, publishing a negative article about the language’s lack of structure and the dangers of its “GOTO” keyword. (See Chapter 5.)
In 1984, Dijkstra transferred to the growing Computer Science department at the University of Texas at Austin, where he continued to direct research until his retirement in 1999. Through numerous graduate students and colleagues, Dijkstra guided seminal work in language research, compiler design, concurrent programming, modeling, and operating systems. Throughout his career, the Dutch scientist was a theoretical purist, believing that individual implementations of computing technology were less important than the formal abstract knowledge gained through research.34
Computer science emerged as a new discipline in the natural sciences, and it established a place in the university curriculum. However, few courses were introduced at the high school level, a problem we will return to later in this book. Still, between the early 1960s and the early 1980s, new computer science programs appeared in American colleges and universities at a rate of about 20% annually.35 At the height of the major’s popularity, more than 5% of all U.S. male college students would graduate with a degree in Computer Science or Information Science. Moreover, in 1984, approximately 37% of the U.S. Computer Science graduates were women, indicating widening opportunities in the field, strong demand, and the program’s early success in reaching at least some underrepresented groups.36 If the goal was bolstering the pool of potential software developers for industry, the project seemed like a success.
So how did the U.S. computer industry respond to the new field and its curriculum? Although many employers were positive, there also those who critiqued the way that academics continually gravitated to theoretical principles over practical applications. More a tendency than a hard and fast rule (and therefore fertile ground for myth-making), this inclination was most apparent in corporate contexts where large teams of IT programmers were assigned to build information processing systems. At the time, many working programmers still had no formal education Computing mythologiesbirth of computer science Computer science in computing. They learned on the job through Programming primers programming primers and other printed resources. As a result, these developers were learning to code in relatively narrow contexts.
In the 1960s and 1970s, the conflict between academic computer scientists and professional programmers became severe in some circles, driving a wedge between the two subcultures that remains discernable up to the present. As Nathan Ensmenger has commented, “Computer scientists expressed disdain for professional programmers, and professional programmers responded by accusing computer science of being overly abstract or irrelevant.”37
Partisans in the dispute found ways to deploy stereotypes to heighten the impact of their critiques. In 1968, Hal Sackman was a research associate working for IBM, studying the characteristics of programmers employed in the commercial computing industry. In a report published that year, Sackman wrote: “They [computer science professors] are too busy teaching simon-pure courses in their struggle for academic recognition to pay serious time and attention to the applied work necessary to educate programmers and systems analysts for the real world.”38 By simon-pure, Sackman implied that academics were engaged in teaching computing concepts with an abstract, theoretical propriety. Sackman believed this to be a pretentious commitment to principle that was essentially insincere and disconnected from everyday concerns.
Richard Hamming, a mathematician, information theorist, and Turing Award winner at Bell Labs, also criticized the academic training delivered in his era. In 1968, Hamming repeated a phrase that we have already encountered in the Garmisch conference transcripts:
At present there is a flavor of “game-playing” about many courses in computer science. I hear repeatedly from friends who want to hire good software people that they have found the specialist in computer science is someone they do not want. Their experience is that graduates in our programs seem to be mainly interested in playing games, making fancy programs that really do not work, writing trick programs, etc.39
Recall that J. W. Smith of SDS also made the same accusation against elite programmers whom he saw as “playing games” in their solutions. This is an attack akin to the mythical “ivory tower” trope of academic research, which supposedly rises in isolation above everyday concerns. Computing mythologiesbirth of computer science Computer science
As a partial reply, several academics offered the counter charge that computer science was being unfairly equated with simply teaching programming skills. In fact, they argued, writing computer programs is just one of the proficiencies that Computer Science students need to learn. ACM Past-President Denning, Peter J. Peter J. Denning emphasized this point in his discussion of the attributes of a thorough Computer Science education:
Every practitioner of the discipline [computer science] must be skilled in four basic areas: algorithmic thinking, representation, programming, and design… Even though everyone in the discipline is expected to know these skills, it is a mistake to equate computer science with any one of them, e.g., programming… There are many aspects of the discipline that do not involve programming even though they involve algorithmic thinking, representation, and design.40
This disjuncture between the academy and industry remains an important dynamic of modern computing culture, and it has engendered several myths, with each side accusing the other of infringements and narrow thinking. The fissure has also influenced the learn-to-program movement, because self-taught programmers only seek out some of the skills that they need, and they are often forced to chart their own course through mounds of textbooks, software manuals, programming forums, and boot camps without adequate mentoring or support. On the other hand, many self-taught programmers have done very well without academic support and degree programs, and they feel that the essence of computing relates to learning by doing, forming their own communities, and participating in the dynamic worlds of business and commerce—not learning to climb the ivory tower. Personal computing has been highly influenced by these debates.