Your terminal is not a terminal

Your terminal is not a terminal: An Introduction to Streams:

Streams are just that: streams. In the same way that a river has a stream of water, programs have streams of data. Moreover, just like you can use steel pipes to carry water from one place to another, you can use UNIX pipes to carry data from one program to another. This was the very analogy that inspired the design of streams:
We should have some ways of connecting programs like a garden hose — screw in another segment when it becomes necessary to massage data in another way. This is the way of I/O also. — Douglas McIlroy
Streams can be used to pass data into programs and to get data out of them.

The running water water analogy is a great way to explain many complicated topics and Lucas Costa uses it to great effect. You even uses |pipes| to flow input from one command to the next.
Go read his post if, like me, you find yourself scratching your head trying to understand how to work efficiently on the command line.