Here is a list of three courses, which I completed:

  • Functional Programming Principles in Scala.
  • Functional Program Design in Scala.
  • Parallel programming.

The remaining two courses from the specialization are still under development, so I will not say anything about them.

Before the Verification

Before I enrolled in the first course, my overall experience with Scala was approximately two years. The code I developed wasn’t ingenious at all, and my motivation was to see how top Scala programmers solve real tasks. Moreover, it was interesting for me to see how the education process was built — because I’m a teacher, too.

Now you know what expectations I had before the enrollment in the specialization. I was driven by a strong desire to learn the best practices of Scala development. Moreover, the course descriptions were so promising:

“In this course, you will discover the elements of the functional programming style and learn how to apply them usefully in your daily programming tasks.”

By the way, if you have finished any of these courses, please leave your feedback about them in the comments.

Learning Process

All courses consist of modules. Every module covers some particular topic, e.g. higher order functions, etc. It contains a set of video screencasts, where teachers explain a theory and show some practical samples. I like to watch the videos — because they explain the smallest details of Scala.

There are questions inside of the video lecture. They are not mandatory, but they help keep you focused and attentive on the materials.

By the way, each module is limited by time frame. You have exactly one week to solve a module assignment. If you don’t submit a solution to the assignment within one week, you can't get top marks. This is a pretty fair rule and helps you keep pace.

As a rule, video lectures are not long and don’t exceed an hour per module.

Assignments

Almost every module has its own assignment, relevant to the module topic. But there are many so-called “academic” tasks, such as Huffman Coding or Anagrams… I’m not very enthusiastic when we need to work on such tasks. It’s much better to solve assignments like searching tweets via hashtags or recursion problems… Then again, it depends on your personal preferences, but as for me, it is better to practice new knowledge on real-world tasks.

Solving weekly assignments always takes about six hours for me. However, in the course descriptions, you can find a claim of about three hours. I’m not sure that everyone can complete those tasks so fast. For example, I’m not such a “reactive” student and need more time for practical parts.

Final Impression

I’m happy that I completed three Scala courses. It was really challenging for me. I learned a lot of new stuff, like parallel collections, interpretation of for-comprehensions in terms of flatMap and map functions, arguments passed by reference, and many other useful topics.

On the other hand, some topics weren't explained as easily or well as they could have been. Fortunately, for those tougher ones, each module has its own discussion forum, and it was extremely useful to ask questions there.

I recommend these courses to every Scala developer who has more than one year of coding experience. However, I think studying by the specialization is hard for 90% of beginners.