Think in Patterns by Bruce Eckel