Scala мертва?

b513584015f9ef41bfab3c7c93ba6a11.png?v=1

Disclaimer:
Это не маркетинговая статья и не наброс на вентилятор. Это размышления на тему того, что происходит на рынке Scala-разработки от инженера, который долгое время пытался перейти именно на Scala. Ни в коем случае не претендую на истинность. это сугубо личное мнение. Будьте внимательны, в этих размышлениях имеется очень сильная региональная специфика, в других регионах нашей планеты ситуация может быть совсем иной.

Предыстория:
мой основной бэкграунд — Java бэкенд. В какой-то момент стала интересна Scala. Я поработал около года в маленьком стартапе, где мы переписывали бэкенд с Python на Scala. Затем через некоторое время я начал искать варианты с переездом в цивилизованные страны и получил 4–5 офферов на Scala в нескольких Европейских странах и 1 оффер на Java… Так я оказался в Австралии. И без Scala. 

Сложно сказать, почему я сделал такой выбор, но естественно через некоторое время я задумался, а не стоит ли попытаться воплотить свою мечту и все же найти компанию, которая бы использовала Scala не только для Data-Science, но и для разработки бэкенда.

В общем, открыл я LinkedIn в надежде посмотреть и повыбирать вакансии, и был просто шокирован, когда увидел ровно 3 вакансии на весь материк, причем 2 из них от одной и той же компании :(

Здесь нужно сделать ремарку о том, что же из себя представляет рынок разработки в Австралии: здесь есть офисы нескольких крупных компаний типа Google, Amazon, Microsoft, есть Atlassian, который пытается быть на них похож, есть несколько заскорузлых монструозных банков (как везде) и огромная куча мелких (и не очень) стартапов. Как вы можете себе представить, почти никто из них не использует Scala вне контекста Data Science. 

Компании можно разделить на 2 большие категории: устоявшиеся компании (в основном Java и, что меня очень сильно удивляет, dotNet, видимо это следствие как раз наличия офиса Microsoft и работы его маркетологов) и хипстерские стартапы с GoLang или NodeJS на бэкенде. Надо сказать, что здесь довольно сильно развито движение FullStack разработки, поэтому NodeJS очень популярен, так как позволяет фронтендерам писать бэкенд :)

На удивление, есть даже несколько (больше 1) компаний, пишущих на Clojure и Elixir.  Kotlin тоже немного присутствует, но только совместно с Java.

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

Моя версия заключается в том, что популярность всех JVM-based языков находится под угрозой благодаря популярности микросервисов и сопутствующих технологий.

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

Работать с большой кодовой базой больше не нужно: микросервисы в разных репозиториях, у стартапов просто нет большой кодовой базы. Те же, кому нужно работать с большой кодовой базой, продолжают сидеть на Java, как крупные банки.

Навороченный рантайм вытеснен Docker и Kubernetes, которые благодаря легкому автоскейлингу позволяют теоретически писать приложения даже без сборки мусора, просто перезапуская приложение каждые N минут. Вместо этого важными становятся: малый размер бинарника (здравствуй, GoLang), простота и предсказуемость (даже примитивность рантайма), интероперабельность с другими частями системы (здравствуй TypeScript и Swift на бэкенде).

В общем, к моему большому сожалению, похоже из всех JVM-based языков причины использовать на бэкенде остались только у Java, благодаря необходимости поддерживать огромное легаси и наличию большого количества разработчиков на рынке, ну и возможно Kotlin, благодаря Android (хотя как это связано с бэкендом я не придумал).

А теперь давайте сыграем в небольшую игру.

Представьте себя CTO стартапа, который выбирает, на каком языке ему стоит писать бэкенд. Что бы вы выбрали?

Раунд 1: Go vs Java

Безоговорочно Go. Даже при условии, что мой опыт с ним составляет всего пару месяцев. Он настолько простой, что найти людей, могущих и умеющих на нем писать, не составит труда, уровень тулинга и поддержки крайне высок, наличие инструментов и библиотек практически на уровне Java. Так что в этой паре единогласно побеждает Go.

Раунд 2: Go vs Scala

Вот это сложный выбор лично для меня. Чисто с точки зрения именно языка (а не платформы) Go мне совсем не нравится. Он заставляет тебя делать некоторые довольно неприятные вещи, он многословен и коряв (личное мнение). Но за счет таких фич, как малый размер бинарника, кросс-компиляция, потребление памяти и т.д. в долгосрочной перспективе он выглядит более выигрышным.

К сожалению, я должен признать, что в такой постановке вопроса на сегодняшний день я бы выбрал Go. 

Раунд 3: Java vs Scala

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

Раунд 4: Java vs Kotlin

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

Раунд 5: Kotlin vs Scala

См. Раунд 3.

Раунд 6: Scala/Java/Kotlin vs TypeScript

Если бы у меня был бэкграунд фронтендера, я бы, возможно, выбрал TypeScript. Ну и если бы я верил в то, что система, написанная FullStack-разработчиками может в принципе работать :)

Раунд 7: Go vs TypeScript

Ну тут просто супер очевидно, даже вообще без вариантов.

А что выбрали бы вы?

В качестве заключения.

В общем, резюмируя сказанное выше, повторю, что у меня складывается стойкое мнение, что микросервисы и Kubernetes постепенно убивают Java и другие языки на базе JVM. Понятно, что Java будет жить вечно, как Cobol, Kotlin будет жить в Android, а вот Scala, похоже, в Data Science. Благодаря современным технологиям становится совсем не важно, на чем написан твой бэкенд, если его можно быстро запускать/перезапускать/автоскейлить.

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

© Habrahabr.ru