Computing Applications ACM at 60: a look back in time

The ACM and IEEE-CS Guidelines For Undergraduate CS Education

ACM curriculum recommendations have been instrumental over the last 40 years in defining what is taught at educational institutions around the world.
  1. Introduction
  2. Curriculum 68 and 78
  3. Computing Curricula 1991 and 2001
  4. Conclusion
  5. References
  6. Author
  7. Footnotes
  8. Tables

ACM has provided curricular recommendations for computer science (CS) since its preliminary report in 1965.* There have been four iterations of its guidelines: 1968,* 1978,* 1991,* and 2001.* The field is still rapidly changing, but there is also some consensus about its core. Nonetheless, the curricular guidelines display significant variation in focus and emphasis. Two persistent issues have been the role of mathematics and the importance of programming in the introductory courses. Another has been the importance of new application areas. This article reviews the history of these curricular guidelines.

There were several studies of computing and curricula in the early 1960s, including ones by the National Academy of Sciences,* the Mathematical Association of America,* and Tompkins.* These studies addressed the definition of computer science, academic computing needs, computing in the mathematics curriculum, and the name of computing programs. The 1963 ACM National Conference held a panel discussion on CS curricula, leading to papers in a curriculum issue of CACM, sponsored by the ACM Education Committee and edited by Bernard Galler. In that issue, Keenan [7] characterized the central subject matter of computer science as “… the study of the organizational and structural properties of systems, arrays of symbols and mechanical languages which find their application in the processing and communication of information ….”

He listed four areas with which computer science is concerned: organization of equipment constituting an information processing system (including both people and machines); software systems that control and communicate with equipment; procedures and theories for specifying computational processes; and applications of all of these to other disciplines.

Keenan also described five areas of CS education: general education, programmer training, computing for scientists, systems programming, and computer science for researchers and teachers. The paper does not describe curricula, but is followed by descriptions of introductory CS courses by Bruce Arden (Michigan) [1] and by Alan Perlis (Carnegie Institute of Technology) [8]. Each course is ambitious, addressing algorithms, algorithmic languages, machines—both abstract and concrete—and the problems of implementing algorithms in programs that run on machines with finite representations of numbers.

The first ACM curricular recommendations came from the Curriculum Committee on Computer Science (C3S) in 1965: “An undergraduate program in computer science: preliminary recommendations.”* The group began as a subcommittee of the Education Committee in 1962 and became an independent entity two years later. The report’s definition of computer science abstracts away some of the detail in Keenan’s definition: “Computer science is concerned with information in the same sense that physics is concerned with energy; it is devoted to the representation, storage, manipulation, and presentation of information in an environment permitting automatic information systems.”

Its proposed curriculum was intended to prepare students for graduate work either in CS or in other fields, for systems programming, and for applications programming, and to this end it had a small core and a set of electives (see Table 1). This core was supplemented by a five-course math requirement (calculus, analysis, linear algebra), with more math highly recommended, and with electives in related fields such as electronics.

Numerical computation is a major part of this curriculum, although it is the topic of only one of the five basic courses, which generally make algorithmic thinking central, as do the Perlis and Arden introductions. The elective “constructive logic” course includes part of what we now call “discrete mathematics,” that is, sets, propositional and predicate logic, and algorithms.

Back to Top

Curriculum 68 and 78

The Curriculum 68 (C68) report noted the “preliminary recommendations” addressed the definition and justification of CS as a discipline, and that there was continuing debate about the name of the field.* The report accepted the name “computer science” and organized the subject into three areas, reflecting the Keenan definition: “Information structures and processes” included much of the core of CS now—data structures, programming languages, computational models; “Information processing systems” covered the gamut from low-level hardware to major system components and operating systems; and “Methodologies” included major application areas such as AI, numerical methods, graphics, and simulation.

Like the preliminary report, C68 emphasized algorithmic thinking in its first course, saying the notion of an algorithm should be clearly distinguished from that of a program. The report called attention to two courses not included in the earlier report. One was computer organization, now separated from assembly-language programming. Although the report does not describe it in this way, the effect of the separation is to permit the treatment of both software and hardware as the means of implementing algorithms.

