Resources for Learning Scala
Recently, I've been learning Scala and when I first searched for resources for learners I was a bit worried by how few came up, and how many of them weren't very good. There were barely any YouTube tutorials, many of the blog posts were years old, and some of the conference talks required way more Mathematics than I had.
Compared to languages like JavaScript or Python, or even Java, Scala is much more niche, with far less material for beginners. It also has its own quirks and a steeper learning-curve than some other programming languages, but Scala is definitely worth learning, and there are good resources out there.
Why learn Scala?
A multi-paradigm language, Scala combines features of both object-oriented and functional programming. It runs on the Java Virtual Machine (JVM), and so can be used anywhere Java can run (it can even use Java libraries), but has a much more concise and “human readable” syntax.
It's statically typed, so you'll catch more errors before you ship your code, and most of the time the compiler will infer the types for you so you don't need type annotations everywhere.
Scala is especially used for high-performance distributed systems and large-scale data processing. Scala powers Twitter, DisneyPlus and The Guardian. Netflix, Spotify, and Amazon all use it for data analytics.
If you want to learn Scala, here are some resources that I've found helpful. None of these links are affiliates, they're just resources that helped me on my learning journey.
Video Resources
Scala at Light Speed
Link: Scala at Lightspeed
A two hour crash course introduction to the language by Daniel Ciocîrlan from RocktheJVM that will give you a feel for whether you want to dive deeper into Scala. It does assume you have some familiarity with languages like Java, but Daniel's explanations are clear and the short course will quickly give you a good overview of the language, from the basic syntax to futures, pattern matching and higher order functions. From there, Daniel has many more videos on more advanced features of Scala, as well as tools and libraries like Akka, Cats and Doobie.
Effective Programming in Scala
Link: coursera.org/learn/effective-scala
If you'd like a more thorough course with a college-semester like structure, this is a good option. Provided by the École Polytechnique Fédérale de Lausanne (which operates the Scala Center open source foundation), this Coursera course regularly opens for new enrollments and doesn't cost anything to audit. The lectures are clear and concise, explaining concepts in bite-sized stages. While the assignments can be a bit of a jump compared to the lecture content, the regular quizzes will help you retain what you're learning.
The course uses Scala 3 (which is still very new) but the instructors give examples in Scala 2 where the syntax is different. The course also forms the first part of Coursera's Functional Programming in Scala Specialization, so if you want to take your learning further, there's a clear curriculum ahead of you.
Written Resources
The Official Scala Docs
Link: docs.scala-lang.org
The official documentation for languages isn't always accessible for learners, but the Scala docs are genuinely great: detailed, well-designed and written in pretty accessible language. The Scala Book provides a friendly introduction and overview of the language in about 50 lessons.
Daniela Sfregola, Get Programming with Scala
Link: manning.com/books/get-programming-with-scala
Too many Scala resources assume two things: that you are already an experienced Java developer and that you are comfortable with university-level mathematics. Daniela Sfregola's excellent book assumes neither. It's written in a very accessible style with short chapters, exercises and projects to practice what you're learning. It's also very comprehensive, covering everything from getting started with sbt, the Scala build tool, and going over object-oriented and functional programming, to setting up a HTTP server, handling concurrency, serializing JSON and testing with ScalaTest.
This Week in Scala
Link: medium.com/disney-streaming/tagged/scala
This newsletter by Petr Zapletal, Principal Engineer at Disney Streaming, aims to share the latest news from the world of Scala. While it does recommend learning resources, it's mostly a handy way to keep an eye on developments in the Scala ecosystem and learn about how the language is used in industry.
Practice
Exercism
Link: exercism.org/tracks/scala
There aren't a lot of resources that let you practice your Scala skills with exercises, which makes Exercism's Scala track particularly valuable. There are more than 90 challenges, which you solve locally, run tests on, and push your solutions to Exercism to share with other learners. The difficulty levels ramps up quite quickly from “Hello World” to solving tricky mathematical problems by making use of the ins and outs of the language.
The ability to look at solutions by other learners is especially helpful, often revealing a much simpler or more efficient solution than the one you came up with. I haven't used their volunteer mentoring feature yet but the opportunity to give and receive one-on-one feedback sounds really promising.
Forums
Scala Users
Link: users.scala-lang.org
The official Scala forum. It's mostly used by experienced Scala developers but I've found the community to be generally quite friendly and willing to answer questions from learners.
Scala Subreddit
Link: reddit.com/r/scala
As with any subreddit, this can have its share of strong opinions and arguments about things that really aren't important, but you can also find useful recommendations and sometimes answers to your very specific problems.
If you're learning Scala, good luck and I hope you find these resources helpful.