One analogy I found useful is airline terminals.
Imagine you must:
1. load cargo onto an airplane
2. ship the cargo from city to city, across the continent and back
3. change type of and amount of cargo along the way
At each stop, you have a logic condition such as an if statement. Data is manipulated, then the procedure continues.
To accomplish some goal like processing X tons of steel into rods, the plane may have to make multiple trips (as in a loop) to a factory. Conversely, if you have enough processing centers, you can deploy multiple planes, as in parallel processing.
You can continue from here to describe different crate sizes as different data types. Some can fit in others, some are specially marked or have functionality, etc..
Programming is the art of finding the most efficient use of paths, planes, cargo and time.
You can even say the size of the plane is your RAM, the loading bay represents L1/L2 caches and the warehouse you're pulling from is your disk storage. Networks can also be represented across many terminals, getting into the question, "What do you do if Plane A is at Terminal A, and needs cargo from Plane B at Terminal B"