I recently tried to formulate some design principles and ideas for a computing and programming system.
Here they are:
1/9
Here they are:
1/9
Meaning over Mechanism
Computers are mechanisms that serve human needs and human values. Any distortion of expression of meaning required fit the mechanism is a shortcoming. (Note: Distortion is different from precision)
2/
Computers are mechanisms that serve human needs and human values. Any distortion of expression of meaning required fit the mechanism is a shortcoming. (Note: Distortion is different from precision)
2/
Cognitive Sympathy
The mental models required to use the machine fit common cognitive abilities: not having to juggle too many things in your mind, mapping to common metaphors, transparency and visualizations to aid comprehension.
3/
The mental models required to use the machine fit common cognitive abilities: not having to juggle too many things in your mind, mapping to common metaphors, transparency and visualizations to aid comprehension.
3/
Human Design, Machine Rigor
(Not the other way around)
Since the machine can simulate itself very well, we don't need to mentally simulate the machine. (What do we do when we read code?) We supply the ideas and queries (precise enough form) and the machine supplies rigor.
4/
(Not the other way around)
Since the machine can simulate itself very well, we don't need to mentally simulate the machine. (What do we do when we read code?) We supply the ideas and queries (precise enough form) and the machine supplies rigor.
4/
Pervasive Provenance
I can 'inspect element' almost anywhere and follow the chain of provenance - how the thing was constructed - for anything I see. There are multiple aspects (version history, execution trace, ...) and I can follow any path.
5/
I can 'inspect element' almost anywhere and follow the chain of provenance - how the thing was constructed - for anything I see. There are multiple aspects (version history, execution trace, ...) and I can follow any path.
5/
Permeable Layers
It is possible to see under/below any layer of abstraction, in a safe manner, and see how the inside/lower corresponds to the outside/upper.
6/
It is possible to see under/below any layer of abstraction, in a safe manner, and see how the inside/lower corresponds to the outside/upper.
6/
Seamless Composition
When I compose any object A with another object B in my system, the only thing that matters is the highest level meaning encoded in these objects. The lower level data formats are irrelevant, adapters materialize as necessary.
7/
When I compose any object A with another object B in my system, the only thing that matters is the highest level meaning encoded in these objects. The lower level data formats are irrelevant, adapters materialize as necessary.
7/
Extensive Affordances
All objects expose (via API/visual features) their abilities via introspection/reflection. More like *labelled* knobs and buttons, less like blank pages. Compositions of objects 'flows through' the affordances.
8/
All objects expose (via API/visual features) their abilities via introspection/reflection. More like *labelled* knobs and buttons, less like blank pages. Compositions of objects 'flows through' the affordances.
8/
Universal Hypermedia
System-wide, objects have resolvable ids. Related objects hold resolvable references to each other so their visualization easily provides navigable links. 'Scribbling in the margins' works everywhere by attaching annotations to any object. No silos.
9/9
System-wide, objects have resolvable ids. Related objects hold resolvable references to each other so their visualization easily provides navigable links. 'Scribbling in the margins' works everywhere by attaching annotations to any object. No silos.
9/9