The other particularly notable basic course was on discrete structures. It included some of what was covered in the earlier constructive logic course together with graph theory. More importantly, it was repositioned as a required course. Table 2 contains the full list of courses in the curriculum.

C68 requirements had a strong mathematical emphasis with traditional courses in mathematical analysis, its several courses on numerical computation, and electives in formal languages and computation theory. Its orientation appeared to reflect the origin of many CS programs in departments of mathematics or engineering rather than in business programs. A 1968 report in Datamation (vol. 14, no. 5, 114–116) commented, “The committee’s viewpoint may be entirely correct…. Freezing out the business administration student seems somewhat arbitrary, however.”

Pollack’s survey of the state of CS in 1982 [9] describes C68 as having “a dichotomizing aspect: Its basically mathematical orientation sharpened its contrast with more pragmatic alternatives.” He added that not only was there continuing debate about the appropriate introductory course; the report was also criticized for downplaying application areas and professional preparation in fields like commercial data processing.

In 1971, Gerald Engel surveyed 26 institutions offering a Ph.D. in computer or information science to learn how much of C68 they had implemented [5]. He reported that 22–25 departments offered each of the eight required courses or a similar one, or had such a course in another department (for example, discrete structures in a math department). Advanced courses offered by the fewest programs were information retrieval, information processing systems, graphics, simulation, sequential machines, and hybrid computing.

Only 14 of the institutions had undergraduate programs; all offered the first basic course, 12 offered the second, and 10 offered programming languages. Seven to nine programs offered each of the remaining core courses. Of the other courses in Table 2, I5, I6, I8 were offered by four programs, and the rest, by one or two each. To judge from this one small sample, overall programs matched the curriculum surprisingly well, but less well at the undergraduate level, perhaps because much of the material was not yet considered suited to that level.

Curriculum 78. The C3S committee met in 1974 to consider revisions of its curriculum, and preliminary reports appeared in the SIGCSE Bulletin later that year. In 1977, it published “A Survey of the Literature in Computer Science Education since Curriculum 68.”* Engel’s report on the meeting [6] lists some areas of discussion, and comments, “Of note was agreement that basic computer science is fundamentally the study of programming languages to implement data structures in the environment of hardware.” Although one should not read too much into a single sentence, it is noteworthy that programming languages are at the center here and that algorithms are not mentioned. He goes on to say the rest of the undergraduate program becomes “tracks off of this `heart’,” and that meeting participants agreed that “no mathematics beyond high school was required for this heart.”

Curriculum 78 (C78)* had an eight-course core: two on programming; three on computer systems, organization, and architecture; data structures and algorithms, file processing, and programming languages. The complete list of required and elective courses is in Table 2. The report lists six objectives of a CS major. Three include the ability to write programs, assess them, and understanding how to use appropriate tools. The other objectives are to understand basic computer architecture, work alone or in a team, and be able to pursue further education in the field.

Where C68 emphasized algorithms, information structures and models of computation in its core, C78 emphasized programming skills and its core included an application area—file processing. Many of the upper-level courses remained similar, and the new curriculum was notable in recommending a course on computers and society. Another prominent feature was that although the mathematics courses they required were similar, the discrete-structures course moved from the CS core to a more advanced mathematics course in C78, one that was a prerequisite for only a single advanced course on automata and computability. In fact, not only was no math course required for the core, as Engel had said, the only other CS courses that depended on any of them were the two on numerical methods. This lack of connection between mathematics and the computing curriculum was criticized by Ralston and Shaw [10], who argued for a two-year, discrete-math sequence to accompany the core.

Back to Top

Computing Curricula 1991 and 2001

Curricular discussions during the 1980s took two directions. In 1981, the IEEE Computer Society and the ACM started what became the Computer Science Accreditation Board (CSAB), charged with establishing requirements for professional certification in computer science that were similar to those for computer engineering specified by ABET, Inc. (formerly the Accreditation Board for Engineering and Technology). Its requirements included about a year-and-a-half in CS, a year of science and mathematics, and addressed matters such as laboratories and number of faculty. The first CSAB accreditations were made in 1986.

During that same time there were also criticisms of C78, most notably by a group of faculty from liberal-arts colleges funded by the Alfred P. Sloan Foundation. The group, now known as the Liberal Arts Computer Science (LACS) consortium, met in 1984 and 1985 and in 1986 published its model curriculum. It argued that C78 was obsolete, having failed “to explicate adequately the principles that underlie the discipline,” and indeed, to have failed to incorporate these principles except in advanced electives. It also sought to define a relatively small curriculum that could be offered by a small department.

The theme of this model curriculum was that computer science is science. It proposed a six-course core: CS1-2 (algorithms, programming, data structures) computer organization, algorithms, theory of computation, and programming languages, along with three electives, an early course on discrete math, and two more math courses. Its first two courses closely resembled the 1984–1985 revised recommendations for those courses from the ACM Curriculum Task Forces for CS1 and for CS2* with one exception: it called for CS2 to provide an overview of computer science to orient students toward further study.

Computing Curricula 1991 (CC91). In 1985, with the cooperation of the IEEE Computer Society, ACM formed a Task Force on the Core of Computer Science charged with “describ[ing] its intellectual substance in a new and compelling way,” one that would present it as more than programming. Its 1988 report, “Computing as a Discipline,” was intended to facilitate curricular discussion; a condensed version appeared in 1989 [3].

The report, addressing both CS and computer engineering, sought a definition of the field that would be concrete, generally comprehensible, and a “rallying point;” one that would reflect its historical origins and present its fundamental questions and accomplishments: “The discipline of computing is the systematic study of algorithmic processes that describe and transform information: their theory, analysis, design, efficiency, implementation, and application. The fundamental question underlying all of computing is, “`What can be (efficiently) automated?'”

