Какое место занимает язык Scala в ИТ-индустрии

828014ff70a240dd962ff207bb3729e2.png

Язык программирования Scala является «симбиозом» Java и C#. Это не первый язык, комбинирующий ООП с функциональным подходом, но он начал набирать обороты в тот момент, когда развитие Java замедлилось. Более того, создатели Scala решили, что язык должен работать на виртуальной машине JVM и предоставлять доступ к Java-библиотекам.

Мартин Одерски начал разрабатывать Scala в начале 2000-х в стенах Лаборатории методов программирования EPFL. Он же ранее занимался разработкой Generic Java и компилятора Java фирмы Sun.

Внутренний релиз Scala появился в 2003 году. Первый публичный релиз вышел в начале 2004 года на Java-платформе, а в июне того же года — на .NET Framework (правда, с 2012 года эта платформа не поддерживается). Scala 2.0 увидела свет в 2006 году. Его компиляторы и библиотеки распространяются под лицензией BSD.

Лицензия BSD (Berkeley Software Distribution license — Программная лицензия университета Беркли) — это лицензионное соглашение, впервые применённое для распространения UNIX-подобных операционных систем BSD.
17 января 2011 года команда разработчиков языка выиграла грант на исследование сроком в пять лет. Европейский исследовательский совет выделил им около €2,3 миллиона. В мае 2011-го участники сообщества Scala во главе с Одерским основали компанию Typesafe Inc. (в феврале 2016 года переименована в Lightbend Inc.). Созданная компания должна была осуществлять финансовую поддержку разработчиков, создавать сервисы для Scala. Зарабатывать Typesafe должна была на Scala-библиотеках. В 2011 году фирма получила $3 миллиона инвестиций от Greylock Partners.

9d08256061f2d7a5e46f3658a37f2f37.jpg
Мартин Одерски — создатель Scala

Что «под капотом»


Язык Scala объединяет три вещи: статическую типизацию, объектно-ориентированный и функциональный подход. Как уже говорилось, Scala работает на виртуальной машине Java. Совместимость («свободное смешивание») этого языка с Java дает возможность писать на Scala Android-приложения. Кроме того, возможность компиляции в JavaScript позволяет разрабатывать веб-приложения на Scala.

Несмотря на некоторую схожесть и даже родственную связь этого языка с Java, целых 10 лет после появления Scala его «старший брат» хранил верность объектно-ориентированной парадигме. И только в 2014 году в Java 8 были включены элементы функционального подхода — лямбда-выражения.

Помимо упомянутых выше Java и C#, на Scala оказали влияние другие языки и технологии. Способ выражения свойств во многом заимствован из Sather. Из Smalltalk перекочевала концепция унифицированной объектной модели. Beta поделился идеей о вложенности всего подряд, включая классы. Абстрактные типы в Scala напоминают абстрактные типы сигнатур в SML и OCaml, обобщенные в контексте полноценных компонентов.

Кроме того, Scala перенял особенности таких функциональных языков, как Scheme, Standard ML и Haskell.

Целевая аудитория


Преимущества Scala оценили многие крупные компании — Twitter, LinkedIn, Foursquare, Novell, Siemens, GridGain. Однако в академических кругах это язык пока популярен больше.

Пользователь @platoff в статье достаточно подробно изложил свой взгляд по поводу целевой аудитории языка.

Я прекрасно понимаю, чем Scala привлекает неопытную молодежь (а она в основном и хочет Scala):

• Ореолом элитности: действительно прогресс в Scala делают умнейшие ребята, типа, дураки на Scala не пишут, и если ты пишешь на Scala, то ты умный. Оп, ребята, программирование — это не учеба в университете, ты не будешь более «умным» программистом, чем сложнее заморочку ты решишь.

• Сложностью: наверно многие из Scala-фанатов и любителей не осознают, да и не способны сформулировать, что их привлекает в сложности. Подсознательно кто-то думает, что сложность == мощь. Типа чем сложнее, тем мощнее.

Очень сложную задачу можно просто решить, переиспользуя сложные решения. В нашем случае компилятор должен брать на себя как можно больше сложности, упрощая решение. Компилятор Scala безусловно сложен, но есть проблема — язык, в котором эта сложность выражается. Пользоваться таким языком безумно сложно.


Ngoc Dao, создатель Xitrum Scala web framework, Ngoc-Dao смотрит на ситуацию с точки зрения функционального подхода:
Говоря о функциональном подходе в принципе, безотносительно Scala, на ум обычно приходит Haskell. Однако, рассуждая с практической точки зрения, лучше выучить Erlang. Не зря все-таки Facebook потратил $19 миллиардов на покупку WhatsApp, который написан как раз на нем.

