Computational Thinking

16:198:503, Fall 2006


Instruction team: Matthew Stone, Ken Shan and John Asmuth

Class Time: Thursdays 1:40-4:40pm

Place: Psych A139 (RuCCS Playroom)

Recitations: Monday 12:30-1:30pm or Wednesday 6-7pm

Place: Psych A102 (RuCCS Village)



Goals. By taking this course, you will learn how to participate in interdisciplinary collaborations that depend on the techniques and results of computer science. Over the course, we will develop three important kinds of programs through hands-on case studies: an interpreter for a programming language; a web interface to a database; and a reinforcement-learning agent capable of perception, deliberation and action. We'll also present some of the theoretical background computer scientists use to understand such programs precisely - including representation, complexity, and computability - and introduce the history and culture of the field.

Requirements. Small in-class exercises, recitations and weekly homeworks will give you practice in understanding problems computationally, solving them, and critiquing solutions. Grades will be assigned based on homeworks, class participation, and take-home midterm and final exams. We'll focus on talking computationally as well as thinking computationally, so you understand how to play your part in computational projects - especially those where not everyone on the team has a hand in the programming. The central place of skills development in the class means that typical students will not be well served by attending as auditors.

Audience. The course is geared to students with some mathematical sophistication. You should be familiar with abstraction and proof from a course such as linear algebra (as 01:640:250), mathematics of probability (as 01:640:477 or 01:198:206), or formal logic (as 01:640:461 or 01:730:407). No background in computer science or programming will be presupposed; however, computer science students with interdisciplinary interests are very welcome in the class, as they are likely to benefit from our reflections on talk and teamwork in computer science. While the course will not count towards graduate requirements in computer science (other than the graduate school's general requirement that PhD students take 48 credits of coursework), students can take it together with its companion class CS 504 in the Spring to satisfy prerequisites for Rutgers's advanced graduate courses in Artificial Intelligence.

Syllabus and Outline

There is no textbook for this class. Nothing quite like it has ever been taught before. The sketch below outlines what we will cover and aims to substitute for browsing class materials as a guide to what you will learn and how material will be presented.

As the course proceeds, you will get readings, exercises, references and other resources to complement in-class work, and they will be made available on-line during the course of the semester. Ultimately, as in any graduate class, you are responsible for your own learning. If you need something more, you have to ask.