Note: I’m going to be lazy and often use “functional programming” to mean “statically typed functional programming”. Pretend I’m saying “algebraic programming” if that makes you feel better.
I seem to get cited a lot as an example of someone who has “abandoned” functional programming. I thought it would be useful to have an explanation in one place that people can just link to rather than having to explain my position each time the subject comes up.
I do not intend this piece to convince anyone of anything, it’s just documentation of who I am in this context and where I stand.
I learned to program in Standard ML during my pure mathematics degree, but not to any very high standard – I understood the language tolerably well, but didn’t really know much (if anything) about software development. When I got out of university, I got a job as a Java developer. I was quickly frustrated by the language and in my spare time also learned Haskell and Scala.
I have never shipped production Haskell code. I have shipped some production Scala code, and some of my code was included in the Scala standard library and compiler (but not a lot, and it wasn’t very good).
I have done a fair bit of writing about both Haskell and Scala, and people seem to have found that writing useful. In addition, I was at one point a fairly prominent (read: loud) member of the Scala community, and for better or for worse had some influence on the development of the language. CanBuildFrom was indirectly my fault (I proposed it as a thought experiment, and argued against its actual inclusion).
I would describe myself as tolerably competent at the details of both languages. I’m rather rusty when it comes to write them, but I can do it. Due to my relatively restricted experience I do not have much big picture knowledge of software development in them.
I formally decided to stop writing Scala in 2009 (I think). Since then most of my work has been in Python or Ruby, with a little bit of C, a little bit of Rust, and the occasional dabbling in other languages.
What I think of FP
Short version: Fine but over-hyped. Not worth dealing with the community.
You can probably infer the rest of what I’m going to say, but if if you can’t then long version now follows.
There are a lot of claims of statically typed functional programming’s obvious superiority, up to and including claims that people who don’t use it are “insane” or “unethical”. I think people making these claims are bad and they should feel bad. I refer you to Hillel for more details
Broadly speaking, I like having a type checker. I happen to mostly be writing dynamically typed languages at the moment, but that’s mostly coincidence. One of the reasons I’d like to be writing more Rust (despite being a bit lukewarm on the language in many ways) is that I like having the type checker. I just think they’re oversold, and the evidence that they are in any way essential is non-existent to unconvincing.
I’m not a big fan of Haskell’s insistence on purity, or Scala’s design in general. I think both languages are large and complex enough that any decision to use them or not doesn’t come down to any one thing about them (this is true of essentially every mature programming language. It almost can’t be otherwise), so a rejection of them is not a rejection of FP per se. I keep meaning to get around to giving OCaml another try – Rust is nodding in the right direction, but isn’t quite the right sort of thing for scratching this itch.
The big problem I have with FP is the community. That’s not to say that only bad people do FP – this is absolutely not the case. The overwhelming majority of people I know who do FP are nice, kind, and interesting people. Similarly anyone telling you that FP is for academics and elitists is full of it – I know many people who are into FP for extremely practical reasons.
The problem is that a nice community is not one that contains nice people, it’s one where your interactions with the community are nice. If the community is almost entirely nice people but there is one jerk who you are guaranteed to interact with, then it is not actually a nice community.
In this sense, the FP community is awful, and I have absolutely no patience for it or inclination to deal with it. There is a relatively small number of you who are ruining it for others (or at least for me, and people within the community I know accept that they are problems and do not know what to do about it), and the community seems unable to self-police on this front.
What should you do with this information?
Link to this blog post rather than @-ing me into conversations about this on Twitter. Otherwise, probably nothing.