Introduction to computer science in the context of data science. This course provides a rigorous introduction to the programming topics that appear in Foundations of Data Science, expands the repertoire of computational concepts, and exposes students to techniques of abstraction at several levels, including layers of software and machines from a programmers’ point of view.  It provides an understanding of the structures that underlie the programs, algorithms, and languages used in data science and other settings.  It focuses on paradigms for controlling program complexity, such as functional programming, object-oriented programming, and declarative programming.  Mastery of a particular programming language is a valuable side effect of studying these general techniques.  It provides practical experience with composing larger computational systems through several significant programming projects.

CS88 is designed to be taken concurrently with CS/INFO/STAT c8; it can also be taken as a follow-on course.  Concepts introduced in c8, e.g., expressions, sequences, functions, iteration, higher-order functions, will be developed and utilized in greater depth, and additional computing concepts that are present in cs61A but not in c8, will be introduced and developed, e.g., recursion, indirection, translation, environments, closures, mutation, classes, exceptions, declarative programming, and distributed computing.