In the history of invention there are major milestones like fire, metallurgy, cloth, and calculus. Where does computation fit in? Right up there with the best of them: computers and computation extend into every niche of everyday life and every branch of scholarship. Understanding the key ideas of computation is essential for the informed adult.

CS 17/18 provides an introduction to computation: expressing computation, writing programs to make computers carry out computation, understanding the difficulty of a particular computation, and knowing about the limits of computation in general.

Students learn four programming languages (Racket, OCaml, Java, and Scala), each of which introduces a new way of thinking about programming. As they study these languages, students also learn important ideas about computation - recursion, abstraction, algorithm analysis - and important current methods, like functional and object-oriented programming.

This course sequence stresses ideas, aiming to provide understanding that will be useful to the student decades from now. At the same time, students are exposed to current technologies. It is a course for concentrators, but it is also well-suited to those who feel a desire to become familiar with computing, even if they are not planning to concentrate in computer science.