Learn to Program (2nd edition) (PragProg)

A post was split to a new topic: Not fully understanding the code in the example in “Learn to Program”