How To Think Like a Computer Scientist: Learning with Python