Thinking Like a Computer
americanscientist.org