The Fall 2020 semester will feature a new course on the fundamentals of reactive programming, CSCI 49380/79526.
For those not familiar with reactive programming, below is a summary from Wikipedia:
… [R]eactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. With this paradigm it is possible to express static (e.g., arrays) or dynamic (e.g., event emitters) data streams with ease, and also communicate that an inferred dependency within the associated execution model exists, which facilitates the automatic propagation of the changed data flow.
In essence, reactive programming is a development model structured around asynchronous data streams. In this course, we will dive into the fundamentals of reactive programming. The first part of the course will be a hands-on, practical introduction to reactive programming, including its features, common usages, advantages, and drawbacks. In the second part, since this is a seminar-style class, we will explore research topics surrounding reactive programming, including how to improve it, adopt it in existing systems, and other open problems.
The course prerequisite is CSCI 33500 or equivalent. Students are highly advised to be well-versed with at least one high-level programming language. Although prior knowledge of functional programming is helpful, it will be reviewed early in the course. Possible course topics are as follows:
- Functional programming overview/recap.
- Asynchronous programming.
- The actor programming model.
- Eventual consistency.
- Stream processing.
- Failure handling and processing rate.
- Current research on reactive programming.
- Open programs involving reactive programming.
The learning objectives include techniques for designing and implementing scalable, resilient, responsive, and highly-concurrent systems correctly and efficiently using high-level abstractions. You will learn how to:
- Effectively build asynchronous computations.
- Develop concurrent systems using Actors.
- Understand the characteristics that make systems resilient to failures yet scalable.
- Deal with infinite and finite data streams.
- Understand how back-pressure can affect data and control flow.
By also understanding the research surrounding this area, we also hope to begin a research project to improve the state-of-the-art of reactive programming that involves the entire class.