
Hi Warren,
I'd recommend getting them to read Why FP Matters
(http://www.cs.chalmers.se/~rjmh/Papers/whyfp.html) to tempt them,
followed by Programming in Haskell
(http://www.cs.nott.ac.uk/~gmh/book.html) to teach them the
concepts/syntax etc, possibly with Learn You a Haskell
(http://learnyouahaskell.com/) to get them familiar with GHCi and
how/where to type things. That's how I've been doing it at work, and
it seems to be working well. Real World Haskell might be a nice follow
on after they've learnt functional programming and want to do real
stuff with it.
Thanks
Neil
On Sun, Jan 4, 2009 at 1:28 AM, Warren Harris
I am seeking suggestions from the haskell cafe for teaching functional programming concepts to colleagues at work. I'm currently working on a project using ocaml and functional programming techniques, and am a lone ranger at my workplace when it comes to this sort of thing (we are primarily a python shop). However there seems to be a growing curiosity in functional programming, and I think there's a lot to be learned from from it whether one chooses a functional language for their next big project or not.
But I'm a practitioner, not an academic or lecturer, and although I find the idea of helping my colleagues understand these concepts to be an exciting prospect, I'm not really sure where to start in terms of materials or overall direction. My sense is to form a study group (perhaps going through Real World Haskell together), but I'm a little afraid of assembling people together for a "now what?" experience. So my first question is whether this is even a good idea?
Some things I think would be useful to get across are:
- fp is more than just an exercise in avoiding assignment statements -- why a smart programmer should care? - reading knowledge of ocaml and/or haskell (even syntax, precedence and infix operators can be an initial stumbling block) - core concepts: type classes, proper tail recursion, higher-order functions, folds, combinators, monads, monad transformers, arrows - evidence that concise expression can lead to less bugs / better maintainability (hard to prove, but perhaps a sense can be conveyed) - relationship between types / theorems / programs / proofs and why this is important for the future of software
Regarding this last point, my own sense has been that by leveraging a powerful type system such as found in ocaml or haskell has allowed me to achieve things I never would have been able to without it (or at least would have ended up with a much less elegant implementation and much more debugging) but many seem to find types to be either an impedance to getting things done quickly, or at best irrelevant. I know this is for the most part a religious war, but I would like my colleagues to arrive at their opinion from an informed perspective, which means learning that there's more to typeful programming than what is presented by java or c++.
Finally, any comments on how to make the learning experience fun, engaging, and a positive experience would be greatly appreciated.
Warren _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe