Thursday, July 5, 2007

Review: Practical OCaml

Executive summary: this is not Practical Common Lisp for OCaml. It's ambitious but disappointing. However, it's not so bad as it seems at first sight.

OCaml is a sexy language that combines the expressiveness and terseness of scripting languages with the static type checking and performance of languages like C++ and Java. A book may be a good investment to learn a new language, and this is one of the few books available on the language. How does it fare?

This book has received very harsh criticism overall, and it mostly deserves it; it is somewhat of a mess. But it is not uniformly bad: some chapters are very bad, others are acceptable or interesting, depending on your background. The problem seems to be that the worst chapters come first; although it shows signs of bad editing throughout, the first few chapters are especially bad. And I mean really bad: bad text, bad editing, bad examples, lots of senseless repetition, conceptual errors, using language features not yet introduced (and that go unexplained), the list goes on. Later chapters are considerably less irritating.

Clearly inspired by Peter Seibel's terrific book Practical Common Lisp, the chapters on this one are divided in two types: the ones that explain the language, and the "Practical" ones, containing extended examples. This is a great idea, and even badly executed as it may be in Practical OCaml, it still results in interesting chapters. Actually, the Practical chapters are overall better than the language ones; from them, a reader can get a real sense of using OCaml in simple but realistic projects, integrating many different libraries and tools, some of them not contained in the standard OCaml distribution. Still, the code in these chapters can be criticized for their style. For one thing, I think the author uses classes and other OO features much more often than they appear on real OCaml programs. Nonetheless, an experienced programmer could get a lot of interesting pointers from these chapters, by knowing what to salvage and what not to replicate from the code.

But the rest of the book, the OCaml chapters, are in really bad shape. They don't explain things very well, and fails miserably at the more difficult aspects of the language. The chapter on modules and functors is so bad as to be almost useless; don't try to learn about functors from this book. Camlp4, the nifty tool for metaprogramming and extension, is other subject with a bad treatment. The chapter on Threads could be improved a lot, but it still gives a general idea of how multithreaded programming in OCaml is. Again, for experienced developers, it should provide pointers for further study.

If experienced developers can get something from this book, novice ones should stay away from it. Not only is the text confusing, but there are a lot of glaring conceptual errors. Maybe some errors are to be expected from a trade book, from an author that is not an academic, but there
are things that are completely confusing. For example, this is the definition of type (page 24): "A type is a thing (or a collection of things) or value." And there is a lot more like this, unfortunately.

Overall, it has interesting parts, but surely not enough to make worth the full cover price. For experienced programmers and people already familiar with other typed functional programming languages (Haskell, F#, SML, etc), the book could serve as an initial guide for OCaml programming, but there are better alternatives around.

3 comments:

Sean Mountcastle said...

Thanks for the review. I own the book and have found it disappointing as well.

Since you mention there are better OCaml books around, could you point me to them?

The only other one I found was OCaml for Scientists (http://www.ffconsultancy.com/products/ocaml_for_scientists/) which is expensive (~$170) and only available through the publisher.

Friedrich said...

I'm always looking for books about "non-mainstream" languages because IMHO they do deserve quite more attention. And after reading Practical Common Lisp I was hoping of a new generation of such books. So I bought the Ocaml book and unfortunatly I found it disappointing. But it's not that bad, if you can get a used copy for some lower price I would buy it. A lot of things are quite useful in it. And unfortunatly it's the only book available for OCaml. There is one PDF book available at:
http://www.cs.caltech.edu/courses/cs134/cs134b/book.pdf

and a translation of french book.
"Developpement d'applications avec Objective C" which are quite useful.

I can not comment on the ffconsultancy book, however it seems the author is not indisputable, at least if one follows comp.lang.lisp and/or comp.lang.functional. And the price tag for a book of "just around 400 pages" is way too hefty IMHO....

Regards
Friedrich

tautologico said...

I second the recommendation of the french O'Reilly book, it's unfortunate that there isn't a print version (I even went after the original book in french, to no avail).

OCaml for Scientists is actually quite good, I shall post a review of it soon.