Computing Curricula 2001
Computer Science Volume


Appendix B
Course Descriptions

This appendix to the Computing Curricula 2001 report consists of a set of course descriptions intended to serve as models for institutions offering undergraduate degrees in computer science. Although some institutions will presumably follow these models with little modification, the course designs presented here are intentionally designed to be flexible, allowing individual institutions to customize them to fit their own needs.

In most cases, the courses described here are similar to those already offered at the undergraduate level. The CC2001 Task Force sought to identify and document successful practice rather than to create entirely new models. While we encourage the development of innovative curricular strategies and experimental courses, we recognize that course design requires considerable time and in-class assessment that cannot be done effectively by committee. The model courses in this appendix are therefore best regarded as a common starting point for experimentation. While each course is presented in enough detail to be usable as it stands, institutions and individual faculty are encouraged to adapt and extend these courses as part of the dynamic process of curriculum develoment.

Fundamental concepts

The rationale behind the CC2001 curriculum is outlined in the full report of the task force. The appendices, however, are likely to have wide circulation and will certainly be read by many who do not have time to study the full report. For this reason, the task force has chosen to include in each appendix a summary of the fundamental concepts that are necessary to understand the recommendations. The most important concepts for understanding the course descriptions are as follows:

Organization and format of the course descriptions

As described in the preceding section, the courses presented in this appendix are organized into three levels: introductory, intermediate, and advanced. The point of this division is to provide natural boundaries for defining implementation strategies. Chapter 7, for example, defines six distinct instantiations of the introductory curriculum; Chapter 8 outlines four thematic approaches to the intermediate courses, along with a set of hybrid strategies that combine elements from these approaches. The implementation strategies and their relationship in the curriculum are shown in Figure B-1.

Figure B-1. Course levels and implementation strategies

In general, it should be possible to use any of the introductory approaches and follow it up with any of the intermediate approaches, although doing so may require transition material to ensure that all core units are covered. The strategies and tactics required to ensure a successful transition are described in Chapters 6-8.

The names of the individual pedagogical approaches have been chosen so that each begins with a unique letter. This fact makes it possible to assign course numbers in a way that simultaneously encodes the level, area, and pedagogical approach, as illustrated in Figure B-2. In the example shown, the subscript at the end of CS226C indicates that this intermediate-level course is part of the compressed approach.

Figure B-2. Course numbering scheme

The format of each individual course description is shown in Figure B-3. The parts of the template that vary from course to course appear in boxes.

Figure B-3. Components of a course description

B.1 Introductory tracks

In the course descriptions that follow, the introductory tracks are arranged in the order in which they are presented in Chapter 7.

B.1.1 Imperative-first

The imperative-first approach offers two separate implementations: one that covers the material in three courses (CS101I-102I-103I) and one that uses a more traditional two-course sequence (CS111I-112I).

B.1.2 Objects-first

Like the imperative-first approach, the objects-first strategy is also divided into a three-course (CS101O-102O-103O) and a two-course implementation (CS111O-112O).

B.1.3 Functional-first

The functional-first approach exists only in the two-semester form. If the approach proves popular, it may be appropriate to consider a three-semester implementation.

B.1.4 Breadth-first

As outlined in Chapter 7, we propose two implementations of a breadth-first approach. The first is simply to include an overview course (CS100B) before a more conventional programming sequence. The second is to expand the introductory curriculum into a three-semester sequence (CS101B-102B-103B) so that there is time for the additional topics.

B.1.5 Algorithms-first

The algorithms-first approach exists only in the two-semester form. If the approach proves popular, it may be appropriate to consider a three-semester implementation.

B.1.6 Hardware-first

The hardware-first approach exists only in the two-semester form. If the approach proves popular, it may be appropriate to consider a three-semester implementation.

B.2 Other first-year courses

The courses in this section are arranged in numerical order.

B.3 Intermediate courses

Although the courses in this section are typically identified with thematic tracks -- topics, compressed, systems, and web-based -- the course numbers are unique. This property makes it useful to list these courses in numerical order. If the same course appears in more than one track, all appropriate suffixes are shown.

B.4 Advanced courses

The CC2001 Task Force has decided not to include in the printed report full descriptions of the advanced courses unless those courses are part of one of the curricular tracks described in Chapter 8. Instead, we plan to create web pages for these courses, which will be accessible from the CC2001 web page. A list of the advanced courses we propose appears in Figure B-4.

Figure B-4. Advanced courses by area
Discrete Structures (DS)
  CS301. Combinatorics
  CS302. Probability and Statistics
  CS303. Coding and Information Theory

Computational Science (CN)
  CS304. Computational Science
  CS305. Numerical Analysis
  CS306. Operations Research
  CS307. Simulation and Modeling
  CS308. Scientific Computing
  CS309. Computational Biology

