Fall 2014 Special Topics Course Descriptions

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

CSCI-GA 3033-001 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.

CSCI-GA 3033-002 Distributed Systems

Distributed systems help programmers aggregate the resource of many networked computers to construct highly available and scalable services. This class teaches the abstraction, design and implementation techniques that allow one to build fast, scalable, fault-tolerant distributed systems. Topics include multithreading, network programming, consistency, naming, fault tolerance, security and several case studies of distributed systems.

Prerequisites: This is a capstone course and has CSCI-GA 1170 Fundamental Algorithms, CSCI-GA 2110 Programming Languages and CSCI-GA 2250 Operating Systems as prerequisites.

CSCI-GA 3033-003 Music Software Projects

Did you ever wonder why there are 12 notes in the western music scale? Or how the intervals between notes came to be? When were the first musical scales developed or "discovered" and how (and why) have they been modified since? Who were the key innovators of western music theory over the last few centuries?

It is not uncommon for software developers to have an affinity for music. After all, the creation of both software and music is part art and part science. Further, music and computing are built upon fundamental mathematical principles. While it is not required to understand music theory to be a good player, understanding why we are constrained to a certain set of notes is an enlightening topic - for musicians and non-musicians alike.

This course is for students interested in how both music and software are constructed. Student teams will build software in phases which will demonstrate the underlying rules in modern western music theory. The beauty of software is that it can be applied in just about any domain.

Music students are encouraged to apply even though this course is primarily a software development class. The interdisciplinary product development teams will be composed of at least one engineer and one subject domain expert who will work together on the assignments. The software the teams build will be used to demonstrate how music theory developed as well as give students an intuitive grasp of some fascinating underlying universal truths.

CSCI-GA 3033-004 Graphics Processing Units (GPUs): Architecture & Programming

In this course, we will cover architectural aspects and capabilities of modern GPUs (graphics processing unit) and will learn how to program GPUs to solve different type of problems. Many computations can be performed much faster on the GPU than on a traditional processor. This is why GPUs are present now in almost all computers; and the majority of Top 500 supercomputers in the world are built around GPUs. GPUs are no longer restricted to graphics applications but are now used for a diverse set of applications and domains. This introduces the concept of general-purpose GPUs or GPGPUs, which is the main subject of this course.

Prerequisites: This is a capstone course and has CSCI-GA 1170 Fundamental Algorithms, CSCIGA 2110 Programming Languages and CSCI-GA 2250 Operating Systems as prerequisites.

CSCI-GA 3033-005 Principles of Software Security

Traditionally, computer security is enforced by the operating system, which uses special hardware support to ensure security properties at application boundaries. However, the proliferation of successful attacks, such as viruses, worms, SQL injection, and cross-site scripting, shows that traditional approaches to security are insufficient. Adversaries exploit weaknesses both in the operating system itself, bypassing any protection mechanisms, and more and more frequently at the application level, where the operating system provides very limited guarantees. In this class we consider how programming language techniques can be used to fill the security gap by defending against application-level attacks.

CSCI-GA 3033-006 Realtime & Big Data Analytics

This course introduces the architectures and technologies at the foundation of the Big Data movement. These technologies have facilitated scalable management and processing of vast quantities of data collected through realtime and near realtime sensing. We explore tools enabling the acquisition of data in the social domain and the fusion of those data when in flight and at rest.

The material covered in this course aligns with the prevailing state of the art in Big Data technologies, which continues to be a rapidly evolving landscape as new technologies emerge and existing ones evolve and mature.

Students are required to complete weekly reading and/or programming assignments and demonstrate mastery of course topics by designing, developing, and demonstrating an analytics project of their choosing. Class time will be set aside for project proposal and final demo.

Prerequisites: CSCI-GA 2250 or equivalent Operating Systems course; programming experience in C/C++ or Java for assignments and final project; CSCI-GA 2262, CSCI-GA 2620, or undergraduate course in networks. A familiarity with databases will be useful.

