Teaching

Lee Spector (lspector@hampshire.edu)
School of Cognitive Science
Hampshire College


Information for Hampshire College Students


Current Courses

CS 254: Generic Programming

Genetic programming is a computational technique that harnesses the mechanisms of natural evolution -- including genetic recombination, mutation, and natural selection -- to synthesize computer programs automatically from input/output specifications. It has been applied to a wide range of problems spanning several areas of science, engineering, and the arts. In this course students will explore several variations of the genetic programming technique and apply them to problems of their choosing. Prerequisite: One programming course (any language).

2014 syllabus


Previous Courses

Note: I've linked to old syllabi and online resources when possible but there are many gaps because of courseware system changes, etc. If you are interested in more information on any of these courses then please drop me a line.

CS 104 (& 104T): Cognitive Science Fiction

Can androids fall in love? Could a planet have a mind of its own? How might we communicate with alien life forms? Will it ever be possible for two people to "swap minds"? How about a person and a robot? And what would it feel like to engage in a Vulcan "mind meld"? Cognitive science research can shed light on many of these questions, with results that are often as strange and as wonderful as the inventions of science fiction authors. In this course we will read and view science fiction while simultaneously reading current scientific literature on the mind, the brain, and intelligent machines. The science fiction will provide a framework for our discussions, but the real goal of the course is to provide a tour of issues in cognitive science that will prepare students for more advanced cognitive science courses. PRS, QUA, REA, WRI 

2013 syllabus, 2010 syllabus, 1998 online resources, 1999 online resources

CCS 105: The Nature of Mind: An Introduction to Cognitive Science

(with Mary Jo Rattermann)

Cognitive Science explores the nature of mind using tools developed in psychology, artificial intelligence, linguistics, neuroscience, and philosophy. This course will consist of classroom lectures and discussions based on a series of critical essay assignments due throughout the term. As the course progresses students will become acquainted with ongoing research issues in cognitive science, developing a term project that involves the review of primary literature and the collection of original data. The course will meet twice a week for one hour and twenty minutes each time. Enrollment is limited to 40.

CS 109: Computing Concepts: Creative Machines?

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.

2012 syllabus, 2001 online resources, 1998 online resources

CCS 111: When Machines Talk

(with Steven Weisler)

The tremendous advances in computer science over the last three decades continually raise the question of whether computers will ever be as intelligent, as conversant, as creative as humans are. In this course we will examine the prospects for building machines that can talk and can understand human language. We will consider linguistic, philosophical, and computational challenges to modeling what is often considered to be the defining characteristics of what it means to be human. We begin with a discussion of the possibility of "artificial intelligence" (AI), covering the claims that have been made by AI scientists and the critiques of such claims that have arisen from the philosophical community. We then focus on the fundamental logic and mathematics of computation and language, including techniques for proving that certain linguistic problems are "intractable" or "unsolvable."

Students will be evaluated through a combination of short papers and problem sets, along with a final project. The class will meet twice a week for one hour and twenty minutes each time. Enrollment limit is 25.

Online resources

CS 150: Algorithmic Arts

This course will focus on the development of dynamic artworks that are driven by computation. It will be conducted partly as a programming course and partly as a studio art course. Students will learn to use a particular set of tools for the development of algorithmic arts and they will develop portfolios of work using these tools. They will also be expected to conduct research on algorithmic arts technologies outside of class and to present new work in class every week. This class meets once a week for two hours and 50 minutes. PRJ, QUA, PRS, EXP 

CS 153: Code Immersion

In this course students will learn to program computers through a process of continuous immersion in the reading, writing, and running of program code. Lectures will be kept to a minimum; whenever possible we will communicate in the language of program code. No previous experience with programming or with computer science is required, although experienced programmers are also welcome and should expect to improve their fluency. PRJ, PRS, QUA

CS 156: Quantum Computing with No Prerequisites of Any Kind

Quantum mechanics may provide the next major leap in computer power, allowing "quantum computers" to do things that no conventional computers will ever be able to do, regardless of their speeds. Some physicists question whether it will ever be practical to build large-scale quantum computers, but others are convinced that current obstacles to their construction will soon be overcome.

The new power of quantum computing emerges from bizarre features of the microscopic world, for example:

These are very odd claims from the perspective of classical computer science, but quantum computation seems to force this kind of language on us.

However one talks about quantum computation it is clear that it is something very different from classical computation and that new conceptual models may be necessary for us to make sense of it. In this course we will try to make sense of quantum computation starting from zero; there will be no assumed background in mathematics, physics, or computer science. The class will meet twice weekly for one hour and twenty minutes.

