Graduate Special Topics in Computer Science

NOTE: for descriptions of standard graduate computer science courses, see Graduate Course Descriptions.

G22.3033-001 Analysis of Reactive Systems, applied to Software Engineering and Biological Modeling

See the course homepage for more information.

G22.3033-002 Cancelled

G22.3033-003 Computer Games

You will learn about computer game genres, from casual games to first person 3D games to asynchronous multiplayer games and beyond, and you will learn principles of game design hands-on, by building rapid prototypes of 2D games, followed by larger team projects to design, implement and evaluate 3D You will take turns assuming different roles within these teams: level design, A.I. programming, character design, animation, There will be an end-of-semester group show, to which the public will be invited, in which you will have an opportunity to demonstrate your best

See the course homepage for more information.

G22.3033-004 Experiments in Motion Capture


This class is open to students of various backgrounds (Science, Art, Dance, Film, Architecture, Music etc) and to both graduate students and advanced undergraduate students.

If you want to learn what’s “under the hood” in motion capture, and want to push the envelope of what is considered motion capture (and are able to program C / C++), choose the “Technical Track” of this joint Courant & Tisch collaboration. If you are more interested in the production and artistic aspects of motion capture (and do not want to program), choose the “Production Track” of this class. Both tracks overlap 80%, and the entire class (production & technical) will move back and forth between the Courant Motion Capture Lab and the Tisch Gaming & New Media Center. Both tracks are very hands on, and besides lectures and assignments, the final group project is considered the most important part of this class. We hope that most class projects will be interdisciplinary, involving students from both tracks.


Motion Capture, with a long tradition in the sciences and art, is the process of recording human movement (or other movement) in physical space, and transforming that information in a computer-usable form. In this class, students will discover how to use motion capture for computer animation, and all the enthusiasm that it currently sparks.

The use of Motion Capture has increased in popularity, due to recent technological advances, and due to increased demand in entertainment, computer animation, visual input for new Human-Computer-Interfaces and scientific applications. The course will introduce students to the use of state-of-the-art, marker-based and vision based motion capture set ups, working with dancers.

