Principles for Human-Centered
Programming Environments

Desiderata
Heuristics
I
Programming is Plural when
specifying instructions (ie coding) & direct-interaction (ie teaching by example) can be performed in concert 
II
Programs & Instructions are Graftable when they
can be modified & extended in place
III
Programming is Fluid when
instructions are continuously executed & their product remains interactable
IV
Programming is Comprehensible when
behaviour is reified 
V
Data & Instructions are Legible when their
representations are appropriate
VI
Bricolage is possible when 
new programs can be made by juxtaposition and combination of existing ones
VII
Programming is Dialectic when
a responsive & contextual “conversation about the possible” is facilitated   
 

︎

Programming is Plural when

specifying instructions (ie coding) & direct-interaction (ie teaching by example) can be performed in concert
 


Specifiying Instructions

  • i.e.
  • writing “Code”
  • connecting pipes in a data-flow
  • explicitly stating objectives and the means of achieving them

Direct
Interaction

  • e.x.
  • batch processing  of data using a type-specific tools
  • modifying high-level structures
  • teaching by example



Examples
Flowsheets
Glen Chiacchieri


Subform
General Reactives


Programs & Instructions are Graftable when they

can be modified & extended in place


Programs can be re-programmed and extended in place without opening an external development environment.



User-Redefineable Instructions

Empower people to create new representations specific to their data or context.
  • e.x.
  • “Debug Views” in media art and computer vision
  • Conditional formatting in spreadsheet software
  • etc.





Examples

Smalltalk: “rewriting a running GUI” 
XEROX PARC