Введение: Compose — уже не «новая технология»

«Я работаю только с XML. Стоит ли мне учить Compose?» — с этого вопроса начинается почти каждый разбор с разработчиком, который застрял между junior и middle. Ответ короткий: да. Не потому, что «модно», а потому, что Compose сегодня — стандарт, а не эксперимент.

Новые проекты в Android Studio по умолчанию создаются на Compose, вакансии всё чаще требуют его как обязательный навык, а на собеседованиях вопросы по Compose перестали быть «бонусом для сильных». При этом учить его «по учебнику» неправильно: это не набор виджетов, который надо запомнить, а другая парадигма. Разберём, что это такое на самом деле и как входить в тему без хаоса.

Что такое Jetpack Compose

Jetpack Compose — современный декларативный инструментарий для создания интерфейса Android, официальная рекомендация Google. Ключевое слово — декларативный: вы описываете, каким должен быть экран при текущем состоянии данных, а не то, как его менять шаг за шагом.

В классическом подходе UI — это дерево объектов-виджетов, которые вы создаёте в XML, находите через findViewById и обновляете вызовами вроде setText(). В Compose виджетов-объектов нет вообще: UI описывается функциями Kotlin, помеченными @Composable. Никаких файлов разметки — только код, который читается как обычная программа.

Greeting.kt
@Composable
fun Greeting(name: String) {
    Text(text = "Hello, $name!")
}

За превращение этого кода в интерфейс отвечает компилятор Compose. С Kotlin 2.0 он поставляется вместе с самим Kotlin — подключается плагином org.jetbrains.kotlin.plugin.compose, версия которого совпадает с версией Kotlin. Функция не возвращает значение, не имеет побочных эффектов и может вызываться многократно: когда данные меняются, Compose перевызывает функции и перерисовывает только изменившиеся части экрана — этот процесс называется рекомпозицией. Подробно — в официальном руководстве «Мыслить в композиции».

Compose стал стабильным в 2021 году и с тех пор развивается быстро: Material 3, адаптивные компоненты, поддержка мультиплатформы. Для практики это значит, что «выучить раз и навсегда» не получится — но и пугаться не стоит. Базовые концепции — composable, состояние, модификаторы — не меняются годами, а новое поверх них добавляется постепенно. На собеседовании вам не нужно знать последний релиз; нужно уверенно держать фундамент.

Суть одной фразой

Вместо «найди виджет и обнови его» Compose говорит: «вот данные — покажи экран». Изменились данные — экран пересоздаётся сам. Все сложные темы Compose — состояние, списки, анимации — вырастают из этой одной идеи.

Чем Compose отличается от View-системы

Вопрос «Compose vs Views» на собеседованиях любят. Короткая таблица для ответа:

КритерийView-система (XML)Compose
Как создаётся UIXML-разметка + ActivityKotlin-функции с @Composable
Как обновляетсяfindViewById + методы виджетовРекомпозиция при изменении состояния
СостояниеВнутри виджетов + LiveData/ручноеremember, mutableStateOf, StateFlow
Хранилище данныхДержите ссылки на виджетыХранить виджеты негде — их нет
ПереиспользованиеCustom View + attrsКомпозиция функций, modifier параметр

Самое неочевидное для новичка — последняя строка. В View-мире вы привыкли хранить ссылку на TextView, чтобы потом обновить текст. В Compose ссылку хранить некуда: Text — это не объект, а вызов функции. Обновление происходит через состояние — изменили remember-переменную, и текст перерисовался.

Типичный промах: кандидат переносит View-привычки в Compose и начинает искать «ссылку на элемент», чтобы его обновить. Такой подход в Compose не работает и сразу выдаёт отсутствие практики. На собеседовании покажите, что состояние — это входные данные для UI, и вы уже на голову выше большинства.

Хорошая новость для тех, кто работает с legacy: Compose не требует переписывать всё сразу. Он отлично уживается с View-системой в одном приложении — через ComposeView в XML и AndroidView внутри Compose. Внедряйте экран за экраном.

Есть и практические плюсы, которые чувствуются с первого дня. Preview — вы видите UI прямо в IDE, без запуска приложения. Анимации и состояния описываются кодом, а не ресурсами — их проще поддерживать. Тестирование Compose тоже построено иначе: UI-тесты пишутся на том же языке, что и сам UI, без «стрельбы по координатам». Всё это вместе — одна из причин, почему работодатели ждут Compose от кандидатов на middle: это не «модный навык», а то, на чём реально строится продукт.

Как устроен проект с Compose

Проект с Compose почти не отличается от обычного — добавляется компилятор и набор зависимостей. Минимальная конфигурация модуля:

