head first software development table contents