Fall 2012 CS Electives

CS 181C: Domain Specific Languages

This course explores a surprising concept: programming as language design. Good programming practice advises us to factor a common operation into a separate function or method, to be invoked whenever that operation is needed. A domain-specific language (DSL) takes this idea one step further by factoring several common operations into their own programming language. This course systematically investigates why and how a programmer might create a domain-specific language. Along the way, we will write programs in many different languages for many different domains. The course will conclude with a project that asks you to design and implement your own domain-specific language.

CS 181D: Complexity Theory

In this course we explore a number of facets of computational complexity theory, from the famous proof that 3SAT is NP-complete to complexity classes beyond NP and within P. We examine a number of surprising results and elegant proofs about the relationships between complexity classes. The course also exposes students to some of the fun and useful applications of computational complexity theory.

CS 181E: Fundamentals of Parallel Programming

The goal of this course is to introduce you to the fundamentals of parallel programming and parallel algorithms, using a pedagogical approach that exposes you to the intellectual challenges in parallel software without enmeshing you in low-level details of different parallel systems. Laboratory assignments will explore these topics through a simple parallel extension to the Java language called Habanero-Java (HJ), developed in the Habanero Multicore Software Research project at Rice University.

CS 181F: Big Software

This course will overview the various phases and activities in large software projects, study the problems that commonly occur in each phase and approaches for addressing them, and then create miniature-big-projects in which all these skills can be applied.