  Efforts to push programming beyond static textual code have sought to imbue
programming with multiple distinct qualities. One long-acknowledged quality is
liveness: providing programmers with in-depth feedback about a program's
dynamic behavior as the program is edited. A second quality, long-explored but
lacking a shared term of art, is richness: allowing programmers to edit
programs though domain-specific representations and interactions rather than
solely through text. In this paper, we map the relationship between these two
qualities and survey past work that exemplifies them. We observe that systems
combining liveness and richness often do so at the cost of an essential quality
of traditional programming: composability. We argue that, by combining
liveness, richness, and composability, programming systems can better capture
the full potential of interactive computation without leaving behind the
expressivity of traditional code.
