TheJach.com

Jach's personal blog

(Largely containing a mind-dump to myselves: past, present, and future)
Current favorite quote: "Supposedly smart people are weirdly ignorant of Bayes' Rule." William B Vogt, 2010

Briefly revisiting Land of Lisp

A couple months ago I was surprised to read in a couple places that the book Land of Lisp was "much maligned". This was surprising because it has high reviews on Amazon and GoodReads, and I personally liked it overall too. I remember getting it not long after it came out, Christmas of 2010, but I didn't really make time to read it much. I was busy with college and my job, and at some point I got more hooked on Clojure and didn't want to look at things through the "old and crufty" CL lens. I wish I kept track better of my progress milestones. I remember going through a section of it years later with my cat occasionally resting on a page. For various outside the book reasons though I just didn't get around to making the final push to finish it until 2018.

I had one major critique, which was the author seems to have a stylistic preference that I don't share. Namely, his Lisp code is more "Scheme-like" than Common Lisp-like, and more emphasizes functional programming (mostly in the closures + higher order functions sense, not so much the immutability sense, and ignores the static typing sense). To quote from my own thoughts after reading that I still agree with:

The main critique I'd offer would be that perhaps functional style was emphasized too much, much of the code felt like what I'd expect to see if a Scheme or Clojure programmer was forced to write in Common Lisp. (So it didn't actually feel "sticky" to the brain and writing Lisp afterwards I still look basic things up.) Specifically, the over-frequent use of inner functions via 'labels for closure benefits rather than separate helper functions with a couple extra params (or generic methods on objects...), recursion (and often not tail-recursion) instead of various looping facilities, and raw car/cdr and their (admittedly useful) mutant forms rather than some structs or CLOS objects to help hide that. I just can't remember that the caddr of our "data structure" is always some particular thing, I'd like a get-thing that does the caadr/caddr/whatdr.

See Full Post and Comments