I'm a purebred software developer so to speak and I think it would be good for normal non-technical people to learn the basics of programming, much like how many consider that it is good for them to learn the basics of math.

This is not so much about doing real software development, but rather the ability to control your environment, your tools, should you need to do so.

For example, for simple needs, developers/designers can cut down on the metaphors and interactions required to use the GUI and maybe reduce those to things that users are already accustomed to (like moving objects around with your finger), but the more feature-full some piece of software gets, the more complex its interface becomes. And here we have a problem, because the status-quo of graphical interfaces is for users to navigate trees or graphs of options, in search for the right button to click, or the right form to fill. And designers can delay non-flat GUI hierarchies as much as they can, but at some point a complex tree or graph structure becomes inevitable. At which point, users resort to rote learning. This isn't even mentioning actual (and horrible) programming languages often hidden behind GUI metaphors, for more complex apps, because you know, not everything can be done by clicking a button and sometimes you need to specify boolean conditions that trigger actions and so on. You only need to watch normal users struggle with a complex piece of software, like Microsoft Word or Excel or Photoshop, to see what I mean. It's freakishly painful to watch.

Excel, one of the most popular pieces of software in history, has an embedded programming language that users can use. Excel wouldn't be Excel without it. And sometimes you need an embedded programming language to get shit done, because language is still the most potent form of communication and this extends to user interfaces too. And we can't communicate using natural language with our computers, yet, but even if we were, we'd still have to come up with clear specifications that the computer could make sense of.

People are so afraid of computers because computers are absolute black boxes to them. I'm not afraid of computers, because I've assembled my own PCs, I know how they work and whenever some piece of software doesn't work like I want it to work, I know that (should I need to) I can search for alternatives, or I can automate it, or I could implement something similar from scratch. Many times it's not feasible of course, but in terms of what I'm afraid to do or not, the feasibility of it is of no consequence. Programmers are fearless, whereas users are fearful. And companies are exploiting this, locking users into software packages or services that are suboptimal and overpriced.

Automating stuff is priceless. For example I've got tens of thousands of photos that I need to organize - I just wrote a script that splits those photos in directories named after a YYYY-MM pattern and eliminates duplicates. No need for shitty software that might delete my photos by mistake because I clicked the wrong button. This is another skill that comes with knowledge of programming - the ability to automate shit and this is also not software development and would be useful for normal people.