The report elaborated three paradigms—theory, abstraction (modeling), and design—that play a role in all areas of the discipline. It also enumerated nine subareas:

  • Algorithms and data structures;
  • Programming languages;
  • Architecture;
  • Numerical and symbolic computation;
  • Operating systems;
  • Software methodology and engineering;
  • Databases and information retrieval;
  • Artificial intelligence and robotics; and
  • Human-computer interaction.

The CC91 report adopted this two-dimensional organization, which has the virtue of permitting a relatively small set of courses to address core topics and to treat them both theoretically and practically. Its opening section listed the influences of previous reports and its responses. Among others, these included:

“Computing as a discipline:” A breadth-first approach in introductory courses.
CC91 promotes breadth in several alternative ways, and has broader goals than that report.

1983 IEEE-CS model curriculum for computer science and engineering: organization into small units; sample implementations meeting accreditation guidelines.
CC91 addresses a broader range of institutions and programs.

Curriculum 78: prominent role of programming, detailed course descriptions; course on computers in society.
CC91 has more current subject matter, treats programming differently, and better integrates theory, abstraction, design, and the social context of computing.

The task of defining a core of a broad computer science curriculum is: to identify what every student of computer science needs to know— the most important concepts and skills, the ones essential to enabling a student to understand the discipline and continue to become educated after graduation.

CC91 had 11 subject areas (adding a programming-language introduction and social, ethical, and professional issues to the 1988 report). It had three “processes” (the CC91 term for the 1988 report’s) and it listed 12 recurring concepts that would help to unify a curriculum (some examples are binding, large-problem complexity, efficiency, abstraction levels, security). It broke each of the subject areas into core knowledge units (KUs), labeling each with some of the recurring concepts. The core was composed of 56 KUs, including an optional one to introduce a programming language, requiring 283 lecture hours. The distribution of KUs among the areas varied from 2 to 12. CC91 also called for a half-year of mathematics, including discrete math and calculus. There was also a list of advanced elective topics, but the analysis into KUs didn’t extend to the electives even when a title matched one of the nine areas.

The report presented 12 sample sets of courses to illustrate ways of composing the KUs—in computer science, computer engineering, each with a breadth-first variant, liberal-arts programs, and some others. Although these were quite thoroughly worked out, they proved to be a weak point. In particular, despite the call for breadth in the 1988 report, the LACS report, and CC91, few breadth-first programs emerged.

