Contents

    Preface

    Acknowledgments

    1  Talking with Computers
        1.1  Computers everywhere
        1.2  Everyday magic
        1.3  Hacking in mathematics
        1.4  Programming in logic
        1.5  Scheming in Lisp

    2  The Shell Game
        2.1  Shell programming
        2.2  Shell variables
        2.3  Information passing
        2.4  Asynchronous processes

    3  Keeping Track of Your Stuff
        3.1  Finding stuff
        3.2  Organizing your stuff
        3.3  Database management

    4  Don’t Sweat the Syntax
        4.1  Specifications and implementations
        4.2  Syntactic variations across languages
        4.3  Stylistic variations across implementations
        4.4  Developing a facility for language

    5  Computational Muddles
        5.1  Computational models
        5.2  The substitution model
        5.3  Syntax and style revisited

    6  Getting Oriented
        6.1  Structuring large programs
        6.2  Procedures that remember
        6.3  Object-oriented programming
        6.4  Programming with constraints

    7  Thanks for Sharing
        7.1  Code for the taking
        7.2  Class conscious
        7.3  It’s just syntax

    8  You’ve Got (Junk) Email
        8.1  Artificial intelligence
        8.2  Machine learning
        8.3  Learning with probabilities
        8.4  Learning more about learning

    9  Modern Architecture
        9.1  Logic gates
        9.2  The digital abstraction
        9.3  Addition and multiplication
        9.4  Computer memory
        9.5  Machine language

    10  Do Robots Sleep?
        10.1  Stacks and subroutines
        10.2  Managing tasks
        10.3  Multithreaded robots
        10.4  Allocating resources
        10.5  Metaphorically speaking

    11  Under the Hood
        11.1  Client-server model
        11.2  Acronym city
        11.3  Alphabet soup
        11.4  Smart milk cartons

    12  Analyze This
        12.1  Analyzing algorithms
        12.2  Computational limitations
        12.3  Theory that matters

    13  Forest for the Trees
        13.1  Graph theory
        13.2  Graph algorithms
        13.3  File systems as graphs
        13.4  The web graph
        13.5  Pianos and robots

    14  Searching the Wild Web
        14.1  Spiders in the web
        14.2  Measuring similarity
        14.3  Measuring authority
        14.4  Searching for exotic fruit

    15  Darwin’s Dangerous Algorithm
        15.1  Competing hypotheses
        15.2  Genetic algorithms
        15.3  Survival of the fittest

    16  Ain’t Nobody Here But Us Machines
        16.1  Machine intelligence
        16.2  Other minds
        16.3  Freedom to choose
        16.4  Carrying on