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).
If you have a basic grasp of Scala, the Neophyte’s Guide to Scala is great to further master the language.
I found the book Getting Clojure by Russ Olsen to be a wonderful introduction to both functional programming and Clojure for someone who was not familiar with either.
Great and comprehensive list. I was already a seasoned imperative programmer when I first started Haskell 5 years ago, and I can highly recommend Learn You a Haskell for Great Good! to get you started quick, and $ Programming in Haskell as an in-depth guide.
My team and I really enjoyed the second edition of this book (Scala 3) $ Functional Programming in Scala, Second Edition. I was given a free e-book of edition 1 (Scala 2) when I bought the second Edition.
For those going the F# route look into this guy Scott Wlaschin, he has great youtube videos and an excellent web site/blog : fsharp for fun and profit as mentioned above
I just remembered that Alexis King has an excellent blog. The following posts are potentially of interest to non-FPers (sorted by recommended reading order).
- «Types as axioms, or: playing god with static types»
Written specifically for people unfamiliar with (advanced) static type systems.
Starts with the question: just what exactly is a type? Discusses how types can liberate you instead of constrain. - «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.- followup: «No, dynamic type systems are not inherently more open»
A deep dive on static vs. dynamic typing. - followup: «Names are not type safety»
Further discussion of what type safety means.
- followup: «No, dynamic type systems are not inherently more open»
Haskell
I’m only a year or two into my very exploratory Haskell journey and took lots of notes along the way, so hope this helps other beginners!
- Another vote for Learn You a Haskell for Great Good! to get you started.
- 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.
Real World Haskell is very dated at this point. I hear the comments are/were generally very good; they might just not be relevant any more. Someone is writing an updated version.
I’ve been working on the Haskell track on and off for about 6 months now, got 6 more questions to go. I’ve curated a list of Haskell resources on my blog.
I really like Haskell. I actually started my FP journey with Scala years ago, but the abuse of implicits turned me away.
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.
A recent book which covers simple Scala is Grokking Functional Programming.
An old book which covers C# and F# is Real World Functional Programming.
Manning books have usually represented a good value to me, especially their “… in Action” books.
Speaking of Manning books, these two deserve a mention:
Data-Oriented Programming by Yehonatan Sharvit
Grokking Simplicity by Eric Normand
They both detail the functional programming philosophy of programming with just functions and data, but use JavaScript for all the examples in order to make the content as accessible as possible.
Afterwards, the two authors ended up joining forces to do workshops, because it turned out that they compliment each other very well.
I just purchased Eric’s book, Grokking Simplicity, to use as a guide for the rest of the streams for FunFeb.
It’s a uniquely suitable text for this because it:
- Is language agnostic
- Sticks only to material that is relevant to writing actual programs
Graham Hutton also has some nice Youtube videos coming up: Functional programming basics & Advanced functional programming.
Functional programming in Scheme family languages:
- Structure and Interpretation of Computer Programs by Ableson, Sussman and Sussman (MIT Scheme) - probably a book that needs no introduction
- How to Design Programs by Felleisen, Findler, Flatt and Krishnamurthi (uses the Teaching Languages, a subset of Racket) - a textbook for complete beginners about how to approach programming problems in a structured, organized and data-driven way using functional programming techniques
- The Little Schemer by Friedman and Felleisen (Scheme) - an introduction to Scheme and functional programming presented as a dialogue between a student and a teacher
- The Little Typer by Friedman and Christiansen (uses Pie) - a followup to The Little Schemer that introduces dependent types
OMG, I <3 that
"Encapsulation only means: “well I’m in charge of this mess.”
Rich has a lot of those insights. Even if you are not interested in Clojure, there is a lot to take away from his talks.
A bit early in the year for this but there has been an F# advent calendar in Japan for many years now. Each day in December features two new articles about F#.
The English version started in 2014, the most recent edition is here