Computing Curricula 2001

-- DRAFT (March 6, 2000) --


Chapter 6
Defining a Curriculum

In order to develop a curriculum, it is essential to develop a detailed understanding of the knowledge encompassed by that discipline. As we note in Chapter 4, the CC2001 Task Force has decided that this accounting must be broad enough to accommodate the range of subdisciplines that come under the general rubric of computing. For areas such as information systems and software engineering, our task force can rely on recent reports issued by curriculum committees in those areas [21, 38]. For computer science and computer engineering, the CC2001 Task Force has the central responsibility for developing that updated body of knowledge. To this end, we have identified a set of knowledge areas and appointed knowledge area focus groups to define the body of knowledge for that area. This process is described in more detail in the section entitled "Defining the body of knowledge" below.

Although the definition of the body of knowledge represents a central task of the Computing Curricula 2001 project, it is not sufficient on its own. In some ways, viewing the entire computing curriculum as a body of knowledge misses the forest for the trees. To develop a more complete vision of the curriculum and its implementation, it is important to adopt a more holistic perspective, in which broader issues are allowed to cut across the lines represented by individual knowledge areas. The knowledge areas, after all, reflect the boundaries of established subdisciplines. Using these boundaries as the organizing principle for the curriculum has the conservative structure of reinforcing the existing structure. New curricular ideas and pedagogical strategies often emerge from explorations that transcend those disciplinary boundaries.

To encourage the development of a holistic vision of the curriculum, the CC2001 Task Force established six pedagogy focus groups, with the following areas of concern:

  1. Introductory topics and courses
  2. Supporting topics and courses
  3. The computing core
  4. Professional practices
  5. Advanced study and undergraduate research
  6. Computing across curricula

The charter for each of these groups appears later in this chapter, and the final reports from each group will -- in later drafts -- constitute the next six chapters of the report.

6.1 Defining the body of knowledge

Computing Curricula 1991 organized the undergraduate curriculum by dividing it into nine knowledge areas. Over the last decade, the discipline of computing has grown substantially, to the point that the nine areas identified by Computing Curricula 1991 are no longer sufficient to encompass the knowledge that students are likely to encounter in an undergraduate curriculum. After experimenting with several organizational structures, the CC2001 Task Force has defined an expanded set of 14 knowledge areas, as shown in Figure 6-1:

Figure 6-1. Knowledge areas in Computing Curricula 2001
0.Discrete Structures (DS)
1.Programming Fundamentals (PF)
2.Algorithms and Complexity (AL)
3.Programming Languages (PL)
4.Architecture (AR)
5.Operating Systems (OS)
6.Human-Computer Interaction (HC)
7.Graphics, Visualization, and Multimedia (GR)
8.Intelligent Systems (IS)
9.Information Management (IM)
10.Net-Centric Computing (NC)
11.Software Engineering (SE)
12.Computational Science (CN)
13.Social, Ethical, and Professional Issues (SP)

This revised list of knowledge areas differs from that used in Computing Curricula 1991 in the following ways:

After making a preliminary identification of the knowledge areas in early 1999, the Curriculum 2001 task force appointed a knowledge area focus group to take responsibility for each of the areas. The charge to each knowledge area focus group appears in Figure 6-2. The members of each focus group appear in the acknowledgments in Chapter 14.

Figure 6-2. Charter for the Knowledge Area Focus Groups
Each focus group assigned to a specific focus area will have a chair and preferably a co-chair. The chair and co-chair of each focus area must be experts in the assigned area. Each focus group may invite up to five additional members. Each focus group will:
  1. Review and firm up the scope of the focus area drafted by the joint task force members.

  2. Finalize the list of individual topics associated with the focus area.

  3. Comment on the three processes -- theory, abstraction, and design -- as well as the breadth and depth issues documented in Computing Curricula 1991.

  4. Decide the required mathematics and physical sciences.

  5. Highlight changes compared to Computing Curricula 1991, if applicable.

  6. Separate the topics into two levels, corresponding to core topics required of all students in computing and more advanced electives.

  7. Suggest model courses and the corresponding lecture/lab hours, with specific course objectives and expected learning outcome, by indicating which topics are included in each course.

The knowledge area focus groups deliberated over the spring of 1999 and submitted preliminary reports to the CC2001 Task Force. The Computing Curricula 1991 steering committee reviewed these reports at its meeting in June 1999. The review process at that meeting had three goals:

  1. To monitor the work of each focus group and make sure that it had fulfilled its charge. If the steering committee could identify omissions in the report, the focus groups were asked to go back and resupply the missing material.

  2. To review the set of knowledge units identified with each area and assess whether those knowledge units provide adequate coverage of the area. Once again, if the steering committee found problems in the focus group report, it asked the focus group to provide any necessary updates.

  3. To determine which knowledge units in each area would be part of the required core. Because each knowledge area focus group is composed of experts in that area, the individuals are likely to have a strong predisposition to be proponents for that area. As a result, the Curriculum 2001 task force expected each knowledge area group to identify more core topics than could be justified under our minimalist definition of the core. As noted in Chapter 5, the steering committee had agreed that "the core will consist of those topics for which there is a broad consensus that the topic is essential to undergraduate degrees. . . ." If the steering committee itself could not find such a consensus in support of a topic, we eliminated it from the core.
After some additional negotiations with the focus groups, the Curriculum 2001 task force has identified a set of topics to go with each of the 14 areas. These topics are shown in Figure 6-3.

Figure 6-3. Tentative list of topics in the computer science body of knowledge

DS. Discrete Structures
   DS1. Functions, relations, and sets
   DS2. Basic logic
   DS3. Proof techniques
   DS4. Basics of counting
   DS5. Graphs and trees

PF. Programming Fundamentals
   PF1. Algorithms and problem-solving
   PF2. Fundamental programming constructs
   PF3. Basic data structures
   PF4. Recursion
   PF5. Abstract data types
   PF6. Object-oriented programming
   PF7. Event-driven and concurrent programming
   PF8. Using modern APIs

AL. Algorithms and Complexity
   AL1. Basic algorithmic analysis
   AL2. Algorithmic strategies
   AL3. Fundamental computing algorithms
   AL4. Distributed algorithms
   AL5. Basic computability theory
   AL6. The complexity classes P and NP
   AL7. Automata theory
   AL8. Advanced algorithmic analysis
   AL9. Cryptographic algorithms
   AL10. Geometric algorithms

PL. Programming Languages
   PL1. History and overview of programming languages
   PL2. Virtual machines
   PL3. Introduction to language translation
   PL4. Language translation systems
   PL5. Type systems
   PL6. Models of execution control
   PL7. Declaration, modularity, and storage management
   PL8. Programming language semantics
   PL9. Functional programming paradigms
   PL10. Object-oriented programming paradigms
   PL11. Language-based constructs for parallelism

AR. Architecture
   AR1. Digital logic and digital systems
   AR2. Machine level representation of data
   AR3. Assembly level machine organization
   AR4. Memory system organization
   AR5. I/O and communication
   AR6. CPU implementation

OS. Operating Systems
   OS1. Operating system principles
   OS2. Concurrency
   OS3. Scheduling and dispatch
   OS4. Virtual memory
   OS5. Device management
   OS6. Security and protection
   OS7. File systems and naming
   OS8. Real-time systems

HC. Human-Computer Interaction
   HC1. Principles of HCI
   HC2. Modeling the user
   HC3. Interaction
   HC4. Window management system design
   HC5. Help systems
   HC6. Evaluation techniques
   HC7. Computer-supported collaborative work

GR. Graphics
   GR1. Graphic systems
   GR2. Fundamental techniques in graphics
   GR3. Basic rendering
   GR4. Basic geometric modeling
   GR5. Visualization
   GR6. Virtual reality
   GR7. Computer animation
   GR8. Advanced rendering
   GR9. Advanced geometric modeling
   GR10. Multimedia data technologies
   GR11. Compression and decompression
   GR12. Multimedia applications and content authoring
   GR13. Multimedia servers and filesystems
   GR14. Networked and distributed multimedia systems

IS. Intelligent Systems
   IS1. Fundamental issues in intelligent systems
   IS2. Search and optimization methods
   IS3. Knowledge representation and reasoning
   IS4. Learning
   IS5. Agents
   IS6. Computer vision
   IS7. Natural language processing
   IS8. Pattern recognition
   IS9. Advanced machine learning
   IS10. Robotics
   IS11. Knowledge-based systems
   IS12. Neural networks
   IS13. Genetic algorithms

IM. Information Management
   IM1. Database systems
   IM2. Data modeling and the relational model
   IM3. Database query languages
   IM4. Relational database design
   IM5. Transaction processing
   IM6. Distributed databases
   IM7. Advanced relational database design
   IM8. Physical database design

NC. Net-Centric Computing
   NC1. Introduction to net-centric computing
   NC2. The web as an example of client-server computing
   NC3. Building web applications
   NC4. Communication and networking
   NC5. Distributed object systems
   NC6. Collaboration technology and groupware
   NC7. Distributed operating systems
   NC8. Distributed systems

SE. Software Engineering
   SE1. Software processes and metrics
   SE2. Software requirements and specifications
   SE3. Software design and implementation
   SE4. Verification and validation
   SE5. Software tools and environments
   SE6. Software project methodologies

CN. Computational Science
   CN1. Numerical analysis
   CN2. Scientific visualization
   CN3. Architecture for scientific computing
   CN4. Programming for parallel architectures
   CN5. Applications

SP. Social, Ethical, and Professional Issues
   SP1. History of computing
   SP2. Social context of computing
   SP3. Methods and tools of analysis
   SP4. Professional and ethical responsibilities
   SP5. Risks and liabilities of safety-critical systems
   SP6. Intellectual property
   SP7. Privacy and civil liberties
   SP8. Social implications of the Internet
   SP9. Computer crime
   SP10. Economic issues in computing
   SP11. Philosophical foundations of ethics

6.2 Defining the pedagogical framework

As noted in the introduction to this chapter, defining a body of knowledge for a discipline is not the same as defining a curriculum. While the work of the knowledge area groups in defining the topics that are important within the undergraduate curriculum, it is also important to take a holistic look at the curriculum that transcends the traditional disciplinary boundaries. The CC2001 Task Force established six pedagogy focus groups with the following charges:

  1. Introductory topics and courses

  2. Supporting topics and courses

  3. The computing core

  4. Professional practices

  5. Advanced study and undergraduate research

  6. Computing across curricula

The pedagogy focus groups were formed later in the review process than the counterpart focus groups examining the knowledge areas. The work of the pedagogy focus groups, moreover, is often dependent on the results of the knowledge area focus groups to define the scope of knowledge. The pedagogy focus groups have therefore had a shorter time in which to work.

Despite the limited time, most of the pedagogy focus groups produced draft reports during the second half of 1999. These reports outline the overall direction for each group and serve as a foundation for work over the coming year. These reports, however, were drafted prior to the January 2000 decision by the CC2001 Task Force to expand its scope beyond computer science and computer engineering. The broadening of the definition of the discipline has a substantial effect on the work of many of the pedagogy groups, and the CC2001 Task Force needs to go back to those groups and ask them to review their preliminary reports in light of that change.

In light of the recent change in direction, we have chosen not to include the draft reports from the pedagogy focus groups in this version of the report. They will instead be included in the next release, after the groups have had time to integrate the change in scope.


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