Как стать Android-разработчиком: навыки, дорожная карта и первая работа

Как стать Android-разработчиком: навыки, дорожная карта и первая работа Полезное

Чтобы стать Android-разработчиком, нужно освоить Kotlin, научиться собирать экраны и логику приложения в Android Studio, довести 1-2 собственных приложения до состояния, которое не стыдно показать (код в репозитории, тесты, сборка), и с этим портфолио идти на позиции junior или стажера. Диплом для этого не обязателен, но базовые знания программирования, Git и английский на уровне чтения документации нужны.

Ниже — что именно учить и в каком порядке, какой проект положить в портфолио, как выглядит путь до первой работы и что делать, если на каком-то шаге все застопорилось. Обзор самой профессии мобильного разработчика (чем занимается, iOS или Android) — в отдельной статье о профессии мобильного разработчика, здесь речь только о пути в Android.

Какой язык учить: Kotlin, Java или кроссплатформа

Критерий выбора простой: на каком стеке вы хотите получить первую работу. Для нативной Android-разработки ответ — Kotlin: Google официально поддерживает его с 2017 года, а с 2019 года объявил подход Kotlin-first. Новые библиотеки Jetpack и документация пишутся в первую очередь под Kotlin, а современный UI-инструментарий Jetpack Compose работает только с Kotlin.

Java не исчезла: на ней написано много старых проектов, и читать Java-код Android-разработчику полезно. Но начинать с Java ради Android в 2026 году — это лишний круг.

Стек Язык Когда выбирать Что учесть
Нативный Android Kotlin Хотите работать именно Android-разработчиком Основной путь, по нему дальше вся дорожная карта
Нативный Android (legacy) Java Команда поддерживает старый код Учить как второй язык для чтения, не как первый
Kotlin Multiplatform Kotlin Нужна общая логика для Android и iOS Надстройка над нативным Android, а не замена ему
Flutter Dart Цель — одно приложение под обе платформы Отдельная специализация со своим рынком вакансий
React Native JavaScript/TypeScript Уже знаете веб-фронтенд Нативные модули все равно требуют знания платформы

Python, C# и C++ в этом списке нет намеренно. C++ используется в Android через NDK для игр, обработки звука и видео, но это узкая ниша, а не вход в профессию. Python для мобильной разработки остается экзотикой.

Что должен уметь junior Android-разработчик

Требования в вакансиях отличаются от компании к компании, поэтому ниже — типичное ядро, которое чаще всего проверяют на собеседовании. Это ориентир, а не закрытый список.

Область Что нужно уметь Как показать в портфолио
Kotlin null safety, классы и data class, коллекции, лямбды, sealed-иерархии Чистый код без !! на каждом шаге
UI Jetpack Compose: состояние, списки, навигация; читать XML-разметку 3-5 экранов с навигацией между ними
Архитектура ViewModel, однонаправленный поток данных, разделение на слои Логика не лежит в UI-функциях
Асинхронность Корутины, Flow, отмена работы при уходе с экрана Загрузка данных без зависания интерфейса
Данные Сеть (Retrofit/Ktor), локальная БД (Room), обработка ошибок Экран «нет сети» и кеш
Жизненный цикл Activity, поворот экрана, разрешения (permissions) Состояние не теряется при повороте
Инструменты Android Studio, Gradle, Git, отладчик, Logcat История коммитов, а не один коммит «final»
Тесты Unit-тесты на логику (JUnit) Хотя бы тесты ViewModel

Здесь полезно развести три близких понятия. Android SDK — набор библиотек и инструментов платформы. Jetpack — семейство библиотек Google поверх SDK (ViewModel, Room, Navigation, Compose). Android Studio — среда разработки, которая все это собирает через Gradle. Путаница между ними часто всплывает на собеседованиях.

Минимальный пример: как выглядит логика экрана на Kotlin

Современные Android-приложения строят экран вокруг состояния: экран в каждый момент показывает одно из заранее описанных состояний (загрузка, данные, ошибка). Ниже — та же идея на чистом Kotlin, без Android: ее можно запустить в любой среде с компилятором Kotlin.

data class Task(val id: Int, val title: String, val done: Boolean = false)

sealed class UiState {
    object Loading : UiState()
    data class Content(val tasks: List<Task>) : UiState()
    data class Error(val message: String) : UiState()
}

fun render(state: UiState): String = when (state) {
    is UiState.Loading -> "Загрузка..."
    is UiState.Content ->
        if (state.tasks.isEmpty()) "Список пуст"
        else state.tasks.joinToString("\n") { t ->
            (if (t.done) "[x] " else "[ ] ") + t.title
        }
    is UiState.Error -> "Ошибка: ${state.message}"
}