Erlang сдвинет ваше мышление в сторону функционального подхода сильнее, чем Scala. Кроме того, Erlang намного проще и быстрее учить. Вы можете освоить его за неделю и сэкономить свое время.


Так что, мнение на счет универсальности Scala может быть и скептическим — ни два, ни полтора: функциональная парадигма реализована непросто, да и в плане «объектноориентированности» он тоже слишком сложен.

Однако, если «пересаживаться» на этот язык с бэкграундом Java-разработчика, сложностей будет меньше.

Рейтинги и индексы


Индекс TIOBE по итогам октября 2016 года показывает, что Java является самым популярным языком программирования. Он уверенно лидирует уже 15 лет подряд и был на втором месте только в 2001 году.

d644037f15b64960945fd2c67cf8af79.png

Между Java и Scala в этом рейтинге наблюдается большой разрыв. Впрочем, последний уступает также языкам Lua, Fortran, Lisp, Transact-SQL, Ada и F#, расположившись на 33 месте. Однако в рейтинге 50 мест, и Scala все-таки сумел обойти функционально-логические языки Haskell и Prologue.

05ce8668692e4b119d6c0b1eee3cf2c7.png

В другом рейтинге у Scala дела не так плохи. Согласно данным IEEE Spectrum за 2016 год, он занимает 15 место. Java тоже находится в лидерах, но на этот раз на почетном втором месте. Составители рейтинга указывают, что область применения Scala у них ограничена только веб- и мобильной разработкой. Разработка для ПК во внимание не принимается. В то время как Java они воспринимают как язык разработки для всех трех платформ.

0f70a9d297a746dfaa9a2cdbce2af3b5.png

По данным опроса Github на начало 2016 года, у Scala дела идут еще лучше: он занимает 11 место. Java опять возглавляет рейтинг. Причем, здесь он идет с большим отрывом от C#.

9e7dd3eb71a1459eab95b30ac4ff1835.png

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

d823ad87582c3ea80c6f8c5726436f51.png

В первой группе мы видим Swift и Scala, которые делят между собой звание «идеального языка»; еще можно отметить довольно высокую оценку Go. Java здесь занимает только четвертую строчку. Это первый показатель, по которому Scala смог обойти своих родственников — C# и Java.

Перспективы


Свое мнение о будущем Scala уже высказывал Барух Садогурский — Developer advocate в компании JFrog:
Меня несколько пугает то, что сейчас происходит со Scala, потому что есть тренд ухода от него: например, компания TypeSafe, которая пыталась зарабатывать деньги на библиотеках, связанных со Scala. Некоторое время назад было объявлено об уходе TypeSafe с сильного акцента на Scala на гораздо больший акцент в Java, потому что большая часть enterprise-разработки на Java, где собственно находятся деньги. Поэтому они наняли много новых людей, которые подтягивают какие-то Java-интерфейсы, которых раньше у них не было.

Мы также видим другие библиотеки, которые были очень ориентированы на Scala. Например, Spark, где в новом релизе Java API подтянуты до уровня Scala, и, похоже на то, что дальше они будут развиваться не хуже API Scala, если даже не лучше. Я бы сказал, что в глобальной картине мы видим некоторый разворот в сторону Java.

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

Именно поэтому я никогда не был большим фанатом Scala, и тенденция ухода от Scala меня не удивляет. Безусловно Scala никуда не денется и продолжит развиваться, но в гораздо более нишевом формате.


Намного оптимистичнее смотрит на это Ashesh Ambasta, Lead backend engineer в CentralApp:
Я верю, что у Scala все-таки хорошие перпективы. Недаром многие крупные компании выбрали его. Несмотря на то, что путь, сочетающий ООП и ФП может показаться опасным и сбить с толку «пуритан», при аккуратном использовании, программирование на Scala может доставлять удовольствие.

Я не согласен с тем, что Scala в освоении труднее других языков программирования. Есть, конечно, определенный «барьер», связанный с необходимостью думать одновременно в разных парадигмах. Хотя на большинстве форумов этот язык почему-то обсуждают в контексте функционального программирования.

Мне приходилось слышать высказывания по типу: «Scala больше подходит для крупномасштабных систем, а не каких-то там Твиттеров». Но будет ошибкой полагать, что он создан только для этого. Я не думаю, что реализовать MVP (Minimum Viable Product) на Scala сложнее, чем на каком-то другом языке.

Я никогда не был особенно увлечен объектно-ориентированным программированием. С тех пор, как познакомился с Erlang, я к нему не возвращался. Затем я выбрал Scala для бэкэнд-разработки в новой компании и получил положительные отзывы. Это вселило в меня уверенность, что я сделал правильный выбор.

