Pistons, at their most simple, push things. However, even this component has more complexity to it than what initially meets the eye.
When a piston receives a redstone signal, the wooden "head" extends by one block, pushing whatever is immediately in front of it. Pistons can be activated through all the conventional means, such as running a redstone wire directly into it, placing a redstone torch or redstone block directly adjacent to the piston, and more.
An activated piston (in this case, via a powered comparator) pushes a block.
Pistons also have a property known as quasi-connectivity, which allows them to be powered as long as the space directly above the piston is powered. Quasi-connectivity can be confusing to grasp, especially in combination with everything else, so this guide will not discuss it on this page.
Pistons can push both entities and blocks. Entities include dropped items, mobs, and players.
Pistons can only push up to 12 blocks at a time. Additionally, there are certain blocks that cannot be pushed. Other blocks break when pushed by a piston, such as sugar cane. Details about which blocks are exceptions to pistons' normal behaviors can be found in the many resources available on the internet, such as the Minecraft Wiki.