fun toggle(tasks: List<Task>, id: Int): List<Task> =
    tasks.map { if (it.id == id) it.copy(done = !it.done) else it }

fun main() {
    val tasks = listOf(
        Task(1, "Выучить основы Kotlin"),
        Task(2, "Собрать экран на Compose")
    )
    println(render(UiState.Loading))
    println(render(UiState.Content(toggle(tasks, 1))))
    println(render(UiState.Content(emptyList())))
    println(render(UiState.Error("нет сети")))
    println("Исходный список не изменился: ${tasks[0].done}")
}

Вывод программы (проверено в kotlinc 1.4.10 на JVM; в коде нет конструкций новее этой версии языка):

Загрузка...
[x] Выучить основы Kotlin
[ ] Собрать экран на Compose
Список пуст
Ошибка: нет сети
Исходный список не изменился: false

Что здесь важно для Android:

  • sealed class UiState перечисляет все возможные состояния экрана. В реальном приложении ViewModel хранит такое состояние, а Compose-функция перерисовывает экран при его смене.
  • toggle не меняет исходный список, а возвращает новый через copy. Последняя строка вывода это подтверждает: у исходной задачи done по-прежнему false. Compose замечает изменения именно по новому объекту состояния, поэтому неизменяемые данные — не вкусовщина, а условие корректной перерисовки (упрощенно: при изменяемом списке внутри того же объекта экран может не обновиться).
  • when по sealed-классу проверяется компилятором на полноту.

Последний пункт стоит увидеть на ошибке. Скопируем файл в Bad2.kt и заменим функцию render версией без ветки is UiState.Error:

fun render(state: UiState): String = when (state) {
    is UiState.Loading -> "Загрузка..."
    is UiState.Content -> "..."
}

Результат — код не компилируется (вывод kotlinc 1.4; в Kotlin 2.x текст сообщения сформулирован иначе, но ошибка та же):

