How Computer Programming Works by Daniel Appleman