В вакансиях backend-разработчика всё чаще встречается пара «Java/Kotlin» — не как два разных стека, а как один. Причина простая: Kotlin компилируется в тот же байткод JVM, использует те же библиотеки и фреймворки, и команда может писать новый код на Kotlin, не переписывая старый Java-код. Разберёмся, где язык живёт, что даёт и сколько стоит переход.
Где живёт Kotlin
Android. С 2019 года Kotlin — рекомендованный Google язык для Android. Если встретите мобильного разработчика — почти наверняка он пишет на Kotlin.
Backend на JVM. Spring Boot официально поддерживает Kotlin: документация Spring даёт примеры на двух языках, стартеры генерируются с Kotlin-конфигурацией из коробки. Ktor и http4k — фреймворки, написанные на Kotlin изначально. Крупные компании — от JetBrains до банков — держат на Kotlin значительную часть серверного кода.
Инструменты сборки. Gradle-скрипты на Kotlin (build.gradle.kts) вытесняют Groovy-вариант: та же логика, но с автодополнением и проверкой типов в IDE.
Что даёт язык на практике
Null-safety на уровне типов. String и String? — разные типы: компилятор не даст вызвать метод у значения, которое может быть null. Класс ошибок, который в Java ловят в проде, в Kotlin не компилируется. Подробно — в статье про null-safety.
Меньше церемоний. Класс-носитель данных с equals, hashCode, toString и copy — одна строка:
data class Money(val amount: BigDecimal, val currency: String)
В Java это либо record (с Java 16), либо Lombok, либо сотня строк руками.
Функции как граждане первого класса. Extension-функции, лямбды без интерфейсов-обёрток, коллекции с map/filter без Stream-церемонии — код читается ближе к намерению.
Корутины. Лёгкие «потоки» для конкурентного кода — тысячи одновременных операций без тысяч системных потоков. Как это соотносится с virtual threads из Java 21 — отдельный разговор.
Совместимость: главный аргумент
Kotlin и Java живут в одном проекте без прослоек:
- Kotlin-класс вызывает Java-класс напрямую и наоборот — никаких адаптеров;
- один Gradle-модуль может содержать и
src/main/java, иsrc/main/kotlin; - вся экосистема Java доступна как есть: Spring, Hibernate, Jackson, JUnit, любая библиотека из Maven Central.
Поэтому переход не требует «большого переписывания»: новый сервис или новый пакет пишут на Kotlin, старое остаётся на Java. Так делает большинство команд.
Сколько стоит переход
Java-разработчику Kotlin даётся быстро: модель JVM, память, потоки, сборка, фреймворки — всё уже знакомо. Новое — синтаксис и несколько идиом:
- неделя — читать чужой Kotlin-код свободно;
- две-четыре недели — писать рабочий код без подглядывания;
- пара месяцев — идиоматичный Kotlin вместо «Java с другим синтаксисом».
Последний пункт — самая частая ловушка: код на Kotlin, написанный «как Java», компилируется и работает, но теряет главные преимущества языка. Этот раздел — как раз про идиомы, а не только про синтаксис.
Когда Kotlin не нужен
- Команда целиком на Java, кода на Kotlin нет, найм — под Java: изучение впрок даст мало.
- Java уже закрывает нужды: records, sealed classes и pattern matching сократили разрыв — см. современные возможности Java.
- Проект на другом стеке: Kotlin вне JVM (Kotlin/Native, Kotlin/JS) существует, но в backend-практике встречается редко.
Kotlin — не замена Java, а второй язык той же платформы. Ценность — в широте: разработчик, читающий оба языка, работает в любом JVM-проекте.
Коротко
- Kotlin живёт на той же JVM: те же библиотеки, тот же Spring, полная совместимость с Java-кодом в обе стороны.
- Главные практические плюсы: null-safety на уровне типов, data classes, extension-функции, корутины.
- Переход для Java-разработчика — недели: платформа знакома, новое — синтаксис и идиомы.
- Частая ошибка — писать на Kotlin «как на Java»: компилируется, но теряет смысл перехода.
- Java догоняет (records, sealed, virtual threads), поэтому выбор языка — вопрос команды и проекта, а не «что лучше».
Что почитать дальше
- Синтаксис Kotlin после Java — следующий шаг маршрута.
- Java: современные возможности — что уже умеет сама Java.
- Kotlin и Spring Boot — если хочется сразу к практике.