
- Fear of unfamiliar syntax. This is utterly bogus, but I can bet you that if rust used python style layout and haskell style type signatures, it would still be incredibly niche. Something can wipe the floor with the competition, be rock solid, stable and blazingly fast, but if it’s unfamiliar it will be niche. See elm for front end, for example.
- It’s not OOP. The idea that OOP is simpler and solves the interdependency problem persists literally decades after it became painfully clear that it does not. Abstract singleton class factory pattern anyone?
- Steep learning curve and math terminology. It’s not called mappable or container, it’s called functor. It’s not called multimappable, it’s called applicable. It’s not called sequenceable, it’s called monad. It’s not called sequence stack or effect stack, it’s called monad transformer stack. This scares folks no end. (Elm did not make this mistake.)
- Fear of the difficulty of recruiting - it can be really hard to recruit good programmers in popular languages, so wouldn’t it be even harder to recruit in less popular languages because fewer people know them? No. It turns out that offering coding jobs that are based in languages that people genuinely love coding in is a massive selling point for your company, you’ll get people who are very invested applying, and a lot fewer atrocious candidates from third parties.
To be fair, it’s not my insight there, it’s Evan Czaplicki’s.
I should have added lenses. Just when you think you’ve mastered everything because you finally understand what a zygohistomorphic prepromorphism is (but also why your mentor told you that it wasn’t important), along comes the next mathematical abstraction, and that’s perfectly normal for haskell, but this one comes with 200 new operators to memorise and it feels like you were getting to grips with the Greek alphabet when suddenly it would be really helpful if you could also read Chinese characters.