I’m very pleased to announce I’ve started working on a second edition of Foundations of F#. The aim is to document the language in the form it will be in when it is released in with Visual Studio 2010. This will be a challenge since it’s not yet known exactly what features will be in the final release.
So, why a second edition? It’s true that the original book is only about 2 years old, but that’s quite a long time in the IT industry these days and much has change in the F# landscape since the original was wrote and indeed much in the .NET platform has evolved. When the original was written F# was still primarily a research project, entirely driven by Microsoft Research and had a relatively small user community and evener fewer commercial users. Now F# is being co-developed by Microsoft Corporate in Seattle and Microsoft Research in Cambridge into a product. While the community remains relative small compared to that of C++, C# and Java the community site http://cs.hubfs.net has seen grown enormously since the first editions releases and question regularly pop up on http://stackoverflow.com too. The language has also attracted some major commercial users, Credit Suisse recently announced they indented to develop their quantitative models that are deployed on the .NET platform in F#, other commercial users include Coherent PDF and flying frog consultancy. Also my own opinions about programming have evolved over the past two years; I’m now a professional functional programmer and so have a much greater experience about functional programming and want to share that with you.
What are my aims for the second edition? I believe the first edition was generally well received I have certainly received a lot of mail form reads and the vast majority of it has been very positive. The reviews on amazon.com are mostly positive too; however there are some criticisms and I indent to address these in the second edition. Name the code will be more accurate, and it will be focused on functional style and give better advice about building applications in F#. The errors in the code generally arouse form the fact the code was written Visual Studio then manually copied and pasted into word, making it difficult to recheck the codes accuracy as version of F# changes, also let to the temptation to make small edits of the code without checking them. To address the code quality issue: all code is now insert via a script and all the code samples will be available on codeplex, meaning there more easily available anyone interested can check them and send me comments. The codeplex project is: http://www.codeplex.com/FOFS. To address functional programming issues I’ll be doing a major rewrite of the functional programming issue to put more emphasis on good functional style and I’ll also be adding a chapter called “Anatomy of an F# Application” to try and give some guidance on how to build an application in F#. I also want to document all the new features of F#, Active Patterns, Workflows and Units of Measure.
Concretely how will the book change? I’m aiming for evolution rather than revolution, each chapter will be carefully reviewed and updated, and there will be quite a lot of new material too. As I’ve said the chapter that will see the biggest changes is chapter 3, most of the original examples in this chapter will probably stay but this will be better organised to give more emphasis on functional style and there’ll be some new material too. There’ll be three new chapters, “Concurrency”, “Parsing Text” and “Anatomy of an F# Application”. I didn’t tackle “Concurrency” in the first edition because, to be honest, I didn’t know that much about concurrency, also I felt F# didn’t offer that many advantages in the concurrent programming. In the past two years I’ve learnt a lot more about concurrency (although there’s still more to know), F# has new and interesting features for tackling concurrency and it’s now a more important topic that ever, so it’ll definitely be in this book. The parsing “Parsing Text” chapter is be added because I want to grow the “Language Oriented Programming” chapter, I thought the original chapter was good but I want to put more emphasis on using the technique to tackle real world problems, so the chapter will grow and the sections concerned purely with parsing text will be split off. I also want to cover techniques other than fslex/fsyacc for parsing text such as fsparses and mgrammar. “Anatomy of an F# Application” will address the need for more advice on how to build complete applications in F#.
Well that’s it for now. Feel free to send comments and suggestion to the usual address and check out the examples at codeplex: http://www.codeplex.com/FOFS