I am currently learning F# as another string to the bow and all that. I got myself a copy of Chris Smith's book Programming F# as part of this, so thought it only right and proper to provide a review. Which has also been added to the amazon web site.
For an introduction to F#, albeit a bit old, check out the links on this old post.
Book Contents
The book starts with the obligatory introduction to the language. The sections on lists were an exception but, as is usually the case, it is only after this section that the book gets interesting as it delves into different programming idioms: functional, imperative and object oriented.
It was specifically as an introduction to functional programming using F# that I bought this book, so it is from this perspective that I shall procede. I won't particularly comment on the imperative and oo sections, but suffice it to say they cover ther expected areas and include areas such as exception handling and oo concepts such as polymorphism through object inheritance. But not the kind of stuff that I bought the book for.
The section on functional programming covers the basics of functional programming including:
Immutability as a protection against unintended side effects, an assist in writing parallel algorithms and generally providing more readable code.
Function Values, including anonymous functions (lambda expressions), currying and returning functions.
Recursive functions, including mutually recursive functions; functions that call each other.
Symbolic Operators via symbolic functions
Function Composition using composition and pipe operators
Pattern matching as a powerful version of the familiar C switch statement
Discriminated unions and Sequences which can be used to represent all kinds of structures and can be recursive.
Skipping the sections on imperative and oo we are now up to Chapter 6 : .NET Programming which shows how to integrate with the .NET framework both as a consumer and provider.
These first 6 chapters really provide a foundation for the next 2 chapters, entitled Applied Functional Programming and Applied Object-Oriented Programming. These chapters then expand on concepts from earlier in the book. The Applied Functional Programming chapter develops pattern matching and lists further before looking in a bit more detail at programming with functions.
Part 2 now picks up with more detail on programming with F# and has a good sections on Asynchronous / Parallel programming and Quotations.
Good Points
This is a book that I have recently bought and as is my usual style I have very briefly flicked through it. It looks like exactly the book I'm looking for as an experienced .NET programmer who is new, not only to F#, but also to functional programmming. The concepts appear laid out clearly and examples are good. I like the fact that it does deal with both functional and oo programming as well as integration with .NET.
Bad Points
To be honest I am not sure yet as I have not started doing real work with F#, so any frustrations will appear over time. I can say howefver that this is probably not going to be a good reference book for F# as a language, or a cookbook of solutions.
Summary
I suspect this book will be dipped in and out of as I work with F# and time will tell how useful it is in the real world, but on first glances, this is exactly the riught book if you are new to F# and want to get stuck into developing with it straight away.