  Programming requires much more than just writing code in a programming
language. It is usually done in the context of a stateful environment, by
interacting with a system through a graphical user interface. Yet, this wide
space of possibilities lacks a common structure for navigation. Work on
programming systems fails to form a coherent body of research, making it hard
to improve on past work and advance the state of the art. In computer science,
much has been said and done to allow comparison of **programming languages**,
yet no similar theory exists for *programming systems*; we believe that
programming systems deserve a theory too.
  We present a framework of *technical dimensions* which capture the underlying
characteristics of programming systems and provide a means for conceptualizing
and comparing them. We identify technical dimensions by examining past
influential programming systems and reviewing their design principles,
technical capabilities, and styles of user interaction. Technical dimensions
capture characteristics that may be studied, compared and advanced
independently. This makes it possible to talk about programming systems in a
way that can be shared and constructively debated rather than relying solely on
personal impressions. Our framework is derived using a qualitative analysis of
past programming systems. We outline two concrete ways of using our framework.
First, we show how it can analyze a recently developed novel programming
system. Then, we use it to identify an interesting unexplored point in the
design space of programming systems.
  Much research effort focuses on building programming systems that are easier
to use, accessible to non-experts, moldable and/or powerful, but such efforts
are disconnected. They are informal, guided by the personal vision of their
authors and thus are only evaluable and comparable on the basis of individual
experience using them. By providing foundations for more systematic research,
we can help programming systems researchers to stand, at last, on the shoulders
of giants.
