Think Python: How to Think Like a Computer Scientist - Allen B. Downey