О пути в профессию рассказывает «скалист» компании «Криптонит»

Привет, Хабр! О «пороге входа» для Scala-программиста, переходе с Java, востребованности таких спецов на российском рынке в 2022 году мы поговорили с Алексеем Долгим (@sinc86), ведущим инженером-программистом департамента разработки компании «Криптонит». Советы по книгам и курсам для самостоятельного изучения Scala прилагаются.

— Алексей, как ты считаешь: «скалисты» (Scala-программисты) — это редкая профессия?

— Вообще говоря — да, не очень часто встречается. Но когда уже начинаешь заниматься Scala, то кажется, что не такая уж и редкая. Видишь много других специалистов. 

— Есть уже какое-то сформированное российское сообщество?

— Да есть и российское, и мировое. Например, в Telegram популярен чат Scala user group. Также есть очень интересный подкаст ScalaLaz. Наверняка есть и другие ресурсы. Чтобы оставаться в курсе, хватает этих, а конкретную справочную информацию по Scala проще искать на английском языке.

— Можешь оценить примерное количество российских Scala-разработчиков?

— Я думаю, это десятки тысяч, но не сотни тысяч. Это мало.

— Мало, если сравнивать с Java. Куда ни плюнь — попадёшь в Java-программиста.

— Да, я и сам был Java-программистом.

— А как ты стал «скалистом»?

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

Этот язык мне понравился тем, что позволяет писать намного более краткий код, чем аналогичный на Java

— Пытался как-то продвигать Scala?

— Да, я пытался на работе пиарить Scala, но не особо получалось. Есть очень много закоренелых джавистов, их очень сложно переубедить и объяснить, что они получат какие-то дополнительные преимущества от освоения Scala.

— Кажется, что от Java постепенно уходят — в Kotlin, Ruby… станет ли Scala одним из таких языков?

— Scala немного особняком стоит. При этом в Scala ещё можно заниматься функциональным программированием — это уже другой уровень.

Kotlin был задуман как улучшенная версия Java без раздражающих вещей, а на Scala есть всё то же самое

— То есть, Scala интересна не только сторонникам ООП (объектно-ориентированного программирования)?

— Да, сейчас всё чаще встречаются люди, которые не писали на Джаве, а переходят на Scala с какого-то функционального языка, например — Haskell. Потому, что на Хаскеле сейчас очень сложно найти работу как разработчику. При этом бывшие Haskell-разработчики любят писать на Scala библиотеки, похожие на те, которые у них были на Haskell.

— Какое базовое образование помогло тебе стать Scala-программистом?

— После девятого класса я пошёл в Санкт-Петербургский колледж «Инженерная школа электроники». Там я учился по профилю «Вычислительные машины, комплексы, системы и сети» и начал изучать программирование. После него я поступил в Санкт-Петербургский государственный политехнический университет на ту же самую специальность. Учился на факультете при Центральном НИИ робототехники и технической кибернетики. К сожалению, у нас такая система образования, что пришлось опять начинать с 1-го курса. На 3-й курс после колледжа почему-то брали только по специальности «Экономика и менеджмент», а вот айтишникам нужно было всё проходить заново. Я в итоге закончил магистратуру и 2 года аспирантуры без защиты кандидатской по специальности "Методы и системы защиты информации, информационная безопасность".

— Как вообще ты стал заниматься программированием?

Самое смешное, что поначалу программирование мне было неинтересно. Нас готовили как админов и защитников информации

— На 4-м курсе мы стали изучать Java и программирование графических интерфейсов, делали GUI (графические оболочки) для десктопных приложений. С четвёртого курса я пошёл работать программистом, и мне очень понравилось. Проработал 5 лет в одной компании, где писал на Java программы для диспетчеров, занимающихся учётом газа.

— В какой операционной системе выполнялась разработка?

— Диспетчеры работали в Windows, но я писал в Linux, потому что мне так было удобнее. Кстати, это одна из причин, почему я отказался работать в другой компании, занимавшейся разработкой графических игр. Там пришлось бы работать под Windows, а я всегда старался уйти в *NIX-системы. В итоге я 3 года был в компании, создающей мобильные игры, но занимался разработкой серверной части.

— Когда ты впервые столкнулся со Scala?

— Примерно в 2012 году стали много писать о том, что Java скоро умрёт и будут новые языки. Scala называлась как один из них, и я решил попробовать. Оказалось, это интереснее, чем писать на Java.

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

— Как давно ты пишешь на Scala?

— Вообще на Scala я пишу 9… почти 10 лет, но коммерческие проекты — только 3 года. Я специально уволился из компании, где занимался Java-разработкой и не устраивался на другую работу, пока не нашёл вакансию программиста на Scala. 

— Каким был твой первый опыт работы со Scala?

— Я писал небольшие программы для себя. Они выполняли какие-то рутинные действия, помогая мне в основной работе. Например, на Scala я сделал редактор protobuf’а (формата сериализации структурированных данных Protocol Buffers, который по сравнению с XML обеспечивает более компактное хранение и повышает скорость обработки данных). Особенно понравилось, что в среде разработки Scala есть консоль (среда программирования REPL с интерфейсом командной строки). В ней можно писать код в интерактивном режиме и тут же его выполнять.

— Сколько языков программирования ты знал до того, как стал писать на Scala коммерческие проекты?

— Java, javascript, C…  а вот во время изучения Scala тяга к изучению языков программирования у меня усилилась. Немножко освоил Clojure (вариант Lisp с парадигмой «код как данные»), занимался Haskell и F#.

— Почему именно эти языки?

— Просто было интересно разобраться в функциональном программировании, узнать, как вообще можно писать на таких языках. Сейчас вместе с коллегой я осваиваю редактор Emacs, а в нём все настройки пишутся на Lisp.

Знание нескольких языков помогает в решении необычных рабочих задач

— Какие перспективы ты видишь для Scala?

— Мне кажется, что популярность языка сейчас растёт. Сейчас в 3-й Scala сделали множество нововведений, направленных на поддержку работы функционального программирования. В основном за счёт новых библиотек. Считаю, что Scala дальше должна развиваться именно как функциональный язык.

— В каких областях Scala можно назвать языком выбора?

— В первую очередь, это backend-разработка и обработка больших данных. У нас в отделе есть своя команда, занимающаяся BigData и активно использующая Scala. По идее, Scala могла бы использоваться и в сфере ИИ, но так сложилось, там сейчас доминирует Python. Все самые классные библиотеки для машинного обучения написаны на Питоне. Впрочем, уже есть и продолжают появляться аналоги питоновских библиотек на Scala. Ещё иногда сами нейросетевые модели обучаются на Python, а используются уже в Scala-коде, потому что Scala-код, работающий на Java-машине обеспечивает бо́льшую производительность.

— Насколько сейчас острая конкуренция между Scala-программистами?

— Такое ощущение, что на фоне текущих событий сейчас больше Scala-программистов, чем соответствующих вакансий. Вот до начала февральских событий всё обстояло наоборот — была нехватка кадров. Такому специалисту проще устроится на работу, потому что программистов на Scala гораздо меньше, чем на Java. Соответственно, от соискателей на вакансию Scala-программиста не требуют многолетнего опыта, в отличие от претендующих заниматься разработкой на Java. 

 Независимо от изменчивой ситуации на рынке стоит учиться на Scala

— Какой формат работы тебе наиболее удобен? Удалёнка, офис, гибрид?

— Гибрид, или «офис по желанию». Работаешь удалённо, а когда тебе нужно — приходишь в офис. Он помогает собрать команду и быстрее решить проблему. В офисе можно обсудить что-то за несколько минут, а в чате — переписываться час, потому что не слышишь интонаций, не видишь выражения лиц, не ловишь обратную связь.

— Как проходит твой рабочий день?

— У меня всё просто. Проснулся, поработал, сходил за ребёнком в садик. Если надо — ещё поработал, но уже не так эффективно. Поэтому стараюсь всё сделать побыстрее, пока никто не отвлекает. Я бы с удовольствием спал до 12:00, но приходится быть программистом-жаворонком.

— Чем ты занимаешься в  «Криптоните»? 

