I think there’s an aspect missing here about Haskell. It’s completely silly to consider Haskell as a language alone since many—but hardly all—of the people in the Haskell community use it as more of a learning tool.
Haskell absolutely excels as a learning tool. Similar arguments can be made for other languages, but I think today that the challenge of “learning Haskell” is one which can dramatically broaden the horizons of many who might take it on.
But among people who use Haskell as a powerful tool there are different metrics of success. There would have to be!
Today the community freely mixes these two concerns. It’s not an easy problem to solve, for one, but it also doesn’t hurt that a lot of people after crossing the “learned some things” divide would like to see what it takes to use Haskell in anger and so there’s a reason for these people to energetically support Haskell in Prod for, perhaps, underdeveloped reasons.
So, I think perhaps it’s tough to generalize about why people say the things they do about any tool, Haskell included. I’d really like for more “Haskell in Anger/Prod” stories to surface and for more real problem solving stories to be shared and cherished. But I also don’t want to stop the endless supply of “monad tutorials” as each new person learns a bit of interesting CS/math that may be a valid guidepost in their programming endeavors to come.
What does “CPS” mean?
Edit: I’m guessing you meant “Continuation-passing style”. More info here.
Oh, and apparently I meant “continuation passing style style”. Whoops!
This observation made me smile. :)
That’s actually a really good perspective, that the language has value for learning in addition to what it has for direct use. I’d certainly not understand type theory (to the extent that I do) without having been walked through the basics via Haskell.
I see nobody mentioned Ruby yet, so let me add my two cents. It is my personal opinion and I don’t expect anybody to agree. I personally disagree with OP on Cards Against Humanity, although I think it helped him to draw nice analogy.
I have been Rubyist for five years now. I appreciate the attitude of Ruby community and how welcoming it is for beginners. I think it had positive impact on other languages and communities around them. It did show that you can do things in a different way, but it went out of control a little bit. I see lots of haughtiness in Ruby community about things OP mentioned. High ego and lack of modesty is immature. A sign of maturity for me is to be able to take a step back and evaluate the work that has been done. It’s not that everything in Ruby ecosystem is bad. We just could improve things.
I think lots of Ruby tools sacrifice simplicity for easiness of use. Easy doesn’t mean simple which is something Rich Hickey speaks in excellent presentation “Simple Made Easy” (you can watch it here http://www.infoq.com/presentations/Simple-Made-Easy).
At first I didn’t really like the analogy but the more I think about it the more it grows on me. I like the idea that when we perform under the constraints of a game or a language that we assume performing well in that idiom is good, that when our code is maximally beautiful or simple or cohesive that it is therefore necessarily good. It speaks to the larger difficulty of taking all of the measurements, qualitative and quantitative, of our software and summing them into a sensible judgement of its quality.
Complete agreement here, particularly with the Haskell part.
Indeed. As much as I like Haskell as a language, there is a lot of self congratulation in the community for simply writing Haskell, as if that is a virtue worthy of admiration.
Haskell is a programming language. It exists to solve problems. Treating the language as a virtue instead of a useful means to an end (the program) is silly, and inflates the ego of those who fall into that trap, making us all look worse for it.
What I find funny is that whenever I make this statement around Haskell people, there are always a few who will tell me that the situation I am observing simply doesn’t exist.
A thing I found myself observing earlier is that the Haskell community has an atypically bad case of survivorship bias. All the people you find in the Haskell community are people who have failed to be driven away by the various things that put people off joining it. Frequently this means that they lucked into never experiencing it.
Sigh. I’m one of those survivors, and I think I experienced every possible problem at some point, all the way back to my first program in Haskell, where I didn’t understand (because whatever tutorial I was using glossed over it) that a let expression is different from a let statement inside a do block, and therefore has different whitespace requirements. Nobody wants to even remember that the whitespace sensitivity exists, let alone that beginners struggle with it due to extremely opaque error messages.
I think a lot of the long-term users have hit most of the same blunders as the people who’ve left because of them. I don’t have an explanation for why not everybody sees these things as serious… or maybe everyone does, but “serious” doesn’t imply “I should do something about this”?
This seems to be variable from survivor to survivor and problem to problem. A lot of problems I’ve raised/whined about have been met with “I have never experienced this problem” (with varying degrees of “and therefore it’s not real” subtext). A lot of others are met with “yeah, I totally get this is a bit shit. Here’s my workaround I’ve arrived at after lots of painful experimentation”.
And if you have workarounds to all the problems you experience and care enough about to need workarounds for, I’m certainly not going to say you shouldn’t write Haskell! I’m glad people write Haskell. I just think it’s worth remembering that the people who write in any given programming language are the ones who haven’t been driven away from it, and Haskell has an atypically high number of things to do that.
There’s also a question of motivation. My motivation to use Haskell is relatively low. Some of the barriers to entry are also lower for me (the usual bundles o' privilege, enough maths that the types aren’t scary, etc) while some are high (a lot of rage about broken infrastructure), but on balance it mostly seems to lean towards the not quite worth it end.
Yeah. I agree very much with all of that stuff, most especially your second paragraph.
I reiterate my suggestion of Idris, depending on what you want in a language. :)
Driven away by problems with the community or the language?
Either, both. e.g. sometimes people are driven away by running into problems with the language (or, more commonly, the ecosystem), asking the community how to work around these problems and being told that they’re bad people for wanting that and this totally isn’t an issue.
(Not, uh, that I’m bitter about the responses to my other recent anti-Haskell screed. I swear I’m more than a one trick pony and actually have a fair bit of affection for Haskell as a language)
The factors you name are the common ones I’m aware of, because the Haskell community is very friendly to newcomers in the common case. That’s something that participants should be justly proud of.
I’ve heard reports that it’s substantially less friendly to those who are not presumed to be male. :( On the off chance that anyone here knows me, they might think that, given how long I’ve been using Haskell, I’d have had the chance to directly compare that… but, no; after gender transition it became substantially more unpleasant to be in the #haskell* channels and mailing lists, but I was not in the mood to analyze why I felt that way or whether it was because of me or because of other people or what.
I guess this is a tangent, and I wouldn’t derail the thread with it except that it’s winding down anyway.
And, yeah, wow, I just kind of realized that you must have resisted significant temptation to engage with the comments on the thread about your own article! I do think that thread is a rather good illustration of the stances you’re describing here. As you say, there’s acknowledgement of problems… but the degree of action on them is inconsistent.
And somehow the discussions always turn into debates that don’t involve the newcomer who raised the question that sparked them. :(