
CS294: Program Synthesis for Everyone - nickmain
https://people.eecs.berkeley.edu/~bodik/cs294fa12
======
kasbah
Nice to see this do so well over here. I posted this to /r/Racket earlier and
as I said over there:

> This has screencasts or at least slides for most lectures. I have just
> started going through it myself and plan to "audit" all the lectures and do
> the homework assignments. Anyone have an interest in this and would like a
> virtual study buddy?

It's also worth pointing out that this excellent RacketCon talk [1] made me go
seek out more about Excel Flash Fill [2] and in seeking to understand how that
works I stumbled upon this course.

[1]:
[https://www.youtube.com/watch?v=nOyIKCszNeI&list=PLXr4KViVC0...](https://www.youtube.com/watch?v=nOyIKCszNeI&list=PLXr4KViVC0qKSiKGO6Vz9EtxUfKPb1Ma0)

[2]: [http://research.microsoft.com/en-
us/um/people/sumitg/flashfi...](http://research.microsoft.com/en-
us/um/people/sumitg/flashfill.html)

~~~
vanderZwan
BTW, here's a detailed technical talk about that Excel Flash Fill thing from
last year's Curry On! conference:

Sumit Gulwani - Data Manipulation using Programming By Examples and Natural
Language

[https://www.youtube.com/watch?v=uqV9BlxEG5s](https://www.youtube.com/watch?v=uqV9BlxEG5s)

~~~
kasbah
Thanks for linking that! I hadn't seen it and I _had_ been searching YouTube
for lectures on FlashFill but the popularity of this feature made it hard to
find anything other than tutorials on using it in Excel.

------
tikhonj
Oh hey, I actually took this class. Funny to see it linked on HN. It was
easily the single most valuable class I took in undergrad.

There's definitely a lot of useful information there, but I'm not sure how
well it's organized because the course website wasn't designed to stand on its
own.

~~~
kasbah
I am planning to go through this course virtually from the material linked.
Would you mind if I get in touch with you if I get stuck on something?

~~~
tikhonj
Sure, although I'm not sure how much I remember of any given topic :P.

------
LaPrometheus
An advanced version of this course, by one of the teachers of CS294.

[https://courses.cs.washington.edu/courses/cse507/16sp/](https://courses.cs.washington.edu/courses/cse507/16sp/)

------
echelon
I'm not familiar with this discipline. What might this subject matter be used
for? Is this related to ML in a broader sense?

~~~
theoh
It's about making tools that help with the structural aspects of generating
code. It's not part of machine learning, but rather it's very much about
symbolic/analytic/logical production of code based on a specification of some
sort.

~~~
SolarNet
I mean just about every thing was AI at one point; program synthesis was seen
as AI (like in the 70s) right up until it wasn't after we effectively encoded
it into programming languages. For example lisp it self was effectively AI
research as well. In computer science it's pretty typical to refer to things
as AI right up until we understand how to engineer it; the history of email
that was posted recently is a great example (at first we just had computers
extracting features and learning things, and it was vague and generic; these
days we understand the system as a reputation network, and we understand the
details of each of the features because it required a bunch of engineering to
make that specific solution scale and fast).

------
bbcbasic
Can someone give me the layman summary of this. I.e. what day to day problem
could this be useful to solve?

Would it be useful for creating a DSL for example?

~~~
lmeyerov
The same concept is behind Viv, the successor to Siri:
[http://www.esquire.com/lifestyle/a34630/viv-artificial-
intel...](http://www.esquire.com/lifestyle/a34630/viv-artificial-
intelligence-0515/)

A lot of the recent work here takes advantage of SMT solvers (next generation
of SAT solvers), but that's not necessary. As with Viv and Flash Fill, a lot
of it is about changing the concept of what it means to write a program, and
use alternative approaches to "complete" it. As another example, generating
0-day bug fixes based on how code "should" look, or recommending typed
completions to gaps in code.

For my past work in that group, I looked at "sketching" efficient schedules
for parallel code, where I only specified the bits I cared about. Nowadays, I
think about automatically generating queries for visual analytics.

------
spynxic
There is a section named, "Compile your programs to formulas"

Just curious, are the products of all programs formula? Worded differently,
are the products of all functions formula?

~~~
tikhonj
I'm not sure what you mean by this question. What that lecture covers is
essentially how to express an _approximation_ of the _operational semantics_
of a simple language as a logic formula in a very specific kind of logic (ie
one of the theories supported by the Z3 SMT solver). It only supports a small
number of constructs and data types, and handles infinite loops by placing an
arbitrary bound on how far a program can run. It doesn't tell you anything
about "all programs" or "all functions".

------
PaulHoule
Nice to see this done at the 2 level.

~~~
cpchen
In UC Berkeley, the 2 level means graduate student level.

