The simplest way to explain programming is using plumbing... Honestly!!
Programming is the same as designing the water-pipes within a house (or building). You need to know what you want to happen (you want a tap/sink in a bathroom on the 2nd floor). You need to know what type of water you need there (hot and cold or only cold). You need to know that toilets don't need hot-water pipes. You need to know that water pipes run along the outer-walls of a house that's in the northern climates will need insulation (to prevent the water from freezing in winter). So those external pipes need "protection". In software, certain data (and data-paths) are protected, perhaps using encryption or other means.
These are all examples of/considered to be the "requirements" of what the computer program must do. And a software developer/programmer must know that requirements can be written in a vague way -- and how to ask more info if they're given vague instructions. They may also need to understand a bit of physics or engineering (for more complex programming problems)... similar to a plumber having to know that gravity makes water fall/flow "downward"... and thus water pipes need sufficient "water pressure" to make water reach the 10th floor of a building. And if you use a thick pipe to go that high, it needs much greater pressure than a thin pipe going that high. These are knowledge that a plumber (and programmer) need to know... about "physics" of the world.
So using this analogy... when you run a program, all that truly happens is "water" flows through the "pipes"... and they stop at some places (a closed tap/faucet) or they go to different places based on what the programmer did... which pipes were connected where... the thickness of pipes used... if both hot+cold pipes were sent together, or cold-only pipes.... etc.
When you run a program... the "water" automatically moves everywhere -- through the pipes. The programming/coding (that was already done) only makes the water go to one place or another. Or to make the pipes "knock" or freeze in the winter and burst (coding bugs).
In an actual computer, it's not water that's flowing but electricity (a stream of electrons, instead of a stream of H2O molecules). But otherwise they are nearly identical. They both use physics. Water systems use Newtonian physics (simpler), while computers use a more advanced (Quantum) physics.
If you understood this, then you know it's very important for the programmer/plumber to ensure every pipe does connect to the right places, and no pipe is left unconnected (inside a wall) -- otherwise the water will just gush-out of that pipe and flood the building (i.e., crash the computer or operating system) -- in computers, this is euphemistically called a "memory leak" -- a true programming term).
This is why programmers must be very careful when writing a program. They must ensure every "instruction" (pipe) is the correct diameter (can carry the right types of data/bits)... and that instruction will make the data (water) go where it needs to (i.e. that an instruction's/pipe's output goes to/is connected to the input for the next instruction/pipe). If a thin pipe must be connected to a thick pipe, the programmer must use the right "glue code" or "fitting" (casting) to make that connection -- just as in plumbing. Believe it or not, in some operating systems (like Unix and Linux) there is a command called a "pipe".
Computers actually work very similarly to water-systems -- they truly are "electron-movement systems".
Hope this helped.
:)