CS101B. Introduction to Computer Science

Presents a broad overview of computer science that integrates programming with discrete mathematics, hardware fundamentals, algorithms, and computability.

Prerequisites: No programming or computer science experience is required. Students should have sufficient facility with high-school mathematics to solve simple linear equations and to appreciate the use of mathematical notation and formalism.

Syllabus:

Units covered:
DS1 Functions, relations, and sets   4 core hours (of 6)
DS2 Basic logic   5 core hours (of 10)
DS3 Proof techniques   4 core hours (of 12)
DS4 Basics of counting   3 core hours (of 5)
DS6 Discrete probability   3 core hours (of 6)
PF1 Fundamental programming constructs   3 core hours (of 9)
PF2 Algorithms and problem-solving   2 core hours (of 6)
PF3 Fundamental data structures   2 core hours (of 14)
PF4 Recursion   2 core hours (of 5)
AL1 Basic algorithmic analysis   1 core hour (of 4)
AL3 Fundamental computing algorithms   2 core hours (of 12)
AL5 Basic computability   3 core hours (of 6)
AR1 Digital logic and digital systems   2 core hours (of 6)
PL1 Overview of programming languages   1 core hour (of 2)
PL4 Declarations and types   1 core hour (of 3)
SP1 History of computing   1 core hour
SP2 Social context of computing   1 core hour (of 3)

Notes:
This course is the first of a three-semester sequence (CS101B-102B-103B) that seeks to offer a broad, integrated introduction to computer science, along the lines advocated by the 1989 "Computing as a Discipline" report [Denning89] and Computing Curricula 1991 [Tucker91]. Each of the three courses in the sequence includes theory along with programming, and a range of additional topics are introduced in each course in the sequence.

As we note in Chapter 7, the breadth-first model has not enjoyed the success that its proponents had envisioned. We believe, however, that part of the problem may have come from trying to fit all these topics into too small a space. Given the expansion of prorgamming-related material that must be covered in the introductory sequence, there simply isn't time to cover the broader concepts of the discipline at any depth in the confines of the traditional two-semester sequence. As a result, most breadth-first courses that exist today seem to be lead-ins to a more traditional programming sequence. This model, which has several successful implementations, is outlined in the syllabus for CS100B.

In the last few years, however, the two-semester introductory sequence has become cramped even for the programming material. As a result, several institutions are moving toward a three-semester introductory sequence. We endorse these efforts in section 7.7.3 and offer a sample implementation in CS100B. The interesting question that this move toward three-semester sequences brings up is whether the additional time makes a breadth-first approach more viable.

The material presented in the CS101B-102B-103B sequence is quite similar to that offered in any of the traditional two-semester introductions and the CS115 discrete structures class. The difference is the ordering of the material. In the breadth-first sequence, mathematics is distributed throughout all three semesters and is more directly coupled to the topics that use it. In this way, students will have a greater opportunity to appreciate the connections between theory and practice.

A major danger of all breadth-first approaches lies in the fact that students tend to be far more attracted by the programming material, which they see as exciting and empowering, than they are to the more theoretical material. In this treatment, we have taken care to include more programming in the first course than has sometimes been true of breadth-first introductions. In the count of units, a third of the material in CS101B is directly related to programming and much of the rest can be presented so as to emphasize its practical importance.

We recognize that this approach has not been tested and that it may therefore suffer from the same modes of failure that plagued the earlier breadth-first attempts. We believe, however, that the expansion to three semesters may help to address these problems. After all, three-semester sequences -- a breadth-first preliminary course followed by a two-semester programming sequence -- do exist and seem to be reasonably successful. The advantage of the more integrated design is that students will be exposed to more programming in the first course and more theory in the courses that follow.

Online resources for CS101B


 
CC2001 Report
December 15, 2001