app/build.gradle.kts
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("org.jetbrains.kotlin.plugin.compose")
}

android {
    namespace = "com.example.myapp"

    buildFeatures {
        compose = true
    }
}

dependencies {
    val composeBom = platform("androidx.compose:compose-bom:2026.08.00")
    implementation(composeBom)
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.material3:material3")
    implementation("androidx.activity:activity-compose")
}

Три момента, которые стоит понимать, а не копировать:

  1. Плагин org.jetbrains.kotlin.plugin.compose — обязателен с Kotlin 2.0+. Версия плагина всегда совпадает с версией Kotlin. В старых проектах вместо него мог быть kotlinCompilerExtensionVersion в блоке composeOptions — это подход до Kotlin 2.0, новый проект так не настраивают.
  2. Compose BOM (androidx.compose:compose-bom) — спецификация компонентов, которая синхронизирует версии всех библиотек Compose между собой. Вы указываете версию один раз, а версии ui, material3 и остальных подтягиваются автоматически.
  3. buildFeatures.compose = true — включает поддержку Compose в сборке.

Официальные инструкции — Быстрый старт и настройка зависимостей и компилятора. Обратите внимание: Compose работает только с Kotlin — в шаблонах Android Studio язык Java недоступен, когда выбран Compose.

С чего начать: порядок изучения

Главная ошибка новичка — учить Compose как «список виджетов». Выучить имена всех компонентов Material можно за вечер, но собеседование и реальную работу это не спасёт. Правильный порядок — от модели мышления к деталям:

  • Ментальная модель. Что такое композиция и рекомпозиция, почему функции быстрые и без побочных эффектов.
  • Состояние. remember, mutableStateOf, rememberSaveable, поднятие состояния (state hoisting), StateFlow в ViewModel через collectAsStateWithLifecycle.
  • Modifier. Цепочки, порядок, параметр modifier в своих компонентах.
  • Компоновки. Column, Row, Box, weight, списки LazyColumn/LazyRow.
  • Тема и стиль. MaterialTheme, lightColorScheme/darkColorScheme, isSystemInDarkTheme.
  • Связка с жизненным циклом. LaunchedEffect, Dispatchers, сборка Flow с учётом жизненного цикла.

На собеседованиях по Compose чаще всего спрашивают именно про первые три пункта: рекомпозицию, состояние и порядок модификаторов. Списки и темы — это уже «детали», которые проверяют реже, но на практике они нужны постоянно.

Недооценённая тема — как Compose связан с архитектурой. Многие готовятся к Compose отдельно, а спрашивают его в связке: «как передать состояние из ViewModel в Compose», «куда девается LiveData». Ответ — StateFlow + collectAsStateWithLifecycle. Если у вас провал в MVVM, сначала закройте его — в Compose архитектура становится ещё заметнее.

Где брать материалы: официальная документация Android Developers — лучший источник, и статьи, и кодлабы ведут от ментальной модели к практике. Мой порядок работы с новичками такой: сначала концепция (ментальная модель + состояние), потом маленький проект руками, затем уже списки и темы. Если вы дошли до «как сделать красивую анимацию», а состояние объяснить не можете — вы перескочили этап.

И помните: для собеседования не нужны «все» фичи. Тёмные темы, адаптивные макеты, жесты — это плюс, но не фундамент. Фундамент — это рекомпозиция, состояние и связка с архитектурой. Всё остальное спокойно доучивается на работе.

Пара слов обо мне: я Рустем Бикбулатов, senior Android-разработчик, провожу технические собеседования и менторю разработчиков, в том числе как ментор Яндекс Практикума. Более 100 учеников и разборов. В работе с учениками Compose обычно идёт третьим блоком — после Kotlin и корутин, потому что без состояния и архитектуры Compose превращается в «красивые карточки без логики». Есть диагностика: разбор вашего уровня и план закрытия пробелов.

Хотите понять, в каком порядке учить Compose и Kotlin?

Бесплатная диагностика: разберу ваш текущий уровень, найду пробелы и составлю план роста до middle.

Итоги

Jetpack Compose — стандарт Android-разработки, и входить в него нужно с понимания парадигмы, а не со списка компонентов.

  • Суть: декларативный UI — экран описывается функциями от состояния, обновление происходит через рекомпозицию.
  • Отличие от Views: нет виджетов-объектов и findViewById, состояние — единственный источник правды.
  • Старт: ментальная модель → состояние → Modifier → компоновки → тема, а настройка проекта сводится к плагину компилятора и BOM.

Главное

Compose нельзя «выучить по списку» — его нужно понять. Начните с рекомпозиции и состояния: это 80% вопросов на собеседованиях и 80% реальных задач.

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