CS 6304 Programming Abstractions for Distributed, Parallel and Ubiquitous Systems Dr. Eli Tilevich Description: The complexity of modern computing systems presents exciting intellectual challenges to software engineering and programming languages researchers. Distribution has become an essential requirement for the majority of application domains, but building reliable and efficient distributed system remains a delicate and complex task. The emergence of multi-core, and soon many-core, architectures requires that explicit parallelism be employed to take advantage of the new processor trends. Ubiquitous systems employ multiple heterogeneous computing devices in sophisticated setups to create unprecedented new kinds of applications. To ensure the continued success and innovation of these state-of-the-art systems requires that the complexity of their construction, evolution, and maintenance be properly managed. And an essential ingredient of managing this complexity are programming abstractions. This course will explore the foundational principles and latest research on programming abstractions, including frameworks, language extensions, domain specific languages, code generators, and middleware. The course will examine the latest trends in programming abstractions by reading and discussing the relevant research literature. The course will also include a term project concerned with creating and evaluating a novel programming abstraction. Students will be encouraged to explore programming abstractions that can benefit their respective research areas.