5 ms·
I teach a lot of Haskell [1] and observe a lot of people teaching Haskell. Write Yourself a Scheme is not representative of how the Haskell community teaches Ha
by coolsunglasses 12y ago
I teach a lot of Haskell [1] and observe a lot of people teaching Haskell. Write Yourself a Scheme is not representative of how the Haskell community teaches Haskell.
I can't even remember the last time it was cold-suggested to somebody.
The last person I knew to do so, did so knowing they were going about it the "hard way". They also did it with the intent of actively upgrading/updating the code WYASI48H as they went into a more modern style. They gave a talk on it after.
It's a good way to firm up your knowledge if it's the sort of project that interests you, but needs love and isn't a good introduction for most.
[1]: https://github.com/bitemyapp/learnhaskell https://github.com/bitemyapp/learnhaskell
- djur 12y agoThe course you recommend (it's good, I've read it) involves writing parsers and some bits of Risk; the follow-up includes another university course, LYAH, and RWH. You also have a lot of good resources for Cabal and for development environments. That's appreciated. But a lot of developers' bread and butter is "this data is here; I need to grab it from this place, make appropriate changes to it, and put it in this other place." They might use an HTTP client and a JSON parser for it, or FTP and an image processing library, a database or two, etc. Unless I'm mistaken, the first place new Haskellers would run into the first inkling of that kind of stuff would be in chapter 5 of RWH, which you describe as a "thick book" and a "reference". The first appearance of a database is in chapter 20. This is stuff that you can find about PHP, Ruby, Python, etc. by drooling into the keyboard while Google is open. It is comparatively _exceptionally_ hard to find the same kind of nuts-and-bolts material about Haskell.
- josephlord 12y agoI think this is an interesting point and it seems to me there are two distinct learning styles. Bottom up learning where you start from the basic features of the language and theoretical foundations of computers (or the practical foundations for C and assembly) and a top down approach where you start with rich frameworks and bolting together code that you don't understand. I think the different approaches lead to a different environment in terms of libraries available and the types of learning guides available.
- minikomi 12y agoThere's definitely a stage when you want to graduate from bottom-up tinkering & learning the underlying concepts to making things -- this is where I feel there's a big gap in the haskell materials right now. There's some great screncasts though which have been helpful. https://www.youtube.com/watch?v=0I90MTip-OQ https://www.youtube.com/watch?v=0I90MTip-OQ - Implement a sed clone in Haskell (a bit broken towards the end but a great look at a small incremental project) https://www.youtube.com/watch?v=zZ_nI9E9g0I https://www.youtube.com/watch?v=zZ_nI9E9g0I - implementing redo in Haskell
- josephlord 12y agoOf course those starting at the bolting together of significant blobs may learn their way down to the more fundamental levels too as they start to dig into the libraries that they use and even down into the languages. I don't take a particular view on which is the better way. The distance from the fundamentals up to something superficially impressive seems a very long way to me. So I think probably the realistic approach for most will be to start of the bolt things together and then discover a desire to understand the fundamentals. I think to start at the fundamentals end needs a lot of patience but it probably suits those intolerant of magic.
- innguest 12y agoI think to start at the fundamentals end needs a lot of patience but it probably suits those intolerant of magic. Very well said; I'm one of those people and that's what drove me from Ruby to Haskell - Ruby and its frameworks are all very magical and don't seem to hinge on any common foundation other than the intricate details of Ruby's object model, which is not a satisfactory set of principles, but an arbitrary set of rules. On the other hand, while Haskell is several times harder for it, it does eventually quench the thirst to connect every new thing I learn with the foundational things I already know (and which are in fact a set of simple rules - lambda calculus).
- coolsunglasses 12y agoHaskell isn't like most languages people have used. You can't dive into the sort of things you're talking about unless you've used at least OCaml and even then there's going to be a fair bit that's unfamiliar. It's more like learning to program again, not just a language. The course I lay out is because it's what I've found to work best. Part of the priority is minimizing dropout rate. Trying to shove people through a 'practical' project had one of the worst dropout rates of any of the approaches I tried. Just accept that you're going to learn some basics before dazzling the world with your web app and you'll be much happier for it. It doesn't take long anyway, if you have a well-designed course and/or experienced people helping you. [1] I've been thinking about writing a book to address some of the pedagogical problems. I don't know if it'll work out, but I have a few ideas. So far, the course I recommend not having enough "practical" examples has been pretty far down the list of problems. I'd rather focus on the rough edges that I've observed tripping people up. Are you learning Haskell right now? [1]: http://engineering.imvu.com/2014/03/24/what-its-like-to-use-haskell/ http://engineering.imvu.com/2014/03/24/what-its-like-to-use-...
- djur 12y agoNo, I'm learning OCaml, although I've gone through the normal introductory Haskell material and liked it. The catch in your approach is that it doesn't really offer an incentive for people to learn Haskell other than "it's really good, believe me". The best incentive I know of is to demonstrate that people are solving the problems that the potential Haskeller wants to solve, and that there are tools, resources, and even sample code available. Just a little while ago there was a goddamn GIF encoder in JavaScript on the HN frontpage. There was a text editor in Go. Does anyone really need that stuff? Probably not. But the visibility of people solving so many familiar problems in these languages gives newcomers the impression that JavaScript/Go/whatever are powerful, popular languages suitable for a broad array of tasks. Seeing that kind of thing -- that the Haskell community does more than write language parsers and terse implementations of interesting algorithms -- is what's going to convince a newcomer that it's worth the investment to start from scratch on a new, unfamiliar language. At that point they're going to be happy to learn about typeclasses and functors and monoids as stepping stones to the cool stuff they want to do (and in the process, maybe learn that they're more than stepping stones).
- dllthomas 12y agoI'm not sure about "new Haskellers" but when I have a "grab data from here, do something with it, maybe involving a database" I currently turn to conduits - typically by seeing if there's a conduit-* package on Hackage. RWH is not where you should be turning for up-to-date info on library support for stuff - a lot of it is pretty out of date (which is not to say that there's not plenty of value to be learned there).
- coolsunglasses 12y ago>The course you recommend (it's good, I've read it) Sidebar to everybody else who might this thread: don't just read cis194, that's a terrible waste of time. You have to do the exercises, including the very first ones. This is why I'm always tempted to drop non-comment prose. People just starting out think reading will do something for them. It won't, generally.
- deleted 12y ago[deleted]