Что стало с самым популярным языком 2010-х? Рассказываем о взлётах и падениях Scala

Scala похож на Lady Gaga: резкий взлет в 2010-х, затем спад ажиотажа и трансформация в живую легенду рынка с армией поклонников. Специалисты из Evolution Юрис Крикис, Scala and TypeScript Department Lead, и Андрей Бобылёв, Minsk Development Department Lead, раскрывают подробности этой IT-истории.

14 комментариев

История

Андрей Бобылёв
Язык Scala создавался с 2001 по 2004 Мартином Одерски, профессором Федеральной политехнической школы Лозанны в Швейцарии. Видя недостатки Java — громоздкий синтаксис, отсутствие автовыведения типов и pattern matching’а — Одерски захотел его осовременить и расширить возможности. Он объединил объектно-ориентированное и функциональное программирование. В результате родился Scala.  

Юрис: Добавлю, что в начале 2000-х Java застыл в развитии. Из-за банкротства  компании-создателя Sun Microsystems в него не добавлялись новые фичи. И даже после того, как их купила Oracle, изменений не произошло. Однако Java оставался сверхпопулярным языком  с сильной экосистемой. Например, на Java Virtual Machine стали появляться альтернативные языки: Python, Groovy. Поэтому вопрос развития Java стоял остро. И за него взялся профессор Одерски.

Одной из попыток осовременить Java был Pizza — еще одно творение Одерски. Затем на базе наработок Pizza родился Scala, который дал миру Java таким, каким он должен быть.

Принципы Scala 

При разработке Scala Мартин Одерски опирался на дизайнерские идеи Java. Еще в новом языке можно заметить элементы С#, Sather, унифицированную объектную модель из Smalltalk. Абстрактные типы похожи на таковые в SML и OCaml.

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

Андрей: Основной принцип — это  объединение объектно-ориентированного и функционального программирования. Если программист пишет в одном из этих стилей, то другой дает преимущества, а не мешает в работе. 

Юрис Крикис
Замечу, что если на Scala разработчик может комбинировать подходы, это не значит, что он должен одновременно использовать оба. Например, в Evolution мы пишем функциональный код, не ООП. А есть те, кто пишет на Scala только ООП-код. Тренд на добавление языкам функциональных полезных фичей существует давно, даже в том же Java. Но в Scala их использовать удобнее, потому что они предусмотрены дизайном.  

Почему взлетел интерес к языку?

До 2010-х язык оставался экспериментальным полем для сообщества разработчиков. Затем произошел резкий взлет интереса  со стороны крупных игроков рынка. Первой из топов на него обратила внимание Twitter. В апреле 2009 года компания перевела большую часть серверного кода на Scala. В апреле 2011 онлайн-версия газеты The Guardian была переведена с Java на Scala. Затем на Scala перешли LinkedIn, Foursquare, Novell, Siemens, GridGain.

Андрей: Удобный и короткий синтаксис Scala покорил сообщество джавистов, а переопределение операторов и имплиситы позволили создавать библиотеки с собственными DSL. 

Микс ООП и ФП, с одной стороны, привлек сторонников функционального программирования, а с другой, сделал порог входа более низким: Java- программисты смогли быстро перейти на Scala и осваивать новые возможности постепенно. Справедливости ради отмечу, что порог входа всё ещё выше, чем в традиционных ООП языках.

Юрис: Важную роль сыграло появление Apache Spark, который быстро набрал популярность в области распределенных вычислений и позволил Scala занять эту нишу.

Другой знаковой технологией стала Akka, перенесшая на JVM модель акторов, популярную в Erlang и Objective C, и привлекшую интерес сообщества. 

Почему же он тогда ушел в пике?

Тенденцию иллюстрирует «цикл хайпа» Гартнера. Сперва Scala накрыла волна интереса сообщества. Потом она спала, появился период негатива. С того времени все утихло и наступил период продуктивного использования языка, который постоянно развивается.

Юрис: Со временем сообщество разработчиков изучило и наигралось с новыми возможностями и подходами. Пришло понимание, что изобретать свои DSL и переопределять операторы нужно с умом, иначе получится Perl (смеется). 

Еще одной причиной спада стало то, что нишу Java со временем заполнили новые версии продукта, поскольку язык начал развиваться. Появился Kotlin, которыми пользовались те, кто «хотел, как Java, только немного лучше».

