Лет 8 назад, когда я был еще студентом, по совету одного из своих знакомых я обратил внимание на язык программирования Scala. В то время релиз Java 8 еще не состоялся, и Oracle ругали за стагнацию. Groovy из-за своей динамической природы и подходов нравился далеко не всем, и Scala стал некой надеждой для JVM сообщества. И, конечно же, маркетинг вокруг поддержки императивного и функционального подходов в одном языке программирования помогал эту надежду поддерживать.
Однако, как выяснилось позже, порог вхождения в Scala оказался выше, чем многие предполагали, и доступные обучающие материалы не работали должным образом, а иногда и окончательно отталкивали потенциальных пользователей, в том числе начинающих разработчиков. Насколько я помню, единственной книгой на русском языке на тот момент была «Scala для нетерпеливых» за авторством Кея Хорстманна.
Ее я и приобрел в спешном порядке… и в таком же порядке забросил после прочтения первых пары глав. Как не странно, этому поспособствовал Ruby и его мантра о счастливом разработчике. И вот после нескольких лет разработки на Ruby и других языках я снова решил вернуться к изучению Scala. Произошло это благодаря интересу к функциональному программированию, распределенным системам и Big Data.
Ресурсов для изучения в наши дни значительно больше, сообщество вокруг языка продолжает развиваться несмотря на все его проблемы и внутренние споры, и Scala 3 уже маячит на горизонте. Да и я, необходимо заметить, стал больше читать на английском.
Потратив некоторое количество времени, я составил для себя следующий список материалов, по которому планирую пробежаться в ближайшие месяцы.
Книги и онлайн-курсы
-
«Scala для нетерпеливых», Кей Хорстманн – вернулся к тому, с чего когда-то начинал :) Эта книга хороша в качестве плавного погружения в Scala и стандартную библиотеку. Она не научит вас функциональному программированию или интересным подходам, но даст понимание основ для применения Scala as a “better Java”. Не забывайте про задания – для меня они оказались полезными.
-
Курс «Принципы функционального программирования в Scala» на Coursera. Это первый MOOC из специализации по Scala. Как и другие курсы, его можно прослушать бесплатно без решения задач и их проверки, что лично для меня является большим минусом. Поэтому рекомендую платное обучение (порядка $50/месяц) с итоговых сертификатом по завершению.
-
«Scala. Профессиональное программирование», 3-е издание, Веннерс Билл, Спун Лекс, Одерски Мартин – отличная книга от самого Мартина Одерски для углубленного изучения. Является необходимым подспорьем в прохождении курса на Coursera.
-
Курс «Functional Program Design in Scala» на Coursera – второй курс из специализации по Scala. Этот MOOC должен открыть слушателю элементы функционального программирования. ⚠️Однако, некоторые опытные разработчики, которым довелось пройти его и первый курс, считают их не слишком качественными в плане контента и заданий.
-
«The Neophyte’s Guide to Scala», Daniel Westheide – серия статей в личном блоге, которую автор начал писать во время прохождения озвученной выше специализации, вскоре оказалась очень популярной и превратилась в электронную книгу. Если книгу Одерски можно считать справочником к языку Scala, то «The Neophyte’s Guide to Scala» можно сравнить с опытным коллегой, который всегда готов разъяснить неочевидные моменты.
-
«Functional Programming in Scala», Paul Chiusano, Rúnar Bjarnason – мне еще не довелось лично ознакомиться с этой книгой, но по количеству упоминаний и сожалений о не выходе второго издания сложилось впечатление, что аудитория действительно считает ее одной из лучших книг по функциональному программированию (не только на Scala).
-
«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
- Keynote: The Last Hope for Scala’s Infinity War - John A. De Goes | Scalapeño
- Keynote: Preparing for Scala 3 by Adriaan Moors and Martin Odersky | Scala Days New York 2018
Сообщества
- Официальный аккаунт языка Scala в Twitter3
- Scala Users – официальный форум языка
В Телеграм есть канал @scala_ru
. Мне он показался перегруженным флудом и не сильно уважительным отношением участников друг к другу.
Но, возможно, я – просто сноб и вам этот чат окажется полезным.
Шпаргалки
- Scala FUD FAQ for newbies – часто-задаваемые вопросы о Scala
- Effective Scala – руководство от Twitter
- The Scala Cookbook, Alvin Alexander – большое количество готовых сниппетов кода
Цель данной заметки – составить для себя некий learning path, который позволит уверенно овладеть языком программирования Scala, его стандартной библиотекой, принципами функционального программирования и не перегружать себя дополнительными абстракциями. Все, что выходит за рамки этих тем, я оставил на будущее.
По конкурентному и параллельному программированию, а также инструментам Big Data я планирую когда-нибудь написать отдельную заметку.