Два месяца назад разработчик игр для онлайн-казино Evolution Gaming открыл представительство в Минске. Минский офис стал четвёртым R&D-центром компании, наряду с Ригой, Таллином и Амстердамом. Несколько лет назад разработку в Evolution Gaming перевели на Scala. О преимуществах и перспективах этого довольно редкого языка программирования с руководителем Scala-разработки компании Юрисом Крикисом поговорил DEV.BY.
«Изменять код можно уверенно»
Как вы изучали Scala и когда начали кодить на нём?
Примерно в 2012 году я начал искать для себя «улучшенную версию Java», который тогда слабо развивался. Начинал с Groovy — мне нравилось, но казалось, что можно лучше. И тогда я стал изучать Scala. Поначалу язык выглядел слишком сложным. В то время экосистема Scala не была такой зрелой, как сейчас: например, плохо работала подсветка кода в IDE. Но мне вовремя попались хорошие курсы Мартина Одерского на Coursera, они помогли понять язык. Scala мне понравился, и я начал активно его использовать.
Чем именно вам понравился язык?
Тем, насколько хорошо компилятор проверяет типы в коде. Это позволяет эффективно делать рефакторинг. Изменять код можно уверенно — компилятор подскажет, где ты ошибся в процессе правок. Scala даёт уверенность в том, что если компилируется, то и с большой вероятностью работает.
Насколько Scala популярен сегодня?
Мне кажется, он более популярен, чем многие другие языки, которые больше на слуху. Конечно, Scala-разработчиков меньше, чем программистов, работающих на Java, JavaScript или Python. Но Scala более распространён в индустрии, чем те же Go, Rust или Kotlin.
Для каких областей разработки Scala подходит лучше всего?
Scala — язык общего назначения (general purpose), который работает на платформе JVM, как и Java. На нём можно делать всё то же, что и на Java, плюс есть пара особых моментов. Во-первых, это фреймворк Akka, который используется и в Scala, и в Java, но в Scala удобнее. Фреймворк хорош для разработки распределённых приложений, которые обеспечивают transaction processing (обработку транзакций), например, в финансовой или банковской сфере, а также в приложениях со ставками на спорт и онлайн-казино — то, чем, собственно, и занимается Evolution Gaming. Во-вторых, Scala используют для Apache Spark — инструмента процессинга данных.
Для широкой публики Scala известен как язык разработки некоторых популярных соцсетей: Twitter, Linkedin, WhatsApp…
Думаю, что для соцсетей важен тот самый transaction processing. Фреймворк Akka подходит для быстрого отправления сообщений разным пользователям. Scala — это язык, который работает на JVM, что раскрывает возможности функционального программирования. Код, написанный на Scala, легче поддерживать. Кроме того, Scala «дружит» с Java-библиотеками и вашим существующим Java-кодом.
«Если разработчик знает Scala — это показатель того, что он улучшает своё умение писать код»
Можете назвать страны или регионы, где Scala знают и активно на нём кодят?
У меня нет статистики по географическому распределению таких компаний и программистов. Мы, например, успешно находим Scala-разработчиков в России, Беларуси, Украине и Латвии. Довольно много и эффективно Scala используют в Швейцарии, Нидерландах и Великобритании — в этих странах работают большие компании, которые используют Scala.
И всё же Scala — не самый распространенный язык программирования. Как считаете, почему?
А как определить уровень популярности? Есть разная статистика, но в топах сейчас, пожалуй, JavaScript и Java. У Java очень долгая история (язык появился в 1995 году), а чем старше язык, тем больше людей его знают и используют. На другой язык и платформу переключаться всегда сложно. Хотя, допустим, перейти с Java на Scala сравнительно просто, только это долгий процесс. В Evolution Gaming мы переводили классический Java-стэк на новый язык в течение нескольких лет.
А недостатки у Scala есть? Возможно, тот факт, что язык не очень популярен в среде разработчиков, накладывает какие-то ограничения?
Конечно, находить Java-разработчиков гораздо проще. Хотя бы потому, что их намного больше. Но если разработчик знает Scala — это своеобразный показатель того, что он развивает навыки функционального программирования, улучшает своё умение писать код и станет для нас предпочтительным кандидатом.
А так недостатков у языка два. Во-первых, чтобы писать Scala-код в стиле функционального программирования, нужно долго учиться. Возможностей много, и велик риск написать трудночитаемый код. Во-вторых, время компиляции в Scala в несколько раз медленнее, чем в Java, и это может стать проблемой при разработке больших проектов.
Scala позиционируется как язык, который объединяет в себе черты объектно-ориентированного и функционального программирования. Это действительно так?
В Scala есть возможности как объектно-ориентированного программирования, так и функционального. Но на практике вовсе не обязательно все эти возможности использовать в одном проекте. Всё зависит от задач и стиля Scala, в котором вы работаете. Вы можете использовать Scala в стиле «улучшенный Java», а можете и в стиле функционального программирования.
Реальная сила Scala — это поддержка платформы функционального программирования на базе виртуальной машины (JVM) с полным использованием Java-экосистемы. А сила Java-экосистемы в свою очередь в том, что она развивалась и проверялась в продакшне десятки лет.
Какие перспективы у Scala?
Scala — развивающийся язык, его популярность растёт. Например, скоро выйдет версия Scala 3.0, в которую будет добавлено много очень хороших фич, решающих важные проблемы. И сам язык, и его экосистема активно развиваются, появляются новые парадигмы. Так что перспективы очень хорошие.
Scala был разработан в швейцарской Федеральной политехнической школе в начале 2000-х. А кто сейчас занимается улучшением языка?
Тот, кто язык придумал, — Мартин Одерски. Он презентовал Scala 3.0 и продолжает активно работать над развитием и популяризацией языка. Кроме того, существует open-source-коммьюнити по разработке Scala, а также организации, которые работают над Scala-фреймворками: например, Typelevel Scala, Lightbend или Zio.
Вы уже несколько раз упомянули Akka-фреймворк…
Akka-фреймворк — это сочетание разных библиотек для написания распределённых сервисов (distributed services). Он включает в себя и Akka-кластер, и Akka Persistence. Мы используем Akka-кластер, например, для горизонтального скейлинга наших микросервисов и для коммуникации между ними. С помощью Akka Persistence мы храним данные о состоянии системы, используя Event Sourcing- и CQRS-подходы. Мы даже разработали свой Akka Persistence-плагин, который решает проблемы storage-ивентов.
«Код на Scala получается более качественным и с меньшим количеством багов, чем на Java»
В какой момент вы решили, что разработка в Evolution Gaming должна перейти на Scala?
В 2013 году мы начали использовать Scala в юнит-тестах. В компании были энтузиасты, которые хотели использовать наиболее эффективный и передовой способ разработки. Ведь код на Scala получается более качественным и с меньшим количеством багов, чем на Java, его проще поддерживать. Плюс Scala позволяет использовать Akka-систему естественнее, чем в случае с Java.
Scala понравилась разработчикам, и мы начали переводить свои приложения на новый язык и фреймворки: c Java и фреймворков Hazelcast, Hibernate, Spring и JSP на Scala и Akka, Akka Persistence. Разбили монолитное приложение на микросервисы, которые общаются между собой, используя Kafka. То есть изменения касались не только языка — изменялась вся экосистема. При этом интеграцию надо было провести постепенно, чтобы система не переставала успешно и безотказно работать в продакшне и обновляться.
В итоге все микросервисы, которые поддерживают наши игровые приложения, перешли с Java на Scala, и на этом языке разрабатывается бэкенд всех новых микросервисов. Ещё остались некоторые побочные системы, которые работают на Java, и одна система на Groovy, но мы и их переводим на новый язык.
Для игровой индустрии Scala — подходящий выбор?
В бэкенд-разработке — конечно. Фронтенд наших игр сделан на TypeScript, тоже типизированном языке, и React and Redux фреймворках. Scala.js используем для некоторых систем внутреннего пользования — например, системы планирования для наших сотрудников, которые ведут игры (их более 4600).
Насколько сложно найти хорошего Scala-разработчика в Беларуси и Латвии?
Понятно, что сложно найти человека с полным набором важных компетенций. Поэтому мы смотрим на желание учиться и правильное отношение к работе. Иногда удаётся найти хороших Java-разработчиков, которые могут и хотят программировать на Scala. Поиски идут довольно успешно — сейчас в Scala-чате компании более ста разработчиков.
Когда вы находите Java-разработчика, сколько времени уходит на его обучение новому языку?
Как правило, те, кто к нам приходит, уже имеют представление о Scala и его синтаксисе. У разработчиков может отсутствовать опыт работы на языке, но какие-то знания обычно есть. Многие пробуют кодить на новых языках для себя и своих проектов. Но знать синтаксис — это одно, совсем другое — знать все парадигмы и библиотеки. Поэтому обучение языку программирования — постоянный живой процесс.
По сравнению с другими языками, Scala овладеть сложнее?
Вопрос ведь не только про язык. Вопрос про парадигму, библиотеки. Начать не сложно, но чтобы стать экспертом в языке, придётся проделать очень большую работу. Скорее всего, это будет сложнее, чем овладеть Java на таком же уровне.
Имеет смысл начинающему разработчику, даже студенту, браться за изучение Scala или выгоднее овладеть более распространёнными языками?
Мы пару раз находили выпускников университетов, которым уже нравился Scala. Важным языком функционального программирования является Haskell, и в университетах его учат. Но вакансий Haskell-разработчиков меньше, и в продакшне его используют реже. Хотя язык прекрасный — Scala много позаимствовал у Haskell. Думаю, студент правильно сделает, если возьмётся за изучение Scala.
Владение не самым популярным языком программирования как-то отражается на зарплате разработчика?
Думаю, что на зарплату влияет умение писать хороший качественный код. Языки — всего лишь инструмент. Мир программного обеспечения (в масштабах планеты) расширяется, кому-то нужно обеспечивать его потребности. Поэтому нормально, что программист — очень востребованная профессия. Особенно, хороший программист. Ведь существуют задачи, которые может решить только очень хороший специалист.
Насколько сегодня Evolution Gaming испытывает потребность в Scala-разработчиках?
Активно набираем людей в Минске, Риге и Таллине. Благодаря высокому качеству образования в Минске много хороших разработчиков, а у нашей компании интересные проекты и технический стэк.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]