How To Think Algorithmically