Подписывайтесь на «Что к чему» —
анамнез и главные симптомы беларуского ИТ.
Цифры, графика, ничего лишнего. Выходит раз в 2 недели.
Спасибо! На указанный адрес отправлено письмо для подтверждения подписки.

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

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

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

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

История

Андрей Бобылёв
Язык 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 февраля. 

Подписывайтесь на «Что к чему» —
анамнез и главные симптомы беларуского ИТ.
Цифры, графика, ничего лишнего. Выходит раз в 2 недели.
Спасибо! На указанный адрес отправлено письмо для подтверждения подписки.
Читайте также
Как оплачиваются самые популярные языки GitHub и какой прогноз
Как оплачиваются самые популярные языки GitHub и какой прогноз
Как оплачиваются самые популярные языки GitHub и какой прогноз
Бесплатные курсы по TypeScript, React, 3D разработке. По итогам могут взять на работу
Бесплатные курсы по TypeScript, React, 3D разработке. По итогам могут взять на работу
Бесплатные курсы по TypeScript, React, 3D разработке. По итогам могут взять на работу
Rust-разработчики получают больше всех, Python снова в пролёте: новое исследование
Rust-разработчики получают больше всех, Python снова в пролёте: новое исследование
Rust-разработчики получают больше всех, Python снова в пролёте: новое исследование
$4000 и оффер за один день. У Evolution – Hiring Week
$4000 и оффер за один день. У Evolution – Hiring Week
$4000 и оффер за один день. У Evolution – Hiring Week
20 сентября в Evolution стартует неделя найма. Компания ищет разработчиков на JavaScript и TypeScript. В планах — набрать несколько сеньоров. Рады и middle-специалистам. Тем, кто получит оффер, обещают бонус $2000 с первой зарплатой, ещё две — после испытательного срока. Рассказываем, куда слать CV и что предлагают кандидатам.
1 комментарий

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

8

"Эта гибкость дала программистам свободу. " - за 20 лет стажа понял одну штуку: гибкость и новизна в 100% случаях - это геморой с кадрами и увеличение сроков проекта.

Но!!! Если клиент очень настаивает, то почему бы и не попилить бюджеты на гибкосте, новизне и геморое :)))

2

Опыт ребят, которых я понудил учить Scala показал:

Scala - это вечный middleware, оно не про бэк и не про фронт Да, таких спецов можно продавать дорого, они востребованы, но сами они себя не чувствуют реализованными (я могу ошибаться - выборка маленькая) Хорошие деньги рано или поздно вступают в конфликт с желанием человека сделать что-то с социальным импактом и вообще ростом/прокачкой в общем - и тут мне им было нечего предложить Есть люди, которые могут кайф ловить от позиции вечного мидла или даже сеньёра-помидора. Но в большинстве случаев умный и хорошо зарабатывающий пацан придёт и скажет "как расти-то будем?" и ответить будет нечего особо. Конечно AWS Glue и прочие узкие ETL-middleware - довольны, для них это удобно. Ну там ещё некоторые темы с гэмблингом и подобные. А для всех остальных, если задумываешься на тему "а что будет после того как я стану сеньером-помидором?" - это головняк. Конечно, это субъективный опыт, может у кого-то и стреляет, но я сам туда ни ногой и ребят своих качать в Scala не буду. Просто во избежание потолка их роста.

0

То вы качали своих ребят, то уже не будете. И что за ребята такие? А как вы их качали -- сами до этого прокачались? И как Scala ограничивает общий уровень и эрудированность разработчика?

0

