Draft 5.2: July 7, 2000
The discipline of computing interacts in essential ways with many other disciplines at both practical and theoretical levels. Thus, computing students must gain an understanding of subjects outside of computing, as well as a mastery of core computing topics. In particular, students focusing their studies on computing also must have an adequate background in each of the following areas:
Such areas may be addressed by various combinations of supporting courses and other experiences. Note that a summary of recommendations appears at the end of this report.
Mathematical methodologies and topics pervade many areas of computing. For example, Computing Curricula 1991 identified theory as one of the three primary working methodologies or processes within computer science. The theory process contains the major elements of definitions and axioms, theorems, proofs, and interpretation of results. In addition, mathematics provides a language for working with ideas relevant to computing, specific tools for analysis and verification, and a theoretical framework for understanding important computing ideas. For example, functional programming and problem solving draw directly upon the mathematical concepts and notations for functions; algorithmic analysis depends heavily on the mathematical topics of counting, permutations and combinations, and probability; discussions of concurrency and deadlock draw heavily from graph theory; and both program verification and computability build upon formal logic and deduction.
Students of computing should:
With the pervasive role of mathematics within computing, the computing curriculum should discuss mathematical concepts early and often. For example, basic concepts of discrete mathematics should be introduced early within a student's course work, and later courses should use these concepts regularly. While different colleges and universities will identify alternative prerequisite structures according to local needs and opportunities, a variety of upper-level computing courses should depend upon prior knowledge of specific mathematical content, and this content should be reflected in the formal pre-requisites of upper-level courses.
To achieve this level of proficiency, course work should include the equivalent of the following:
For a curriculum emphasizing the liberal arts, such course work should include:
For a more technically-oriented curriculum, such as might be found in an engineering program, more extensive course work could be expected:
As a common alternative, the more technically-oriented curriculum might expand both the amount of discrete mathematics and the coverage of probability and statistics to yield the following:
Basic material on Discrete Structures should be covered early in the curriculum, and this material should be used in several later course (e.g., algorithms, operating systems, programming languages). Such material may be covered in several ways:
The next part of this report illustrates how either of these approaches might be followed. In each case, topics in discrete mathematics should be combined into courses with unifying themes and with an emphasis on applications of various mathematical concepts.
When offered as separate courses, Discrete Structures courses would provide a solid introduction to discrete mathematics. Since courses in discrete mathematics sometimes have earned the reputation of being a potpourri of disjoint and irrelevant details, considerable care should be taken to shape a coherent and theme-oriented course, where applications are shown for most or all topics.
Discrete Structures I:
The following commentary provides a base for such a course, drawing heavily from topics listed in the Discrete Structures Knowledge Units.
This course covers much of the knowledge units DS1, DS2, DS3, and DS4, although few of those topics are covered together as a separate unit. Rather, this course highlights applications, for which solutions require proof, logic, and counting. In particular, while the above outline indicates that logic and proofs are introduced early in a 3-hour unit, the expectation is that these topics will be applied in class and homework consistently throughout the rest of the semester. From this perspective, one might consider that logic and proofs take up 30+ hours of this course.
Such a course might have strong appeal to those interested in applied mathematics or other disciplines, and this discrete math course might be taught by mathematics faculty. Alternatively, these topics could be introduced with explicit examples from computing, in which case the course might be listed in either the mathematics or computing departments.
At some schools, these topics from mathematics might be integrated into beginning computing courses. For example, an early introduction to functional programming might be tied to a treatment of the mathematical topics of functions, sets, relations, and recursion.
Prerequisites: This first mathematics course should have similar prerequisites to traditional calculus course(s), so that work may proceed at a reasonable level of rigor -- assuming proficiency with basic algebra, geometry, trigonometry, logarithms, and exponential functions. In particular, the above 2 semester requirement for discrete mathematics assumes that students will have completed successfully a precalculus course either in high school or college. Students without this background may be unable to take a discrete math sequence concurrently with typical CS1/CS2 courses; such students will need to work with their advisors to catch up. Then, later courses in computing should build explicitly on the mathematical foundation begun early.
Discrete Structures II:
With the importance of discrete mathematics, formal methods, and theory in many areas of computer science, students should take an intermediate-level course on discrete mathematics -- building on Discrete Structures I and serving as a prerequisite for some required upper-level computing courses.
As with Discrete Structures I, a follow-up course must be coherent and clearly relevant, explicitly stating unifying themes and using mathematical theory and rigor to obtain interesting results. The following sample course illustrates how the topics of graphs, complexity, and probability could provide such integrating themes. While many schools may choose to cover these topics differently -- perhaps in courses on algorithms, automata, and statistics, this outline illustrates a mechanism to combine core topics efficiently and at an appropriate level of rigor.
Additional attention to proof techniques is found throughout this course. Substitution of other topics or applications might support specific, upper-division computing courses.
For many schools, some of these topics might be covered in a lower-division course which emphasizes probability and statistics, while other topics might be covered in upper-level courses in algorithms or automata. When the topics are combined and integrated with unifying themes, however, the course can cover core topics efficiently and use the solving of specific problems as unifying themes.
The design and level of Discrete Structures II are vital for at least two reasons:
Rather than separate discrete structures from introductory programming at the beginning level, the two areas might be merged with both the mathematics and computer science motivating and supporting the other. As in the description of Discrete Structures 1 and 2, applications are stressed for each mathematical topic, although here those applications largely relate to concepts of programming and algorithms.
CS-M1: Functional Programming, Proof, and Counting
While many languages might be used to support the programming component of this course, some common choices might be either dynamically-typed languages like Scheme or LISP or statically-typed ones like ML or Haskell.
CS-M2: An Introduction to Object-Oriented Programming and Program Analysis
CS-M3: Dynamic Structures and Standard Algorithms
In addition to these first two courses, students should take one or more advanced course in mathematics to support electives beyond the computing core and to be determined though the advising process. Traditionally, this work centers on one or two semesters of calculus, and this sequence still is appropriate for many computing students. For example, such an introduction might include the following topics:
differential calculus (rates of change, derivatives, maxima,
minima, graphing applications,
While calculus is appropriate for many computing students, others may find different mathematics courses to provide better support for the students' specific interests. Specific choices of additional mathematics courses should support electives beyond the computing core and be determined though the advising process. Possible choices might include:
It is expected that specific upper-level computer science courses will have one or more of these topics as prerequisites. For example, a computer graphics course may require as a prerequisite linear algebra, multivariable calculus, and/or differential equations.
Regardless of the choice of an additional course work in mathematics, all computing students must develop reasonable facility in mathematical thinking and a good mathematical skills.
In addition to the mathematics topics and courses described here, other mathematically-based topics are described elsewhere in these recommendations. For example, automata is described under the Foundations of Computing heading, and Algorithms include many concepts and techniques from graph theory.
As noted in Computing Curricula 1991, the process of abstraction (data collection, hypothesis formation and testing, experimentation, analysis) represents a vital component of logical thought within the field of computing. The scientific method represents a basis methodology for much of the discipline of computer science, and students should have a solid exposure to this methodology.
Computing Students should:
To achieve these goals, students must have direct hands-on experience with hypothesis formulation, experimental design, hypothesis testing, and data analysis. While a curriculum may provide this experience in various ways, it is vital that students must "do science", not just "read about science". Thus, all computing students should take:
1 semester of a lab-based course which applies the
While such exposure might be achieved in lab-based, computer science courses, most schools (at least in the United States) may require one or more semesters of a natural science (e.g., in biology, chemistry, or physics). Although this requirement allows substantial flexibility in terms of subject matter, any science option must include a lab component to provide actual experience with the scientific method.
C. Application Areas
With the broad range of applications of computing in today's society, computing scientists must to be able to work effectively with people from other disciplines.
Many students of computing should:
Computing students have a wide range of interests and professional goals. In some cases, for some students in some programs, diversity of curricular program may be achieved through novel or innovative approaches beyond the scope of a standard computing curriculum. (For example, for a double major in computer science and Asian studies, the Asian studies may not use computing in a substantive way, but may be very useful to them in their chosen careers which have involved work with Japanese and other companies. Similarly, for a double major in computer science and religious studies, philosophical issues from the second major may be extremely helpful in a technical career emphasizing public policy.)
For many students, study of computing together with an application area will be extremely useful. Such work might be accomplished in several ways: some approaches might include an extended internship experience or the equivalent of a full semester's work (e.g., 4-5 semester courses or a minor) that would count toward a major in that discipline. For example, computing students are encouraged to study such fields as psychology, sociology, economics, biology, business, or one of the science or engineering disciplines.
D. Ethical and Social Issues
Computing Curricula 1991 stated, "Undergraduates ... need to understand the basic cultural, social, legal and ethical issues inherent in the discipline of computing. ... Students also need to develop the ability to ask serious questions about the social impact of computing and to evaluate proposed answers to those questions. ... Finally, students need to be aware of the basic legal rights of software and hardware vendors and users, and they also need to appreciate the ethical values that are the basis for those rights. [p. 11]" Such comments are at least as relevant today, with the integration of computing into an ever increasing range of areas within society.
Students of computing should:
Computing curricula should consider including a course on ethical and social issues -- possibly taught by a faculty member in philosophy or in a social science discipline. However, students also should come to appreciate that these issues are not tangential to computing, and computing faculty should at least touch upon these issues periodically in regular and core computing courses.
Possible approaches for including these topics within a curriculum may be found in the [forthcoming] report of Pedagogy Focus Group 4: Professional Practices.
E. Communication Skills
A widely-heard contemporary theme is that computer scientists must be able to communicate effectively with colleagues and clients; no longer can a computer professional expect to work in isolation most of the time. Thus, computing students must sharpen their oral and writing skills in a variety of contexts -- both inside and outside of computing courses.
Computing students should be able to:
While institutions may work to accomplish these goals in many ways, the program of each student of computing must include numerous occasions for improving writing, practicing oral communication (using both speaking and active listening skills), and working in small groups.
At the least, a computing curriculum should require:
1 semester of a course emphasizing the mechanics and
process of writing.
Furthermore, the computing curriculum should integrate writing and verbal discussion consistently in substantive ways ways. Communication skills should not separate from computing, but rather should be fully incorporated into the computing curriculum and its requirements. Some mechanisms to achieve this could include the following:
While suggestions indicate just a few of the ways that students may gain proficiency in speaking, writing, and group interactions, every curricular program should ensure that students have several such experiences. Overall, students should develop their skills both in non-technical and in technical courses, so they come to understand that the same communication principles from other disciplines also apply within the discipline of computing.
F. Exposure to World Cultures.
Technology has been a primary factor in the interdependency of world cultures and societies; information technology plays a vital role as societies interact within the global village. Also, Section 3.2 of Computing Curriculum 2001 begins, "Computing education is ... affected by changes in the cultural and sociological context in which it occurs." With the multinational dimensions of the information technology field, computing professionals increasingly are called upon to function within an environment involving different cultures and backgrounds.
In order to function within this increasingly multi-cultural world, students of computing should have a basic understanding of multiple cultures.
To accomplish this goal, students are strongly encouraged to engage in the formal study of a foreign language and to take courses that discuss world cultures and international issues and perspectives. For many students, this might involve the following course work:
3 semesters of courses discussing world cultures and
international issues and perspectives,
possibly including 2 or more semesters of a foreign language at the college level.
While these suggestions fall outside the scope of course work required for a computer science degree, some institutions may choose to incorporate the above work into general distribution requirements. Further, within a liberal arts context, a curriculum might emphasize the study of world cultures further through an additional requirement of 1 to 3 courses in this area. While such requirements would support the breadth valued within liberal arts, this further work also would add valuable international perspectives to benefit future computing professionals.
Summary of Support Course Recommendations:
The following summarizes the recommendations made above.