It may already(!) be 1/12th of the way through 2015 but I thought I'd post some thoughts on the past year.


It has been a very good year for F#, the community is growing quickly and is really enthusiastic. With the highly successful open sourcing of core components and setting up of the F# Software Foundation everything appears to be maturing well.

I've had the pleasure of being able to write much more F# this year, including some to support and manage production systems; obviously these have been some larger, more complex projects than those I've used F# for before. There have been some challenges&emdash;as there always is&emdash;but in general I'd like to think it's gone well. The expressiveness of the type system, especially for domain modeling and function composition; support for asynchronous operations and type providers have been especially useful.

My main issue with F# is its tooling, I don't like the fact that from its .NET ancestry F# has inherited a distinct lack of decent tooling; instead it relies on overly complex IDEs to run and build projects. This is especially odd considering Microsoft's push into allowing .NET development on non-MS machines. Additionally, for the next generation of ASP.NET, project files are being made redundant for directory-based projects, most likely to make things less tied to Visual Studio. Hopefully we'll see some movement in this space soon given these moves, or Microsoft risks setting a worrying trend for F# being a second-class citizen of .NET.


Clojure is a fun language. Its syntax appears a little weird at first and it lacks a type system to protect against errors but when one sits down and starts to write all those S-expressions then one starts to really enjoy it. Clojure is elegant, expressive and powerful; it, its tools and community are excellent. The REPL approach and Leiningen project system make command-line focused workflows effortless. I've enjoyed beginning to learn to work with it this year and look forward to really starting to understand it.


Ruby remains the least painful OO language I've spent time with. Its syntax is light and doesn't get in your way too much. I find that I don't really miss the type safety of C# but that may be an artifact of how it seemed to dislike my more functional style. There's plenty of command-line tooling, which is always nice. I've spent time looking into more uses of metaprogramming and while it's certainly powerful, I've found it also easy to shoot yourself in the foot with.

C# & JavaScript

I've continued to use C# and JS for the bulk of my day-to-day work, they're both decent languages. I must admit, however, that more I use functional languages like F# and Clojure the more I prefer them, despite the fact that it is possible to write some code in a somewhat functional style in the others. I'm looking forward to C# 6 and ES 6, the new constructs and sugar added to each look promising and likely to make a real positive difference to working in the languages. JavaScript does have a redeeming quality in it's surprisingly nice tooling making working with compilers, static analysers, code generation and other tools a great experience, it's a shame more languages don't have such an approachable infrastructure in place.

Craftsmanship & Community

I'd like to think that I've done well in my craft this year; I've had the opportunity to design the architecture of a few applications and features and they've come out alright. However, I have had a few lapses with testing, some code I'd written without unit testing appropriately blew up.
I also spent a little too much time thinking, researching and planning in times I should have pushed through and just started writing code.

An interesting artifact of more time spent with F# is that it's caused a shift in my TDD flow; having the backing of a powerful type system and the different way of working and thinking of more generic, composition-oriented code, and the presence of a REPL to quickly play with the shape of potential designs, I believe I spent less time refactoring code as it was more to my liking after being written.

This year I attended my first couple of conferences, I enjoyed them and am definitely looking forward to more in the next year. I also presented on a few topics to developers I work with, with generally quite positive feedback. I'd like to continue presenting on topics I find interesting perhaps moving on to user group or conference presentations at some point.