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