Excellent course, I really enjoyed it! With not a lot of practical experience with FP (yet) it was a bit of challenge at times. But the forum and support was helpful.
First of all, a disclaimer: I am an Electronic Engineer, and my daily job consists in programming in SystemVerilog and, less frequently, in Python. On the other hand I have read a few books and articles on functional programming in general and Scala in particular. As a result, I already knew most of the topics addressed in the course, but don't have much practical experience in writing Scala code. My point of view is then, I guess, a bit unusual. I hope it will be useful nonetheless. The instructors have done a good job in selecting the material; all the topics have practical applications, and are presented in a clear way. Starting with the language basics, the course goes on explaining collections, case classes, new Scala 3 features like extension methods, given syntax, error handling and concurrency. Many videos are devoted to code organization principles, and the emphasis is always on a functional programming style. The course also deals with practical topics that are often neglected by programming courses, like sbt commands, unit and property-based testing, debugging. Programming assignments are built on engaging examples, and their code may serve as an example in case one wants to dig deeper on their own. The first 3 are relatively easy, while the last 3 have been quite challenging for me. I struggled quite a bit on the Quickcheck one, where the student has less hints, as well as on the Codecs and Wikigraph ones. My opinion is that a lot of effort has been put in preparing this course, and the authors must be given credit and thanked for that. People prepared to seriously commit will certainly learn a lot and benefit from this course. As for the prerequisites, I think the course might not be so suited for beginners, as stated in the main page, especially if they only have experience in an imperative programming style. I had difficulties in finding the right way to compose Futures and Eithers in the last assignment, and I suspect people less used to map and flatMap might be in a similar position. I think it would be better for beginners to follow the "Functional Programming Principles in Scala" course before this, and possibly the "Functional Program Design in Scala", when the Scala 3 versions will be released.
