I know the canonical book is "Design Patterns: Elements of Reusable Object-Oriented Software", but Head First is great for beginners to OO. Handy reference: 101 Design Patterns & Tips for Developers Design patterns for humans Combinatorics (n choose k) & Probability Math Skills: How to find ...