Tech-ppl being smart and-all-that, happen to usually kinda always miss the points other then tech. Every product requires momentum to take off. There can be hypes that generate momentum en-mass under right circumstances at right times, but the majority of products and services require the support of an organisation, money, anddedicated expertise, for development, production, promotion, positioning, advertisement, marketing, tooling, support, …
In a breakneck-competition-infested capitalism we live in right now, even those with the proper jazz tend not to alway get ahead or even remain competitive, and those without the appropriate bells and whistles, are in many cases doomed. Now, granted, some things are lucky to generate a hype for whatever reasons at certain times:
- Java made life so easier for developers suddenly flocking to it (+100 other reasons)
- R/Python offering somewhat simple scripting solutions especially in data analytics (+100 other reasons)
- Scala getting Spark and what-not hand-in-hand which became a star product which in-turn made Scala popular (+100 other reasons)
In any case, they happened at the right time offering the right solutions perhaps offering the best problem-solving package for the first time, in their kind of way. I admit, being free had and still has a lot to do with them taking-off. Being open-source and free of legal hurdles comes next. Should the same products be offered now, I doubt they would garner much interest. In any case, F# is over a decade old and if the so-called open-source community wanted to embrace it (or in fact FP as a whole), they would have done it by now - SIGH!
Lisp is a brilliant functional language and by some accounts at the top of the pinnacle - hate the whole parentheses clutter though - and it is from the 1950s. Where is it used now? How many people use it? How much it is used? How many real useful used things have been developed in it? Are there enough jobs in it? Is it fulfilling its potential? It was more-or-less a niche then, it is so now …
For F# to become a success and reach its potential it requires excellent tooling - instead, it has gotten worse -e.g., compare VS 2017 and 2015. It needs to be taken seriously and properly supported as a first-class citizen by MS so other businesses and corporations feel comfortable and can trust to utilise it. It needs true cross-platform support and tooling as in actually working .NET Core on Linux, Mac, etc rather than Mono. It would go a long way if they offered the same polished VS cross-platform. I am not saying there needs to be native libraries, but nice polished consistent documented official F# wrappers would go a long way. Forget about the wrappers even, I will make do with proper documentation.
.NET is severely lacking when it comes to data analytics/data science tools and it is a huge and ever-growing market. Surprisingly, I haven’t seen F# wrappers for any of Accord.NET, ML.NET, CNTK, or Encog. They gave up on their own cloud-computing platform (OneNet/Pirahna) and they did not take an interest in MBrace and that appears dead as well. They were perhaps right to do so given the momentum that Hadoop/Spark had/have, but perhaps they should have done a much better job at providing nice interfaces from .NET into Python or JVM based standard tools of the trade. FYI, Mobius also has no F# wrapper. You want concurrency, Orleans is your best and Akka is next, and both eh, C#.
You want to utilise your GPU, there is Alea (C#). The dominant AI tools that utilise GPU like Keras and Pytorch are Pythonic with No production-ready .NET interface. Tensorflow and CNTK have C# interfaces but that’s it -> having seen the C# code for CNTK and Tensorflow, I can really understand the need for a nice easy-to-use interface like Keras that combine the capabilities of all major frameworks. There is no such thing in .NET and no interface to it in .NET. That’s just lame and lazy.
Then, there is the paramount need for libraries/packages to handle various tasks. What exists on .NET is simply insufficient. The strength of R and Python is their very rich ecosystem. They do suffer from the issues relating to open-source software developed by people who are by-and-large not professional developers, but they get the job done, and in the end, that is what counts.
Now, I can even forget about the wrappers if there was good documentation for doing stuff in F# but again, in many cases, I would have to resort to answers in C# and convert them to F#, which does not always work as well as one would like or need. Even when it comes to its own stuff, its lacking: a couple of month after F# 4.5, I was checking and I still couldn’t find any resource that could tell me why and in what situations I should use ValueOptions rather than Options.
All these being said, when we are talking about tools that want/need/depend on parallelism and concurrency - as with Machine Learning and AI, Cloud Computing, GPU Computing, Data Processing, … - F# with its functional first nature with a been a much more suitable choice for all such tools to be developed in. There are also proprietary softwares still popular both for support and legal reasons. SAS and MATLAB are really outdated and clunky yet widely used and a commercial Microsoft platform could do really well there. F# could easily be the backbone there.
Developing such interfaces, frameworks, libraries, documentation and self-learning resources, takes a lot of man-hours and resources that a relatively small or even a mid-size community cannot handle on its own. They are a giant to the tune of over half-a-trillion dollars sitting atop 10s of billions of dollars in cash. What’s wrong with spending a few million to promote a product that is going to increase their own market penetration.
F# is a beautiful elegant succinct simple concise language. It has a tone of exhilarating great core features (algebraic types, computations expressions, async workflows, type providers, parallel sequences and arrays, lazy eval, etc). It is an excellent teaching language and fun to learn. With its functional nature, it is well suited to the multi-core nature of the moment and the future. Parallelism, concurrency, and reactive coding come naturally to it. No design patterns, simple functions, less errors, … but it needs proper well-placed investment and support