О пути в профессию рассказывает «скалист» компании «Криптонит»
Привет, Хабр! О «пороге входа» для 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)
andreyds95
30.06.2022 12:36+1Scala классно себя проявляет, если работать с Apache Spark, там даже уже есть классные либы для распределённого ML (Catboost for Spark, XGBoost4Spark, LGBM for Spark и тд.). Но в других задачах ML юзабилити у Scala критически отстаёт от Python
Alexwoodmaker
02.07.2022 09:38+1В научных публикациях практически в любой области знаний превалирует код R. Почему? Его можно воспроизвести - убедиться в корректности опубликованных результатов. Такая же ситуация в криптографии, где новые алгоритмы проверяются на Си. Питономания раздута искусственно.
panzerfaust
Главный вопрос забыли. Есть ли смысл смотреть на Scala, если есть Kotlin. Причем с активно растущим ФП-комьюнити. Не так давно вышла книжка "Functional programming in Kotlin with tutorials", где прям хардкор из теории категорий. Плюс либа Arrow. И вакансий на Kotlin сейчас раза в 3 больше.
maxzh83
Можно пойти еще дальше и спросить: есть ли смысл смотреть на Kotlin, если есть Java? Последняя, к слову, на месте не стоит и довольно неплохо развивается. Добавляются аналоги data class и smart check, на горизонте pattern matching. А уж про количество вакансий на Java по сравнению с Kotlin и говорить не приходится.
GospodinKolhoznik
Если уж на то пошло, то при должной сноровке можно в чисто функциональной парадигме писать даже на ассемблере.
Hivemaster
MercurieVV
Я, честно говоря, не знаю котлин, но насколько понимаю, на нем нет множество концепций которые есть на скале. Например типы высших порядков, например логическое программирование в виде given/using.
Скала, как я её вижу, все больше идёт в сторону compile time programming. До idris/coq/agda ей как до луны в этом плане, но зато тем языкам как до луны в плане продакшн кода.
Да, наверное и на котлин можно писать в фп стиле, но вряд-ли компилятор котлина сможет помочь программисту также как ему помогает компилятор скалы при использовании фп подхода
На js тоже можно писать бекенд в фп стиле, но я б опписался от страха, если бы мне предложили такое поддерживать