Buy the book
The 2 hardest problems in programming are naming, cache invalidation, and off-by-one errors.