Scala разработчик что это
Зачем нужен Scala?
Разбираем, почему это не самый популярный язык.
Встречали в вакансиях позицию разработчика на Scala? Это редкий зверь, но платят нормально. Разберёмся, что это такое и зачем нужно.
Разработчик языка рассчитывал, что Scala станет преемником Java: он наследует многое хорошее из Java, работает по схожим принципам и добавляет что-то своё. И хотя Scala не стал таким же распространённым, всё равно стоит понять, из чего он сделан.
Плюсы Scala
Scala, как и Java, работает под JVM — виртуальной машиной Java (Java Virtual Machine). JVM — это такая прослойка между программой и железом. Благодаря этой прослойке один и тот же код можно исполнить на чём угодно, для чего есть JVM: и на компьютере, и на терминале оплаты, и на умном холодильнике. Не нужно каждый раз думать: «А какие там драйверы экрана?» или «С какой скоростью работает сетевой шлюз?» — всё это берёт на себя JVM, а мы пишем только логику и интерфейс.
Минусы Scala
Но если всё было бы так просто, про Java все давно бы забыли, но этого не произошло. Более того, сейчас не так много Scala-вакансий на рынке, чтобы говорить о популярности этого языка. На это есть несколько причин:
Синтаксис
С точки зрения кода в Scala всё то же самое, что и в Java-языках, кроме некоторых ООП-особенностей, поэтому начнём с привычных деталей, а потом перейдём к отличиям.
Основы. Каждая команда заканчивается точкой с запятой, а присваивание и математические операторы такие же, как в Java и JavaScript.
Типов данных — много, как в любом типизированном языке. Как и в Ruby, каждый тип — это объект, который можно менять, добавлять в него новые методы.
Переменные. Объявляются с помощью служебных слов val и var, но разница между ними в Scala настолько размытая и непрозрачная, что иногда даже опытным разработчикам сложно понять, какое слово будет уместнее в каждой ситуации.
Условные операторы и циклы. Всё привычно — for, while и do-while, но с одним отличием: в цикле for применяется упрощённая запись для организации переменной цикла. Обратите внимание на код ниже — сколько танцев с бубном ради одного цикла, который сам занимает три строки (не считая комментария):
Кто и для чего использует Scala
У Scala нет явно выраженной области применения, как у некоторых других языков. С другой стороны, из-за объединения ООП и функционального программирования этот язык прижился в тех командах, которым нужно совмещать в работе оба подхода.
Второе преимущество — возможность запустить код в любом JVM-окружении, поэтому Scala выбирают те, кому нравится объектный подход, но не нравится то, как это сделано в Java.
Основные популярные фреймворки — Play и Lift, и их используют в основном СМИ и новостные сайты:
С чего начать
Если хотите изучить основы Scala и попробовать свои силы в объектно-ориентированном программировании в мире Java, то вот с чего можно начать.
Большая статья в RSDN Magazine — «Обзор языка программирования Scala». Хороший и понятный материал, но подан в сухом академическом стиле.
«Scala в примерах» в Викиучебнике — написано попроще, но без введения для новичков.
«Руководство по Scala» в Записках задумчивого программиста — просто, понятно, но иногда автор не даёт подробных объяснений тому, что происходит в коде.
Язык программирования, применяемый LinkedIn, Twitter и Netflix: за что любят Scala
Пик популярности Scala пришелся на 2010-2014 годы, и пусть с тех пор язык опустился в рейтингах на несколько позиций, последние пару лет рост его востребованности стабилен. Scala постоянно развивается, совершенствуется, во многом благодаря тому, что его часто используют в разработке крупнейшие производители ПО и известнейшие продуктовые компании по всему миру.
Основные сферы применения Scala — Big Data, Data Analysis, проекты, реализующие высокую нагрузку на Backend.
В новом материале вместе с Глебом Стрельцовым, Software Engineer iTechArt, разбираем плюсы и минусы, преимущества и перспективы Scala, порог вхождения и впечатления от работы с ним.
Глеб Стрельцов
Software Engineer iTechArt
Ментор и куратор в Students Lab по направлениям Java и Scala. Участвует в разработке и проверке тестовых заданий.
Почему ты выбрал Scala?
— Scala предоставляет практически все передовые возможности, позволяющие классно организовывать код в объектно-ориентированном и функциональном стиле, задействовать целый ряд инструментов, встроенных либо в сам язык, либо доступных в библиотеках и фреймворках, являющихся неотъемлемой частью экосистемы Scala. Кроме того, достигнут впечатляющий баланс между академичностью и применением в production.
Глеб Стрельцовов, Software Engineer iTechArt
Мне, как разработчику пришедшему из JVM-технологий — в частности Java, — Scala показалась логичным продолжением своей карьеры без потери накопившегося бэкграунда.
Последнее, но не менее важное, — мне открылась дорога к интересным задачам и проектам, связанным с Big Data и высоконагруженным бэкендом. Благодаря переходу на Scala я больше работаю с приложениями, использующими функциональную парадигму (ФП) программирования*, передовыми технологиями и опытными профи, у которых многому можно научиться.
* Функциональная парадигма (ФП) так же, как и ООП, определяет базовые принципы, техники написания кода. При ее применении в программе используются концепции чистых функций и ссылочной прозрачности. Важно понять, что ООП и ФП не являются взаимоисключающими парадигмами. Нередко они используются одновременно при разработке одного приложения.
Тема сравнения ООП и ФП — сложная и глубокая, вызывает много споров и дискуссий в сообществе разработчиков. Некоторое представление о ней тебе может дать эта статья.
В чем преимущества языка на фоне других языков программирования?
— Это мультипарадигменный язык. То есть, для работы со Scala можно использовать как объектно-ориентированный подход (ООП), так и функциональный. На практике, обе эти концепции можно применять даже совместно, используя гибридную модель разработки, позволяющую брать все самое лучшее от обоих подходов. В итоге, мы получаем синергию ООП и ФП.
По сравнению с другими языками программирования, где только частично реализованы некоторые из элементов функционального программирования, не позволяющие в полной мере использовать эту концепцию в боевых условиях, в экосистеме Scala ФП реализована полным образом. Говоря по-простому, многие языки программирования не поддерживают функциональную концепцию на 100%. В отличие от Scala.
Глеб Стрельцовов, Software Engineer iTechArt
По этой же причине LinkedIn, Twitter, Netflix, Airbnb используют Scala в своих продуктах. Они также инвестируют немало ресурсов и времени в развитие языка, прокачивая его показатели эффективности в продакшене.
Во многом из-за этого у Scala очень богатый инструментарий для решения различных по сложности задач, немало вспомогательных библиотек, которые значительно упрощают и ускоряют разработку.
Чем Scala не похож ни на один из других языков программирования?
— На мой взгляд, визитные карточки Scala — сбалансированность, стабильная экосистема и богатая история использования в продакшене в популярнейших технологиях:
Когда речь идет о работе в распределенных средах (например, системы данных, состоящие из нескольких объектов: каталог с именами пациентов, каталог с датами записи, каталог с названием процедуры), где разработка ведется кластерами — или группами — машин, работающих с огромными выборками данных, на сцену выходит Scala со своим легким и высокофункциональным кодом, позволяющим быстро и удобно прописать функционирование всей системы.
Глеб Стрельцовов, Software Engineer iTechArt
Освоив Scala, можно легко создавать сложные программы, ограничиваясь малым количеством строчек с функциями. То, на что в других языках уйдут сотни и тысячи символов, в Scala можно представить несколькими строчками кода. Такая программа, кроме прочего, отличается высоким качеством, легкостью в сопровождении и лаконичностью.
Программисты-математики смогут получить дополнительное удовольствие от использования языка, поскольку, как я уже говорил, достигнут удачный баланс между математическими концепциями в программировании и их использованием для решения реальных задач. Scala является частью экосистемы JVM (Java Virtual Machine), и это огромное преимущество. Немало программ написано под JVM, и их, как готовые блоки, можно интегрировать в код на Scala, что значительно ускоряет разработку.
Высокий ли порог вхождения в Scala?
— Я бы сказал, если сравнивать с Java, C#, Python, Ruby, то порог вхождения чуть выше среднего показателя по ним. Это вовсе не из-за того, что язык сложный в изучении. Основная трудность — разобраться и понять функциональную парадигму программирования, которая, по сути, лежит в основе всех преимуществ этого языка.
Хорошая новость в том, что можно войти в Scala с пониманием ООП и в процессе работы постепенно освоить функциональную часть. Поэтому бояться Scala точно не стоит.
С чего начался твой путь в Scala? Было ли тебе сложно?
— Я начинал как Java разработчик. Но ни для кого не секрет, что в Java, как, впрочем, и в других языках программирования, нередко встречаются не самые интересные проекты. Так случилось и со мной. Проработав на нескольких legacy-проектах с большой текучкой разработчиков, старым кодом и шаблонными задачами, я понял, что хочу попробовать что-то новое. Тогда я и обратил внимание на Scala. Тут концентрация интересных проектов на порядок выше, намного больше нестандартных задач, необходимостей решения нетривиальных инженерных проблем.
Путь обучения был довольно стандартный: начал с разбора литературы, затем приступил к онлайн-курсам, написанию учебных проектов, а затем и реальных.
За что ты любишь Scala?
— Немало было сказано в предыдущих ответах на вопросы. Тут добавлю, что, помимо прочего, Scala позволяет мне более творчески подходить к решению технических проблем и вызовов, давая бизнесу качественный код, решающий задачи клиента.
Глеб Стрельцовов, Software Engineer iTechArt
Со Scala мне нравится чувствовать себя всегда увлеченным, общаться с очень интересными людьми. Бытует мнение, что Scala делает любого разработчика счастливым. Мне кажется, хорошая мотивация, чтобы приступить к изучению:)
Что бы ты посоветовал новичкам, которые только-только начинают разбираться в направлении?
— Советую начать:) А вообще, делюсь небольшой шпаргалкой. По пунктам:
Книги:
Другие ресурсы и онлайн-курсы:
Заинтересовали? Прямо сейчас набираем стажеров на бесплатную стажировку Scala в Students Lab! Присоединяйся к команде и освой направление за 3 месяца. Лучшим студентам — job offer.
«Студент правильно сделает, если возьмётся за изучение Scala». Руководитель Scala-разработки Evolution Gaming — о редком языке программирования
Два месяца назад разработчик игр для онлайн-казино Evolution Gaming открыл представительство в Минске. Минский офис стал четвёртым R&D-центром компании, наряду с Ригой, Таллином и Амстердамом. Несколько лет назад разработку в Evolution Gaming перевели на Scala.
О преимуществах и перспективах этого довольно редкого языка программирования dev.by поговорил с руководителем Scala-разработки компании Юрисом Крикисом.
«Изменять код можно уверенно»
Как вы изучали 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-разработчиках?
Активно набираем людей в Минске, Риге и Таллине. Благодаря высокому качеству образования в Минске много хороших разработчиков, а у нашей компании интересные проекты и технический стэк.
Познакомиться с компанией поближе можно 3 сентября на Open Doors Day в SPACE.
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Scala (язык программирования)
Содержание
История
Язык был создан в 2001—2004 годах в Лаборатории методов программирования EPFL. Он стал результатом исследований, направленных на разработку улучшенной языковой поддержки компонентного ПО. За основу при разработке языка были взяты 2 идеи:
Объектно-ориентированный язык
Функциональный язык
Каждая функция — это значение. Язык предоставляет легковесный синтаксис для определения анонимных и карринговых функций. Каждая конструкция возвращает значение. Сопоставление с образцом естественно расширяется к обработке XML c помощью регулярных выражений.
Интеграция
Scala рассчитана на взаимодействие с такими ведущими платформами, как Java или C#. Она разделяет с этими языками большинство основных операторов, типов данных и управляющих структур.
Классы и объекты в Scala могут наследовать от Java-классов и реализовать Java-интерфейсы. Это позволяет использовать Scala-код во фреймворке Java. Например, Scala-класс мог бы реализовывать интерфейс java.util.EventListener. Экземпляры этого класса затем можно оповещать о событиях, поступающих от Java-кода.
Особенности языка
Пример № 1
В качестве первого пример мы возьмём стандартную программу Hello World.
Всё является объектами
В Scala всё является объектами, включая числа или функции. Этим Scala отличается от Java, поскольку в Java разделены примитивные типа (например boolean или int) и ссылочные типы, а также нет возможности работать с функциями как со значением. Числа – это объекты Поскольку числа являются объектами, они также имеют методы. На самом деле, следующее арифметическое выражение:
состоит исключительно из вызовов методов и эквиваленто следующему выражению:
Это также означает, что символы +, * – валидные идентификаторы в Scala. Скобки вокруг чисел необходимы, поскольку лексический анализатор Scala использует наиболее длинное правило сопоставления для токенов. То есть разобьёт следующие выражение
Классы
Этот класс может принимать два аргумента, которые являются действительной и мнимой частью комплексного числа. Эти аргументы должны быть переданы при создании объектов класса Complex: new Complex(1.5, 2.3). Этот класс содержит два метода re и im для получения этих двух частей. Следует отметить, что тип возвращаемого значения этих двух методов задан неявно. Он будет автоматически определён компилятором, который рассмотрит правую часть этих методов и решит что в обоих случаях тип возвращаемого значения будет Double.
Методы без аргументов
Небольшая проблема методов re и im заключается в том, что для того, чтобы вызвать их необходимо указывать пару пустых скобок после имени метода, как например в следующем примере:
Было бы лучше иметь возможность получить доступ к действительной и мнимой части, как если бы они были обычными полями и не указывать пару пустых скобок. Это вполне выполнимо в Scala, просто определяя метод без аргументов. Такие методы отличаются от методов с нулевым количество аргументов тем, что не нужно писать скобки после их имени, ни при определение, ни при использовании. Итак, наш класс Complex может быть переписан следующим образом: