This site will introduce you to F# and show you ways that F# can help in day-to-day development of mainstream commercial business software. On the way, I hope to open your mind to the joys of functional programming – it really is fun!

If you have never heard of F#, it is a general purpose functional/hybrid programming language which is great for tackling almost any kind of software challenge. F# is free and open source, and runs on Linux, Mac, Windows and more. Find out more at the F# Foundation.

“Thinking functionally” is critical to getting the most out of F#, so I will spend a lot of time on getting the basics down, and I will generally avoid too much discussion of the hybrid and OO features.

The site will mostly focus on mainstream business problems, such as domain driven design, website development, data processing, business rules, and so on. In the examples I will try to use business concepts such as Customer, Product, and Order, rather than overly academic ones.

F# can look very intimidating if you look at complex code without any background. In the beginning I will keep it very simple, and I have tried to anticipate the questions that a newcomer to functional programming concepts will have. If you work through the examples slowly (and in the right order) you should have no problem understanding everything.

Many people claim that learning to think functionally will "blow your mind". Well, it's true! Learning a completely new paradigm is exciting and stimulating. You may fall in love with programming again.

If you are completely new to F#, find out more about F# and how it is used at the F# Foundation. To download and install F#, read the installing and using F# page to get started.

Next, before randomly dipping into the posts, you should read the "why use F#?" page and then the whole "why use F#" series, and then the "thinking functionally" series.

There is a page with some advice on learning F#, and if you have problems trying to get your code to compile, the troubleshooting F# page might be helpful.

I will assume that you do not need instruction in the basics of programming and that you are familiar with C#, Java, or a similar C-like language. It will also be helpful if you are familiar with the Mono/.NET library.

On the other hand, I will not assume that you have a mathematical or computer science background. There will be no mathematical notation, and no mysterious concepts like "functor", "category theory" and "anamorphism". If you are already familiar with Haskell or ML, this is probably not the place for you!

Also, I will not attempt to cover highly technical or mathematical applications. F# is an excellent tool for these domains, but it requires an approach that is different from business software.