The A-Z of Programming Languages: F#

Microsoft researcher Don Syme talks about the development of F#, its simplicity when solving complex tasks, the thriving F# community and the future ahead for this fuctional programming language.

Don Syme, Senior Researcher, Microsoft Research Cambridge. Image credit: Microsoft Research.

Don Syme, Senior Researcher, Microsoft Research Cambridge. Image credit: Microsoft Research.

Do you think that F# and C# are complimentary languages, or will one become more dominant than the other?

C# and VB.NET are clearly the elder statesmen of.NET languages and it’s hard to imagine a really major .NET project where these languages don’t play a significant role. So the approach we take with F# is that it’s definitely complementary to C#. We expect there will be many F# projects that incorporate C# components. For example, the designer tools we use with F# emit C# code, and you then call your F# code from those the event handlers. A working knowledge of C# is thus very useful for the F# programmer.

In your opinion, what lasting legacy will F# bring to computer development?

Our aim with F# has been to make typed functional programming real and viable. The feedback we’ve received often shows that our users are thrilled to have a programming solution that fills this role. However, perhaps the greatest sign of success will be when people copy what we’ve done and reuse the ideas in other settings.

Have you received much criticism of the language so far? If so, what has this been focused on?

We’ve received lots and lots of feedback – we’ve been in almost continual engagement with the F# community for the last three years. This has been extraordinary. People have been very helpful, and have come up with many great ideas and suggestions. However, we’re just as glad to get the “this is broken” emails as we are glowing praise – indeed even more glad – we want to know when things don’t add up, or don’t make sense.

Some programmers do have a hard time adjusting their mindset from imperative programming to OO, though most find the transition enjoyable. Learning new paradigms can sometimes be easier for beginners than experienced programmers. However, one of the great things about F# is that you can “change one variable at a time,” e.g. continue to use your OO design patterns, but use functional programming to implement portions of your code.

What are you proudest of in terms of the language's initial development and continuing use?

I’m proud of the F# community, for being so helpful to beginners. For the language itself, I’m very happy with the way we’ve stayed true to functional programming while still integrating with .NET.

Where do you see computer programming languages heading in the future?

People thirst for simplicity. People need simple solutions to the problems that really matter: data access, code development, deployment, cloud computing, Web programming, and parallel programming, to name a few. One of the exciting things about working in the Visual Studio team is that there are world experts in all of these domains working in unison. We won’t cover all of these bases with the first release of F#, but over time we’ll be operating in all these domains.

At the language level, people say that languages are converging in the direction of mixed functional/OO programming. However, I expect this will enable many important developments on the base. For example, I’m a proponent of language-integrated techniques that make it easier to express parallel and asynchronous architectures.

Do you have any advice for up-and-coming programmers?

Learn F#, Python, Prolog, Haskell, C# and Erlang!

Join the newsletter!


Sign up to gain exclusive access to email subscriptions, event invitations, competitions, giveaways, and much more.

Membership is free, and your security and privacy remain protected. View our privacy policy before signing up.

Error: Please check your email address.

Tags a-z of programming languagesf#microsoft research

Show Comments
<img height="1" width="1" style="border-style:none;" alt="" src="//"/>