DescriptionUnlike some other textbooks/ this one does not follow a top-down narrative. Rather it has the flow of a conversation/ with backtracking. We will often build up programs incrementally/ just as a pair of programmers would. We will include mistakes/ not because I don't know the answer/ but because this is the best way for you to learn. Including mistakes makes it impossible for you to read passively: you must instead engage with the material/ because you can never be sure of the veracity of what you're reading. At the end/ you'll always get to the right answer. However/ this non-linear path is more frustrating in the short term (you will often be tempted to say/ “Just tell me the answer/ already!”)/ and it makes the book a poor reference guide (you can't open up to a random page and be sure what it says is correct). However/ that feeling of frustration is the sensation of learning. I don't know of a way around it. At various points you will encounter this: ExerciseThis is an exercise. Do try it. This is a traditional textbook exercise. It's something you need to do on your own. If you're using this book as part of a course/ this may very well have been assigned as homework. In contrast/ you will also find exercise-like questions that look like this: Do Now!There's an activity here! Do you see it? When you get to one of these/ stop. Read/ think/ and formulate an answer before you proceed. You must do this because this is actually an exercise/ but the answer is already in the book—most often in the text immediately following (i.e./ in the part you're reading right now)—or is something you can determine for yourself by running a program. If you just read on/ you'll see the answer without having thought about it (or not see it at all/ if the instructions are to run a program)/ so you will get to neither (a) test your knowledge/ nor (b) improve your intuitions. In other words/ these are additional/ explicit attempts to encourage active learning. Ultimately/ however/ I can only encourage it; it's up to you to practice it. The main programming language used in this book is Racket. Like with all operating systems/ however/ Racket actually supports a host of programming languages/ so you must tell Racket which language you're programming in. This textbook has been used in classes at: Brown University/ Cal Poly/ Columbus State University/ Northeastern University/ NYU/ Reed College/ UC-San Diego/ UC-Santa Cruz/ University of Rhode Island/ University of Utah/ Westmont College/ Williams College/ Worcester Polytechnic Institute.