“Progressive F# Tutorials” |> Reflections

I recently attended the Progressive F# Tutorials event in DUMBO, New York. It was a really great experience, and I think much of that is due to the way it was both a conference and more than a conference. Specifically, many of the talks featured hands-on tutorials, which provided a great opportunity to learn and digest new things.

For example, after opening remarks by Don Syme — F#’s original designer — I went to a session where he taught us about F# Compiler Services by providing a sample project with exercises to complete. He then went around from table to table helping anyone who was struggling. Quite naturally, this also encouraged us to work together with the others at our table, and we enjoyed getting to know each other and working together to solve the exercises. All in all, I found it a much more satisfying learning experience than just slides and a demo.

I also really enjoyed that afternoon, where Jack Pappas talked about writing compilers in F#, and his sample project with exercises even went so far as to include NUnit tests. That really struck a chord with this test-driven developer, to the extent that I got so excited about going from red to green I initially missed one of the exercises that didn’t include a failing test.

A few more observations from the conference:

  • The F# Foundation (and the parts of Microsoft involved in it) really seem committed to open source and a collaborative development community. The language and compiler accept pull requests, you can get it on Mac via MONO, and you can even “apt-get install fsharp” in Linux. As for the development environment, Xamarin Studio provides tooling for developing F# (and .NET in general) cross-platform, including mobile. And since Xamarin Studio is available on a Mac, it’s pretty nice to develop in the language on OSX without needing a Windows VM — at least if you don’t mind that Xamarin’s vi bindings are still pretty lacking. Lastly, you can even develop online with CloudSharper.
  • Jack Pappas maintains the F# ExtCore library, which provides lots of useful common functions and utilities in F#, notably a great number of monads that come standard in Haskell. I’d like to thank him especially for very succinctly and clearly explaining to me the intent of the Reader and State monads, and for providing in ExtCore a computation expression (essentially what F# calls a monad) that allows for a combination of Reader, State, and Choice/Either. It proved to be very useful and elegant for a data serialization project I am working on in my spare time.
  • Will Smith (not this one) showed off an implementation of Quake 3 with many of the key game logic parts re-written in F# (which could be recompiled or reinterpreted dynamically). This lead him to develop Ferop, a library that makes F# <-> C interop much easier.
  • Several attendees from different companies using F# in production further cemented my belief that the language is ready for prime time and widespread use.

I can’t stress how much more I enjoyed this event, on account of actually getting to play around with relevant code in conjunction with presentations. Anyone else who learns primarily by doing could really benefit from seeking out similar conferences.

I’m really excited about the progress F# has made in the last few years, and I look forward to building on all I learned at the conference.