I read the book after completing How to Design Programs. So please keep in mind that these are the thoughts of someone who has had some prior amount of experience with Lisp language and functional programming. This means prior exposure to some of the concepts introduced in the book.
Little Schemer has a quirky style when it comes to teaching
programming concepts. For a complete beginner, a lot of room is
left for thought and figuring out. The book introduces the machinery of programming: list data
structure, branching logic via conditional forms and recursion
within three chapters. From that point onwards, various
algorithms are introduced on data structures. By the fifth
chapter, nested recursion on data structures star functions
member* that fractally recurses on lists are introduced. Some of these operations on nested lists can get a bit challenging and fun to solve.
The idea of evaluating numerical expressions taught throughout the book gives one an idea of how to continuously iterate a codebase. The advantages of having well-named helper functions are illustrated with good examples. These provide a new programmer with opportunities to think about maintaining the programming interfaces of their code. It also sets up the stage to witness programs where a handful of functions interact together.
Some of the kickers in the book, well worth understanding deeply, are the ideas of currying and continuations. They introduce ways to abstract intermediate states of the program by making use of functions as values. I wished there were more examples on continuations, as a cursory reading on the Internet points to a lot of domains in which they find applications. As of late, continuations and their close cousin algebraic effects that have found application in the popular front end library React.
There are some loose ends such as defining bijective functions, partial functions, Collatz conjecture, and Ackermann functions that are introduced brusquely without giving them the space for thinking they deserve. I guess these are left as exercises for the follow-up book Seasoned Schemer to tie-in or left as exercises for deeper research by the reader.
As one progresses through the book, one starts creating a repertoire of functions. This slowly builds up a sense of culminating towards writing a Scheme compiler in Scheme. This meta-awareness of the environment and the data structures within delivers quite a feeling as you work through the book.
One develops a feel for how a programming language can be bootstrapped by getting acquainted with these ideas. This chapter makes you reflect on the meta-layer mechanisms that you have been using to encode the algorithms in the previous chapter.
If you are a total beginner, this might not be the best introduction to the world of programming. It has too much hand-holding at times and too little at times. This unevenness was okay for me having done a fair bit of functional programming but I think it would be bumpy for a newcomer. But don't let that deter you from reading this book, it's chockfull of cool ideas that will leave you thinking and give fresh perspectives as you progress on your programming journey.
- The Seasoned Schemer — Daniel Friedman and Matthias Felleisen
Follow up book in this series by the same authors.
- Naïve Set Theory — Paul Halmos
The famous introduction to set theory by Paul Halmos
- Essentials of Programming Languages (2nd Edition) — Daniel Friedman, Mitchell
Wand, C.T. Haynes
A well known book on the elements of building programming languages. Good one to pursue if the compiler writing part of the book intrigued you.
- Gödel’s Proof — Ernest
Nagel, James Newman
Lucid introduction to Gödel’s incompleteness theorems. These are worth understanding to know the bounds of certain formal systems.
- How to Solve It — Georg
On a general approach towards solving mathematical problems. Some of the ideas here are interoperable across domains
Mock a Mockingbird — Raymond Smullyan
A book that introduces the readers to the crux of mathematical ideas through logical puzzle solving.
- Introduction to Logic —
Book on the foundational ideas of logic - Inference, Set theory, and the axiomatic method
Also, if you would like to read a blow-by-blow review of this as it happened, check out the Github repo for more details.View Github Repository