Beard: Check; Cardigan: Check; PhD: Errr, 404?
Before attending the Progressive F# tutorials this week in London, two days of practical, mind bending workshops, I had two stories about how the world worked and my place in it. Two days later I’m sweeping up the pieces of a shattered rhetoric and finding myself a little freer.
On Monday 7th December 2015, I walked into the Progressive F# Tutorials with two broad sets of beliefs:
I’m a software engineer but I’m not that kind of engineer. I’m a self taught college drop out who just happens to spend a lot of time trying to get good. I love programming, I love coding, I love all the little nuances and the speed at which our industry is moving. The skills I do have are a result of a lot of hard work and I’m not particularly clever. Since I don’t have the luxury of finding many topics easy, I tend to delve deep in what feels like an attempt to keep up. I can just about add numbers, I don’t know my times tables and my general knowledge is awful. I’m no scientist or mathematician. I’m just a normal guy who does web stuff.
These people here are all probably really intelligent. I bet most of them have degrees if not PhDs. This kind of thing must be really easy for them and half of the people in the room are contributors to the creation of F# itself. I reckon they’ll mostly be scientists and mathematicians. That’s what F# is all about, right? Data crunching, end results, analysis. Clever stuff, right?
I had hoped that attending this workshop would answer a couple of questions for me: Is F# for me? Can I find ways of using F# outside of an academic context? Will the community be open, friendly and approachable?
The answer to all of those questions is a resounding YES.
I attended three of the four workshops over the two days and 66% (statistics see. I've changed) were oriented around Web Development.
The first day was pretty intense. I attended Evelina Gabasova’s workshop on Machine Learning and this was about as far away from my daily coding as I could get. Not only did I arrive with very little experience of using F#, the topics at hand were a complete mystery to me. Luckily, Evelina is kind and patient and although I had to put a cork in my ear to prevent my brain leaking out of my head, the experience was a very good one. Pushing myself in areas that I find too difficult to cope with is an experience I'm relatively familiar with. Remember what I said about not being particularly clever? This is one of the benefits.
We built a system that would analyse incoming text and be able to tell you what language it was written in. The first part of this was to build up pairings of letters from sample texts and to correlate those against pairs of letters in the input text. From this we could do some probabilistic analysis to determine what language the incoming text was likely to be written in. (English, Spanish, Lithuanian…)
Part two was about building a neural network to achieve the same result, at which point my brain essentially shut down and I started communing with unicorns. With Evelina still happy to help I got most of the way through the exercise but with very little memory of the experience. Many of life’s better experiences turn out to be the ones we have little memory of. I'm OK with that.
The afternoon was spent with a man who has not only a marvellous mind but also a first rate name, Jamie Dixon. Not me, no, and not the Pittsburgh basketball coach either. Jamie took us through an exercise that will be close to many a web developers heart, especially those in the .NET community. We started with the Nerd Dinner project and set our sights on figuring out as much about our users as possible from just their name.
I have next to no experience with statistics (I believe statistics is actually the name of a class in American High Schools?) so this one would be challenging yet familiar within the context of Nerd Dinner.
With Jamie’s focus being on revealing the power and fun of F# to groups used to C#, this was an approachable introduction to F# that brought with it clear and practical benefits. While the contents of the session were fantastic, the main thing I came away with from this session was a sense that I could really take F# and apply it to some existing projects. Rather that trying to transition developers from C# to F#, Jamie demonstrated how we could integrate F# into existing C# codebases with no friction. We came to understand that we could utilise the data that we collect in our apps and use that to drive interesting metrics, personalisations and analytics.
We also looked at some of Azure’s Machine Learning features although I have to admit, after the morning session and the first part of this one, my mind had packed up it’s bags, boarded a plane to DontGiveMeAnyMoreInfosVille and left this shell of a man to answer questions like “How did you find the session”. After wiping up my dribble I managed to string together enough sounds to look like I was a responding human being.
Day two was another surprise topic for me. After the first day with Jamie Dixon and a web development approach, now we were about to build an online poll.
F# is not something to be feared or put on a pedestal for the academics
This one was a surprise for a few reasons. Being led by Tomas Petricek, F# author, contributor and Cambridge PhD student, I expected something out of my reach. What became clearer to me by day two was that F# is not something to be feared or put on a pedestal for the academics in the room. While many of the people involved with F# are to my mind, in the upper echelons of cleverity (Add this word to your dictionaries, folks), their approach and attitude is one of inclusivity and diversity.
I say these things as though everyone involved with F# is somehow the same, and It’d be remiss of me to leave that thought hanging in the air. I met such a range of different people at the Progressive F# tutorials that this alone could smash to pieces the pre conceptions that I first came along with.
Tomas’ workshop had us building an online poll and was the first workshop to deal directly with the kind of web development I'm familiar with. The code sat atop an F# web server called Suave which provided us the framework from which we would build up our poll application to include questions, voting and results.
Of the three workshops I attended, this was the simplest and most approachable for me. Partly because it dealt with topics I'm used to dealing with, and partly thanks to the familiarisation with F# that the previous day had bestowed.
My biggest take-away from this experience has been that
F# is for everyone.
While from the outside it might looks like a language that is only being used by academics doing research, there’s also a lot of work being done to bring F# closer to the front end.
Having had a very positive experience with F# it’s most certainly a language that I’ll be looking to integrate into a production application as soon as possible.
Where can we begin?
Some people have suggested getting started with F# in production by writing unit tests in F#. Others have recommended using F# to provide analysis and metrics for your existing apps and others yet are have shown how easy it can be to expose F# modules and types to C# code, allowing us to get started right away. I think I’ll be applying all three of these options.
I had thought that F# was for the super intelligent. I had thought that F# was for crunching data, doing statistical analysis and deciphering the human genome. A truer truth that I've come to see over these past few days is that F# is for everyone, and the community of people around it want you to be part of it, whoever you are.