I've often told people that programming is like woodworking:
- jigs are like functions
- stops are like constants
- experience teaches you the order of operations, how things fit together
- woodworkers build a lot of their own tools
- custom tools are usually made by same stuff the products are
- both spend time optimizing their workflow
- wood is quite soft, like software!