Online resources

CCS 175: What Computers Can't Do

Computers are commonly (and inconsistently) regarded as both omnipotent and as "stupid machines." In this course we will explore the real limits of computation from philosophical, logical, mathematical and public-policy perspectives. We begin with a discussion of the possibility of "artificial intelligence" (AI), covering the claims that have been made by AI scientists and the critiques of such claims that have arisen from the philosophical community. We then focus on the fundamental logic and mathematics of computation, including techniques for proving that certain problems are "intractable" or "unsolvable." In the third part of the course we turn to social and political questions on which an enlightened view of the limits of computation can have an impact. Students will be evaluated through a combination of short papers and problem sets, along with a final project. PRJ, PRS, QUA, WRI  

2002 online resources

CS 193T: Biocomputational Developmental Ecology

How do animals evolve to survive in their environments? How do the ways in which they develop ("grow up") interact with their evolution? More generally, what are the principles governing the evolution of self- organizing systems, whether those systems are biological, cultural, or technological? These questions can be addressed both using traditional biological methods and using new methods based on computational "artificial life" simulations; in this course students will take both approaches to explore the foundations and the cutting edge of developmental ecology. Along the way students will tour several areas of biology and work with several forms of biologically-inspired technology including genetic algorithms and multi-agent simulations in visually-rich, 3D virtual worlds. This is a core course in the Culture, Brain and Development Program. This is an enhanced tutorial and registration in ET TRN Transformations is required. PRJ, QUA, REA, WR  

CCS 199: Research Practicum

Students with some background in cognitive science will work in research teams with faculty and advanced students, participating in on-going projects as research assistants. Each student will design an individual program of study with the instructor in charge of the research team. Students are required to work in the research labs a minimum of five hours each week.

Section C: Artificial Intelligence Research Laboratory

In this section students will work in the Creative Cognition Laboratory on one of two research project areas: (1) artificial intelligence and music/art, or (2) design choices for intelligent action systems. Students will generally be expected to have Lisp programming skills at the start of the course, although a limited number of seats will be reserved for strong computer science students who do not have prior Lisp programming experience.

CS 201: Research in Artificial Intelligence

Students in this course will become members of research teams focusing on projects designated by the instructor. Projects will involve open research questions in artificial intelligence, artificial life, or computational models of cognitive systems. They will be oriented toward the production of publishable results and/or distributable software systems. Students will gain skills that will be useful for Division III project work and graduate-level research. This class meets once a week for two hours and 40 minutes. Prerequisite: one programming course (in any language). This course satisfies Division I distribution requirements. PRJ, PRS, QUA 

2011 syllabus

CCS 215: Creative Programming Workshop

In this course we will study the process of computer programming, programs in the "code literature," and our own code while engaging in intensive programming projects. Students will program continuously and read, run, and criticize one another's programs. These programs may be written for any application area and may include utilities, games, artworks, cognitive models, and environmental or social simulations. We will develop the ability to critique programs from a variety of perspectives including complexity theory, software engineering, and aesthetics. The course will include class analysis of student work and exercises in specific computational techniques and programming paradigms (for example functional, declarative, and object-oriented programming). Students may work in a range of programming environments including both "scripting environments" (such as Director and HyperCard) and more traditional programming languages (C/C++, Lisp, Java, etc.). Prerequisite: fluency in any programming or scripting language. The class will meet once a week for two hours and fifty minutes. Enrollment limit is 20.

CCS 236: Seminar in Artificial Intelligence: Evolutionary Computation

Evolutionary computation techniques harness the mechanisms of natural evolution--including genetic recombination, mutation, and natural selection--to automatically produce solutions to a wide range of problems. In this course students will explore several evolutionary computation techniques and apply them to problems of their choosing. The technique of "genetic programming," in which populations of executable programs evolve through natural selection, will be emphasized. The prerequisite for this course is fluency in either Lisp or C. A background in Artificial Intelligence (for example, CCS 263: Artificial Intelligence) would also be helpful. The class will meet twice weekly for one hour and twenty minutes. Enrollment is limited to 20.

Online resources

CS 236: Creative Programming Workshop

In this course students will work on collaborative programming projects, using programming tools and methodologies presented in class. The course will include topics from software engineering, graphics, and functional programming, but will be focused on student-directed, faculty-mentored programming projects. Students will program continuously and read, run, and criticize one another's programs. These programs may be written for any application area and may include utilities, games, artworks, cognitive models, and environmental or social simulations. We will develop the ability to critique programs from a variety of perspectives ranging from complexity theory to aesthetics. Prerequisite: one programming course (in any language). This course satisfies Division I distribution requirements. PRJ, PRS, QUA

