"Everyone should be able to program."
Wow. A lot of ambivalent feelings here and in the comments. It's an intense topic!
I am a strong yes, but my definition of "programming" might be different from yours. I think of programming as "creating programs", that is, creating novel computer behaviour.
The main way we've done this, so far, is by writing code in a programming language. It's so engrained that most people think coding and programming are synonymous.
But code is just one way to create programs.
Writing code mostly sucks. It's a tedious process with a lot of busywork. Most people find it needlessly byzantine.
I think computer scientists and software engineers self-select for people who understand and enjoy coding. We think it's great, so we don't try very hard to explore other modes for software construction.
When we do, the visual programming or 3GL systems we create are limited and less powerful than our existing coding model, so we don't put much energy into them.
That reminds of a semi-lucid weird dream I had once.
I was in a very comfy attic, with afternoon light coming from the windows, I was sitting on a sofa with a wireless keyboard interacting with a large monitor that showed an OS named Ardent.
The fun part is that I knew that ArdentOS used a trance-hypnosis system to be programmed. You need only to have an idea and then the hands just moved on themselves. I remember forcing me to give an 'ls' but it was really hard to interrupt the flow and anyway the command was not recognized, so it wasn't a *nix.
Funnier part: I eventually programmed an instant messaging software (like XMPP) and tried to contact a friend with it. When I started the connection, in the real world the same friend woke me up messaging me on Telegram.