Computing Concepts

Computing Concepts is a Cognitive Science class taught by Lee Spector.

Course Description
This course is an introduction to computer science and programming framed by the question, "Is it possible for a computer to be creative?" The core areas of computer science will be introduced, including algorithms, complexity, computability, programming languages, data structures, systems, and artificial intelligence, with an eye toward the insights that they can provide about issues of computational creativity. Students will complete several programming projects to demonstrate developing technical skills and engagement with the themes of the course. No previous experience with computers or with programming is required. This class meets twice a week for one hour and 20 minutes.

Learning Goals

 * Project-based
 * Quantitative
 * Presenting

Course Objectives

 * To understand the core concepts and areas of study in computer science.
 * To learn how to program, or how to program better, and more generally to develop the ability to turn abstract ideas into running code.
 * To appreciate the significance of computational models of cognition and creativity.
 * To develop and present a software portfolio.
 * To work collaboratively with classmates.

Evaluation Criteria
Each student is expected to attend consistently, to read all assigned readings, to participate actively in class discussions, and to complete the following assignments:


 * First Code: A short programming assignment to demonstrate basic understanding of the Processing programming environment.
 * Processing Tool: Processing code that may help in the production of creative programs by others in the class.
 * Final Project: A significant Processing program that is, in some sense, creative.
 * Project Presentation: 	In-class presentation of the final project; approximately 5 minutes.

Students are urged to consult with the professor before starting the Tool or the Final Project. Course evaluations will briefly describe the completed projects; students should bear this in mind when choosing the topics and forms for their projects.

Texts

 * 1) The Pattern on the Stone: The Simple Ideas that Make Computers Work, by Daniel Hillis, 1998.
 * 2) Processing: A Programming Handbook for Visual Designers and Artists, by Casey Reas and Ben Fry, 2007.
 * 3) [optional]The Creative Mind: Myths and Mechanisms (second edition), by Margaret Boden

Software
The Processing programming environment, available for free for Mac OSX, Windows, and Linux.

Facilities
Students may use their own computers or the Macs in ASH 126, which will be available at various posted hours. The Processing programming environment can be run under Mac OS X, Windows, or Linux, and students can work on whatever platform they prefer, but all submitted work must run under Mac OS X.

Difficulty/Level
This course is intended to serve students with a wide range of backgrounds, including students with no computer experience and students with significant computer and programming experience. Students with little previous experience should resist being intimidated by the more difficult readings, etc., and bear in mind that I take background into account in writing evaluations. If a reading or a class discussion is over your head, try to extract the gist of it (which may be all that you need at this point in your learning) and talk to me or the TA if you need to understand more. Students with extensive previous experience should note that the class is structured to provide ample opportunities for more advanced work–feel free to talk to me about ideas for projects, etc.

Schedule
This course will not follow a rigid, pre-specified schedule but will instead be paced to the progress and interests of the students. The basic sequence of topics is presented below but other topics and readings may also be added; changes will be discussed and announced in class.


 * Course Overview
 * Introduction to Processing
 * Turtle Graphics
 * Electrons to Algorithms
 * Conditions, Functions, and Procedures
 * Control Structures and Recursion
 * Language and Music Notations
 * Creativity and Computational Art
 * Systems and Limits
 * Java
 * Data Structures
 * Number Systems
 * Programming Languages
 * Software Engineering
 * Complexity Theory
 * Computability Theory
 * Artificial Intelligence
 * Computational Creativity Reconsidered
 * Final Project Presentation