Ресурсы для изучения Scala

Лет 8 назад, когда я был еще студентом, по совету одного из своих знакомых я обратил внимание на язык программирования Scala. В то время релиз Java 8 еще не состоялся, и многие ругали Oracle за стагнацию. Groovy из-за своей динамической природы и подходов нравился далеко не всем, и Scala стал некой надеждой для JVM сообщества. И, конечно же, маркетинг вокруг поддержки императивного и функционального подходов в одном языке программирования помогал эту надежду поддерживать.

Однако, как выяснилось позже, порог вхождения в Scala оказался выше, чем многие предполагали, и доступные обучающие материалы не работали должным образом, а иногда и окончательно отталкивали потенциальных пользователей, в том числе начинающих разработчиков. Насколько я помню, единственной книгой на русском языке на тот момент была “Scala для нетерпеливых” за авторством Кея Хорстманна.

Ее я и приобрел в спешном порядке… и в таком же порядке забросил после прочтения первых пары глав. Как не странно, этому поспособствовал Ruby и его мантра о счастливом разработчике. И вот после нескольких лет разработки на Ruby и других языках я снова решил вернуться к изучению Scala. Произошло это благодаря интересу к функциональному программированию (спасибо тебе Elixir), распределенным системам и Big Data.

Ресурсов для изучения в наши дни значительно больше, сообщество вокруг языка продолжает развиваться несмотря на все его проблемы и внутренние споры, и Scala 3 уже маячит на горизонте. Да и я, необходимо заметить, стал больше читать на английском.

Потратив некоторое количество времени, я составил для себя следующий список материалов, по которому планирую пробежаться в ближайшие месяцы.

Книги и онлайн-курсы

  1. “Scala для нетерпеливых”, Кей Хорстманн – вернулся к тому, с чего когда-то начинал :) Эта книга хороша в качестве плавного погружения в Scala и стандартную библиотеку. Она не научит вас функциональному программированию или интересным подходам, но даст понимание основ для применения Scala as a “better Java”. Не забывайте про задания – для меня они оказались очень полезными.
  2. Курс Принципы функционального программирования в Scala на Coursera. Это первый MOOC из специализации по Scala. Как и другие курсы, его можно прослушать бесплатно без решения задач и их проверки, что лично для меня является большим минусом. Поэтому рекомендую платное обучение (порядка $50/месяц) с итоговых сертификатом по завершению.
  3. “Scala. Профессиональное программирование”, 3-е издание, Веннерс Билл, Спун Лекс, Одерски Мартин – отличная книга от самого Мартина Одерски для углубленного изучения. Является необходимым подспорьем в прохождении курса на Coursera.
  4. Курс Functional Program Design in Scala на Coursera – второй курс из специализации по Scala. Этот MOOC должен открыть слушателю элементы функционального программирования. ⚠️Однако, некоторые опытные разработчики, которым довелось пройти его и первый курс, считают их не слишком качественными в плане контента и заданий.
  5. “The Neophyte’s Guide to Scala”, Daniel Westheide – серия статей в личном блоге, которую автор начал писать во время прохождения озвученной выше специализации, вскоре оказалась очень популярной и превратилась в электронную книгу. Если книгу Одерски можно считать справочником к языку Scala, то “The Neophyte’s Guide to Scala” можно сравнить с опытным коллегой, который всегда готов разъяснить неочевидные моменты.
  6. “Functional Programming in Scala”, Paul Chiusano, Rúnar Bjarnason – мне еще не довелось лично ознакомиться с этой книгой, но по количеству упоминаний и сожалений о не выходе второго издания сложилось впечатление, что аудитория действительно считает ее одной из лучших книг по функциональному программированию (не только на Scala).
  7. “Sbt in Action”, Joshua D. Suereth and Matthew Farwell – помимо официальной документации стоит пролистать книгу издательства Manning по системе сборки, наиболее часто используемой в Scala проектах.

Еще немного практики

  • Scala трек на exercism.io – желательно проходить с ментором.
  • Scala Exercises – помимо упражнений на основы языка и его стандартную библиотеку позволяет потренироваться в использовании cats, shapeless и др. популярных OSS решений.
  • Scala Puzzles – коллекция ловушек, подводных камней и неочевидных моментов в языке Scala.

Концепции1

  • Коллекции и функции трансформации данных map, flatMap, filter, drop и пр.
  • Хвостовая рекурсия и ее оптимизация
  • Монады

Рассылки и подкасты

  • Disney Streaming Services – блог и рассылка “This Week in Scala” от команды стримингового сервиса Disney.
  • Scala Times – небольшой еженедельный дайджест.
  • Scalalaz – Русскоязычный подкаст о Scala – я прослушал пару выпусков по дороге на работу и пока сложилось неоднозначное впечатление, но ведущим все равно стоит отдать должное. Они молодцы. Я надеюсь, что подкаст будет продолжать развиваться и играть важную роль в русскоязычном сообществе.
  • Scalalove – Англоязычный подкаст о Scala от соведущей подкаста Scalalaz Ольги Махасоевой.

Записи докладов2

Сообщества

В Телеграм есть канал @scala_ru. Мне он показался перегруженным флудом и не сильно уважительным отношением участников друг к другу. Но, возможно, я – просто сноб и вам этот чат окажется полезным.

Библиотеки и инструменты4

  • Util от Twitter – коллекция библиотек используемая в проектах компании: concurrency, I/O, кэширование и пр. Без жесткой функциональщины и хардкора.
  • shapeless – обобщённое программирование в Scala.
  • Scala Test – название библиотеки говорит само за себя.
  • scalafmt – форматтер кода по аналогии с gofmt в Go и black в Python.
  • Scalastyle – линтер для поддержания единого стиля кода на проекте. Пример: Databricks Scala Coding Style Guide
  • Metals – я большой фанат Visual Studio Code и поддержка Scala в нем на данный момент отстает от IDEA, но Metals может в скором времени все исправить.

Функциональное программирование

  • cats – одна из самых популярных библиотек функционального программирования в Scala.
  • cats-effect – IO монада.
  • scalaz

Шпаргалки


💡Цель данной статьи – составить для себя некий learning path, который позволит уверенно овладеть языком программирования Scala, его стандартной библиотекой, принципами функционального программирования и не перегружать себя дополнительными абстракциями. Все, что выходит за рамки этих тем, я оставил на будущее.

✨По конкурентному и параллельному программированию, а также инструментам Big Data я планирую когда-нибудь написать отдельную заметку.


  1. Этот список будет периодически обновляться. [return]
  2. Те, которые мне удалось просмотреть на данный момент и которые я посчитал полезными. [return]
  3. В ленте и списке followers много умных и интересных людей. [return]
  4. Большая часть из них постоянно упоминается в сообществе и вакансиях. [return]