There are not many technical programming books that could also be decribed as page-turners but this is definitely one of them: everything about it is perfection. Real-world Functional Programming is exceptionally well-written and well backed-up by a wealth of on-line supporting material; the author, Tomas Petricek, himself is readily accessible online and very much a leading contributor to the most popular functional programming fora. This is best described as a functional programming course rather than a reference book and it is structured accordingly; the four parts: "Learning to think functionally", "Fundamental functional techniques", "Advanced F# programming techniques" and "Applied functional programming" provide a very thorough basis for becoming a functional programming professional. I think this book is mainly aimed at people taking their first tentative steps into the functional programming world - probably from an imperative language like C#. The first part is a gentle but thorough exploration of the functional programming paradigm and how it differs (immutability, compositionality) from imperative languages. Functional language concepts are the ideal solution to a number of programming tasks and we see how many functional concepts are finding their way increasingly into imperative languages (LINQ, Lambdas in C# for example). By the time we reach the end of part three "Advanced F# programming techniques" we have looked at functional design in different arenas (Data-Driven/Behaviour-Driven); how to program efficiently in functional languages (and where to benefit from the multi-paradigm F# language to improve efficiency via mutability whilst remaining functional by hiding this mutability); we explore, pragmatically but in some depth, the scary concept of monads and use these concepts to write our own monadic types (computation expressions in F#). At this stage you should be feeling very confident, so we can safely move on to the final section which looks at a number of real world programming problems and how to solve them functionally (particularly asynchronous and parallel techniques). The book is crammed with all the code snippets you will need up to the final section at which point you are given the main features but left to flesh out the body of the code yourself (assuming you are coding the examples); however, all the completed solutions are available online should you want to refer to them (I recommend doing this anyway). I've been a C# programmer for many years but since developing an interest in F# 18 months ago this has been by far the best book I've read, not only on F# but on the wider functional programming concepts; but even if you only ever intend to stick with imperative languages, the functional concepts explained in this book will surely improve your code.
Very well written and accessible book, as you would expect from these two authors - both of them prolific posters on Stack Overflow. It is a bit heavy going - but its hard to introduce a whole new paradigm of programming without being so, I guess.
As it states in his "About this book", "This is not a quick guide to F# programming", this should probably not the first book on F# to read. But this book is perfect for a C# programmer who wants to make a move to F#. It lets you gradually think in the functional way of doing programming with many F# and comparable C# example code. Only downside (but for that I cannot give this book a star less): if you want to try the F# examples you have to be aware of the way F# handles whitespace. I also purchased Programming F# where this topic is well explained.
Having struggled to understand the new F# concepts (e.g. discriminated unions, the pipe operator, pattern matching) in the past, I have found this book to be invaluable. The author's C#-based approach (that is, explaining the confusing F# features in terms of how they would look in C#) meant that I had very little difficulty getting to grips with it. I can say with conviction that this is the most useful F# reference I have yet found, either online or offline. If you're familiar with VB.NET or C#, and want to try F#, get this book. Anyone with a .NET background should have no problem following along.
Incidentally, when I first discovered F#, I thought "what's the point? Functional languages are for maths professors and nobody else, and it's not even properly object-oriented". I was wrong, it's actually a very powerful language. When will VB.NET support discriminated unions; and deconstructing anonymous tuples returned from a function call? Probably never.
This book is superb for introducing functional programming and doing so in a way that helps imperative programmers grasp the (many) functional concepts they need to know. Also an excellent F# reference. Looks of good, practical examples.