I really enjoyed this book. I cannot honestly judge it as a introduction to a Lisp, but Racket was not a lisplike I am familiar with and I found it a good introduction to that language inasmuch as the exercises in the book.
The book is visually gorgeous, especially given that it is an HTML-only book.
The writing style is very good, kilometres ahead of most non-Scheme-derived textbooks and it was a treat to read as a work of prose. This was especially effective in the essay section of the book, explaining and justifying Racket and Domain-Specific-Language based programming. The book couldn't give a clear answer of "this is exactly when you should and shouldn't use this style" but has given me the closest idea of looking out for little mini language possibilities I can identify. I am especially thankful one of the exercises came out of Advent of Code, because that gave me many years' worth of exercises to try out.
The concepts in this book I thought were effectively communicated; I felt the chapters and exercises imparted when I was supposed to absorb from them.
My professional career has mostly been "practical" software development and YAML at this point, and my career has made me realize that most businesses, especially ones that want to scale at venture capital levels of growth, are worse off for individual acts of elegancy because they are geared towards large replaceable employee bases (in good ways and in bad, career progression/flexibility but also fungible "human resources"). This being said, it's nice to have a reinvoraged sense of joy for my viocation that isn't based on financial or influential success, and I appreciate having a new tool in my tool build that I might find a way to apply either personally or professionally.
Enjoyed the book overall. Definitely one of the better written programming books out there, although I'm not sure the author succeeded in targeting the book for relatively new programmers! It was a pleasure to go through the tutorials and explanations, but there's a lot of content packed into each section and requires active attention and thought throughout.
4.5 for the content and delivery, but 4 overall since I'm not sure at all what personal projects this might be useful for in the future.
This book is hands-down the best book on how to create DSLs / languages in racket. Matthew Butterick achieves an amazing feat introducing in his book, not only racket, but also how to create languages in it. The approach used is incremental, building concepts progressively through tutorials, with drill-down references for when you need more info. Matthew offers the clearest explanation of how the reader/expander cooperation results in the possibility of adding a new language to racket.
The book works with dexterity and in detail over big topics like lexing and parsing, using the brag parser and lexer packages which in and of themselves are great packages, but in this case the author shows how to use them in as close to real world scenario as you'll get.
The only gripe I have about this book is that Matthew uses several macros/functions of his own, available in the br, package, which the book depends on. These macros are define-name, define-cases and prefix-id. Not too much, but I would have liked to see things done with traditional racket macros. Don't get me wrong, Matthew's macros are very good and expressive, but then again, for a noob like me, they become barriers very difficult to overcome and get rid of.
Now to the big question: Will this book be useful to you? If you need to ask the question the answer is likely no. The reason is not the book, but rather that it uses racket which is a niche programming language and IDE tightly integrated, geared towards LOP (Language Oriented Programming). If on the other hand, you have the time (takes a good amount) to learn enough to make practical use of this, you are into languages, you like LISP and functional languages in general, then this is a great book.
I am new to lisp/racket. The functions are very novel to me. This book explained line by line, which works perfectly for me. Note it is using customized macros in `br` library. It hide much details of macros so it is good for beginner.