В октябре прошлого года компании хвастали переходом с Java на Kotlin. Но не всё гладко. Официально компании не хотят комментировать ситуацию, но одни свернули эксперимент, другие только поддерживают существующий проект, третьи провели исследование и сделали вывод о нецелесообразности перехода на Kotlin. Пробуем выяснить у разработчиков, что не так с языком от JetBrains.
«Возможно, ещё раз попробуем, но только не знаю, когда»
Участник Belarus Kotlin User Group и идейный вдохновитель School.kt Кирилл Розов говорит:
— В Android-разработке Kotlin практически смёл Java в угол. Я, например, уже начинаю забывать, как писать на Java в силу того, что очень редко приходится к ней возвращаться.
Программисты всё чаще говорят менеджерам: давайте писать на Kotlin, потому что этот язык решает кучу проблем. Но в «большой Java» люди привыкли к своим фреймворкам и почему-то не хотят переходить. Очень часто «стопором» выступают заказчики, которые боятся получить в результате нестабильную систему.
Кирилл отмечает, что хуже всего компании переходят на Kotlin в бэкэнд-разработке: «уж очень она неповоротлива».
Руководитель юнита в PandaDoc Сергей Плевко говорит, что изначально в их компании бэкенд делали на Python, затем два года назад «было принято решение внести какое-то разнообразие — пусть будет ещё и Java».
— В какой-то момент, когда мы писали очередной сервис, в нас разгорелось инженерное любопытство — а давайте попробуем ещё и на Kotlin.
Это ведь реальный опыт: не просто в книжках почитать, а самим сделать что-то. При этом мы не ставили перед собой цель проверить, а «если всё будет классно — то и перейти». Мы стартанули сервис весной прошлого года. Это была чисто бэкэнд-разработка.
Что было здорово.
- Начать писать на Kotlin джависту довольно легко. Открыл мануал, прочитал три-пять страниц, и можно делать.
- Пришлась по душе идея с конвертацией целых классов на Java в Kotlin-код.
Что было не очень хорошо.
- В Java практически не встречается багов, так работает среда разработки, а на Kotlin постоянно возникали какие-то мелкие нестыковки. Они фиксились быстро, за час можно было разобраться, в чём проблема. Но тратить целый час на что-то, что не касается твоей непосредственной работы, — согласитесь, неприятно.
- Сам процесс работы со средой немного подтормаживает. Но если на Java он не раздражает, то на Kotlin процессор постоянно грузится и грузится — и ты почему-то наполняешься негативом: «Ну что так медленно!» Хотя, возможно, это связано с нашим проектом и с какими-то нашими библиотеками.
В целом мы завершили проект, сейчас периодически что-то по нему доделываем. Но так и не нашли никаких плюсов, почему Kotlin следует использовать и дальше. Да, это интересно. Да, это что-то новое. Но никаких существенных плюсов. Идея избавления от нулпоинтеров лично мне не очень понятна — это какая-то борьба с ветряными мельницами. И я бы не сказал, что проблема стоит так остро, что её нужно прямо «решать-решать». А работа со сторонними библиотеками, наоборот, иногда добавляет лишнего геморроя — ты начинаешь «изголяться», чтобы обойти все ограничения Kotlin.
Это был интересный эксперимент, но мы поняли, что плюсов в том, чтобы писать бэкэнд на Kotlin, особо нет, а разрабатывать не так удобно, как на Java. Я иногда предлагаю: давайте возьмём другой проект, переосмыслим весь наш опыт и сделаем по-другому — проведём ещё один эксперимент. Но пока никто не загорелся этой идеей. Возможно, когда-нибудь мы ещё раз попробуем, но только не знаю, когда.
И ещё: когда я впервые закинул эту идею внутри команды, её поддержали, руководство сказало: «На твой страх и риск». Но если бы сейчас ко мне пришёл, например, заказчик и попросил: «Хочу на Kotlin», я бы предложил ему сначала взвесить все «за» и «против». Потому что писать сервис на Kotlin, просто ради того, чтобы писать на Kotlin — это так себе идея.
Я также предупредил бы его, что добавление мультиязычности в целом усложняет систему, поэтому оно должно быть оправдано. С точки зрения бизнеса в том числе.
«Компаниям не интересны новые языки. Инициатива идёт снизу»
Лидер белорусской Kotlin User Group Руслан Ибрагимов говорит, что ему известно о нескольких случаях, когда компании поднимали вопрос о переходе с Java на Kotlin. И отказывались от этой идеи.
— Причины две. Во-первых, все они посчитали, что Kotlin не даёт достаточно преимуществ перед Java. А во-вторых, сейчас одна из компаний находится в процессе миграции со своих собственных серверов на Google Cloud, и её руководство не хотело накладывать один большой переход на другой.
Хотелось бы, конечно, детальнее познакомиться с результатами их внутреннего ресёрча — но, увы. Могу добавить лишь, что они даже не пробовали написать что-то на Kotlin — просто собрали «за» и «против» в теории. Знаю также, что в Onde сейчас проверяют идею полностью перевести систему на Kotlin, используя Kotlin Native для iOS и Kotlin JS для Web приложений, вместо аналогичных компиляторов для Java.
Тенденция такова, что компаниям в большинстве своём не интересны новые языки. Инициатива скорее идёт снизу: разработчики знакомятся с языком, влюбляются — и пытаются донести до команды и менеджеров, что «есть такой классный Kotlin, мы хотели бы писать на нём». В ряде случаев к ним прислушиваются.
Разработка на Kotlin, кстати, — плюс для многих кандидатов на вакансию программиста в компании: я, например, ни за какие «коврижки» не променяю Kotlin на Java.
«Разработчики Senior+ воспринимают любой новый язык как что-то одноразовое»
Бэкэнд-разработчик одной из компаний (пожелал остаться анонимным) рассказывает:
— Если команда работает на аутсорсе, простого разработчика даже не спрашивают: все решения по технологиям принимает кастомер. И он, конечно, без особого оптимизма воспринимает предложение команды внедрить новый язык, так как это связано и с рисками, и с ответственностью.
Вторая причина заключается в том, что за всё время существования JVM-платформы широкое распространение получил только Java. А Groovy, Scala и другие языки, пережив непродолжительный всплеск в своём развитии, потихоньку угасли. Памятуя об этом, большинство разработчиков уровня Senior+ (а они могут быть как среди менеджеров, так и на стороне заказчика) воспринимают любой новый язык как что-то одноразовое, о чём через неделю все забудут. Такие люди уже всё для себя решили — и какие бы ни были у вас аргументы, в споре они всегда дают универсальный ответ: «У меня есть Spring, Guava и так далее».
Не знаю, почему так получилось (хотя в душе догадываюсь), но закоренелые бэкенд-разработчики даже мегапопулярные языки, как JavaScript, воспринимают как что-то несерьёзное. А Node.Js или Kotlin — да кому это нужно, когда есть православная Java?! И хотя с приходом Serverless часть этих людей потихоньку начинает переобуваться, процесс этот очень медленный.
Ещё один собеседник dev.by отметил, что «жирный плюс к Java добавляют ещё в университете — ведь Kotlin не изучают в вузах». Руслан Ибрагимов соглашается с этим, но с оговоркой:
— Университет даёт базу, но в реальной жизни мы очень часто используем другие технологии. А с другой стороны те же JetBrains серьёзно вкладываются в образование — что очень заметно в России: у них есть свои курсы по Kotlin в техвузах. Возможно, и у нас такие появятся.
«Плюс для хайринга разработчиков: кандидаты отдают предпочтение таким проектам»
Полгода назад разработчики Bamboo Apps рассказывали, что, когда выбирали язык для проекта от Jaguar Land Rover «Kotlin ещё был „тёмной лошадкой“ — заказчик решил не рисковать». Тем не менее команда сделала задел для перехода.
СТО компании Сергей Мищенко говорит, что «вопрос миграции затем поднимался несколько раз». А сам переход на Kotlin начал активно обсуждаться в конце зимы, перед релизом. Сейчас, говорит Сергей, компания приняла окончательное решение. Он признаётся, что тому немало способствовало заявление «Kotlin — first» для разработки под Android на Google I/O:
— Мы в процессе миграции. Но для полного перехода нужно дополнительное время, и мы решили начать с тестов. Это не часть продакшн-кода, они не идут в релиз.
Для участников нашей команды Kotlin более удобен, чем Java под Android. Также это плюс для хайринга разработчиков, так как кандидаты отдают предпочтение таким проектам.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.