There’s currently a big gap between the experience of an ‘end user’ and the experience of a programmer with regard to UI, such that almost no skills learned as an ‘end user’ transfer to programming.
This is not actually necessary: non-technical users didn’t have substantially more trouble learning to use the unix command line than they have learning to use today’s modern complicated GUIs, and unlike today’s GUIs, casual users of the unix command line can easily and gradually slide into more complex shell scripting by learning individual tricks for automating common tasks as they become useful. Likewise, a smalltalk environment integrates class browsers and code editors, so a user of a smalltalk environment can easily not just inspect (as with a web browser) but modify running code & keep those modifications persistent.
Modern GUI systems don’t just fail to integrate opportunities to code with the end-user-facing UI, but actually fail to ship development tools and documentation. In other words, for someone to learn to code today, they must not only decide to learn to code (instead of simply falling into it as a side effect of their normal work) but must seek out information on how to install development tools & which to install, which can be an extremely complicated task.
On top of that, the most popular languages and development environments aren’t really designed to make producing code that looks and acts like the programs users are accustomed to straightforward. Every GUI library is absurdly awkward to use & requires an enormous amount of knowledge to even start using (with the exception of tk/wish, which nobody uses because it’s missing important features like alpha, 24-bit colors, & png support). Coding in Java or C++ requires lots of complicated boilerplate. Beginners are encouraged to think that coding in javascript also requires lots of complicated boilerplate because of folks pushing the use of large frameworks (which might make enterprise-scale tools developed by large teams easier to work with, but don’t make it easier for individual beginners to make toys or simple tools).
Now, it’s true that serious programming requires understanding big, nuanced, monumental ideas & that therefore serious programmers can implement things that beginners, no matter the language they are given, can’t — for instance, no language will allow a beginner to implement an efficient sorting algorithm based on their intuitions without learning how sorting works, nor will any language make it trivial for non-programmers to implement secure cryptography from scratch without learning about crypto concepts. But, at the same time, there are a lot of low-hanging fruit — there are a lot of tasks that users do all the time that could be made a lot easier by simple programming, and that could be made expressible in a discoverable way so users would gravitate toward using them fairly naturally. (Shell scripting shows us some: piping, globbing, iteration over items, iteration over numeric ranges. Smalltalk shows us another: message-passing (a more nuanced but still intuitive iteration of piping).)