As part of an effort to explore and understand motion from an artistic and from a scientific point of view, Chris Bregler ( and Jean-Marc Gauthier ( will introduce students to the exciting and sometimes controversial art of capturing and recreating motion of living creatures. We will look at designing motion and the ability to create the illusion of life as applied to the expressions and the styles of a person or character. Students will have hands on experience with a motion capture set-up that can measure full-body movements from dancers, for example from the Pilobolus Dance Company, facial expressions from actors or motions of animals. Students will also explore the history of motion with recordings going back to Marey and Muybridge in the late 19th century and early applications of rotoscoping dating back to animated features like Disney's Snow White.

Production Track -- starting time 6:20pm, Wed: Special emphasis will be placed on creating interactive story telling involving interactive character animation using Alias Maya, Alias Motion Builder and Virtools.

Technical Track -- joining at 7:10pm, Wed: -- “technical-track” students are welcome to also show up early for production track, but this is not a requirement. On the technical track, in some break-out sessions, special emphasis will be placed on implementing core motion capture and vision techniques in OpenCV on XP, OS X, or Linux (using C++).

INSTRUCTORS Chris Bregler (CB), Computer Sciences/Courant Institute and Jean-Marc Gauthier (JMG), Open Arts/Tisch

PREREQUISITES This class has limited seats, and therefore consent from instructor is needed. Please email both instructors (, your relevant background, what classes you took before, and why you want to take this class.

See the course homepage for more information.

G22.3033-005 Automated Planning

In this course, we will study how a robot or automated agent can construct a plan to achieve a desired goal. Research on automated planning has been divided into two, laregely separate, categories: Classic planning, in which actions are atomic and cause discrete changes to the world; and continuous planning, in which the agent must find its way through a continuous space.

Topics to be discussed include:

Classical planning:

The classical planning paradigm

SAT-based planning

Partial-order planning

GRAHPLAN algorithm

Regression planning

Hierarchical planning

Reactive planning

Planning with perception

Continuous planning:

Configuration spaces

Sampling-based motion planning

Combinatorial motion planning

Decision-theoretic planning

Planning with perception

Planning under differential constraints

See the course homepage for more information.

G22.3033-006 Distributed Storage Systems

Are you curious about how to manage an abundance of commodity PCs to store and access petabytes of data? This class teaches abstractions, design and implementation techniques that allow you to build the kind of scalable, high performance distributed systems that can deal with real-world workload. Topics include server design, network programming, naming, fault tolerance and security.

This class is a graduate level course consisting of lectures, a series of programming labs and a final team project. Prerequisites include undergraduate operating systems. programming experience in C/C++ is useful for the labs.

See the course homepage for more information.

G22.3033-007 Application Servers

Prerequisite: Students enrolling in this class are expected to have taken G22.2110 (i.e., Programming Languages) and G22.2250 (i.e., Operating Systems) and their prerequisites or to have equivalent knowledge. Students are also expected to have taken a Java and/or C# intermediate course, and to have basic knowledge of the Core JFC classes, and the ability to program in Java and/or C#. Some exposure to the topics and techniques covered in G22.3033-02 (i.e., Programming for the World Wide Web) is a plus.

An application server is a rich, highly portable software program that runs on a middle tier server and handles all application operations between client applications running on pervasive devices and back-end databases and business applications. Application servers provide a platform independent programming interface for developing portable applications in a variety of programming languages. Application servers also facilitate the integration of legacy applications via on-the-fly transformation of XML messages, and support a wide variety of XML-enabled client channels that include traditional web clients and a growing set of smart devices. Application servers enable programmers to implement distributed applications using a variety of architectural patterns including traditional Model-View-Controller (MVC) architectures, Service Oriented Architectures (SOAs), Point-to-Point (P2P) Architectures, Grid-Computing Architectures, etc. Using an SOA architectural pattern, and emerging standards such as SOAP, application servers enable a new generation of "web services" that allow systems to make remote procedure calls to other systems over the Internet. Today, J2EE, .Net, and CORBA 3 application servers set the stage as enabling platforms for Web Services initiatives, Web appliances, and wireless applications.

This course concentrates on architecting, designing, and developing persistent software applications using application server technology. Throughout the course, students are exposed to the evolution of application server architectures that started in the mid 1990s, and experiment with corresponding approaches based on traditional client-server technology, CGI frameworks, page-based extended HTML environments, distributed object computing platforms, object management architectures, component-based computing environments, and frameworks based on MVC, SOA, P2P, etc. The course conveys the necessary skills to select the proper application server architecture based on projects' business and technical requirements. The course also explains how to integrate an application server into an existing Web site, as well as how to implement an application server-based Web application from the ground up. Students will learn how to configure and operate application servers in production environments, taking advantage of features available in mainstream commercial frameworks such as scalability, concurrency, security, fault tolerance, auto-deployment, communications support, development environment, and monitoring tools.

As they design and implement applications using commercial and open source application server technologies (e.g., IBM WAS, BEA WebLogic, .Net, OpenCCM, etc.), students will learn how to identify application patterns that lead to the most effective use of the various services provided within application server frameworks. The design and implementation of the persistence and legacy application integration layers, using related application server technology, will be particularly emphasized. Case studies, provided as part of the course, will demonstrate how medium- to large-size sites manage the complexities inherent in these endeavors. These case studies will help students get a firm understanding of how application servers work and how to best deploy complex applications in a real-world situation. Although, the course will strive to provide a comprehensive coverage and classification of application server technologies, attempts will be made whenever possible to select open source technologies for experimentation purpose. As part of the course, students will be exposed to next generation application server technologies including Model Driven Architectures (MDAs), Pattern Driven Architectures (PDAs), as well as reflective, multimedia and agent-enabled frameworks.

See the course homepage for more information.

G22.3033-008 Production Quality Software

In this course students learn to develop production quality software. Lectures present real-world development practices that maximize software correctness and minimize development time. A special emphasis is placed on increasing proficiency in a particular programming language by doing weekly development projects and participating in code reviews. Assignments become more sophisticated as the semester progresses, eventually incorporating unit tests, build scripts, design patterns, and other techniques. The course culminates with an assignment that requires students to contribute to an open-source project of their choice.

See the course homepage for more information.

G22.3033-009 Speech Recognition

This course gives a computer science presentation of automatic speech recognition, the problem of transcribing accurately spoken utterances. The description includes the essential algorithms for creating large-scale sppech recognition systems. The algorithms and techniques presented are now used in most research and industrial systems.

Many of the learning and search algorithms and techniques currently used in natural language processing, computational biology, and other areas of application of machine learning were originally designed for tackling speech recognition problems. Speech recognition continues to feed computer science with challenging problems, in particular because of the size of the learning and search problems it generates.

The objective of the course is thus not just to familiarize students with particular algorithms used in speech recognition, but rather use that as a basis to explore general text and speech and machine learning algorithms relevant to a variety of other areas in computer science. The course will make use of several software libraries and will study recent research and publications in this area.

top | contact