Book review: The Little Typer (2021)
thatgeoguy.ca
thatgeoguy.ca
I believe the author did tried their best and a great job they did - which made me work through half of the book (which is a lot for me, and for this topic). However, I did gave up eventually and decide to revisit it in the long future.
My guess is people should discuss more about dependent types - I remember functional programming concepts were also hard for me as well. But after being exposed to those conversations for a while (functional programming was one of the hot topic a dacade ago), I find those concepts were not that hard to understand, they're just different from C-like's perspective.
I mean, two pages to discuss what an Atom is?
The "Little" books do exactly this, except a person has taken the painstaking time of breaking everything into digestible, bite-sized portions to optimize for learning.
About a third of the way through The Little Schemer, things just clicked, and what had been hard became pretty instantly easy.
Some of that was it building on existing knowledge, but I found the structure very helpful. The narrative is really just the glue around a well-designed series of incremental problems.
I'm not saying every dev needs to do this but if you do want to get better at recursion, reading this book isn't the only path (good news for me because I really didn't like The Little Xer format).
I felt like The Little Schemer should have given those (nicely incremental) problems more real-world context. I worked my way through it and was frequently left wondering "OK, that's clever - but why should I care?"
Clearly a lot of people find the book useful, I might be the odd one out, but I was mostly left scratching my head.
I don’t know if I’d have an easier time with those parts now, but I suspect a lot of readers completely unfamiliar with concepts like recursion would get little out of the book.
Personally, I put The Little Lisper/Schemer on the “Greatest Programming Books Ever” shelf, next to The C Programming Language. I found the style captivating — and insidious. The first time I read it, I thought I was learning a programming language, but it subliminally reprogrammed my brain to see recursion everywhere.
[0] https://www.goodreads.com/en/book/show/30084187-in-praise-of...
The reason they don't work well with recursion is you could have something like: false :: _|_ false = false
Where false is a function we are defining of the uninhabited type.
For more complicated versions stuff like this see Girard's paradox.
As a point of clarity for folks who come to this (the commenter clearly knows this) one can’t _automatically_ prove for an arbitrary program whether or not it terminates. It’s definitely possible to prove this manually per program and most dependently typed languages will do the work for you as a matter of sound over approximation as long as one of the arguments is shrinking in an obvious way.