Algorithms and Complexity (AL)
  CS310. Advanced Algorithmic Analysis
  CS311. Automata and Language Theory
  CS312. Cryptography
  CS313. Geometric Algorithms
  CS314. Parallel Algorithms

Architecture and Organization (AR)
  CS320. Advanced Computer Architecture
  CS321. Parallel Architectures
  CS322. System on a Chip
  CS323. VLSI Development
  CS324. Device Development

Operating Systems (OS)
  CS325. Advanced Operating Systems
  CS326. Concurrent and Distributed Systems
  CS327. Dependable Computing
  CS328. Fault Tolerance
  CS329. Real-Time Systems

Net-Centric Computing (NC)
  CS330. Advanced Computer Networks
  CS331. Distributed Systems
  CS332. Wireless and Mobile Computing
  CS333. Cluster Computing
  CS334. Data Compression
  CS335. Network Management
  CS336. Network Security
  CS337. Enterprise Networking
  CS338. Programming for the World-Wide Web

Programming Languages (PL)
  CS340. Compiler Construction
  CS341. Programming Language Design
  CS342. Programming Language Semantics
  CS343. Programming Paradigms
  CS344. Functional Programming
  CS345. Logic Programming
  CS346. Scripting Languages

Human-Computer Interaction (HC)
  CS350. Human-Centered Design and Evaluation
  CS351. Graphical User Interfaces
  CS352. Multimedia Systems Development
  CS353. Interactive Systems Development
  CS354. Computer-Supported Cooperative Work

Graphics and Visual Computing (GV)
  CS355. Advanced Computer Graphics
  CS356. Computer Animation
  CS357. Visualization
  CS358. Virtual Reality
  CS359. Genetic Algorithms

Intelligent Systems (IS)
  CS360. Intelligent Systems
  CS361. Automated Reasoning
  CS362. Knowledge-Based Systems
  CS363. Machine Learning
  CS364. Planning Systems
  CS365. Natural Language Processing
  CS366. Agents
  CS367. Robotics
  CS368. Symbolic Computation
  CS369. Genetic Algorithms

Information Management (IM)
  CS370. Advanced Database Systems
  CS371. Database Design
  CS372. Transaction Processing
  CS373. Distributed and Object Databases
  CS374. Data Mining
  CS375. Data Warehousing
  CS376. Multimedia Information Systems
  CS377. Digital Libraries

Social and Professional Issues (SP)
  CS380. Professional Practice
  CS381. Social Context of Computing
  CS382. Computers and Ethics
  CS383. Computing Economics
  CS384. Computer Law
  CS385. Intellectual Property
  CS386. Privacy and Civil Liberties

Software Engineering (SE)
  CS390. Advanced Software Development
  CS391. Software Engineering
  CS392. Software Design
  CS393. Software Engineering and Formal Specification
  CS394. Empirical Software Engineering
  CS395. Software Process Improvement
  CS396. Component-Based Computing
  CS397. Programming Environments
  CS398. Safety-Critical Systems

B.5 Project courses

As we discuss in section 9.3, we believe that it is critical for all undergraduates to complete a significant team project as part of their undergraduate program. In some cases, this experience may be integrated into existing courses, such as those in software engineering. In other cases, however, it is appropriate to offer standalone project courses that allow students to integrate the many concepts and skills they have learned as undergraduates in the context of a significant project.

The curriculum descriptions in this report refer to two different implementations of a project course. The first is

which provides a one-semester capstone experience. The second is the two-semester sequence which makes it possible for students to complete a much more ambitious project over the course of a full year.

The design of these courses will vary greatly from institution to institution. In some programs, the project course may include lectures, particularly if the earlier courses do not cover the full set of required units in the core. In any event, we expect that any project course will provide coverage of some of the material from the body of knowledge, as illustrated in the following table:

Regardless of whether these topics are covered in lecture or are simply acquired in the completion of the work, the focus of the course must remain on the project, which gives students the chance to reinforce through practice the concepts they have learned earlier in a more theoretical way.


HC1 Foundations of human-computer interaction   2 core hours (of 6)
HC5 Graphical user-interface design   2 hours
HC6 Graphical user-interface programming   2 hours
SE1 Software design   4 core hours (of 8)
SE2 Using APIs   3 core hours (of 5)
SE3 Software tools and environments   3 core hours
SE4 Software processes   2 core hours
SE5 Software requirements and specifications   2 core hours (of 4)
SE6 Software validation   3 core hours
SE7 Software evolution   2 core hours (of 3)
SE8 Software project management   3 core hours
  Team management   2 hours
  Communications skills   2 hours
CC2001 Report
December 15, 2001