2010 syllabus

CS/NS 241: Computational Models of Biological Systems

(with Michelle Murrain)

As computers have gotten faster and able to handle more complex tasks, computer models of biological systems have become more widespread. These models have primarily been used for two purposes: to understand biological systems better, and to enhance computing capabilities by borrowing successful strategies from nature. How good are these models at fulfilling either of these purposes? What can we learn from thes models, and conceptual frameworks arising from them? We will review scientific literature on these models, experiment with them, and do some design of new models. The course will focus on computer models of neural, environmental, and genetic systems. Students taking this course should have some background in either biology or computer science. This course will meet for 1 and 1/2 hours twice a week, and 2 hours once a week for lab.

CS 254: Genetic Programming

Genetic programming is a computational technique that harnesses the mechanisms of natural evolution -- including genetic recombination, mutation, and natural selection -- to synthesize computer programs automatically from input/output specifications. It has been applied to a wide range of problems spanning several areas of science, engineering, and the arts. In this course students will explore several variations of the genetic programming technique and apply them to problems of their choosing. 

2012 syllabus, 2011 syllabus

CS 255: Radical Innovation in Digital Arts

(with Chris Perry)

For some artists, "digital art technologies" are just electronic versions of familiar paintbrushes, cameras, musical instruments, and other traditional art media. Other artists and technologists, however, are using digital tools to develop entirely new forms of art- making --- forms that complement or even replace traditional forms of art. In this course we will explore and extend work of this latter category. Students will work in teams to imagine, design, implement, and use radically new digital art-making technologies. Class time will be devoted to presentations on emerging arts technologies (both by faculty and by students), brainstorming sessions, and organizational meetings for project teams. Students will be expected to conduct background research, develop ideas, implement technologies, and produce demonstration artworks largely outside of class. Prerequisite: significant prior experience in computer science and/or in the use of some form of digital arts technology (for example digital animation, digital imaging, or computer music). This course satisfies Division I distribution requirements. EXP, PRJ, PRS, QUA

CS 262: Research in Artificial Intelligence

Students in this course will become members of research teams focusing on projects designated by the instructor. Projects will involve open research questions in artificial intelligence, artificial life, or computational models of cognitive systems. They will be oriented toward the production of publishable results and/or distributable software systems. Students will gain skills that will be useful for Division III project work and graduate-level research. Prerequisite: one programming course (any language)

2013 syllabus

CCS 263: Artificial Intelligence

Artificial Intelligence (AI) is a branch of computer science concerned with the construction of computer systems that "think." This course is an introduction to the core ideas of AI through concrete, hands-on activity. We will use the Common Lisp programming language to build working AI systems. We will study a range of techniques and mechanisms, including pattern matching and production systems, semantic networks and frame systems, heuristic search, genetic algorithms, resolution theorem proving, STRIPS-style planning, symbolic learning algorithms, augmented transition networks, and neural networks. We will also discuss the philosophical foundations of AI, alternative approaches to AI (for example, symbolic, connectionist, and situated activity approaches), and the implications of AI for cognitive science more broadly. The class will meet twice weekly for one hour and twenty minutes.

Online resources Spring 2001, Online resources Spring 2000, Online resources pre-Spring 2000

CS 263: Artificial Intelligence in 3D Virtual Worlds

Artificial Intelligence (AI) is a branch of computer science concerned with the construction of computer systems that "think." This course introduces the core ideas of AI through the development of programs for "intelligent agents" that inhabit three- dimensional virtual worlds. A high-level simulation and graphics package will be used to provide realistic physics and 3D animation for experiments in intelligent agent design. AI topics to be covered include pattern matching and production systems, heuristic search, genetic algorithms, neural networks, and logic-based approaches. We will also discuss the philosophical foundations of AI and the implications of AI for cognitive science more broadly. Prerequisite: one programming course (in any language). This course satisfies Division I distribution requirements. PRJ, PRS, QUA 

Documentation, including software developed in/for the course

CCS 282: Advanced Topics in Artificial Intelligence

This course will cover advanced concepts in artificial intelligence (AI) research, focusing on Lisp programming techniques for the construction of large AI systems. We will read papers on current directions in AI research, and we will design and construct AI programs in an exploration of computational cognitive science.

The course will be organized around problems of dynamic reasoning in complex environments, an important new area of AI research. Students will be expected to complete several small programming assignments and to collaborate on a group final project. The final project will focus on the question of how a dynamic AI system can be "creative" in producing reasoned responses. We will collectively design a system that implements a theory of creative response, and each student will implement part of the system. The Lisp programming concepts to be covered include Common Lisp data structures, the package system, and object-oriented programming techniques using the Common Lisp Object System (CLOS). The AI systems concepts to be covered include non-linear planners, reactive planning systems, and genetic programming.

The prerequisite for this course is CCS 263 (Introduction to Artificial Intelligence) or an equivalent Lisp-based AI course. The class will meet twice a week for one and one-half hours each time. Enrollment is limited to 20.

CCS 283: Animals and Animats: Natural and Artificial Intelligence and Behavior

(with Mark Feinstein)

Even very simple natural organisms interact with the world in very complex ways, and often exhibit the kind of adaptive behavior that might be called "intelligent." Cognitive scientists and biologists want to understand how the minds and brains of animals work and how they evolved. Computer scientists are equally interested in the nature of intelligent behavior---the capacity to represent information, move in the world, lear, solve problems, interact with other organisms, and make decisions---as it might be implemented in autonomous machines liker robots or in "animats," computer simulations of living organisms.

In this course we will grapple with the nature of intelligence and behavior from all of these perspectives. Students will examine the main methods and results that have emerged within the fields of animal behavior, animal cognition, artificial intelligence and robotics. We will also look closely at recent developments in "genetic programming," which models some of the features of natural selection and adaptation in the biological world, and also provides an exciting new way to think about creating computer programs. Class will meet three times a weel for one-and-one-half hours each time. Enrollment is open, by instructor permission.

CS 284: Seminar in Artificial Intelligence: Evolutionary Computation

Evolutionary computation techniques harness the mechanisms of natural evolution--including genetic recombination, mutation, and natural selection--to automatically produce solutions to a wide range of problems. In this course students will explore several evolutionary computation techniques and apply them to problems of their choosing. The technique of "genetic programming," in which populations of executable programs evolve through natural selection, will be emphasized. The prerequisite for this course is fluency in either Lisp or C. A background in Artificial Intelligence (for example, CS 263 Artificial Intelligence) would also be helpful.

Online resources (Fall, 2001), Online resources (earlier version, co-taught with Jaime Dávila) 

CS 303: Unconventional Computing

Computation can be performed not only by silicon chips and electricity but also by many other things including tinker toys, billiard balls, water pipes, lights and mirrors, vats of chemicals, DNA, bacteria, and quantum mechanical systems. Furthermore, in some models of computation billions of events may take place simultaneously, with or without synchronization and with or without explicit programming. Some of these unconventional models of computing appear to provide advantages over current technology and may serve as the basis for more powerful computers in the future. In this course we will survey a wide range of unconventional computing concepts, we will consider their implications for the future of computing technology, and we will reconsider conventional computing concepts in this broader context. Prerequisite: At least two courses in computer science.

2013 syllabus 

CS 311: Research in Artificial Intelligence

Students in this course will become members of research teams focusing on projects designated by the instructor. Projects will involve open research questions in artificial intelligence, artificial life, or computational models of cognitive systems. They will be oriented toward the production of publishable results and/or distributable software systems. Students will gain skills that will be useful for Division III project work and graduate-level research. Prerequisite: one programming course (in any language). This class meets once a week for two hours and 40 minutes.

2011 syllabus

CS 338 (formerly CS 335): Current Issues in Cognitive Science

This course is recommended for all concentrators and advanced students in cognitive science, regardless of discipline (psychology, philosophy, linguistics, computer science, education, etc.). Each week we will examine a current issue in cognitive science, focusing on recent journal articles and essays. We will seek to make the issues comprehensible to one another across disciplinary divides and to highlight potential areas for interdisciplinary collaboration. Students will be expected to write a brief reaction paper each week, to engage in intensive discussions during the single weekly meeting, and to produce an extended written discussion of one of the issues by the end of the term. This class meets once a week for two hours and 50 minutes.

SMITH COLLEGE CS 280: Programming Language Paradigms

Microprocessors manipulate patterns of bits in small numbers of simple ways. But high-level programming languages allow us to think of these bits and the processes that manipulate them in a remarkable variety of ways. The abstractions provided by current programming languages include arbitrary-precision numbers, symbolic structures, functions as data, logical inferences, and analogs to real-world objects. In this course we will discuss the dimensions along which current programming languages differ and think about some of the future possibilities for human-machine communication. Students will be expected to write small programs in several different languages and to complete a final project that explores the unique features of one programming language in detail. There will also be midterm exam on programming language concepts.

Online resources