Learning Scala

This guide assumes no prior knowledge of Scala and will get you set up to the point where you have Scala installed on your computer and can hack on a project.


We recommend reading Programming in Scala to learn the language.

If you come from an object oriented background, you will hear people talk about Functional Programming (FP), monads and typeclasses, and it will be confusing. Some gentle introductions are All Roads Lead to Lambda, Understanding Free Monads and A Beginner-Friendly Tour.

Scala is sadly missing a comprehensive text on the topic of FP. The standard text is Functional Programming in Scala, aka “the red book”, but it is very much outdated. To pick up where the book leaves off, read about Typelevel’s typeclasses / datatypes and functional streams.

Shapeless Guide is the best place to learn about advanced generic programming concepts such as making the compiler generate typeclasses for your case class objects.

Before installing any software, you can complete exercises online at scala-exercises.org and execute code in your browser at scalafiddle.io.


  1. Install Java: Scala runs on the Java Virtual Machine (JVM).
    Prefer free/libre OpenJDK to proprietary versions of Java.
    Install OpenJDK using your system package manager:
    • sudo pacman -S openjdk8-src (ArchLinux)
    • sudo apt-get install openjdk-8-source (Debian)
    • Zulu Java for all other systems
  2. Install sbt: sbt will install all the build tooling you need, including Scala.
  3. (GNU / BSD, Optional): If you anticipate using multiple versions of Java, install jenv.

First Project

If a volunteer would like to pad out the following, that’d be great. Until then, try Daniel Spiewak’s “Getting Started in Scala” guide

  1. checkout a basic tutorial project, e.g. 99 problems or scalania
  2. start sbt and cheatsheet of basic commands (for now, try sbt common commands)
  3. hello world in the editor without ensime (e.g. /editors/emacs/scala-mode) starting from scratch with sbt new eed3si9n/hello.g8
  4. start ensime server, for now read Getting Started