— Я занимаюсь backend’ом для клиента интеллектуальной системы транскрибации голоса. Это очень перспективная тема, и её интересно реализовать на Scala. Ещё я сейчас работаю над сервисами для платформы обработки больших данных. Я выполнил оптимизацию кода и потребления вычислительных ресурсов, используя принцип разделения функционала. Получились отдельные лёгкие микросервисы.

У нас вообще весь стек на Scala, чтобы не было «зоопарка»

— Где посоветуешь учиться, чтобы затем работать на Scala?

— Я всё изучал в основном по книжкам и статьям. Также всем советую пройти главный курс по Scala на Coursera. Наверняка есть и какие-то курсы, но я не знаю, насколько они эффективны. На самом деле, всё зависит от склада ума и мотивации. Чтобы стать программистом, нужно иметь достаточно специфический образ мышления.

— Посоветуй книги по Scala, которые помогли тебе «прокачаться».

— Начинал я с книжки Кея Хорстманна «Scala для нетерпеливых». Вот оригинал на английском. Сейчас эта книга также вышла на русском. Ниже привожу список других книг, которые мне действительно помогли освоить Scala:

— Каким ты видишь своё профессиональное будущее?

— Изначально мы писали на такой «ванильной» Scala и твиттеровском стеке, а сейчас мигрируем на функциональный стек Typelevel. Я вижу своё развитие именно как дальнейшую практику в функциональном программировании.

— Можешь дать совет молодым программистам?

— Попробую. Лучший способ начать изучать язык — это сразу писать код. Иначе можно долго читать книжку и не понимать, зачем это всё нужно. Просто читать теорию по языку неэффективно. Лучше найти сайты с задачками по программированию. Решая их на Scala, ты заодно будешь изучать язык и сразу прочувствуешь его особенности.


P.S. и мы еще ищем Scala-программистов: https://career.kryptonite.ru/vacancies/105/ 

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


  1. panzerfaust
    30.06.2022 09:57
    +6

    Главный вопрос забыли. Есть ли смысл смотреть на Scala, если есть Kotlin. Причем с активно растущим ФП-комьюнити. Не так давно вышла книжка "Functional programming in Kotlin with tutorials", где прям хардкор из теории категорий. Плюс либа Arrow. И вакансий на Kotlin сейчас раза в 3 больше.


    1. maxzh83
      30.06.2022 11:53
      +8

      Можно пойти еще дальше и спросить: есть ли смысл смотреть на Kotlin, если есть Java? Последняя, к слову, на месте не стоит и довольно неплохо развивается. Добавляются аналоги data class и smart check, на горизонте pattern matching. А уж про количество вакансий на Java по сравнению с Kotlin и говорить не приходится.


      1. GospodinKolhoznik
        01.07.2022 01:40

        Если уж на то пошло, то при должной сноровке можно в чисто функциональной парадигме писать даже на ассемблере.


    1. Hivemaster
      30.06.2022 22:23
      +1


    1. MercurieVV
      03.07.2022 01:43

      Я, честно говоря, не знаю котлин, но насколько понимаю, на нем нет множество концепций которые есть на скале. Например типы высших порядков, например логическое программирование в виде given/using.

      Скала, как я её вижу, все больше идёт в сторону compile time programming. До idris/coq/agda ей как до луны в этом плане, но зато тем языкам как до луны в плане продакшн кода.

      Да, наверное и на котлин можно писать в фп стиле, но вряд-ли компилятор котлина сможет помочь программисту также как ему помогает компилятор скалы при использовании фп подхода

      На js тоже можно писать бекенд в фп стиле, но я б опписался от страха, если бы мне предложили такое поддерживать


  1. andreyds95
    30.06.2022 12:36
    +1

    Scala классно себя проявляет, если работать с Apache Spark, там даже уже есть классные либы для распределённого ML (Catboost for Spark, XGBoost4Spark, LGBM for Spark и тд.). Но в других задачах ML юзабилити у Scala критически отстаёт от Python


  1. Alexwoodmaker
    02.07.2022 09:38
    +1

    В научных публикациях практически в любой области знаний превалирует код R. Почему? Его можно воспроизвести - убедиться в корректности опубликованных результатов. Такая же ситуация в криптографии, где новые алгоритмы проверяются на Си. Питономания раздута искусственно.