Learning Functional Programming - A Roadmap
This is a learning roadmap for Functional Programming (FP). There are quite a lot of resources to learn FP on the web (just like on any subject). So the challenge is not to find a resource to learn, but to find quality resources. This post is an attempt to compile those (obviously based on what helped me, and might be subjective to some extent).
Other excellent courses
This can be followed up with some other good courses available online (at the time of writing):
- The Paradigms of computer programming has a section on FP. The course is also good overall, if you want to learn different paradigms of programming. Like SICP, the accompanying text is also a masterpiece.
- The functional programming course offers a modern perspective based on Scala. Again highly recommended along with the book.
If you are looking for short insights into why FP is important or some key aspects of it, following videos are recommended:
- Simple Made Easy
- Introduction to Haskel has couple of FP talks.
- Reactive Programming talk explains why FP is one of the best choices for reactive programming.
After you learn the basics, the most important skill needed is to think functionally. The best way to grok that is to get your hands dirty - do the exercises, apply it on the next programming task you do, etc.
Following are some good books which will deepen your knowledge on FP:
Developing purely functional data structures is another art to master. Okasaki's Purely Functional Data Structures is still the best resource in this area. This post highlights some of the other functional data structures.
- Why FP matters
- Essence of Monads. I found this to be the best introduction to Monads.
- Original paper on Lisp
- All papers by Graham Hutton are excellent. Its hard to pick and choose from them.
- Somewhat advanced papers on functional pearls.
These are just some pointers that came to my mind. If I missed anything important please let me know.
I hope this helps you in your functional programming journey!Tweet