Why F# evangelism isn't working (2015)
I find it interesting to compare F# with Kotlin.<p>F# had Jet as the one large success story of a full f# shop, but outside of that there weren&#x27;t many large companies using a lot of F# (except microsoft internally, and they didn&#x27;t blog about it _too_ much).<p>Kotlin on the other hand is seeing server-side adoption in quite a few large companies. Google is recommending it as the server-side JVM language for new services going forward. Airbnb and a handful of other large companies blog about having kotlin services in their architecture.<p>There&#x27;s a few reasons I think Kotlin is succeeding where F# hasn&#x27;t been able to:<p>* JVM + tooling is a proven and great ecosystem. First-class support for most of your cloud tooling and databases (AWS, Kafka, ElasticSearch, Cassandra, etc).<p>* It has fantastic editor tooling (given that an IDE company created and maintains it). F# for quite a while has had less-than-average tooling (it&#x27;s gotten better now with newer versions of FSAC, Ionide, and Rider, but it was _rough_ for a while). It&#x27;s hard to move to something new that&#x27;s supposed to be safer when your language server has memory leaks or breaks every X hours. I remember stretches of time where I was just writing F# in vim without syntax highlighting because any editor I tried would constantly throw errors in the middle of me coding. That hasn&#x27;t happened to me with Kotlin.<p>* It&#x27;s close-enough looking to a scripting language with nice features that it&#x27;s more approachable. Classes and functions look similar to other languages. It even has block parameters that are inviting for rubyists (although the implementation is different). It also has some syntactic sugar to make some things very ergonomic to work with.<p>* All of the above just works. No big fiddling necessary. The pain points in working with the Java ecosystem are written about and known (largest that come to my mind are coroutines interacting with java threading, exceptions in mixed coroutine&#x2F;threading environments, and null&#x2F;optional which Kotlin has some great features built-in to work around).<p>There&#x27;s also things like arrow-kt and http4k for those desiring the more functional side of things.<p>The one thing that continues to baffle me is how little I see in people talking about kotlin in various communities (slack, discord, reddit, etc) compared to how many people are writing it (both for android and for server-side concerns).<p>The one upside I&#x27;ll give is that fable has been much better IME than my experience with Kotlin&#x2F;js. I also prefer F# from a purely language standpoint, but Kotlin is just better to work with.