  Traditionally, writing code is a non-graphical, abstract, and linear process.
Not everyone is comfortable with this way of thinking at all times. Can
programming be transformed into a graphical, concrete, non-linear activity?
While nodes-and-wires and blocks-based programming environments do leverage
graphical direct manipulation, users perform their manipulations on abstract
syntax tree elements, which are still abstract. Is it possible to be more
concrete - could users instead directly manipulate live program values to
create their program?
  We present a system, Maniposynth, that reimagines functional programming as a
non-linear workflow where program expressions are spread on a 2D canvas. The
live results of those expressions are continuously displayed and available for
direct manipulation. The non-linear canvas liberates users to work
out-of-order, and the live values can be interacted with via drag-and-drop.
Incomplete programs are gracefully handled via hole expressions, which allow
Maniposynth to offer program synthesis. Throughout the workflow, the program is
valid OCaml code which the user may inspect and edit in their preferred text
editor at any time.
  With Maniposynth's direct manipulation features, we created 38 programs drawn
from a functional data structures course. We additionally hired two
professional OCaml developers to implement a subset of these programs. We
report on these experiences and discuss to what degree Maniposynth meets its
goals of providing a non-linear, concrete, graphical programming workflow.
