4 comments

[ 3.0 ms ] story [ 21.5 ms ] thread
> C is a quintessential engineer’s language. Haskell is a pure mathematician’s.

> A good engineer’s and a good mathematician’s aptitudes don’t always overlap.

This. The people who like Haskell think differently from the people who like C. Some find that Haskell fits the way they think; some don't. And that's fine.

The problem comes when the Haskell types (pun intended) think that everyone else just needs to use/study Haskell more, and then they'll have their enlightenment moment. No, a bunch of people won't. Haskell won't fit their minds no matter how much effort they put in, and it's not because they're stupid or lazy. It's because they don't think that way.

And that's fine. Computer languages are tools, not masters. You don't have to use a language that doesn't fit you.

It's a shame most of the people don't even try to learn Haskell because of stereotypes.
> The people who like Haskell think differently from the people who like C.

I'm familiar with numerous people who _like_ C and there's one thing that stands out about them is they don't think in abstractions, effectively ruining the whole point of abstraction as a concept. You offer them, say, an STM¹, and they are like "oh, right, a semaphore here, a mutex there, that's an easy one" and so on.

> The problem comes when the Haskell types (pun intended) think that everyone else just needs to use/study Haskell more, and then they'll have their enlightenment moment.

I'm a Haskell type and ex-C type, and I don't think it is correct. To get Haskell, you have to step back and unlearn some of your knowledge about computers, no matter how hard you've acquired it. The problem with the abstractions offered by p^Wmainstream programming languages, is they leak, one way or another, so you inevitably end up not trusting any abstraction ever at all. In Haskell, abstractions are more reliable (dare I say rock-solid?), compared to mainstream, thanks to effects isolation, referential transparency, laziness and other merits and properties of the language.

Another mistake I did when starting Haskell was I expected the same words to mean the same things, `class` in particular. That cost me months of struggling to understand why it didn't work.

The bottom line is Haskell is significantly different from anything mainstream you've programmed in before and expecting it to work the same way is, uh, not very efficient.

¹: https://en.wikipedia.org/wiki/Software_transactional_memory