Note: This course may not be taken for credit toward the MS and Ph.D. degrees in computer science. It is primarily intended for cognitive science students who do not have undergraduate degrees in computer science.
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.
Circuits. Programs as data. Representation. Algorithms and insight. Types. Complexity. Computability. Distributed computation. Data as programs. Perception and inference. Models, Learning and complexity. Agency.
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.