Personal tools
You are here: Home Resources CS 2001 Chapter5

Chapter5

 

Computing Curricula 2001
Computer Science Volume

 

Chapter 5
Overview of the CS Body of Knowledge

In developing a curriculum for undergraduate study in computer science, one of the first steps is to identify and organize the material that would be appropriate for that level. As noted in Chapter 1, the CC2001 Task Force sought to accomplish this goal by convening a set of knowledge focus groups, assigning to each one the responsibility of defining the body of knowledge associated with one of the following areas:

Each of the knowledge focus groups submitted a report to the CC2001 Task Force, which reviewed those reports to determine whether the recommendations made by that group was appropriate in the context of the curriculum as a whole.

5.1 Structure of the body of knowledge

The CS body of knowledge is organized hierarchically into three levels. The highest level of the hierarchy is the area, which represents a particular disciplinary subfield. Each area is identified by a two-letter abbreviation, such as OS for operating systems or PL for programming languages. The areas are broken down into smaller divisions called units, which represent individual thematic modules within an area. Each unit is identified by adding a numeric suffix to the area name; as an example, OS3 is a unit on concurrency. Each unit is further subdivided into a set of topics, which are the lowest level of the hierarchy.

5.1.1 Core and elective units

As discussed in Chapter 4, one of our goals in proposing curricular recommendations is to keep the required component of the body of knowledge as small as possible. To implement this principle, the CC2001 Task Force has defined a minimal core consisting of those units for which there is a broad consensus that the corresponding material is essential to anyone obtaining an undergraduate degree in this field. Units that are taught as part of an undergraduate program but which fall outside the core are considered to be elective.

In discussing the CC2001 recommendations during their development, we have found that it helps to emphasize the following points:

  • The core refers to those units required of all students in all computer science degree programs. Several topics that are important in the education of many students are not included in the core. This lack of inclusion in the core does not imply a negative judgment about the value, importance, or relevance of those topics. Rather, it simply means that there was not a broad consensus that the topic should be required of every student in every computer science degree program.
  • The core is not a complete curriculum. Because the core is defined as minimal, it does not, by itself, constitute a complete undergraduate curriculum.
  • The core must be supplemented by additional material. Every undergraduate program must include additional elective topics from the body of knowledge. The CC2001 report does not define what those topics must be, as this additional work can and should vary based on institutional mission, the areas of concentration offered by a given institution, and individual student choice.
  • Core units are not necessarily those taken in a set of introductory courses early in the undergraduate curriculum. Although many of the units defined as core are indeed introductory, there are also some core units that clearly must be covered only after students have developed significant background in the field. For example, the task force believes that all students must develop a significant application as some point during their undergraduate program. The material that is essential to successful management of projects at this scale is therefore part of the core, since it is required of all students. At the same time, the project course experience is very likely to come toward the end of a student's undergraduate program. Similarly, introductory courses may include elective units alongside the coverage of core material. The designation core simply means required and says nothing about the level of the course in which it appears.

5.1.2 Assessing the time required to cover a unit

To give readers a sense of the time required to cover a particular unit, the CC2001 report must define a metric that establishes a standard of measurement. Choosing such a metric has proven difficult, because no standard measure is recognized throughout the world. For consistency with the earlier curriculum reports, the task force has chosen to express time in hours, corresponding to the in-class time required to present the material in a traditional lecture-oriented format. To dispel any potential confusion, however, it is important to underscore the following observations about the use of lecture hours as a measure:

  • The task force does not seek to endorse the lecture format. Even though we have used a metric with its roots in a classical, lecture-oriented form, the task force believes that there are other styles -- particularly given recent improvements in educational technology -- that can be at least as effective. For some of these styles, the notion of hours may be difficult to apply. Even so, the time specifications should at least serve as a comparative measure, in the sense that a 5-hour unit will presumably take roughly five times as much time to cover as a 1-hour unit, independent of the teaching style.
  • The hours specified do not include time spent outside of class. The time assigned to a unit does not include the instructor's preparation time or the time students spend outside of class. As a general guideline, the amount of out-of-class work is approximately three times the in-class time. Thus, a unit that is listed as requiring 3 hours will typically entail a total of 12 hours (3 in class and 9 outside).
  • The hours listed for a unit represent a minumum level of coverage. The time measurements we have assigned for each unit should be interpreted as the minimum amount of time necessary to enable a student to achieve the learning objectives for that unit. It is always appropriate to spend more time on a unit than the mandated minimum.

5.1.3 Packaging units into courses

The structure and format of courses vary significantly from institution to institution and from country to country. Even within the United States, some colleges and universities use a semester system while others follow a shorter quarter system. Under either system, there can be differences in the number of weeks in a semester, the number of lectures in a week, and the number of minutes in a lecture.

For the purposes of this report, we assume that a course meets three times a week over the course of a 15-week semester and that the individual class meetings run somewhere between 50 minutes and an hour. This schedule is typical for a 3-credit semester course in the United States. Given that some of the available time will be taken up with examinations and other activities, we have assumed that 40 hours of lecture are available over the semester. In addition, students are expected to devote three hours of time outside of class for each in-class hour, which means that the total time that each student is expected to invest 160 hours in each course. Other countries use different metrics for expressing the expected level of work. In the United Kingdom, for example, a course described in this report would correspond to 15-16 points under the Credit Accumulation and Transfer Scheme (CATS).

5.2 Summary of the CS body of knowledge

A summary of the body of knowledge -- showing the areas, units, which units are core, and the minimum time required for each -- appears as Figure 5-1. The details of the body of knowledge appear in Appendix A.

Figure 5-1. Computer science body of knowledge with core topics underlined