CSCI-GA 3033-007 Social Multiplayer Games

The course will teach how to develop online casual multiplayer games using open technologies such as GWT, Closure, AppEngine, DHTML, JSON, AJAX, long-polling, HTML5, XMPP, OAuth2, PhoneGap, etc. The course has two big projects: An individual project where you develop a turn-based multiplayer game (with mobile and desktop graphics, artificial-intelligence, save and load, etc.), and a small group project. The course will also teach about ranking systems, artificial intelligence for games, real-time and turn-based games. The course will not concern with 3D graphics.

CSCI-GA 3033-008 Extreme Design

The Extreme Design class is an intensive project-oriented class that is specifically designed for students interested in translating cool computing centric ideas to functional end-to-end computer system prototypes (hardware or software) with the goal of encouraging students to pursue bold startup-like ideas. This class is open for students at all levels (PhD, MS and undergraduate) and in specific cases to students in other disciplines (who already have a cool project idea). Right from the beginning, students in the class will form small teams where each team will work on a single project idea that solves an important research or societal problem. Each team is expected to design and implement an end-to-end system prototype that will be showcased at the end of the semester. Specific project ideas will be provided by the instructor and student teams are open to pitch their own ideas. The expected workload per student can be 15-20 hrs a week and teams are expected to constantly interact with other teams to discuss and exchange ideas.

The broad theme for this semester's Extreme Design class is: "Sensing, Crowdsourcing and Data". The class will cover several real-world application problems and scenarios (health, energy, education, medicine) which can be addressed based on the theme of gathering and analyzing data from the physical environment using smart sensing platforms and crowdsourcing systems. With the growing popularity of Internet of Things, there has been a dramatic growth in the number of unique devices, platforms and programming environments with a broad array of capabilities that were not open earlier for prototyping and development. Students will be provided exposure to several tools and platforms that can be leveraged by individual teams in their project design and implementation. Specific topics covered include: basics of programming embedded systems, sensing and actuation platforms, data analytics tools, crowdsourcing systems and relevant material for individual project ideas.

The class is open to students across disciplines, but is best suited for students who have a strong background in programming and are passionate towards pursuing startup-like ideas. Since this is an intensive class, class enrollment is limited and interested students should first obtain the permission of the instructor to register. Please send your CV to the instructor and schedule a time to meet with the instructor. For Computer science students, the pre-requisites are the relevant classes so that students are comfortable in design and implementation of systems (for undergraduate CS students, the prerequisite is CSCI-UA 202 Operating Systems and for MS students, there are no pre-requisites but are expected to be proficient in operating systems and programming). Students in other disciplines, who have interesting computing centric problems in their domains are welcome to take the class but should first schedule a meeting with the instructor.

CSCI-GA 3033-009 Multicore Processors: Architecture & Frameworks

The tremendous advances in process technology have created a revolution both in hardware and in software. On the hardware side, we moved from single core processors to multicore/manycore processors. Multicore chips are now everywhere. You can find them in smartphones, playstations, notebooks, all the way up to supercomputers. To benefit from these chips, software must be parallelized, which starts another revolution in software.

The purpose of this course is to introduce you to both the hardware advances and parallel programming techniques targeting multicore and many core processors. You will learn how to make the best use of the underlying hardware to build applications that are faster, more power-efficient, and more reliable.

Prerequisites: This is a capstone course and has CSCI-GA 1170 Fundamental Algorithms, CSCI-GA 2110 Programming Languages and CSCI-GA 2250 Operating Systems as prerequisites.

CSCI-GA 3033-010 Virtualization Technology

The course will cover the basics of virtual machine technology and its use in PCs, cloud servers, and mobile phones. Students will learn binary translation, page table manipulation, and other low level machine manipulation. Some knowledge of operating systems and computer architecture is assumed, as well as programming. There will be a mid-term exam as well as a final project.

top | contact webmaster@cs.nyu.edu