5 ms·
I'm a long-time C# developer, and several years ago tried out F# for a project for which it seemed like a reasonable fit. However, after a month or so, I switch
by smithkl42 11y ago
I'm a long-time C# developer, and several years ago tried out F# for a project for which it seemed like a reasonable fit. However, after a month or so, I switched back to C#. I missed the very strong type inference of F# and pattern matching, and C# suddenly seemed very verbose and awkward to me. But C#'s tooling was just head and shoulders ahead of F#, and that made a huge difference in my productivity. But most of what I was complaining about, it looks like the F# community has addressed. I'll be looking for ways to go back and play with it.
- it_learnses 11y agoI'm also a long time C# developer and I would love to try out F#. what types of projects is F# really good for? Any cool open source projects that you'd recommend?
- JackMorgan 11y agoBeen using C# for a while now for shrinkwrapped winforms database application and web site. We started intermixing F# in the last year. I've found F# to be better than C# in everything except a few fringe cases where libraries have done things specific to C#. For example, F# has a better ORM framework than anything in C# with Type Providers.... unless you need to support two databases in the same dll. Then when trying to use nHibernate, we found that Nhibernate mappings expect virtual properties, which F# didn't easily do. So we have a C# project with a few C# classes used by the ORM, then a conversion layer into F# domain objects, which we would've done anyway, because ORM classes are terrible at expressing the domain compared to F# records and unions. Other than a few weirdnesses like that, we've found it to be great and otherwise a drop in replacement for C#.
- bargl 11y agoOh man I don't know where you are working but it sounds like you have some really good leads/architects where you are at. I like my current job, a LOT, but it isn't a development shop and they don't want to use F# because they are trying to limit the languages they support right now (Too many legacy apps). Which I understand, but at the same time I think we are really missing out. Especially because they are developing the front end to be a very Functional Typescrip SPA. Anyway I've been learning F# in my spare time just for the heck of it.
- it_learnses 11y agoThanks for this :) A slightly tangential question: at what point does using ORM become painful? When would you recommend going back to sprocs?
- JackMorgan 11y agoLike when does it make sense to have a business representation of your data in a language like F#? I'd say as soon as you want the full expressive power and safety of records and discriminated unions. Our domain representation was substantially different from what would easily fit in a relational database, so we start with it from the beginning. In C#, I think ORM classes have a lot going on, so I prefer to use them only for converting to a data structure.
- chadzawistowski 11y agoI find F# to be really great for scripty things. Honestly, it's more of a Python replacement than C# for me. I've scripted Google Maps scraping using F#. It doesn't showcase any particularly functional features, but you can see there is very little code (relative to C#) in order to accomplish what I needed. [0] P/Invoke works well, too. I've called native Windows APIs to audit user-mode and kernel-mode memory usage. [1] The last project generates a Mandelbrot image in parallel. It's as easy as `Array.Parallel.init` on line #81! [2] [0] https://github.com/ChadSki/MapMaker/blob/master/MapMaker/Program.fs https://github.com/ChadSki/MapMaker/blob/master/MapMaker/Pro... [1] https://github.com/ChadSki/RamCensus/blob/master/RamCensusFs/Program.fs https://github.com/ChadSki/RamCensus/blob/master/RamCensusFs... [2] https://github.com/ChadSki/FSharpMandelbrot/blob/master/FSharpMandelbrot/Program.fs#L81 https://github.com/ChadSki/FSharpMandelbrot/blob/master/FSha...
- edgyswingset 11y agoA web API is a great candidate. Or really, anything that needs to work well at scale.
- ZenoArrow 11y agoI agree a web API is a good project to start with. If anyone is thinking about trying this out, it's worth checking out Suave (worth noting that it's cross platform, works on Mac and Linux too): http://blog.tamizhvendan.in/blog/2015/07/23/creating-mock-api-server-in-fsharp-using-suave/ http://blog.tamizhvendan.in/blog/2015/07/23/creating-mock-ap...
- tpetricek 11y agoThis blog post might give you some good ideas: http://fsharpforfunandprofit.com/posts/low-risk-ways-to-use-fsharp-at-work/ http://fsharpforfunandprofit.com/posts/low-risk-ways-to-use-... That said, people have used F# for pretty much everything - including data science and analytics, domain modelling (and business application development), testing (Canopy for web testing), build automation (check out FAKE and Paket). I guess you get the most value from F# by using it for some analytical component (implementing some logic), but the above blog post has many great ideas in other areas too.
- Scuds 11y agoOne thing though, you'll want to _really_ learn the type system and lean heavily upon it so that the compiler can guide you to build up your system. It's the old adage of "Show me your [code] and conceal your [data structures], and I shall continue to be mystified. Show me your [data structures], and I won't usually need your [code]; it'll be obvious." -- Fred Brooks I'm digging this poker hands Kata http://codereview.stackexchange.com/questions/43831/poker-hands-kata-in-f http://codereview.stackexchange.com/questions/43831/poker-ha...
- MichaelGG 11y agoF# exceeds C#'s capabilities in essentially every way. The only time C# does much better is when you need the VS drag n drop GUI tools. Some folks also feel more comfortable doing certain types of very imperative code in C#. Other than that, sometimes there are problems with libraries that specifically target the C# compiler's exact output. Examples are functions that take an object, then dynamically look at the property names instead of just using a dictionary (F# can do this, just isn't a major focus like in C#). Or poorly written expression tree code that only works with C#'s output. That said, the F# community can often find a fix. Once you adjust to writing so much less code, it's very hard to enjoy writing C#.
- mamcx 11y agoI drop the .NET ecosystem long time ago. F# make me look at it, and mostly, the opportunity to use it on OSX/Linux/iOS. I'm uninterested in C#; so I'm trying to make the case for F# (and to be more brutal: And work good enough under OSX, because all my dev work is on it; plus looking to do iOS dev with F#: That is harder than I was expecting!). I like the language, not as much as python/pascal but is great enough. I'm toying to build a compiler, and building some utils and porting (ie: experimenting ;) ) a massive obj-c project. So far, my only gripe, is the extremely weak support for any other database that is not Sql Server. No F# native ORM work on OSX as-is. Sql Type-providers neither. You can make some basic stuff and crash faster after you try anything barely complex, like do a search ;) I was forced to use NServiceKit (a clone of ServiceKit before go commercial) because was the one that I made to work, but then is made in C# and it break the expectations I was having with F# (like https://stackoverflow.com/questions/31866227/why-im-getting-null-for-a-string-in-f/31885583#31885583 https://stackoverflow.com/questions/31866227/why-im-getting-...) So, that is my 5-cents: Expect pain outside VS/Sql Server, and I'm not fully convinced on the Web story neither (ie: Nothing as great + simple as django or flask on python)
- yareally 11y ago> No F# native ORM work on OSX as-is. Sql Type-providers neither. You can make some basic stuff and crash faster after you try anything barely complex, like do a search ;) There exists a very good ADO.net wrapper for F# called FsSQL https://github.com/mausch/FsSql https://github.com/mausch/FsSql Dapper can also be used with F#: https://gist.github.com/vbfox/1e9f42f6dcdd9efd6660 https://gist.github.com/vbfox/1e9f42f6dcdd9efd6660 Neither are true ORM compared to say nHibernate, but both include mapping to .net collections. I generally prefer this approach over a true ORM for flexibility.