«Если бы сейчас начали сначала, снова выбрали бы Scala»: Tinkoff.ru о Scala-разработке

59d78de1c6ded235306887.jpeg

У Scala репутация языка, с которым сложности подстерегают с разных сторон: порог входа выше, чем у Java, а разработчиков куда меньше (так что может быть сложнее собрать команду). В итоге российские компании нечасто решаются его использовать. Но в Tinkoff.ru активно используют далеко не первый год — и мы решили расспросить компанию, как на практике живётся с Scala. Поскольку сложности могут быть и техническими, и кадровыми, вопросы задали двум разным сотрудникам: руководителю отдела разработки программных интерфейсов Роману Докучаеву и руководителю HR-проектов Ольге Шпунтенко.


Роман Докучаев


59d78e4bc3bb6179286302.png— Напрашивающийся первый вопрос: почему в компании сделали неочевидный выбор в пользу Scala?

— Причин множество. В первую очередь это возможность писать простой, лаконичный, выразительный и асинхронный код. При этом можно без проблем переиспользовать готовые Java-библиотеки, что немаловажно при решении вопросов интеграции с другими системами, особенно enterprise-класса. Чаще всего в Scala приходят люди увлекающиеся, с живым умом, поэтому получается собрать очень креативные и бодрые команды. На выходе получаем большую скорость разработки, меньше багов, держим большие нагрузки по сравнению с другими языками.

— Тут многим захочется возразить, что лаконичный код ещё не означает «простой»: Scala-код порой обзывают «набором закорючек», а сам язык называют сложным. У вас не возникает проблем с тем, что новым сотрудникам затруднительно разобраться в имеющемся коде?

— Действительно, не всем просто перестроить мышление на FP. Но тем, кому удаётся, открывается новый мир с единорогами, радугами и минимумом боли. По поводу закорючек — согласен, но их мало кто применяет. Почти на всё есть понятные буквенные выражения. У новых сотрудников обычно больших проблем не возникает.

— В подкасте «Разбор полётов» вы говорили «Go слишком примитивен, а у нас финансовый сервис — отказоустойчивость, перформанс». Тут кто-то тоже может возразить: «но ведь Go делает Google, а у них тоже отказоустойчивость и перформанс». Почему считаете Scala «быстрее»?

— Вопрос скорее не в том, насколько один язык быстрее другого, а в том, насколько он подходит для реализации той или иной задачи. У нас местами очень сложная бизнес-логика с учетом множества интеграций. Если реализовать ее на Go, то получается много кода, который будет сложно поддерживать. Со временем, по мере появления новых кейсов, код становится еще сложнее, особенно если его пишет множество разработчиков. Больше кода — больше багов и больше вероятность его неоптимальности. Отсюда и потери в отказоустойчивости и перформансе.

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

— За 6 с лишним лет продакшн-применения в компании Scala показал себя надёжным и подходящим для наших задач языком. Многие финтех-компании в мире уже давно выбирают Scala. В последнее время это характерно и для России. Чтобы в этом убедиться, достаточно ввести «Scala» в поиске на hh.ru.

— Противники Scala говорят «долго компилируется» —, а для вас это больным местом не стало? Можете ли привести конкретный пример из того, что получается на ваших проектах?

— Действительно, Scala компилируется медленнее той же Java, особенно когда в проекте активно используются shapeless и макросы. Но микросервисная архитектура позволяет не замечать сильной разницы.

Если говорить о метриках, то проект в 6000 строк Scala-кода, с учётом зависимостей, компилируется и собирается за 70 секунд.

— Поскольку Scala позволяет делать одно и то же разными способами, есть ли у вас собственные гайдлайны?

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

— Приводит ли использование Scala к тому, что вы чаще «велосипедите», в то время как с Java брали бы готовые опенсорсные Java-решения?

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

— А из этого своего что-либо опенсорсите?

— Стараемся, но, к сожалению, в целях безопасности далеко не всё попадает в открытый доступ. Открывается безопасный инструментарий, вроде DSL для Aerospike.

— За рубежом Scala популярнее, чем в России — приводит ли это к тому, что вы больше контактируете с мировым сообществом, чем было бы с Java? Ездите ли на зарубежные Scala-конференции?

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

— Tinkoff.ru использует Scala далеко не первый год —, а что за это время изменилось в компании с использованием языка, каковы тенденции?

— С каждым годом мы находим Scala все больше применений, от микросервисов до big data. Даже тестировщики применяют его для автоматизации своих процессов. Уверен, тенденция продолжится.

— За то время, что вы используете язык, в индустрии тоже многое изменилось: например, к важному для вас вопросу асинхронности недавно обратился Kotlin с помощью корутин. Если бы вы сейчас только начинали, всё равно выбрали бы Scala, или пошли другим путём?

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

Ольга Шпунтенко

870c03eaf86048238be30a69b4b45280.png— Сколько всего разработчиков в Tinkoff.ru, и сколько из них пишут на Scala?

Всего у нас работает около 600 разработчиков по всей стране, 70 из них — скалисты.

— Поскольку Scala-разработчиков куда меньше, чем Java, искать таких — это боль, и приходится «хвататься за каждого», или нет?

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

Но при этом мы не можем сказать, что подбор скалистов — это боль. Да, под окнами не выстраиваются очереди из желающих писать на Scala, но интерес к функциональному программированию в ИТ-сообществе растёт с каждым годом (причём не только в Москве), и это не может не радовать. В России не очень много компаний, которые используют Scala, но они есть. И нам приятно, что Tinkoff.ru ассоциируется в нашей стране с функциональным программированием.

— А вам помогает справляться с этим «негде освоить» ваша «Финтех Школа», где есть Scala-направление? Какая часть её выпускников остаётся работать у вас?

— Да, мы недаром сделали Scala одним из направлений курсов. Участники «Финтех Школы» работают не с абстрактными, а с вполне реальными техническими задачами, и сразу же узнают, как построены процессы в нашей компании. А мы совершенствуем программы школы, учимся сами, экспериментируем, и, как следствие, получаем более подготовленных к решению реальных задач выпускников: каждый новый выпуск школы оказывается всё лучше и лучше. В итоге 80–85% выпускников остаётся у нас работать.

— У вас бывают вакансии «Java to Scala», и это ещё один напрашивающийся способ получить скалистов: взять джавистов и доучить. А насколько масштабным и эффективным каналом получения Scala-разработчиков это стало в вашем случае?

— В нашем случае канал довольно большой: больше половины скалистов на момент начала работы в компании были джавистами. Мы научились переучивать джавистов в скалистов за довольно короткий срок, буквально за несколько месяцев. Для желающих переучиться это хорошая возможность уже сейчас изучать язык, который очевидно через два-три года будет популярен, и получать за это деньги, а не делать это в свободное время «на коленке», когда не у кого спросить и некому тебя поправить и направить в нужном направлении.

© Habrahabr.ru