Why F#?
General sentiment & appeal
- Many commenters describe F# as one of the few languages that fundamentally changed how they think about programming; users tend to be unusually enthusiastic.
- Praised for concise, readable syntax, expression-oriented design, immutability-by-default, and “pit of success” feel once you get over the initial learning curve.
- Some see it as “corporate‑friendly ML”: a practical functional language with escape hatches, not academic purity.
F# vs C# and other languages
- C# has adopted many F#-style features (records, pattern matching, lambdas, async composition, optional types), narrowing the gap; some argue this diminishes F#’s niche.
- Others insist the whole of F# (expression-based, pervasive immutability, unions, pipelines) is more than the sum of features C# has copied, and gives a different way of structuring programs.
- Discriminated unions and better null-safety are repeatedly cited as F#’s “killer features” still missing from C#.
- Comparisons appear with Scala, OCaml, Haskell, Elixir, Gleam, Rust, Clojure, and Ruby; F# is seen as simpler than Scala/Java stack, more strongly typed than Elixir, and easier than Haskell/OCaml for many.
Type system, pipelines & type providers
- Strong static typing with full type inference is a core attraction; many like how the compiler enforces correctness across complex refactorings.
- Pipeline operator (
|>) and function composition are highlighted as changing how people write and reason about code. - Type providers are viewed as both a standout innovation (schema-driven, type-safe access to CSV, DBs, configs) and a source of brittleness and operational complexity (compile-time dependence on external systems).
Async, computation expressions & performance
- Computation expressions (
async,task, custom CEs) are praised as a powerful generalized version of async/await and other monadic patterns. - There’s some confusion and criticism around older
asyncvstaskinterop; newer guidance is to usetask {}for better integration with .NET. - At least one commenter finds F# slower than C# for performance‑critical work; others focus more on clarity and safety than raw speed.
Tooling, build system & ecosystem
- Tooling is described as historically rough but now “good enough”: Visual Studio (Windows), Rider, and VS Code + Ionide are common setups.
- Some still complain about slower compilation, lack of hot reload, and awkwardness compared to mainstream C# tooling.
- Being a .NET language is seen as both strength (huge library ecosystem, GUI/mobile/web options, interop with C#) and weakness (MS distrust, “C# baggage”, many docs/examples only in C#).
Use cases, workflows & interop
- Strong fits mentioned: backend data processing and parsing, CRUD/business-domain modeling, domain‑heavy logic with rich types, CSV/data wrangling with type providers, and full‑stack via Fable/Elmish or WebSharper.
- Common pattern: “functional core, imperative shell” — write domain logic in F#, keep ASP.NET / GUI / DI-heavy code in C#.
- Some teams report successful all‑F# shops, including a sizeable (~80‑person) company and commercial SaaS products.
Adoption, hiring & careers
- Major practical downsides: small community, few job postings, difficulty hiring experienced F# developers, and the perception of being a .NET second‑class citizen.
- Several people like F# but avoid it professionally because investing in C#/Java/TypeScript/Rust pays off more in the job market.
- Others treat F# (and similar languages) as a “learning and hobby tool” that still improves how they write code in mainstream languages.