I have read "OCaml for Scientists",
the
work of Dr Jon Harrop, which is dedicated to the OCaml programming
language. Even though science and technical computing are inherent
aspects of this book this is not restrictive with the exception of a
few complicated examples in the final chapter.
The OCaml language combines functional and imperative programming. It is very fast
and has garbage collection. Type inference makes coding particularly
concise, safe and easy. OCaml's embedded module language and object
orientation form a powerful software engineering tool.
Without
requiring knowledge of ML-type languages, OCaml for Scientists teaches
the reader how to use OCaml for scientific computing, including the use
of several powerful libraries among the examples.
There
are few prerequisites for correctly following the book because the
author introduces the classical concepts of programming (such as
recursion) before progressively developing.
That being said, the
knowledge of an imperative programming language (like C or Pascal) or a
functional one (such as Lisp or Scheme) is not absolutely required but
would make the book more straightforward.
An important part, at
the beginning of the book, is dedicated to a proper understanding of
the language itself: here one finds coverage of the functionalities
offered by OCaml's many keywords, illustrated by numerous clear
examples.
This book does not content itself with being only a
tutorial of the language. The author shows the proper usage of the
possibilities of OCaml - such as the best programming practices - and
often goes further in justifying things by studying the internal
representation used by the compiler.
Working side-by-side with practical examples, the clarity of the exposition of this part of
the book constitutes what is probably one of the most efficient mediums
offered to the beginner, to rapidly acquire an understanding of the
basic language necessary to program.
Dr Harrop teaches things in
such a manner that reading is always easy, even when covering
non-trivial scientific subjects. The syntactic coloration, on
large white pages, makes the book pleasant to open.
These two aspects work together to give an impression of clarity and simplicity.
The
book, stuffed with examples, has a practical view of the different
programming components comprising the OCaml system: The
customisable top-level, the many compilers, the dependency
visualiser and profiler, are all presented together with their usage.
The
book's examples are worth a special mention. With the exception of the
contents page, it is difficult to find a page which does not present
several concrete examples of programming. Some of them are surprisingly
elaborate.
Similarly, on the practical side: The use of
certain libraries, such as "command line arguments, big arrays, vector
matrix and lexing and parsing, are presented in detail.
Despite the scientific focus, the first few chapters are of general interest.
Other
parts such as visualisation (with OpenGL) or lexing and parsing,
are perhaps particularly useful for game designers.
In addition to OCaml for Scientists, I own "Programmation fonctionnelle, générique et
objet (Une introduction avec le langage OCaml)" by Philippe Narbel. The
two works complement each other, OCaml for Scientists being more
concrete. To cite only the unique parts of OCaml for Scientists, it
presents libraries and studies optimisation in detail.
Certainly,
IMHO, a section detailing the writing of functors would have been
welcome. However, studying the book gives an understanding of the
language such that one can undertake substantial programming
projects.
The book, preceded by a glossary, is divided into ten thick chapters :
Introduction,
Program Structure, Data Structures, Numérical Analysis, Input and
Output, Visualization, Optimization, Libraries, Simple Examples and
Complete Examples, Bibliography, Advanced Topics and Troubleshouting.
To conclude, OCaml for Scientists is an excellent book, clear and practical, which can be used as a reference work.