This book should really be called "How to Design Functions" -- not "Programs" -- because it sidesteps the most difficult and interesting topics in making software programs, namely the work of a) separating a task into simpler subtasks and then b) composing smaller functions into a program that performs the task. IIRC the most complicated example in this book pertains to calculating the optimal price of movie tickets. There is merit in some of the book's recommendations. But overall this material could be condensed into the 25-page intro of a much more interesting programming textbook. As it stands, HTDP is a buzzkiller.<p>Speaking of which, here's a 2010 blog post about how Georgia Tech stopped using HTDP, featuring an argument in the comments between the author of HTDP and Alan Kay.<p><a href="https://computinged.wordpress.com/2010/05/11/playing-the-cards-youre-dealt-a-story-of-gt-and-htdp/" rel="nofollow">https://computinged.wordpress.com/2010/05/11/playing-the-car...</a>
This book supported the curriculum of my introductory computer science course at Tufts University back in 2013. It was hard but amazingly valuable. By the end of the semester, we were doing natural language classification using binary search trees and higher-order functions [1]. I think learning a Lisp-based language first gave me some very powerful foundational problem solving skills that have made me a successful software engineer today.<p>[1] <a href="https://www.cs.tufts.edu/comp/50PSS-2013f/homework/trigrams.html" rel="nofollow">https://www.cs.tufts.edu/comp/50PSS-2013f/homework/trigrams....</a>
I read the abstraction chapter, but I really have a hard time translating those concepts to different languages like Rust. Seems like this book is very specific to this Racket-based teaching language?
theres also a follow up book called "how to design classes" a draft versions is available here
<a href="https://felleisen.org/matthias/htdc.html" rel="nofollow">https://felleisen.org/matthias/htdc.html</a>