I’m documenting my journey from functional neophyte to (hopefully) functional programmer by writing a series of blog posts on the topic. So far I’ve covered what functional programming is and why you would want to learn about it. In this post, I’m going to describe the resources I will be using to become functionally fluent.
Although I have previously said I’m learning about functional programming, I should be more specific. I do already have some middling experience with Clojure and Lisp, but I have too many battle scars from running dynamic languages in production to go down that path again. At this point in my career, my experience dictates that any new code I write will be statically typed. Because of this bias, I’m going to approach learning functional programming through the lens of statically typed functional languages. My learning plan will reflect that and help narrow the scope of this project.
When starting my quest, my first stop for learning material was Google, where it was easy to find resources on programming in Haskell. This is a great goal but a little too specific for what I am hoping to achieve — I’m more interested in the key concepts and theories behind functional programming, rather than specific languages itself. This isn’t to say that Haskell books don’t contain this information, only that I want to understand the fundamentals of functional programming outside of the context of a specific programming language. Haskell is the leading language that combines functional theory with a practical programming language, so I’m sure Haskell will still be involved in my learning plan somewhere.
To get some suggestions on material beyond what I could find on Google, I turned to Twitter and got some excellent responses that I’ve curated into a simple learning plan that I can (hopefully) follow. The plan currently involves three sources that I will add too as I progress.
Lambda Calculus serves as the foundation for many of the ideas in functional programming. To learn more about lambda calculus, my resource will be An Introduction to Functional Programming Through Lambda Calculus.
The book Haskell Programming promises to teach Haskell from first principles. This is exactly the type of resource I was searching for as it seems to combine functional theory with practical application.
LambdaCast provides a sequence of podcasts on functional programming topics from the point of view of a traditional imperative programmer learning successive topics on functional programming. Although the material in this podcast looks terrific, I find it difficult to learn using podcasts as a primary source. I will use LambdaCast as a secondary resource that I hope will fill in and solidify an gaps in my understanding.
The plan I have so far is to start by reading the book on lambda calculus to develop a solid foundation. Next, I will work through the Haskell Programming book and listen to the LambdaCast episodes simultaneously.
I hope to continuously update this blog with anything interesting I learn, so stay tuned and join in the fun!