Graduate Special Topics in Computer Science

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

G22.3033-001 Distributed Systems

Distributed systems help programmers aggregate the resources of many networked computers to construct highly available and scalable services. This class teaches the abstractions, design and implementation techniques that allow you to build scalable, high performance distributed systems. Topics include multithreading, network programming, consistency, naming, fault tolerance, and security and several case studies of distributed systems.

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

See the course homepage for more information.

G22.3033-002 Advanced Vision

G22.3033-003 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#.

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 pervasice 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 pf legacy applications via on-the-fly tansformation of XML messages, and support a wide variety of XML-enabled client channels that include 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 architcting, designin, 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 envirnments, distributed object computing platforms, object management architectures, component-based computing enviornments, 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 supports, development environment, and monitoring tools.

As they design and implement applications using commercial and open source application server technologies, 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-tolarge-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 experimental purpose. As part of the curse, 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-004 Quantum Hybrid Systems

See the course homepage for more information.

G22.3033-005 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 speech 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.

This class is open to undergraduate students, as well as graduate students.

See the course homepage for more information.

G22.3033-006 Open Source Tools

This course covers a brief history and philosophy of open source software, followed by an in-depth look at open course tools intended for developers. In particular, we will present an overview of the Linux operating system, command line tools (find, grep, sed), programming tools (GIT, Eclipse, DTrace), web and database tools (Apache, MySQL), and system administration tools. We will also cover scripting languages such as shell and Perl. Students who have taken Unix Tools (G22.2245) are not allowed to register for this course.

See the course homepage for more information.

G22.3033-007 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 cilminates 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-008 Finance Projects

This course will be taught by a veteran Wall St. technology manager, currently employed at a top tier investment bank. The theme of this course will be an "applied case study" and will focus on Fixed Invome markets. The semester will begin with a big-picture view of the markets, the inner workings of an investment bank, the market players, and where software engineers fit in. The students will be grouped into small teams to build a financial application using practical software engineering principles."

It is expected that each team will build a risk management framework, starting with basic components; some built by the students and some provided. The professor and guest lecturers will draw on their own experiences in the industry to make this as practical, informative (and entertaining) as possible.

Prerequisites: It is assumed that the students can code in C++. No prior expierence in the financial sector domain is required- just a desire to learn.

See the course homepage for more information.

G22.3033-009 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 work. etc. games.

See the course homepage for more information.

G22.3033-010 Bioinformatics

See the course homepage for more information.

G22.3033-011 Deductive Verification of Reactive Systems

See the course homepage for more information.

top | contact