Checklist for learning Scala
Tags: scala, tips
Published: 2021-02-08 21:30:27

{% twitter 1351458487088406529 %}

Learning Scala doesn’t have to be painful. [In a previous article](https://www.horiaconstantin.com/checklist-for-learning-a-new-programming-language/), I proposed the use of a checklist to give structure to learning a new programming language. My intention with this article is to demonstrate how to use a checklist to learn scala.

## The checklist
### Mindset

1. **Personal why’s for learning Scala:** I’ve wanted to start to learn a new programming language for some time. I chose Scala thinking that I can get a freelance gig faster than anything else. And because a former colleague recommended it.
1. **Find a project/application to build with Scala:** a web app that supports most technologies that are required these days for a fully-featured website. I called it [scalatraseed](https://github.com/treaz/scalatraseed) since it uses the Scalatra web framework at its core.

### Setting

1. **Find a high-quality online Scala course/book:** I’ve found excellent resources [here](https://docs.scala-lang.org/learn.html). Scala originated in EPFL, so I started with [Functional Programming Principles in Scala](https://courseware.epfl.ch/courses/course-v1:EPFL+progfun1+2018_T1/about).
1. **Find/create Scala cheat sheet:** [here](https://github.com/treaz/scala-cheat-sheet)
1. **Find the official Scala documentation:** start with the [standard library](https://www.scala-lang.org/api/2.13.1/)
1. **Find/create a comparison between Scala and Java:** [these docs](https://docs.scala-lang.org/tutorials/scala-for-java-programmers.html) and [this course](https://app.pluralsight.com/library/courses/scala-for-java-developers/table-of-contents)
1. **Find/create a dictionary/glossary of the concepts, keywords, etc.:** I haven’t been doing very well at this point because I tend to look up a concept as soon as I encounter it.
1. **Take notes:** questions, curiosities, “strange” code: useful point, but the questions and curiosities change from one day to another that it makes it useless to write it here.
1. **Start collaborating on an open-source library:** this point was a bit more complicated than I thought. Many libraries are either too big or have too many contributors already or are too advanced for a beginner or don’t have good-first-issues. I decided to settle down on [Scalatra](https://github.com/scalatra/scalatra) because I was already using it in my demo project.
1. **Find/create a roadmap that describes the learning process:** [this](https://www.scala-lang.org/old/node/8610) is a good start
1. **Find a code conventions document:** the online Scala course that I’ve started uses [Scalastyle](http://www.scalastyle.org/) for enforcing the style of the code. If it’s good enough for the Scala core team, it’s good enough for me.
1. **Find/create a list of antipatterns:** I couldn’t find anything, probably because Scala is such a flexible language (allowing full OOP or FP and anything else in between). The small things that I’ve found so far revolve around using the language constructs correctly (e.g., use “if” as an expression, not a statement). So, nothing useful here.
1. **Find and learn how to use the most popular build tool:** I wanted to leverage my maven knowledge initially, but it’s a constant uphill battle. [Sbt](https://www.scala-sbt.org/) for the win!
1. **Find a list of Scala project seeds:** [from lightbend](https://developer.lightbend.com/start/)
1. **Find the frameworks:** [Scalatest](http://www.scalatest.org/), [Scalatra](http://scalatra.org/), [Sangria](https://sangria-graphql.org/)

Having applied the checklist, I’m discovering that some points are part of the continuous process of learning (take notes; create a dictionary/glossary), while others are a one-time task (find the official documentation).

I’m also learning that some tasks are not so useful as others. That can be because they’re part of another, more comprehensive task (the online Scala course that I found uses Scalatest) or because they’re not that important at this stage of learning (they just take up mental and checklist space).

Based on this experience and the idea of lean learning, I’ll be updating the [checklist template](https://www.horiaconstantin.com/checklist-for-learning-a-new-programming-language/) so that it is a more effective learning resource. For historical reasons, I’ll keep the checklist in this article as it is.