Pages

Tuesday, August 12, 2008

Getting Better, part ][

A reader wrote in follow up to the previous post ("How do I get better? A reading list") and asked "Which of the three following books has the most bang for the buck?

To Mock a Mockingbird, Smullyan

Algorithms, a Functional Approach, Rabhi, LaPalme

How to Solve it, Modern Heuristics, Michalewicz/Fogel"

Not that I particularly agree that the above three are the top three of the larger book list, but I responded thusly:

The difficulty lies in the differences in our opinion as to which direction the bang makes the buck well-invested.

A facile answer, but also useless for you, I suppose, is that they all have a high bang/buck ratio, much more so than most the drivel out there. So let me explain their utility to me, and perhaps that will help you make a more informed decision as to how to proceed.

To Mock a Mockingbird, Smullyan: I absolutely consumed. But are you ever going to use combinatory logic combinators when coding? I do, and no-one else in the world does (Okay, maybe David Turner still does an occasional SK bit of low-level coding). But as an introduction to the magic of first class functions and construction through composition (that is, in other words, "Coding in the Haskell-style") there is no equals as to its lightness of touch as well as the density of concepts. You learn from this book and delight in it.

Algorithms, Rabhi & LaPalme. I carry this book incessantly, into meetings (where I am to be a passive participant), on trips, etc. Certainly it teaches one about data structures and algorithms in Haskell, using practical examples. But it also opens one's eyes to possibilities of programming. It is a powerful (but not dense), little book. It is, however, dated, especially in the light of the explosion of new ways to use more-recently developed mathematical structures (from category theory, particularly, monads, arrows, and comonads). It does not cover these recent developments, but the ones it does cover, it covers extraordinarily well.

How to Solve It, Michaelwicz & Fogel. Thick, dense, impressive. I don't think I've gotten much further than chapter 2 — this is my fault, but it is also the book's unapologetic full coverage and well as its assumption that they are not addressing 7-year-olds that make progression, for me, at least, arduous. Worth reading? Absolutely, as it addresses the fundamental problems of problem-solving (at the top of their list is that problem solving is hard, and our education has flippantly ignored that bald fact) and proposes solutions that are novel, scintillating, simple, and, once discovered, obvious. I recommend you read more than the first three chapters in a book store (prepare to spend more than a few days in this task) to see if you can justify purchasing it for continued reading.

So, did I provide accurate guidance for the inquirer? Or, where my assessments off-base? I won't disclose the choice the reader made, but I will ask instead: which book would you have selected given the above reviews?

2 comments:

I've had the single copy of "Algorithms: A Functional Approach" by Rabhi & LaPalme checked out of the corporate library for some time now (we're a C++ shop so nobody seems to want to check this book out except for me which is fortunate). I have to say that it is indeed a very nice book. And concise at around 230 pages. Chapter 2 serves as a pretty good intro to Haskell in case you don't know it.

Unfortunately, it seems to be out of print. Used copies are selling for around $150 on Amazon. Ouch.