Part 3: Building officeAutomata with F#

(Continued from the previous post, where I discussed developing the idea for officeAutomata and started out learning how to program in VB.Net)  

VB.Net is a nice starter language, as its syntax is very approachable for a new beginner and introduces programming concepts adequately. I’m assuming most inter-office programmers have used VB writing macros for Excel. However, it does show its limits when writing longer algorithms and programs. As with most object oriented languages, it’s requires objects to get anything done, and is overly reliant on “for each” statements, while at the same time being quite verbose; like a talkative person that says a lot but communicates little. All these extra lines of codes seemed to serve little purpose to a beginner, when what I needed at the time was just some first-class functions.

In my continued learning, with Hacker News and reddit (r/Programming & r/LearnProgramming), I stumbled upon posts for F#, curiosity got the better of me, since I had never heard of it even though I was working in .Net. The posts were quite intriguing, as the benefits of using the language seemed clear. F# looked more efficient, less code required, less bugs, encourages good programming practices, and making it difficult to do unwise things. One post in particular help me make the decision to switch, which for me, simply showed the difference between the two styles of programming, OO vs Functional, and made the decision easy.

 F#'s new logo

F#'s new logo

Once I had decided to switch, I starting learning as much as I could through TryF#,, and Robert Pickering books The Beginnings/Foundations of F#. Fsharpforfunandprofit also was a great resource, especially the posts on railroad programming, which made much more sense to me than OO ever did. I started with rewriting the algorithm that I was working on in previously, into F#, along with some basic database structures to hold inputs/outputs. It was slow going at first, as I moved from an OO to functional perspective while learning a new syntax, but it became easier very quickly.

I forced myself to learn (and understand) functional concepts like records, type providers, pattern matching and recursion before moving forward too far in development as I felt these concepts were important to using F# to its full potential and would make future programming efforts easier. Since then, as I’ve developed officeAutomata, I’ve picked up scripting with F#, web development with WebSharper, asynchronous workflows, computation expressions, building types, finite state machines, actors through Mailboxes and observables. All of which have proven useful in building officeAutomata with less code and fewer bugs than comparable programs.

It wouldn’t be a stretch to say that F# has made officeAutomata possible, as building a program like this as a solo developer (and a beginner) in other languages might’ve been impossible. F# has influenced development throughout the project, as styles have adapted based on the need of portion that was being developed, from reactive, Actors or pipeline; and F# made adapting styles easy while keeping the flow of the program similar.

I’ve really appreciated the support, spirit of community,  and passion of F#er’s, whether it be at meetups in Helsinki, quick and informative responses on StackOverFlow or Sunday mornings with coffee & Sergey’s F# Weekly. It definitely has made working in F# a much more enjoyable experience than switching programming language should be!

Some of the challenges we’re using F# for here at officeAutomata include: Natural Language Processing (for processing voice commands), Reinforcement Machine Learning (for real time automation generation), Conversational User Interfaces (turning speech into intent for commands), translating Excel functions into verbal commands and meta Excel functions (from user requests). Currently, officeAutomata is in a closed beta, and we're planning on its initial release within the next few months.

We’re starting to look for initial hires with F# experience. So if you’re interesting in joining the team, take a look at open positions here

In the meantime, please subscribe to for updates and follow us on Twitter and LinkedIn - @officeAutomata. If you have any feedback for us, please get in touch!