The Invent with Python Blog

Sun 09 December 2018

Book Review: The Little Schemer

Posted by Al Sweigart in misc   

(Also posted to Amazon.com.)

Alternative Title: The Little Schemer Wears No Clothes

Perhaps a software engineer or MIT professor friend of yours recommended this book to you. “Oh, you want to learn how to code? You should read The Little Schemer,” they’ll say. Your friend means well, but is completely wrong to recommend this book.

I really wanted to like this book. I wanted to be charmed by its Socratic, question-and-answer-format presentation. I have a computer science degree. I’ve taught kids and adults how to program. I have (full disclosure) written popular books teaching folks how to code. I have taught and given talks on recursion. I have read Godel Escher Bach by Douglas Hofstadter, which seems to have started the “whimsical Lewis Carroll” trope among computer-scientists-turned-writers. If anyone should be a person who likes this book, it should be me.

I don’t like this book. The problems are legion.

First: If you are in the, like, 5% of the population who likes manipulating abstract symbols according to arbitrary logical rules just for the sake of manipulating abstract symbols according to arbitrary logical rules, you’ll love this book. This is the book for you. Five-stars, disregard this review and send me a nasty email telling me I “just don’t get it” and “it’s not supposed to teach programming but a way of thinking”. You should read this book. You’ll get a lot out of it.

If you’re someone who wants to learn to code, or is a freshmen computer science student, or someone who likes popular science and wants to learn more about computing, put this book back on the shelf and back away. When you’ve got enough distance, turn and run.

Before I go into the problems, I think this book would have been great if it had a heavy-handed editor. The approach Friedman and Felleisen take is novel, and experimentation should be encouraged. But that doesn’t mean every experiment is a success. A good editor would have pointed out all the problems that I’ll bring up in this review, sent them back to the drawing board/writing desk, and they would’ve come back with something better. A few rounds of this, and they’d without a doubt have a great book. Instead, they don’t have a great book for beginners, they have a book that computer science professors with years of familiarity and experience think is a great book for beginners.

One of the largest problems is the question-and-answer format. Like alcohol, it’s great in moderation but several issues come up when you rely on literally nothing but it. This book literally never explains anything directly. Nothing is ever given a solid definition; you are left to infer it for yourself. Can’t figure it out, or worst, think you’ve figured it out but are actually working under the wrong assumption? Too bad. The book is moving on, and all the concepts in this book build on top of the previous work. A glossary is a standard part to have in any textbook and would be incredibly helpful in this one, but sadly the authors considered themselves above having one. In the preface, the authors state “We believe that you can form your own definitions and will thus remember them and understand them better than if we had written each one for you.” This is an utterly, completely erroneous belief. And conveniently it frees the authors from having to, you know, explain in simple language what exactly they mean.

Relying solely on a Socratic approach simply isn’t practical. And what exactly is going on in this book? Are we watching two people having a question-and-answer dialogue? Is the book asking the reader the question? (In which case, there is no possible way the reader could know the answer for most of them, which is hair-pulling levels of stressful the hundredth time you encounter it.) Are these questions the reader is posing to the book? It actually changes page to page. You’ll see the impracticality of the Socratic-only approach in some of the “questions” (which are really answers) and “answers” (which are really questions), especially in the later chapters. This book needs to stop being chained to the question-and-answer format; a few explanatory paragraphs would have done a world of good.

There were “The Ten Commandments” and “The Five Rules” at the start of the book, but they aren’t the most lucid statements: “When recurring on a list of atoms, lat, ask two questions about it: (null? lat) and else.” What? The word “else” is a question? How is the reader supposed to derive knowledge from a sentence that barely parses as English? It’d be nice if the listings of commandments had page number references to where they’re explained in the book, instead you’re left on your own. And by the way, the First Commandment is split up across three different places (the final one listed after the Fifth Commandment). Any editor would have told them “split this up into three commandments”. There’s a multitude of places where the simple advice from an editor would have saved the reader so much headache.

There are no objectives stated in the chapters. You’ll find yourself asking “what’s the point of this?” and “where are they going with this?” constantly. Constantly. The chapters launch into the content cold turkey and always end abruptly. Really, the dividing line between where one chapter ends and the next one starts could be made anywhere. And the chapter names don’t offer any hints either: “Toys”, “Cons the Magnificent”, “Shadows”. That last one has the especially infuriating questions: “What is (lat? ls) where ls is ((( )) (() ( )) (() ( )()))” answered with “It is very false.” and “Is that bad?” answered with “You must beware of shadows.” and then the chapter immediately ends. This is literally the only time the word “shadows” appears in the entire book. Oh yes, very mysterious. But they aren’t writing a mystery novel, they’re writing a textbook that should explain what the hell they mean. To someone with a CS degree it’s a bad metaphor, but to the beginner it’s simple inscrutable.

Because the book is a steady stream of question-and-answer, it forms a trail of breadcrumbs: lose your way once and you’re completely lost. You can’t skim this book, and when you pick it up to start where you left off, it’s hard to remember what you were looking at and trying to understand. Everything is built on the previous content, so this book requires you to load everything into your short-term memory. Some will say this is a “feature”, but I say it’s a staggering bug.

That guy who loved this book and is recommending it to you is well-intended, but clueless as to what makes for an effective teaching tool. And that’s the reason I wrote this scathing review (which I’ve sat on for a year, wondering if I should actually post it). My prime worry, nay, chilling fear, is that a lot of people will be handed this book, read it, not get it at all, and conclude that they are simply too stupid to learn computer science. "If I can't understand the book with the cute elephant drawings, how am I suppose to understand the harder computer science textbooks?"

This book needs better titles for its chapters. It needs a glossary and explanatory paragraphs. It needs objectives and summaries in each chapter. It needs to drop the cutesy metaphors and coy figure-out-for-yourself-what-we-mean approach (or at least add straightforward explanation afterwards). It needs an editor. But all of these things make for a book that isn’t as fun to write as a whimsical Socratic book of recursive algorithms. The Little Schemer is simply not a good guide for beginners; it’s a vanity project.

 

Learn to program with my books for beginners, free under a Creative Commons license:

Take my Automate the Boring Stuff with Python online Udemy course. Use this link to apply a 60% discount.