To receive information and participate in discussions about about computer science and local computing-related events, jobs, projects, etc., subscribe to the "computerscience" email list; for details see http://lists.hampshire.edu/mailman/listinfo/computerscience
To receive information and participate in discussions about the School of Cognitive Science and related events and issues, subscribe to the "cs" email list; for details see http://lists.hampshire.edu/mailman/listinfo/cs
I am on sabbatical for the 2016/2017 academic year.
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.
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.
2014 syllabus, 2012 syllabus, 2001 online resources, 1998 online resources
(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.
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
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
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:
conscious observation of a machine interferes with its operation,
calculations that are not performed can have as much impact on an answer as those that are,
different parts of a computation can be said to take place in different parallel universes.
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.
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.
2015 syllabus, 2002 online resources
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
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.
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
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.
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.
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
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.
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.
2014 syllabus, 2012 syllabus, 2011 syllabus
(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
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)
Artificial Intelligence is a branch of computer science concerned with the development of computer systems that "think." In this course we will explore the core ideas of artificial intelligence through readings, presentations, discussions, and hands-on programming activities. A range of practical artificial intelligence techniques will be covered, and students will complete programming projects to demonstrate engagement with the themes of the course. Prerequisite: One programming course (in any language).
2015 Syllabus, 2014 syllabus, Online resources Spring 2001, Online resources Spring 2000, Online resources pre-Spring 2000
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.
(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.
This course is an inquiry-based introduction to programming and computational concepts for students intending to concentrate in cognitive science, natural science, or computer science. Students will learn to write programs for data manipulation and scientific modeling in a general purpose programming language, and they will also have the opportunity to work in special-purpose science programming environments. Several of the core concepts of computer science that underlie computational approaches across the sciences will be introduced. No previous experience with programming is required. Prerequisite: One course in cognitive or natural science.
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.
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.
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.
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.