A breadth-first introduction to CS
Models for an introductory sequence in CS
The national recommendations for CS majors
Computing Curricula 2001 (CC2001)
identifies six distinct models for the introductory sequence in
CS:
- imperative-first,
- objects-first,
- functional-first,
- hardware-first,
- algorithms-first, and
- breadth-first.
The first three models above
focus on a particular programming paradigm, or general
linguistic approach to computer programming.
Imperative-first introductory courses use a
programming language
structured around lists of computer instructions to be carried out on
data stored in a computer's memory locations. C, Pascal, BASIC, and
FORTRAN are examples of such languages.
Objects-first courses use an
"object-oriented language,"
in which computer actions and data are packaged together in linguistic
structures called "objects." C++ and Java are common languages for
such courses.
In functions-first courses, computer
actions are
expressed in terms of "functions" that are capable of performing
operations on given data and returning results. LISP, Scheme, Logo,
and ML are functional languages.
Two other models are based on basic aspects of computing.
The hardware-first introductory
sequences begin with
the design and construction of electronic circuits capable of carrying
out computations, then proceeds towards higher levels of physical
computer design, and ultimately programming.
Algorithms-first courses introduce
basic concepts of
computer science through pencil-and-paper exercises that involve
reasoning through step-by-step solutions to problems, without
(at first) implementing such solutions in an actual programming language.
We could characterize the five models discussed above as
"depth-first" approaches, since they strongly focus on some aspect of
CS in order to present principles of the field. The chosen
aspect naturally unifies a course, and provides something for
beginning students to engage with. However, depth-first models risk
presenting a skewed view of the discipline to students who take only a
course or two in CS.
Those students may emerge from an introductory course believing
erroneously that CS is essentially about programming, or hardware;
or they may fail to develop desirable and appealing technical skills
in a course that focuses on hand-written work.
A breadth-first approach to introductory
courses seeks to
provide a more holistic view of the discipline at the outset, which
both informs students deciding whether to pursue CS
further and establishes a context for subsequent courses. A typical
breadth-first introductory course, sometimes called a "CS0" course,
surveys not only the basics of computer programming (including
algorithms and data structures) but also other areas
within computer science, such as programming languages, artificial
intelligence, operating systems, computer graphics, etc.
The breadth-first model
was recommended by seminal national documents such as
Computing Curricula 1991 (CC1991), although it has proven
problematic in practice, since an initial survey course CS0 typically
amounts to adding a course to the size of the major.
St. Olaf's breadth-first introductory course
We categorize St. Olaf's first course,
Principles of Computer
Science (CS1), as a breadth-first course, although we use a
programming language (Scheme) and we do not
organize the course around a survey of subdisciplines.
Instead, we survey the concepts and intellectual processes of
the discipline, in the following senses:
St. Olaf's CS1 includes elements of most other models for
introductory courses. In particular, we explore all three programming
paradigms listed above, and also emphasize (handwritten) algorithm
development and verification throughout the course.
St. Olaf's CS1 employs
recurring concepts of CS, identified in
CC1991, to represent the intellectual
themes of the discipline. The CC1991 task force considered these
recurring concepts to be some of the the underlying principles of their
recommended curriculum. These concepts occur throughout CS, for
example in both hardware and software, in both theory and
applications, and in many or all knowledge areas. The
recurring concepts appear in many guises throughout our CS1 course, as
indicated by an annotated syllabus.
Although the course uses the "functional" programming
language Scheme, we do not consider St. Olaf's CS1 to be a depth-first
introduction via functional programming, since imperative
programming and object-oriented programming receive comparable
emphasis in the course, and since it is organized around the broadly
applicable recurring concepts rather than an
in-depth focus on functional programming (or any other particular
aspect of CS).
In order to develop students analytical thinking skills and provide
them with some depth of understanding about CS, students
work through (typically Scheme-based) daily homework assignments that
progressively build on
skills and concepts encountered throughout the course. These
assignments raise our students' awareness and comprehension of
conceptual subtleties, expand their capacities to deal with
abstraction, increase their problem solving skills, and build their
proficiency at technologies used in this and subsequent courses. Most
homework exercises call on students to solve a problem by hand,
using the computer as a "hands-on" check of their work.
St. Olaf's CS1 is supported by a locally developed manuscript that
expresses this notion of a breadth-first introduction to CS, written
for an audience of liberal-arts students with any majors.
disciplines. The material is new and worthwhile for potential CS
majors as well as for non-majors.
Besides the main CS1 course, an accelerated introductory course
CS1+ is available for students with
substantial prior background in C++ or Java, the languages of
high-school advanced placement (AP) courses in CS.
St. Olaf's approach to introductory CS offers an
insider's survey of the discipline, seeking to convey how computer
scientists think as well as providing a glimpse of what they do. The
course also develops student skills in analytical thinking, programming,
and use of technology, providing a common foundation for subsequent
courses in the major, starting with the courses
MFC,
HD, and
SD. Consequently, we obtain
the advantages of a breadth-first introduction to CS,
together with the skills development asset of depth-first models,
without the disadvantage of adding a course to the size of the major.
|