1. 18

  2. 9

    This is a really great essay on the whole, but I have to call the OP out for this:

    Haskell makes abstraction so cheap that people get out of hand. I know that I’m guilty of this.

    A typical progression of a Haskell programmer goes something like this:

    Week 1: “How r monad formed?” Week 2: “What is the difference between Applicative+Category and Arrow?” Week 3: “I’m beginning a PhD in polymorphic type family recursion constraints” Week 4: “I created my own language because Haskell’s not powerful enough”

    That’s ridiculous. It’s statements like this that create the impression that Haskell is only for super geniuses. They’re also painful to read for the “silent majority” of smart programmers who have impostor syndrome. (Unfortunately, our industry tends, both in engineering and management, to have the Russellian problem of the best people being full of doubt and the worst being full of certainty.) It is not normal, nor should it be expected, to understand Applicative, Category, and Arrow in any meaningful way after two weeks. One should certainly not give up if it takes a while to understand these concepts and why they are important. Frequently, learning them requires approaching them from multiple different angles, and even the best tutorials and exercises seem to be single-approach-based, so it often requires finding your own resources and it’s very individual what works and what doesn’t.

    At risk of sounding like a douchebag, Haskell was hard to learn even for me. (It’s probably easier now, because there are better resources out there.) Was it utterly worth it? Yes, absolutely, hundreds of times over. Did I “get” monads immediately? No. It took a lot of reading and work and playing with the language. I will give Haskell this, without reservation, though: the effort is worth it. That’s not true of a lot of the other stuff that people have to absorb to keep afloat in this industry.

    1. 3

      In defense of Gabriel I think the timeline he mentioned was just rhetorical, and the the gist of what he was saying was orthogonal: that it’s easy to go overboard on abstraction and that Haskell encourages this. Not to literally indicate that everyone should understand Category typeclass in “Week 3”.