The result for Which GHC language extensions would you like to be enabled by default? is telling. Slightly overstated, no two developers agree what the language should support and hence long lists to enable extensions are common in source code.
Questions 5 and 11 both seem pretty much in line with my experience with programming languages.
I only know python, or for that matter, had any interest in learning python, because of work. Outside of that I probably still wouldn’t know it; not well enough to write anything signifiant in it. For better or worse, python doesn’t really “do it” for me. I know it and write it purely to get paid. Don’t get me wrong, I quite frankly really enjoy my job, and I don’t have any regrets in learning python, but in a perfect world I wouldn’t have picked it.
These days, it really takes something special for a language to peek my interest enough to learn purely for the pleasure of it. A case-and-point for me. I originally wrote balistica in Vala. Looking back on it, I think that was the wrong choice, and I would choose several other languages instead if I had to do it all over again. After going through that, picking which language I devote my free time to is a much stricter process.
Long story short: I don’t know Haskell, is there a convincing argument to devoting my free time to learn it over say Lisp, Scheme, or Ocaml? The three languages that top my “want to learn” list presently.
If you like stretching your brain to find new tools to solve problems, Haskell is good for that.
You’ll get some of those same tools from lisp / scheme / ocaml, but they allow mutation where Haskell does not.
Learn what you like, each new language makes it easier to learn more! Try Haskell sometime, there are lots of cool tools to discover.
Learning Lisp or Scheme will teach you different things than learning Haskell or an ML.
Lisp and Scheme (and Clojure, etc) tend to have fairly weak type systems, very simple syntax, and (because of the latter) very robust macro support. For many people, writing a lisp program means, essentially, writing non-working pseudocode, then writing the macros to make that pseudocode work.
Haskel, Ocaml, and SML are all strongly and robustly typed. Writing programs in these languages often means figuring out data structures first, then writing functions to manipulate them. Of these, Haskell is a pure language – you’re only writing functions which return values, never functions that manipulate global state. Haskell is also a lazy language, which is something you can get away with not thinking about, until it produces a result that makes you think.
Haskell has the virtue of a surprisingly rich library ecosystem, but the language itself can also be quite complex. SML, on the other hand, has very few libraries available, but the language is simple enough to learn comprehensively quite quickly. Ocaml splits the difference between those two extremes.
… Which is all a roundabout way of saying the only convincing argument in any direction is going to be from you, about what you’re interested in learning next.
I’d recommend Haskell if you’d like to learn a functional language with an advanced type system, although OCaml is also interesting in that regard. For Lisp family I’d also recommend considering Clojure as it’s one of the more practical Lisps and actually gets use in the industry.
I think of Haskell as one of the more academic programming languages, so seeing that Reddit was the most common place to discuss it seems very strange to me as Reddit strikes me as quite sophomoric.
Reddits communities are sometimes very sophisticated. Typically, it depends on the mods. Also i have seen subreddits turn bad when they were included in the front page.
This graph is missing one of its bars (“Less than high school diploma”): https://taylor.fausak.me/2018/11/18/2018-state-of-haskell-survey-results/#question-100
That’s intentional. Many of the graphs only show a subset of the possible answers in order to keep things legible. The full results are always included in the table below the chart. You can see exactly how this was done in this script.
Seems rather arbitrary, at least for the specific graph I mentioned (It’s close in value to two other categories, both of which are shown). Doesn’t excluding arbitrary values without justification essentially render all these graphs meaningless?
If I can’t look at a graph and learn something without first checking the graph against the data table to see what’s missing, then the graph is at best useless, at worst misleading.