How to Think About Time in Programming