The CC91 program was relatively heavy for a liberal arts curriculum, and in 1996 the LACS group revised its model* to adapt CC91. It had a 240-hour core, replaced its earlier course on computational theory by a plan to treat theory as a recurring theme, and added more formal laboratories to its CS1-2, as the IEEE-CS and ACM proposals had recommended. It reduced the CC91 core to 240 hours largely by giving less attention to architecture, operating systems, and software methodology, though it devoted more time to algorithms, including parallel computation.

Computer Curricula (CC2001). In view of the broadening scope of computing, the ACM and IEEE-CS Computing Curricula project initiated in 1998 planned a multi-volume set of curricula, five of which are now drafted or complete: Computer Engineering, Computer Science, Information Systems, Information Technology, and Software Engineering, and an overview report.

The CC2001 task force surveyed about 150 CS departments and found that CC91 appeared less influential than its predecessors for several reasons: many people found KUs less useful than actual course designs—the survey found that many schools still used the C78 courses; they wanted a smaller set of core topics; they wanted help with accreditation.

Among its design principles, CC2001 retained the theory-abstraction-design triad, embraced lifelong learning, sought to identify fundamental skills and knowledge while keeping the core as small as possible, and was intended to offer course-design guidance.

CC2001 divided CS into 14 areas, similar to those of CC91, though rearranged and extended. It moved discrete structures from mathematics into the CS core (thereby returning to the C68 model). It added areas to the core that had become central in the previous decade, such as networks, graphics, and human-computer interaction, though some of these contributed only a few core hours. Its areas were broken into topics (like KUs), not all of which were in the required core of 280 course hours. Its 43 hours in discrete mathematics (a separate course in CC91) gave it the same number of core units as CC91 but one-eighth fewer core hours. Since CC2001 analyzed its areas into topics that went beyond the core and did not propose that basic courses comprise solely core topics, it could help with course design more than CC91 did.

CC2001 has been praised for moving discrete mathematics into its core, in one or perhaps two courses. It has also been criticized, however, for its omission of topics that would draw on or reinforce the mathematics material; for example, in programming languages [2]. Available as part of the CC2001 report is its outline of multiple introductory sequences: imperative-first, objects-first, functional-first, breadth-first, algorithms-first, and hardware-first. Each shows how to partition important elementary topics into two- and three-course introductions. To date, some variation of one of the first two, closest to the traditional CS1-2, has been most common, along with a minority committed to functional-first. The difficulty in implementing a breadth-first introduction, in addition to a scarcity of textbooks, is that it requires some change to most of the curriculum and is thus difficult to introduce.

Back to Top


C68 and C78 represent an initiative and a reaction, and CC91 and CC2001 are similarly related. In each case the first of the pair defined an approach to the CS curriculum based on reflection on the field—C68 had to establish the first comprehensive curriculum, and CC91 followed an attempt to characterize the discipline. C78 was shaped by reactions against the mathematical emphasis of C68 and gave more weight to professional education and to applications. CC2001 remedied what educators saw as insufficient attention to course outlines in CC91, and modified its program to include the growth of areas like networking that had become fundamental to the field.

C78 helped to establish the “computing as programming” view that its successors have attempted to replace, with only modest success. CC2001 has a core program that is arguably more fragmented than CC91. Although both have some core areas with only two or three topics and a correspondingly small time alloted to them, CC2001 has its topics spread over more areas than the previous curriculum by virtue of its taking a broader view of what is central to computer science.

C68 had a significant influence on early programs. The influence of later guidelines is not so clear. C78 was arguably as much a reflection of how curricula had developed as it was an influence on them. CC91 proposed to found curricula on basic principles, and it led to some attempts to offer broad introductory courses, but what survived in CC2001 was the notion of constructing a curriculum from a set of small units that could be composed into courses in several ways. The latter emphasized concrete course models more than CC91 did, and proposed ways to integrate traditional and new areas in some of them.

From the time of the first ACM curriculum, there have been multiple curricular threads, not all addressed by the early curricula, as C68 commentators noted. The recent CC2005 Overview Report* addresses this diversity, maps the terrain, and places computer science, computer engineering, software engineering, information systems, and information technology within it. It briefly characterizes the shared identity of these programs. As it notes, many of the shared elements vary with the discipline, such as “essential and foundational underpinings,” whether they lie in formal theory or in practice. Among the more concrete elements is an understanding of programming—algorithms and data structures, programming skills, basic understanding of hardware, and software design principles; and an understanding of what computing systems can and cannot do, both in principle and in current technology.

