Thinking as Computation (A First Course)