| I am a beginner Haskeller maybe just crossing the border into "intermediate." What has been most frustrating for me is not really the quality or availability of books or learning materials. Instead, it has been hard to deal with the variability in the opinions of veteran Haskellers as to what it even means to be a beginner. For example, in one job interview I had, the people interviewing me (several of whom had used Haskell for 10+ years) were very impressed by simple things -- using ADTs to model a take-home programming problem; knowing about tail-call elimination and how it impacts folds and when to write something with a helper function; basics of type classes; and fluency with Monads perhaps just slightly beyond what is discussed in LYAH. In another interview, someone right off the bat asked me to explain Arrows in great detail. I admitted I didn't know anything about Arrows except that they were in some sense a generalization of the "context" view of Monads. Another interviewer once asked me frightening questions about Template Haskell and using it for SQL queries (e.g. HASQL). Yet another asked me "design" questions about multi-parameter type classes and multi-parameter ADTs. I could point out examples of the latter, like Either, and I could name-drop the idea of Phantom Types because I heard it once in a Haskell lecture, but I tried to communicate to them that I didn't have any real command over these things in a real-life situation. It's frustrating on one hand because it makes it seem like there is no path, of any kind, from beginner to intermediate. It's like a Heaviside functions or something. You are just a beginner until one day you're suddenly not. It's kind of like playing Marco Polo in a swimming pool too. One person's yelling from that corner about Arrows. Someone else is yelling about multi-parameter type class design patterns. Someone else thinks you should know Template Haskell. There's seriously no way to prioritize studying those things. If you want to go an learn Arrows, especially if you're in a geographically isolated area like I am (hence no ability to attend meetups) and you don't already have a job providing the crucible of real work to drive learning, then you'll just flounder for weeks or months with Wikibooks entries on Arrows, etc. Then somebody stops you and says you're not good enough because you don't know multi-parameter type class patterns and so now you stop and pivot to that. Maybe whack-a-mole is a better analogy than Marco Polo. Of course there will always be some corners of an ecosystem that are obscure. But the problem with Haskell is that it seems like everything is obscure and everything pulls you in an entirely different direction, and you don't understand how they are related until long after you've mastered them at an intermediate proficiency. What I'd really like to see is more of a community consensus about what it means to be "beginner" or "intermediate" or "advanced". Maybe then people who are putting up job ads for relatively junior positions or positions where they pay clearly means it's junior will at least have some community guidance for the sort of out-of-the-box recitational knowledge to expect? |
They should be able to train you to do what they expect you to do.