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.

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 MFCHD, 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.