Дело было года 3 назад. Была задача построения ETL-пайплайна - забираем из множества источников, чистим данные, немного трансформируем и ложим в хранилище на амазоне. Изначально начали делать с использованием PySpark + AWS Glue + Athena. В опредёленный момент столкнулись с вечным вопросом цена/производительность. Начали компоненты пайплайна замещать на Scala+Spark. За несколько месяцев переписали. Надо признать, что стало сильно быстрее и дешевле. А дальше, когда уже освоились, возник вопрос аналитики или вообще куда мы это будем втыкать дальше, да так чтобы расти на каких-то стандартных задачах моделирования и анализа. Или вообще куда нам это ещё применить можно и увы - не нашли. А мои бойцы в это время стали спрашивать, как мы это будем дальше прокачивать под дата-инжениринг и какие перспективы - и мне нечего было ответить, да и "зоопарк" технологий на проекте не хотелось. В конечном итоге тот же Kotlin очень хорош для задач бэка, Spark + Python вполне хватает под типовые ETL, и собственно Python как язык общего назначения и аналитики. По каждому из этих направлений, очевидно, можно расти, а по Scala - я так и не понял куда расти, кому мы это будем продавать и как вообще это встраивать в команду, которая не продуктовая, а аутсорсная, то есть нужна определенная степень универсальности. При этом обозначу - у меня нету экспертизы в Scala. Да на тот момент ни у кого в компании не было. Как мы в такой ситуации учили? Как все - выбираем курс, проходим, компания оплачивает, доводим человека до сертификата, параллельно в ходе обучения встраиваем знания в реальный код приложения. Ну и да, чтением доки/книжек и с помощью клавы и "такой-то матери". Возможно, мой негативный опыт не показатель - просто у меня это не получилось. Но иногда приходится принимать решение оставить технологию или отказаться - если точка безубыточности в определенный срок не достигнута, а технология замещаема - бросаем нафиг возвращаемся как было.

2

Запускали стартап 4 года назад, в качестве языка была выбрана Scala. Когда стартап перерос в продукт, а это случилось за 2 года, и потребовалось резко увеличить команду в 3-4 раза (всего до 18-25 разработчиков), то просто не смогли нанять необходимое кол-во людей, это учитывая, что найм был в США + РБ + Украина.

В итоге все новые микросервисы разрабатываем на Java. Постепенно Scala будет полностью удалена из проекта.

0

В 2017-м я пытался консультанта найти, чтоб команду подтянуть по Scala, а не только курсы/книжки/доки - и тогда масштаб облома стал очевиден. Либо цены в небо, либо их просто нет. Разработчики вернулись на PySpark в дальнейшем. Модный и быстрый язык - это хорошо, а как с ним жить дальше - мы не придумали.

-1

"то просто не смогли нанять необходимое кол-во людей" - наверное, честнее написать "не смогли нанять людей по медианной ЗП среднего разработчика JS/Java стека", потому как многие Java разработчики осилили бы синтаксис и особенности языка за +X% прибавки к средней ЗП.
Я не вижу причин, почему Java девелопер не сможет писать на Scala и наоборот. Язык - это всего лишь инструмент

2

все так просто :)))

вот например есть 50$ в час которые клиент готов платить за хорошего сеньера, скала сеньер запрашивает сумму которая приведет к увеличениею почасовки минимум до 60$ (+20%) - ладно если речь идет об 1-2х членах команды, но если их нужно увеличить с 10 до 100 ?

Итого имеем проблемы
1 Высокие риски в случае текучки кадров
2 Превышение бюджета проекта для инвестора
3 У посредника уменьшается интерес заниматься этим проектом.

В итоге и так и эдак все приходит к тому что выбор скалы для проекта - ошибка.

0

Я бы сказал - для аутсорса, в 99% да, для продукта в зрелой стадии - нет,если есть понимание зачем.
Тинькофф, Flo - первые кто в голову пришел

1

ну так тогда и стоит писать: на деньги студентов-питонистов начали искать целую команду скала-сеньоров. не нашли, они все жадные троглодиты. скала - отстой!
пс. еще и цепочка посредников пыталась кормиться судя по вашему комменту)) точно - "скала отстой"

0

Какой же он популярный? Вон люди выше даже десяток специалистов дополнительных найти не смогли. Популярными в те времена были Java, C#, C++, потихоньку пробивали себе дорогу Python, Ruby.

1

скала - специализированный инструмент, как правильно пишут - с небольшим процентом джунов. соответственно цена будет выше чем за тот же питон, где каждый студент "пишет" и где этих студентов продают как синьоров. логично что сложно найти людей на питонный бюджет. говорит ли это что язык плох? технология плоха? нет, это говорит что компании сложнее заработать "стандартным методом" пририсовывания резюме.

-1

Мне он показался излишне сложным и неочевидным каким-то, плюс были проблемы с временем компиляции и отсутствие нормальной поддержки в IDE (но это давно было, может за уже исправили)..
Есть фанаты, конечно, но их мало и больше не становится. На хайпе были запросы по проектам на Scala, но через пару лет все закончилось.
Ща наблюдается некоторая битва между Java и Kotlin, скорее)

1

А мне Scala нравится.