Bad2.kt:9:38: error: 'when' expression must be exhaustive, add necessary 'is Error' branch or 'else' branch instead
fun render(state: UiState): String = when (state) {
                                     ^

Исправление — вернуть ветку для Error (или добавить else, но тогда компилятор перестанет подсказывать о новых состояниях). Именно поэтому, когда вы добавите в приложение, например, состояние «Пустой поиск», компилятор сам покажет все экраны, где его забыли обработать.

Дорожная карта: от нуля до приложения в портфолио

Сроки ниже — ориентир для занятий примерно 10-15 часов в неделю при нулевом опыте программирования. С опытом в другом языке первые этапы идут быстрее. Каждый этап заканчивается конкретным артефактом, а не ощущением «вроде понял».

  1. Основы программирования на Kotlin (1-2 месяца). Переменные, функции, классы, коллекции, null safety, исключения. Артефакт: консольная программа на 200-300 строк, например учет расходов с сохранением в файл.
  2. Git и рабочее окружение (параллельно с первым этапом). Android Studio, эмулятор, Git, репозиторий. Артефакт: репозиторий с осмысленной историей коммитов.
  3. Первые экраны на Jetpack Compose (1 месяц). Верстка, состояние, списки, навигация между экранами. Артефакт: приложение из 2-3 экранов с локальными данными.
  4. Архитектура и асинхронность (1-2 месяца). ViewModel, корутины, Flow, однонаправленный поток данных, внедрение зависимостей (Hilt или Koin). Артефакт: то же приложение, переписанное так, что логика вынесена из UI.
  5. Сеть и хранение (1 месяц). Запрос к публичному API, разбор JSON, Room для кеша, обработка ошибок и отсутствия сети. Артефакт: приложение, которое работает и без интернета на закешированных данных.
  6. Тесты и сборка (2-4 недели). Unit-тесты ViewModel, подписанная release-сборка, README с описанием и скриншотами. Keystore и пароли к нему в публичный репозиторий не попадают: файл ключа — в .gitignore, пароли — вне кода (например, в local.properties или переменных окружения), резервная копия ключа — отдельно. Артефакт: проект, который другой человек может склонировать и собрать в debug-варианте без ваших ключей.
  7. Публикация (по желанию). Выложить приложение в магазин (Google Play, RuStore или другой). Это плюс в резюме, но не обязательное условие: у Google Play для личных аккаунтов разработчика, созданных после 13.11.2023, перед выходом в продакшен обязателен закрытый тест (на сентябрь 2026 — не менее 12 тестировщиков, подключенных 14 дней подряд), так что закладывайте на него время и заранее найдите тестировщиков.

Итого реалистичный срок до готового портфолио с нуля — порядка 6-12 месяцев. Быстрее бывает, но обещания «Android за месяц» обычно означают, что пропущены этапы 4-6, а именно их проверяют на собеседовании.

Какое приложение положить в портфолио

Лучше одно доведенное приложение, чем пять недоделанных по туториалам. Хороший портфолио-проект решает понятную задачу (трекер привычек, список покупок с синхронизацией, клиент открытого API погоды или фильмов) и показывает все слои из таблицы выше: несколько экранов, сеть, локальная БД, обработку ошибок, тесты. В README стоит коротко объяснить выбранные решения.

Как искать первую работу

Путь в профессию редко проходит через одну «правильную» вакансию junior. Чаще срабатывает один из вариантов:

  • Стажировки и программы для начинающих в крупных компаниях: отбор конкурентный, но требования к опыту минимальные.
  • Вакансии junior в продуктовых компаниях и студиях разработки: здесь смотрят на портфолио и тестовое задание.
  • Внутренний переход: если вы уже работаете в IT (тестировщик, веб-разработчик), перейти в мобильную команду своей компании часто проще, чем с улицы.

На собеседовании junior обычно спрашивают основы Kotlin (null safety, data class, коллекции), жизненный цикл Activity и что происходит при повороте экрана, зачем нужна ViewModel, как работают корутины и как отменяется работа при уходе с экрана. Тестовое задание почти всегда — маленькое приложение со списком из сети и экраном деталей, то есть ровно то, что вы собрали на этапах 3-5.

Уровень зарплат и число вакансий сильно зависят от города, формата работы и текущего рынка, поэтому ориентируйтесь на свежие вакансии в своем регионе, а не на цифры из статей.

Если не получилось: частые симптомы и что делать

Симптом Вероятная причина Что делать
Проект не собирается, Gradle sync падает Несовместимые версии плагина Gradle, Kotlin и библиотек Создать новый проект из шаблона Android Studio и сравнить версии; обновлять зависимости по одной
Эмулятор не запускается или очень медленный Выключена аппаратная виртуализация или мало памяти Включить виртуализацию в BIOS/UEFI, выбрать образ под архитектуру процессора, или отлаживать на своем телефоне по USB
Понимаю туториалы, но не могу написать сам Пассивное обучение без своей задачи Взять свой проект и делать его, возвращаясь к туториалам по конкретному вопросу
Приложение падает при повороте экрана Состояние хранится в Activity или Composable без сохранения Перенести состояние во ViewModel
Отклики на резюме без ответа Портфолио из туториальных клонов или нет ссылки на код Довести один проект до уровня из раздела о портфолио, добавить README и тесты

Выводы

  • Для нативной Android-разработки первым языком стоит брать Kotlin; Java полезна для чтения старого кода, кроссплатформенные стеки — отдельная специализация.
  • Ядро навыков junior: Kotlin, Jetpack Compose, ViewModel и корутины, сеть и Room, Git, Gradle и базовые unit-тесты.
  • Дорожная карта строится вокруг артефактов: консольная программа, приложение из нескольких экранов, затем тот же проект с архитектурой, сетью, кешем и тестами.
  • Реалистичный срок до портфолио с нуля — порядка 6-12 месяцев при регулярных занятиях.
  • Первая работа чаще находится через стажировки, тестовые задания с сильным портфолио или внутренний переход из смежной IT-роли.

Где применяется / связь с практикой

Освойте тему на практике

Самая трудная часть пути — этапы 4-6: архитектура, асинхронность и доведение приложения до уровня, который проходит код-ревью. Если хочется пройти их с разбором кода от практикующих разработчиков, а не только по документации, посмотрите курс «Android-разработчик. Базовый уровень». Чтобы сначала попробовать формат и темы, есть бесплатные открытые уроки Otus.

FAQ

Нужно ли высшее образование, чтобы стать Android-разработчиком?
Формально нет: большинство работодателей смотрят на портфолио, тестовое задание и собеседование. Профильное образование помогает с алгоритмами и основами компьютерных наук, но их можно освоить и самостоятельно.

Можно ли учиться Android-разработке на слабом компьютере?
Android Studio и эмулятор требовательны к памяти, комфортно работать от 16 ГБ ОЗУ и SSD. На машине слабее помогает отладка на реальном телефоне по USB вместо эмулятора.

Стоит ли сразу учить и Android, и iOS?
Для первой работы лучше глубоко освоить одну платформу. Общую логику для двух платформ позже можно добавить через Kotlin Multiplatform, а Swift и iOS — отдельный путь со своим набором навыков.

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)