Computing Curricula 2001

-- DRAFT (March 6, 2000) --


Chapter 4
The Expanding Scope of Computing

As we observe in the previous chapter, one of the major changes in computing over the past decade is the enormous broadening of the field. In arguing for establishing a broader view of computing as a profession, Peter Denning has enumerated two dozen professional specialties that fall into the domain of information technology, as shown in Figure 4-1. While it is possible to debate this classification scheme, there is no doubt that the discipline of computing has indeed expanded in recent years.

Figure 4-1. The expanding discipline of computing
Artificial intelligence Human-computer interaction Network engineering
Bioinformatics Information science Performance analysis
Cognitive science Information systems Scientific computing
Computational science Instructional design Software architecture
Computer science Knowledge engineering Software engineering
Database engineering Learning theory System administration
Digital library science Management information systems System security and privacy
Graphics Multimedia design Web service design
    Source: Peter Denning [16]

The expansion of the discipline beyond the traditional boundaries of computer science certainly has a significant impact in the broad domain of computing education. At the same time, the problem of developing a coherent curriculum for the computing field as a whole is an extremely difficult undertaking, given the enormous breadth of specialties within the field. In our early meetings, the CC2001 Task Force decided that viewing computing narrowly would give us the best chance of reaching closure in a reasonable time frame. The earlier curriculum studies took this approach, even as new computing specialties began to appear on the scene. Thus, our initial position was that CC2001, like CC1991 before it, would focus on computer science and computer engineering. Although we recognized the importance of software engineering and information systems as disciplines in their own right, we regarded them as being outside our purview. Professional bodies already exist for those disciplines, and it is certainly important that curriculum design in those specialties be undertaken by people with the relevant expertise. Review committees in several of these areas have recently published new curriculum studies, such as the MSIS 2000 curriculum for information systems [21] and the Software Engineering Body of Knowledge (SWEBOK) definition [38].

During our early presentations of the curriculum outline, however, it became clear that our constituency wanted the CC2001 report to take a broader view. These sentiments were expressed strongly at the 1999 Frontiers in Education (FIE) conference in Puerto Rico, where the audience at the CC2001 panel uniformly supported the idea of incorporating the breadth of the discipline into the curriculum design for the following reasons:

The steering committee of the CC2001 Task Force discussed the question of scope extensively at its meeting of January 2000. The arguments from the respondents at the FIE conference were compelling, but we were nonetheless concerned about expanding our coverage of the computing curriculum to accommodate the much wider vision of the discipline. For one thing, the members of the CC2001 Task Force are not experts in many of the expanded specialty areas and would need to rely on professionals and educators in those domains for curriculum recommendations. A more important concern was whether expanding the curriculum to encompass the broad range of computing disciplines would leave us with any semblance of commonality among the disparate subfields. If the overlap in undergraduate curricula were in fact small, broadening the report might end up reducing its effectiveness for computer science programs without adding much to programs in related areas.

To get a sense of the scale of the overlap among such disciplines as computer science, computer engineering, software engineering, and information systems, the CC2001 Task Force tried to enumerate the set of concept and skills that we would expect undergraduates to know, regardless of discipline. The results of that exercise are show in Figure 4-2. This list is not intended to be comprehensive, but demonstrates clearly that there are many common themes that unite the computing discplines..

We therefore decided -- somewhat late in the process -- to broaden our focus and develop guidelines for computing curricula that cover a wider range of specialties than the earlier curriculum reports from IEEE-CS and ACM. We do not intend to preempt the work of curriculum committees in related disciplines, but will instead incorporate the excellent work that has already been done in those areas. We will continue our work to define a body of knowledge for computer science. We will, however, also look at how this body of knowledge fits into a larger framework that includes other computing disciplines as well.

Figure 4-2. Skills common to all computing disciplines
By the time of graduation, every undergraduate student of computing should:
  • Know what a computer is and understand the functionality of its major components
  • Understand the difference between binary and decimal representations and the effect of representation on numeric precision
  • Be able to use standard computer-based tools, including e-mail, word processing, and spreadsheets
  • Understand the overall mechanics of file systems and directory hierarchies
  • Understand the concept of programming language translation and the distinction between interpreters and compilers
  • Understand the basic functions of an operating system
  • Appreciate the fact that languages and operating systems create a hierarchy of virtual machines
  • Understand the principle of abstraction and its applications to computing
  • Be able to write simple programs in some language
  • Understand fundamental data structures and be able to incorporate them into programs
  • Understand the distinction between procedural and object-oriented programming
  • Be able to apply basic problem-solving techniques
  • Appreciate the concept of an algorithm and the process of algorithmic development
  • Recognize the importance of debugging and be able to use testing and debugging strategies
  • Have some understanding of algorithmic efficiency and the fundamental limits of computing
  • Understand and be able to apply fundamental principles of software engineering
  • Recognize the existence and utility of standards in the computing field
  • Know what a network is and have a general understanding of how it works
  • Understand the structure of the World Wide Web and simple techniques for creating a web page
  • Be familiar with the concepts of event-driven and real-time programming
  • Understand the basics of the client-server model
  • Understand the functionality of databases and information systems
  • Be familiar with the fundamental principles of human-computer interaction
  • Have sufficient familiarity with discrete mathematics to understand basic logic and the importance of formalism
  • Appreciate the range of areas to which computing can be applied
  • Have a rough understanding of the distinctions among the various computing disciplines
  • Understand something about the economics of computing
  • Recognize the ethical, legal, and professional responsibilities associated with work in the computing field


CC2001 Report
DRAFT -- March 6, 2000
This report is a working draft and does not carry
any endorsement from the sponsoring organizations