How Programs Think in Steps