CC2005 does not propose a core curriculum to be shared by all of its programs, and that may not be possible in view of their diversity, though worth considering. As computing continues to broaden in scope, however, there will be a continuing need to identify the common elements. A recent article by Wing [12] proposes “computational thinking” as an attitude and set of skills that are universally applicable, and this notion might help to shape a curricular core of the computing disciplines.

The task of defining a core of a broad computer science curriculum is similar: to identify what every student of computer science needs to know—the most important concepts and skills, the ones essential to enabling a student to understand the discipline and continue to become educated after graduation. CC91 attempted to address this task with its three processes and 12 recurring concepts, but these are too many and the latter represent a mixture of many different levels.

The liberal-arts model CS curricula, including the one issued in 2004,* have been designed to be consistent with current ACM curricular guidelines. They have a small core with considerable depth in discrete math, algorithms, architecture, and programming languages, and with application areas left for elective choice. There have also been more radical proposals for a very small footprint for CS [4]. It would be interesting to see if the next ACM curriculum could identify a small model for its core, adding advanced courses and courses on applications as needed. A curriculum focused sharply on a small number of fundamental concepts could also be an attractive basis for the variety of interdisciplinary programs that are now emerging.

This article and additional material is available at

Back to Top

Back to Top

Back to Top

Back to Top


T1 Table 1. Curriculum of the “Preliminary Report.”

T2 Table 2. Curriculum 68 and Curriculum 78.

Back to top

    1. Arden, B.W. On introducing digital computing, Commun. ACM 7, 4 (Apr. 1964), 212–214;

    2. Bruce, K.A. Curriculum 2001 draft found lacking in programming languages, Programming Languages Knowledge Area Focus Group for Curricula 2001; html,2001.

    3. Denning, P.J., Comer, D.E., Gries, D., Mulder, M.C., Tucker, A.B., Turner, J.A., and Young, P.R. Computing as a discipline. Commun. ACM 32, 1 (Jan. 1989), 9–23;

    4. Downey, A.B. and Stein, L.A. Designing a small-footprint curriculum in computer science. In Proceedings of the 36th ASEE/IEEE Frontiers in Education Conference (Oct. 2006); 1689.pdf.

    5. Engel, G.L. Input from ACM Curriculum Committee on Computer Science. ACM SIGCSE Bulletin 3, 4 (Dec. 1971), 30–39;

    6. Engel, G.L. Initial report: The revision of "Curriculum 68." ACMIGCSE Bulletin 6, 3 (Sept. 1974), 79–80; 988881.988895.

    7. Keenan, T.A. Computers and education. Commun. ACM 7, 4 (Apr. 1964), 205–209;

    8. Perlis, A.J. Programming of digital computers. Commun. ACM 7, 4 (Apr. 1964), 210–211;

    9. Pollack, S.V. The development of computer science. Studies in Computer Science. S.V. Pollack, Ed. MAA Studies in Mathematics 22, 1–51, Mathematical Association of America, Washington, D.C., 1982. 11.

    10. Ralston, A. and Shaw, M. Curriculum `78—Is computer science really that unmathematical? Commun. ACM 23, 2 (Feb.1980), 67–70;

    11. Tompkins, H.E. Computer education. Advances in Computers. F.L. Alt and M. Rubinoff, Eds. Academic Press, NY, 1963.

    12. Wing, J.M. Computational thinking. Commun. ACM 49, 3 (Mar. 2006), 33–35;

    * reference appears in Appendix II at

Join the Discussion (0)

Become a Member or Sign In to Post a Comment

The Latest from CACM

Shape the Future of Computing

ACM encourages its members to take a direct hand in shaping the future of the association. There are more ways than ever to get involved.

Get Involved

Communications of the ACM (CACM) is now a fully Open Access publication.

By opening CACM to the world, we hope to increase engagement among the broader computer science community and encourage non-members to discover the rich resources ACM has to offer.

Learn More