With today programming languages, creating new new software requires learning a complex syntax with very specialized rules on how to combine words, even for creating very simple software (for example, web pages with trivial interactions such as folding and dragging items).
Some approaches to allow end users to build automated behavior exist, but they can only go so far. There are "drag and drop" interface builders for building web pages with forms, and graph languages for transforming data. But they only allow reusing pre-defined components which are built with traditional languages. Any behavior not supported by those components can not be added to the program.
There are also rule-based visual systems like Agentsheets that allow defining new behaviors without a strict complex syntax, but those are difficult to reason about when behaviors depend on several levels of nested rules.
My question is: what would be your preferred approach to achieve the goal of allowing end users build their own simple software programs? This assumes that we define "program" in a loose way, not necessarily in the traditional way but referring to any software artifacts for defining repeatable processes to handle information such as:
* building and classifying collections of related data, transforming the shape of parts of a document...
* or for automation of actions in time (turning on and off lights and engines at particular times or in a pre-defined pattern, sending messages to groups of people that follow certain criteria under some triggering condition)...
All this without requiring that the user learns a scripting language or otherwise needs to form a mental model of how exactly the program's execution evolves in time within the machine components.