Андрей: Люди изголодались по современной Java, и когда Одерски ее дал, случился огромный всплеск интереса. Масла в огонь добавила Akka — акторная модель, на которой, как казалось, можно было писать практически все. Сообщество бросилось экспериментировать, что и привело к взлету популярности Scala. Затем стало приходить понимание, что акторная модель подходит не всегда. Если пишется DSL, то не стоит заигрывать с символами, потому что их сложно запоминать. Таким образом, программисты поняли плюсы и минусы языка, успокоились и стали его использовать как рабочий инструмент, а не как игрушку. 

Что происходит со Scala сейчас?

В рейтинге IEEE за 2021-й год язык занял 21-ю позицию. По версии TIOBE он находится на 36-м месте.

Юрис: За последние годы у него улучшился тулинг. Семь лет назад, когда я начал использовать Scala, IDE подсвечивала красным правильно компилируемый код.  

Также сообщество опробовало разные подходы и определило непродуктивные, например, Cake Pattern. Это позволило нам работать с тем, что приносит пользу. С другой стороны, поиск новых подходов и альтернатив продолжается, и споры по некоторым вопросам всё ещё ведутся — например, где стоит применять подход Tagless Final, позволяющий абстрагироваться от типа эффектов.

Андрей: Сейчас существуют две активные ветки языка: Scala 2 и Scala 3. В Scala 2 происходили незаметные для пользователя изменения, например, оптимизация производительности. Но на нём уже была написана куча кода, поэтому создатели старались максимально сохранить совместимость.

Scala 3 продолжает эволюционировать. Он взял от предшественника лучшее и выкинул то, что не прошло проверку временем, например, поддержку XML на уровне языка. Синтаксис стал еще лаконичнее, особенно в области работы с имплиситами, расширилась поддержка зависимых типов и появился type matching, и так далее.

Юрис: Любопытный факт. В Scala практически нет джунов. Часто программисты, которые входят в язык, уже знают Java или другой язык на уровне middle и senior. Так что нынешним новичкам приходится вкладывать больше усилий, чем, скажем, питонистам, потому что документации для новичков меньше.

Андрей: Плюс на первых порах им потребуется ментор, который поможет разобраться в тонкостях. Но потраченные усилия того стоят. Потому что даже перед опытными программистами в Scala открываются возможности бесконечной учебы и экспериментов.

Юрис: Добавлю от себя. Я твердо уверен, что Scala делает разработчиков счастливее. Те, кто пишет на Scala, не хочет переходить на другой язык.

Где применяется Scala вообще?

Юрис: Scala — это general purpose programming language, который можно использовать вместо Java. Он подходит для Big Data процессов за счет наличия моделей обработки Spark и Flink. На Scala.js можно писать бэкенд и фронтенд. 

Единственное, в чем Scala проигрывает Java, — это время компиляции кода. В остальном же преимущества очевидны.

Андрей: Одним словом, круг возможностей широкий. Но это еще не все, что может дать Scala. Разработчики, особенно сеньоры, говорят, что кодинг на Scale — это чистый фан. Обилие возможностей и способов решения задач это своеобразный brain teaser, который постоянно держит в тонусе и подкидывает челленджей.

А в Evolution?

Юрис: У нас на Scala написана основная часть игрового бэкенда. Он представляет собой коллекцию приложений и микросервисов, которые говорят между собой с помощью Kafka. Core backend — это Scala-приложения, которые работают в Akka-кластере с использованием Akka Persistence для Event Sourcing’a. Также используем Scala.js на некоторых проектах бэкофиса. 

Андрей: Для взаимодействия с Akka Cluster и Akka Persistence в функциональном стиле у нас есть собственная опенсорс обертка. Для работы с эффектами мы используем, в основном, библиотеки Cats и Cats Effect, в некоторых проектах есть Monix и ZIO. 

Что будет со Scala?

Юрис: Scala — одна из самых сильных платформ для бэкенда на JVM. У него очень хорошие прогнозы, учитывая, что Scala 3 сам по себе прорывной язык.

Андрей: Несмотря на то, что я наблюдаю тенденцию, когда в разные языки добавляют элементы функциональных, например, в Kotlin, Scala остается самым крупным и удачным миксом ООП и ФП. Поэтому уверен, что язык будет оставаться популярным еще долгое время. 

Юрис: Считаю, что Scala достиг продуктивного плато, поэтому хайпа вокруг него уже не будет… 

Андрей: (подхватывает) если только Одерски не придет в голову придумать для  Scala 4 что-то прорывное, скажем, квантовые вычисления. В таком случае языку обеспечена новая волна интереса (смеются).   

Scala Bootcamp

В марте 2022 года Evolution запускает бесплатный Scala Bootcamp в онлайн формате, подать заявку можно до 18 февраля. 


Читать на dev.by