As part of Functional February, we want to collate the best resources for functional programming. If there’s a book, video, podcast, course (or anything else!) that helped you learn or master functional programming, please list it in the thread, and we’ll keep this post updated!
The Exercism Elixir and F# tracks have detailed syllabuses covering lots of functional programming concepts. The Clojure track is a little more WIP but also great! Then practice your functional skills across a wealth of languages!
F# for fun and profit: A free course to help get you thinking in the functional way using the F# programming language.
Edit: Most languages have a section that links to external learning resources, maybe we can encourage people to look there?
Edit2: Thank you to @MatthijsBlom for pointing me to the open source fork of “Learn You a Haskell” that is more up to date
The following books are not about learning functional programming languages per se, but about functional programming more generally.
«Algebra-Driven Design» by Sandy Maguire.
Don’t let the title scare you off! This book is not mathy at all. Or at least, not in the traumatizing way.
This book is about design. Of course. Click the link for a description. There is a free sample.
«Parallel and Concurrent Programming in Haskell» by Simon Marlow.
Freely available through that link, even though O’Reilly likes to obscure this.
Basically a very long tutorial. Two, actually. Does require some working knowledge of Haskell (how much? Just try chapter 2), but is also more so than one might expect a book about parallelism and concurrency in general. Expect to fairly easily understand the concurrency model of the proverbial any other language when you have finished this book.
«Purely Functional Data Structures» by Chris Okasaki.
Referential transparency has consequences in design and characteristics of data structures. This book lays these out.
Uses ML (+ Haskell translations in appendix) for illustrations, but is not about that language and does not require advanced language knowledge.
Okasaki’s Phd thesis is freely available as an alternative.
On a personal note: should you like to go through one of these books together, I would gladly join in.
A massive amount of links to free courses, books, competitions etc in many languages can be found on github. Found Exercism under the link “Problem Sets and Competitive Programming”.
As preparation for Functional February I’m doing a Haskell MOOC at MOOC.fi (recommended by vaeng on this site by the way).
«Parse, don’t validate»
Though still young, this is post is definitely a classic and already part of the common FP wisdom. Touches on how to use (as opposed to merely suffer) the type system.
The title might suggest to you that it is about languages and grammars and mathy stuff and such. It isn’t. Rather, it is about program design, and broadly applicable.
Honestly I primarily paired LYAH with Exercism to support the majority of my learning!
Then I enjoyed Real World Haskell as a useful supplement that extended from concepts to some basic applications. Though I must admit the greatest lesson was… never trust the comments! The book is also a brilliant experiment on crowd sourcing your editing and I think the conclusion is clear: the barrier to commenting is vastly lower than to authoring.
But first, I implore you, fully acknowledging this is self-promotion, to please read my Hacking With Haskell guide on setting up your dev environment. There’s a lot of outdated advice out there, but if you configure your tools right, they will absolutely delight you with the joys of a statically typed language with both REPL and compiled modes of execution. Note that if you’re solving Exercism exercises then they come ready to go as excellent little stack packages, so you don’t need the hacks I describe, but you will want to hack too…
Also agree, Alexis King’s stuff is awesome. Just remember, Haskell has been evolving for a long time so there’s lots of true-at-the-time advice out there, particularly when it comes to packaging. Again, I offer my recent, hard-earned learnings on efficient and painless package management.
I just remembered that there is an excellent talk on Clojure by James Trunk called “Clojure in a nutshell”. It is not only great because it has Rich Hickey quotes, but also because it shows off everything you need to know to start writing expressive, functional code in less than 30 minutes. One of my favourite live demos.