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 new disciplines that now comprise the broad field of computing are at least
as important to the academic computing curriculum as traditional computer
science. In the CC1991 report, "the term computing is used to
encompass the labels computer science [and] computer science and
engineering" but specifically excludes programs in other computing disciplines,
such as information systems. It seems presumptuous for computer science and
computer engineering to lay claim over the entire computing discipline.
- Narrowing the discipline of computing to its traditional components limits
the evolution of the discipline through synergies with related fields. As
computing program increase in both breadth and size, it is important to resist the
temptation to compensate by creating highly specialized, independent subdisciplines
that rarely share ideas. Much of the vitality in computing today comes from the
interaction of theory and practice. If applications of computing become increasingly
separate from the theoretical underpinnings of computer science, both theory and
practice will suffer as a result.
- Introductory courses that are designed only for potential computer science
majors will not serve the best interests of computing education as a whole. At
most institutions today, computer science has a high service load, in the sense that
many of its courses are taken by many students who will major in other areas.
Computer science today serves as a foundation for a broad range of disciplines, in
much the same way that mathematics has done for many years. Academic departments
of mathematics, however, are often criticized for concentrating their resources on the
pure aspects of the field, even though most of their students, particularly at the
introductory level, are interested in more applied topics. In the interest of the broad
computing curriculum, computer science should not follow that path. Students,
moreover, need to understand the range of options that are available in the computing
domain, and it is important for introductory courses not only to prepare students for a
range of disciplines but to offer them guidance about the possibilities.
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
|
 |