This is excellent review, no doubt, by a well known scholar.) The only problem is that there are so many books and so little time.
So, to get a quick and productive crash-course I would recommend just a few selected resources.
* SICP based course CS 61A by Brian Harvey (Youtube)
* HtDP2 and a wonderful course based on it - Introduction to Systematic Program Design by Gregor Kiczales (the author of The Art Of Metaobject Protocol)
* Armstrong's thesys armstrong_thesis_2003.pdf and his Programming Erlang book.
* Programming Languages course by Dan Grossman (also on Coursera)
Grossman's PL course is not the hardest of them all, but it did provide had the most value, compared to the other Coursera courses I've taken. Truly excellent.
I second that, it's been the best course I've taken up on coursera so far (with Dan Boneh's crypto). The lectures are great, but the best for me was the high quality provided course notes. I read those in my morning and evening commutes and I didn't even have to watch the videos!
The exercises were well crafted, guiding you part by part to build your program, and challenging enough that you learned something valuable. It definitely made me interested in exploring more the three languages presented - ML, Racket and Ruby.
I'm currently taking the second Scala course and I have to say it's a bit of a disappointment so far. Martin Odersky's part was good, but I didn't really like Erik Meijer's teaching style (I understood Futures and Promises better after reading a few articles about these). I haven't caught up with Roland Kuhn's part yet.
However I've been incredibly frustrated with the exercises. They are tedious, but for the wrong reasons: you have to make a lot of guesses on what are exactly the semantics of what you're supposed to implement, sifting through the forum and the FAQ for relevant information. After you've submitted, you now have to wait for a long time (between 20 and 100 minutes) for the automatic grader to tell you whether your guess about what exactly you had to implement was right or wrong.
It's still an interesting course, and it's worth just for the sake of getting your hands into some Scala code, but there's that caveat.
> They are tedious, but for the wrong reasons: you have to make a lot of guesses on what are exactly the semantics of what you're supposed to implement, sifting through the forum and the FAQ for relevant information.
I look at their exercises more from a "I'll do it until I feel I have learned the core concepts" rather than "I'll do it until the grader gives me 100%".
If you're not taking the course for credit, your goal should be learning, not grades. That's what it's all about for me, and learning reactive/functional/Scala programming has little to do with debugging a black box of a grading system.
(Totally agree for those people who paid to receive credit, it must be very frustrating at times)
If the lectures do not do a good job of teaching the material and the assignments do not actually do a good job of testing your understanding of the material, what is the point of the course? I think epsylon is accurately presenting the prevailing opinion of the course. It's not very good and is a time sink for all the wrong reasons.
If the grader is marking you off on a certain aspect of the assignment, how do you know you have actually learned the core concepts? How do you know you aren't missing something important? The problem with "doing it until I feel I have learned the core concepts" is that I don't know what I don't know (unknown unknowns). That's part of why a structured course is supposed to be valuable, because it doesn't let me skip important concepts.
This course can be salvaged the second time around, but it is going to require a bit of polishing.
The only one that drove me a little nuts was the demux assignment, but I thought Meijer's videos were fine and haven't had the grader problems others have had (yet).
What background did you have ? I remember people who knew a bit of lisp and fp were fine, but many newcomers went mad when it came to meta-levels and interpretation.
I had absolutely no FP background and I found it fantastic.
Hard, yes, but fantastic.
You have to be prepared to put in the hours that the course says you should put in, and you have to be prepared to spend a lot of time reading about other people's confusion on the discussion forums.
Happy to see you have such a positive attitude about hard learning. It pained me to see noobs being depressed and self-deprecative on the irc channel. I understand their feelings, I felt the same before it was all blurry, the irony is that I couldn't explain them how I got to understanding, it was just maturation, which they didn't wanna hear about.
I had taken Odersky's first scala course in FP, which probably helped prevent initial shock, but I still had to put in the hours to get through all the assignments. That said, it didn't like banging my head against some complex theory or algo problem.
Seeing the absolute beginners stuggle is painful, but at least they are making an attempt.
Btw, the craziest coursera forms I ever saw were in the non-tech fields. In Into to Finance it was so bad; at least our sort don't type posts in all caps ;)
Throughout, On Lisp emphasizes programming in a functional style. Chapter 3, "Functional Programming" provides a clear presentation of functional programming. More importantly, it shows where and how mutation is used when doing so.
Well, for me Lisp is a mostly-functional language. In Scheme its quite simple - just avoid set-car! set-cdr! and other destructive primitives when possible, while in CL you should be more careful and disciplined due to lack of agreed upon naming conventions for destructive operations and possible implicit usage of setf in macros. Anyway, even CL could be called mostly-functional.
So, to get a quick and productive crash-course I would recommend just a few selected resources.
* SICP based course CS 61A by Brian Harvey (Youtube)
* HtDP2 and a wonderful course based on it - Introduction to Systematic Program Design by Gregor Kiczales (the author of The Art Of Metaobject Protocol)
* Armstrong's thesys armstrong_thesis_2003.pdf and his Programming Erlang book.
* Programming Languages course by Dan Grossman (also on Coursera)
* Two Scala courses Martin Odersky
* The classic Haskell tutorial http://www.haskell.org/tutorial/
* ANSI CL and On Lisp books by pg.
This is a very decent start in my opinion. "To learn quickly read only the best ones".