CSC573/293: Synthesis of Systems

This is a new class. Ideally, we will have around 16--20 students, evenly split between undergraduate/graduate students.

Goals

This class studies recent computer science techniques that let computers write programs. At the end of this course, you will learn to write programs that write programs. Consider the examples below.

Programming By Example

What if you could just show computers examples of how inputs get tranformed into outputs and let them write the program?

This is programming by example, a notable example of which exists in Excel 2013 as the FlashFill feature (here's another video on YouTube).

There's tremendous interest in applying these techniques to data wrangling (i.e. getting data into shape for analysis using data science techniques), which could simplify many repetitive tasks for analyzing data.

Writing Less Code

Can we write less code? Could we let code with "holes" in it that are then filled in by the computer? This is the premise of sketching.

Course plan

This course will study applications in computers systems for automatic program synthesis techniques like the ones listed above.

There is no real textbook for these techniques yet, so this is a course that requires:

This is a cooperative class -- our collective efforts will be necessary to understanding these advanced techniques.

Planned course organization

Working in groups of up to 4, students will create up to 3 projects over the course of the semester.

The prerequisites CSC254 and CSC255 are strongly recommended (but not mandatory). Knowledge of techniques from logic and AI is very useful. I prefer teams of students with different skillsets -- e.g. one with 254, one with 255, one with AI, a grad student, etc.

More to come over the summer

Sign up, or drop in to my office (WH 3409) to ask questions