Computation: Finite and Infinite Machines