Куда пойти учиться?


cd53f83da54e40a1d684ce655b5fa460.jpg

Для тех, кто задумывается о смене специализации или еще только начинает карьеру программиста, приведу несколько реплик с «Тостера».

HaruAtari:

Много лет пишу на php, надоело. Сейчас переучиваюсь на Scala-разработчика. Пока все идет хорошо, язык замечательный. Плюс совместимость с Java-библиотеками.

Но сегодня зашел на hh.ru и из любопытства посмотрел количество вакансий для Java/Scala-разрабов. Scala — 47, Java — 705. После этого несколько задумался. А я вообще смогу работу найти на этом языке? Есть ли какие-то перспективы в изучении Scala как основного языка сейчас. Есть ли перспективы в таком вложении сил? Или только java?

jkotkot:

Разработчик Scala без знания Java никому не нужен. Если вы не будете понимать, как устроены и работают разные открытые Java-библиотеки, то вы никогда не станете всем нужным профессионалом в этой области.

opium:

Для России Scala в ближайшие годы — мертвый рынок, надо смотреть либо на зарубежный фриланс, либо на вакансии за границей.

gurinderu:

Что вы так сильно огорчились? Scala-разработчиков в разы меньше, чем Java, поэтому и разброс такой. Будет она востребована однозначно. К примеру, Tinkoff-банк использует Scala.

mrRontgen:

Отсутствие 100500 вакансий на hh — это не повод для паники. Язык молодой, но он очень стремительно набирает обороты. Насколько я знаю, Huawei начинают пилить интеграционные решения в России на Scala (вместо оракловских продуктов). Так что все не так плохо.

У Одерского и компании очень большие перспективы и амбиции. Так что, по моему мнению, Scala (или ее «апдейты») еще удивят программистов!

Комментарии (7)

  • 2 ноября 2016 в 20:59

    0

    Всегда задавался вопросом: как люди умудряются так быстро изучить столько языков, чтобы выносить о них столь ёмкие суждения? Тут на изучение Java на уровне читателя уходит три года, и всё равно пробелы остаются. А люди за год по 10 языков изучают… Или это я у мамы особенный?
    • 2 ноября 2016 в 21:04

      +2

      Рискну предположить, что после 3–4 изученного языка остальные учатся очень легко, буквально за неделю. Ведь концепции в языках одни и те же, просто синтаксически выражаются по-разному. Тут как с иностранными языками.
      • 2 ноября 2016 в 21:06

        0

        А разве изучение языка заканчивается на синтаксисе? Э-э-э-э, не, брат, после изучения синтаксиса изучение языка только начинается.
        • 2 ноября 2016 в 21:17

          0

          Во-первых, концепции это вовсе не синтаксис. И во-вторых, теже монады, скажем, по идеологии весьма похожи, везде где они есть, и отличаются в основном только синтаксисом. Потому что в основе по сути — одинаковая математика. И еще можно назвать кучку подобных концепций, типа регулярных выражений, например — один раз изучил, и больше нигде проблем не испытываешь.
        • 2 ноября 2016 в 21:19 (комментарий был изменён)

          0

          Я имел в виду не только синтаксис. Ведь в ядре разных языков (в их компиляторах или интерпретаторах) могут использоваться весьма схожие принципы. И если ты подробно изучал один язык раньше, то изучая новый ты заметишь всё те же знакомые принципы, и тратить времени на их понимание и изучение не придётся. Взять к примеру популярные Java и C#. Если человек с нуля учит Java, ему предстоит изучить что такое виртуальная машина, что такое JIT-компилятор, что такое сборщик мусора, и т.д. и т.п. А если вторым языком он начнёт учить C#, то он с удивлением обнаружит, что некоторые из этих концепции присутствуют и в нём. И достаточно лишь обратить внимание на различия между реализациями этих концепций. Вот и тратится на изучение гораздо меньше времени.
    • 2 ноября 2016 в 21:08

      +1

      >Язык программирования Scala является «симбиозом» Java и C#

      Где вы откопали это утверждение? Авторы Scala разрабатывали новые языки (Pizza, GJ) задолго до появления c#, скажем так, примерно лет за пять. И в истории появления языка C# кажется не упоминается вовсе. Можно цитатку?

  • 2 ноября 2016 в 21:03

    +1

    Ну я устроился Scala-разработчиком не зная Java. Мне это не особо мешает, тем более что sbt проще в использовании, чем Maven.
    Так как Scala-разработчиков сложно искать, у нас начали брать Java-разработчиков и переучивать. Пока это проблем не вызывало. Scala они осваивают очень быстро, сложность языка преувеличена.

© Habrahabr.ru