DS. Discrete Structures (43 core hours)
   DS1. Functions, relations, and sets (6)
   DS2. Basic logic (10)
   DS3. Proof techniques (12)
   DS4. Basics of counting (5)
   DS5. Graphs and trees (4)
   DS6. Discrete probability (6)

PF. Programming Fundamentals (38 core hours)
   PF1. Fundamental programming constructs (9)
   PF2. Algorithms and problem-solving (6)
   PF3. Fundamental data structures (14)
   PF4. Recursion (5)
   PF5. Event-driven programming (4)

AL. Algorithms and Complexity (31 core hours)
   AL1. Basic algorithmic analysis (4)
   AL2. Algorithmic strategies (6)
   AL3. Fundamental computing algorithms (12)
   AL4. Distributed algorithms (3)
   AL5. Basic computability (6)
   AL6. The complexity classes P and NP
   AL7. Automata theory
   AL8. Advanced algorithmic analysis
   AL9. Cryptographic algorithms
   AL10. Geometric algorithms
   AL11. Parallel algorithms

AR. Architecture and Organization (36 core hours)
   AR1. Digital logic and digital systems (6)
   AR2. Machine level representation of data (3)
   AR3. Assembly level machine organization (9)
   AR4. Memory system organization and architecture (5)
   AR5. Interfacing and communication (3)
   AR6. Functional organization (7)
   AR7. Multiprocessing and alternative architectures (3)
   AR8. Performance enhancements
   AR9. Architecture for networks and distributed systems

OS. Operating Systems (18 core hours)
   OS1. Overview of operating systems (2)
   OS2. Operating system principles (2)
   OS3. Concurrency (6)
   OS4. Scheduling and dispatch (3)
   OS5. Memory management (5)
   OS6. Device management
   OS7. Security and protection
   OS8. File systems
   OS9. Real-time and embedded systems
   OS10. Fault tolerance
   OS11. System performance evaluation
   OS12. Scripting

NC. Net-Centric Computing (15 core hours)
   NC1. Introduction to net-centric computing (2)
   NC2. Communication and networking (7)
   NC3. Network security (3)
   NC4. The web as an example of client-server computing (3)
   NC5. Building web applications
   NC6. Network management
   NC7. Compression and decompression
   NC8. Multimedia data technologies
   NC9. Wireless and mobile computing

PL. Programming Languages (21 core hours)
   PL1. Overview of programming languages (2)
   PL2. Virtual machines (1)
   PL3. Introduction to language translation (2)
   PL4. Declarations and types (3)
   PL5. Abstraction mechanisms (3)
   PL6. Object-oriented programming (10)
   PL7. Functional programming
   PL8. Language translation systems
   PL9. Type systems
   PL10. Programming language semantics
   PL11. Programming language design

HC. Human-Computer Interaction (8 core hours)
   HC1. Foundations of human-computer interaction (6)
   HC2. Building a simple graphical user interface (2)
   HC3. Human-centered software evaluation
   HC4. Human-centered software development
   HC5. Graphical user-interface design
   HC6. Graphical user-interface programming
   HC7. HCI aspects of multimedia systems
   HC8. HCI aspects of collaboration and communication

GV. Graphics and Visual Computing (3 core hours)
   GV1. Fundamental techniques in graphics (2)
   GV2. Graphic systems (1)
   GV3. Graphic communication
   GV4. Geometric modeling
   GV5. Basic rendering
   GV6. Advanced rendering
   GV7. Advanced techniques
   GV8. Computer animation
   GV9. Visualization
   GV10. Virtual reality
   GV11. Computer vision

IS. Intelligent Systems (10 core hours)
   IS1. Fundamental issues in intelligent systems (1)
   IS2. Search and constraint satisfaction (5)
   IS3. Knowledge representation and reasoning (4)
   IS4. Advanced search
   IS5. Advanced knowledge representation and reasoning
   IS6. Agents
   IS7. Natural language processing
   IS8. Machine learning and neural networks
   IS9. AI planning systems
   IS10. Robotics

IM. Information Management (10 core hours)
   IM1. Information models and systems (3)
   IM2. Database systems (3)
   IM3. Data modeling (4)
   IM4. Relational databases
   IM5. Database query languages
   IM6. Relational database design
   IM7. Transaction processing
   IM8. Distributed databases
   IM9. Physical database design
   IM10. Data mining
   IM11. Information storage and retrieval
   IM12. Hypertext and hypermedia
   IM13. Multimedia information and systems
   IM14. Digital libraries

SP. Social and Professional Issues (16 core hours)
   SP1. History of computing (1)
   SP2. Social context of computing (3)
   SP3. Methods and tools of analysis (2)
   SP4. Professional and ethical responsibilities (3)
   SP5. Risks and liabilities of computer-based systems (2)
   SP6. Intellectual property (3)
   SP7. Privacy and civil liberties (2)
   SP8. Computer crime
   SP9. Economic issues in computing
   SP10. Philosophical frameworks

SE. Software Engineering (31 core hours)
   SE1. Software design (8)
   SE2. Using APIs (5)
   SE3. Software tools and environments (3)
   SE4. Software processes (2)
   SE5. Software requirements and specifications (4)
   SE6. Software validation (3)
   SE7. Software evolution (3)
   SE8. Software project management (3)
   SE9. Component-based computing
   SE10. Formal methods
   SE11. Software reliability
   SE12. Specialized systems development

CN. Computational Science and Numerical Methods (no core hours)
   CN1. Numerical analysis
   CN2. Operations research
   CN3. Modeling and simulation
   CN4. High-performance computing


CC2001 Report
December 15, 2001
Document Actions