End-User Programming

We also had fun in the space itself, one of the experiments with biggest impact-to-implementation-difficulty ratio was a styling block, echoing how customisation was done in the MySpace times by injecting snippets of global CSS. Task-Oriented End-User Programming at its finest. Since MakeSpace is built on top of CRDT, these changes propagate to all users in a given space, which allowed us to live-code the UI from within MakeSpace itself, or have each users' notes styled differently (by adding a .user-${username} CSS class so it can be targeted with a custom selector).

  • block-based End-User Programming systems often feel this way, they often remove possibility for any syntax errors, by imposing strict rigidity on how the program is created
  • direct manipulation usually involves a lot of complex code - usually in forms of two-directional bindings, translating between different data representations, etc. - this makes End-User Programming in a self-hosted system much harder - even if the user can "pop up the hood", the machinery inside will be very complex
  • I'm curious if one solution would be that combination of End-User Programming and self-hosted system doesn't point at indirect manipulation - if the user can "speak" closer to the "machine", to the internal language in which the software is made, then maybe sacrificing direct manipulation for easier moldability makes sense?
  • not everyone should be able to create Ableton Live or other pro tools, and that might be ok - this might be the difference between end-user programming to help with the users work vs programming as a profession
  • gradual enhancement seems like important idea for End-User Programming - allowing users to change small pieces of functionality without feeling overwhelmed, and slowly "luring them in"
  • programming is often introduced to beginners (and end-users in End-User Programming) as "creating a recipe for something" - what is hard about programming is that computers can't figure stuff out on their own - you have to specify every single step, every possible failure mode, and what to do then - which makes the metaphor break apart because if you give someone a recipe for a cake, you don't have to specify what to do if they have no sugar in the house
Szymon Kaliski © 2021