99% of humans think of code as a medium that is too difficult. I don't think the medium is the problem. I think it's the way we've been asking end-users to interact with it:
So far, 99% of human-to-code interactions have been code-as-text, an interaction paradigm with unforgiving syntax and symbolic mental models.
Investments in interaction paradigms for code have almost exclusively focused on code-as-text and code-as-export, but there are other more end-user friendly ways of interacting with code that we can explore.
Let's break down the interaction paradigms for code (tell me if I missed any!):
•
Code-as-text (massively explored): You type, the code editor helps you type. Examples: IDEs, Low-Code
•
Code-as-export (mostly explored): Code is treated as a secondary source of truth via one-way export flows from some vendor-specific data you're editing. The tool cannot manipulate or understand the code it just exported, and the interaction ends here. Examples: Vector-based UX design tools, No-Code
•
Code-as-programming-portals (moderately explored):
@Maggie Appleton wrote a great breakdown of this at
https://maggieappleton.com/programming-portals
•
Code-as-data (largely unexplored): Direct manipulation of code ASTs/code visualizations/code output. The tool responds to non-textual interaction from the user and reconciles their intent with a corresponding change in the underlying code-as-text storage.
•
Code-as-executable (largely unexplored): A code engine/runtime executes code-as-data changes that result from user interactions to give the user instant feedback, closing the feedback loop of the interaction. Related to live-coding, but where live-coding is tied to code-as-text, code-as-executable can respond to changes from code-as-text as well as code-as data.
•
Code-as-source-of-truth (massively explored): IDEs, version control systems. The primary interaction consists of reconciling your code interactions with those performed by others, e.g. through merging, pushes, conflict resolution.
There's so much unexplored territory outside the traditional code-as-text and code-as-export interaction paradigms! Would love to know what you think and whether I've missed any
😄