About a year ago I started trying to independently learn functional programming and programming language theory, and in the process, found some excellent resources on the web to share:
This is a very good academic course on programming language theory, free to audit (which includes access to the autograder and exams) on Coursera. It’s divided into 3 parts: Part A using ML, Part B using Racket, and Part C using Ruby. The goal at the end of the course is to have a concept of the fundamental differences and similarities in the way that programming languages are structured / function. The instructor, Dan, teaches this same course in person at the University of Washington to 2nd or 3rd year undergraduate computer science students, and has more resources on his website. From the videos, he has a personable teaching style and is concerned with the bigger picture.
I’m currently working through part B, and have found the course challenging but do-able. I got stuck halfway through part A, and needed to brush up on recursion and functional thinking before I could progress with the course, which led me to the next resource:
This is a very engaging, cute, tricky book that uses Scheme, cartoon elephants, and constant food references to teach from recursion, to higher order functions, to even deriving the Y-combinator in the dreaded Chapter 9. The Little Schemer, however, doesn’t burden you with the names of any of these concepts, and contains chapters like “* Oh My Gawd *: It’s Full of Stars” and “Shadows.” I worked through this book to get un-stuck in the course above, and after I finished this book I was completely unstuck, even a bit over-prepared.
If you look at the pages of the book, you’ll see that it has a unique format consisting of two columns: a column of leading questions on the left hand side of the page, and a column of answers on the right. The way to read it is to cover the answers column and try and answer the questions one by one. Each question builds on the knowledge you gain from answering the previous questions. The question-and-answer format uses pattern recognition and humor to facilitate learning, which was fun and satisfying for me.
I believe this format / style is based in constructionist learning theory (not to be confused with constructivist learning theory?), which was an educational movement pioneered in the 70’s by Seymour Papert and others at MIT - The Little Schemer was originally published in 1974 by MIT Press, as “The Little LISPer.” It has a sequel, The Seasoned Schemer, and there are at least 5 other books in the series on different programming topics / languages.
Here are some more great resources I’ve started looking at but haven’t gotten deeply into yet: