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

Как проводили исследование

В подготовке исследования мы применяли два основных подхода:

  • Опрашивали работодателей. Провели серию интервью с техлидами, лидами команд и Android-разработчиками из российских бизнесов разного типа: «техгигантов», средних продуктовых компаний и аутсорс-агентств. Также в числе респондентов есть сотрудники компаний из Ташкента и Еревана.

  • Изучали вакансии. Мы проанализировали вакансии, опубликованные на hh.ru в мае 2024 года на позицию Android-разработчика с грейдом «джуниор» и «джуниор плюс».

Наши выпускники часто находят работу в крупных компаниях — поэтому мы также провели интервью с выпускником курса «Android-разработчик» в Практикуме, который проходит стажировку в одном из ведущих российских банков.

С помощью этих подходов мы выясняли, что требуют от Android-разработчиков на джуниорских позициях, какие компании и как нанимают и собеседуют таких специалистов.

В полное исследование входило изучение рынка и ожиданий работодателей в мобильной разработке — как для iOS-, так и для Android-разработчиков. Результаты, актуальные для iOS-разработчиков, вы можете найти в материале «iOS-разработчики в 2024 году: какие нужны скилы и как проходит процесс найма».

Какие скилы нужны начинающему Android-разработчику

Чаще всего в вакансиях для джуниоров упоминаются следующие хардскилы: Kotlin, Java, Android SDK, Git, ООП, MVVM, Spring Framework. Интервью с работодателями дали более подробные результаты — вот какие скилы также часто встречались в ответах:

  • понимание основ клиент-серверного взаимодействия,

  • умение работать с базами данных (SQLite, Room),

  • базовые знания по алгоритмам,

  • понимание кэширования,

  • умение работать с багами,

  • понимание ООП и Solid,

  • знание memory management — понимание, сколько ячеек памяти нужно для работы, как располагаются данные в них,

  • навык вёрстки в HTML — технология устаревает, но она ещё используется во многих приложениях,

  • навык составления Compound View,

  • понимание Single-Activity.

Также мы сформулировали несколько дополнительных вопросов к работодателям — ниже изложены несколько тезисов о востребованных навыках и степени необходимого погружения в них.

Важно ориентироваться как в XML, так и в Jetpack Compose

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

Погружение в архитектуру — чем глубже, тем лучше

Джуниору важно ориентироваться в том, как строится архитектура, как взаимосвязаны слои, знать шаблоны MVVM и MVI, уметь работать с ViewModel, понимать, как работает внедрение зависимостей Dependency injection (как минимум с Koin, но лучше с Dagger).

Функциональное программирование — must have хотя бы на базовом уровне

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

Coroutines нужен работодателям чаще, чем RxJava, но джуниорам достаточно и базового знания многопоточности.

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

Какой именно фреймворк используется для многотопочности, зависит от компании и конкретного проекта. Если на собеседовании джуниора спрашивают про rxJava, можно попросить перейти на вопросы о Coroutines. Иногда в компаниях используют и то и другое, а у сотрудников есть возможность выбора направления. По результатам нашего опроса, Coroutines чаще используют в новых проектах, а RxJava применяют для поддержания предыдущих.

Знание Gradle — плюс при трудоустройстве

Хорошо, если джуниор умеет подключать модули, создавать билд-варианты с релизными сборками, добавлять подписи, находить ошибки в логе Gradle и исправлять их, объявлять плагины и зависимости. Для начинающих специалистов допустимо работать с инструментом по шаблону: копировать и менять параметры.

Знание многомодульности пригодится в крупных проектах

Многомодульность применяется в больших проектах. Мультиплатформенные сервисы — по определению многомодульные. В других случаях многомодульность может, наоборот, замедлять время на сборку, усложнять поддержку.

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

CI/CD джуниорам не нужен, но знание методологии будет плюсом

Чтобы выделиться, джуниор может сделать проект в портфолио и настроить для него CI/CD в Git. Но это задача со звёздочкой — обычно такого от начинающих разработчиков не требуют, а для кандидата достаточно знать CI/CD на базовом уровне, разбираться, что происходит в соответствующем участке кода, и найти в нём ошибки при необходимости.

Знания по аналитике могут пригодиться в студии, но не в большой компании

В большинстве компаний Android-разработчику не пригодятся знания аналитики, но пару вопросов по теме на собеседовании задать могут — например, спросить, с какими системами аналитики кандидату уже приходилось работать.

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

Джуниору достаточно поверхностного знания Service

На собеседовании могут спросить, что это за технология и какие у неё ограничения, какие типы сервисов существуют. Желательно понимать, что такое и для чего нужен BoradcastReceiver. Хорошо, если джуниор умеет настраивать WorkManager и понимает, для каких целей он применяется.

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

Софтскилы крайне важны для джуниора

Лидирует в списке софтскилов умение быстро погружаться в проект и понимать, что в нём происходит. 

За хорошим джуниором не надо присматривать каждые полчаса. Он может сделать небольшой кусочек работы по ТЗ. Важно, чтобы он пробовал разобраться с непонятными моментами сам и только потом спрашивал совета у опытных коллег.

Также в списке важных софтскилов:

  • адекватность, отсутствие пассивной агрессии,

  • искренняя заинтересованность в работе и желание обучаться,

  • умение общаться — при этом душой компании быть необязательно, достаточно просто уживаться в коллективе.

Какой опыт необходим джуниору для трудоустройства

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

Если коммерческого опыта у кандидата нет, то за него могут засчитать выполненные пет-проекты, особенно нетипичные, которые редко встречаются у других кандидатов.

Вот на что работодатели обращают внимание при рассмотрении проектов кандидатов на GitHub.

  • На чистоту и корректность кода. В коде не должно быть ошибок и проблем с синтаксисом. В репозитории не должно быть лишних файлов, которые генерируются средой разработки. Должен быть правильно настроен .gitignore.

  • На архитектуру, используемые компоненты и библиотеки, вёрстку и бизнес-логику. Нанимающие разработчики обращают внимание на то, как джуниор использует файлы и следит ли за иерархией вложенности.

  • На README. В файле необходимо описать проект, добавить список использованных технологий, приложить скриншоты. По такому описанию должно быть понятно, что это за работа — продукт для заказчика, пет-проект или тренировочная задача.

  • На дополнительные технологии и функции. Плюсом будут настроенные тесты, приложение с многомодульной поддержкой, подкрученный CI/CD и использование Jetpack Compose.

Один из нанимающих синьор-разработчиков в крупном маркетплейсе поделился схемой «идеальной» работы для GitHub — однажды они взяли в команду кандидата без опыта работы, но с таким проектом в портфолио. По его словам, достаточно написать приложение, отражающее знание работы с основными компонентами Android, и разобрать в коде следующие темы:

  • MVVM-архитектура,

  • вёрстка,

  • Dependency injection,

  • тесты,

  • CI/CD,

  • работа с сетью,

  • работа с базами данных Room.

Какие задачи выполняют джуниоры в первые полгода работы

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

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

Как правило, джуниорам дают много задач по вёрстке и поддержке уже существующих приложений: изменить шрифт, добавить новую функцию, что-то поправить или убрать, поменять API, добавить или изменить аналитику, поменять положение блока, добавить кнопку по аналогии, изменить навигацию. Также джуниоры пишут юнит- и интеграционные тесты. Могут встретиться задачи на вёрстку Jetpack Compose в UI-части — например, написать ViewModel с простой логикой.

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

Как нанимают джуниоров: тестовое задание и собеседование

Всё зависит от стека и компании. Мы собрали самые часто встречающиеся сценарии, вопросы и задания.

До собеседования кандидаты часто выполняют тестовые задания — если джуниор его выполнит, то, скорее всего, на интервью ему придётся обосновать своё решение. То же касается проектов на GitHub.

Пример классического тестового задания, которое дают во многих компаниях: есть API и база данных (допустим, библиотека кино или сериалов). Задача — реализовать прототип приложения: первый экран с полем поиска по этой базе и второй, с подробной информацией о выбранном фильме. На первом экране вместе с поиском могут находиться любые элементы по усмотрению кандидата.

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

На техническом интервью кандидату могут задавать вопросы по теории. Вот несколько тем, которые стоит повторить перед собеседованием:

  • ООП, принципы Solid,

  • работа с памятью при использовании Kotlin и Java,

  • специфика Android — жизненный цикл Activity, Vue,

  • Jetpack Compose — compose-recompose, State,

  • архитектура (некоторые из респондентов спрашивали, чем обычная архитектура отличается от чистой — и бывает ли чистая архитектура без юнит-тестов),

  • многопоточность — Coroutines, Android Architecture Components, LiveData.

Чтобы проверить, как кандидат рассуждает и ставит вопросы, на собеседовании могут спросить: «Как бы вы решили задачу X, если бы не хватало требований?» Также джуниору могут дать задачу на алгоритмы или кейс прямо на собеседовании — и общая логика решения тут может быть важнее правильного ответа.

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

Ситуация на рынке: сложности и перспективы

Как и в ситуации с iOS-разработчиками, большие компании проявляют интерес к мидлам и синьорам, а джуниоров предпочитают брать во внутренние школы и стажировки. Полноценные предложения о работе начинающие Android-разработчики чаще находят в студиях и стартапах.

На джунов нет времени и ресурсов — мы не можем позволить себе тратить время синьора на наставничество.

Тем не менее вакансии на рынке есть — в мае 2024 года на hh.ru было опубликовано 508 предложений для Android-разработчиков. Больше половины из них — для мидл-специалистов с опытом от трёх до шести лет. Джуниорам с опытом от года подходила 131 вакансия, а начинающим Android-разработчикам без опыта — 16.

Также на трудоустройство влияет город проживания кандидата.

Примерно 36% вакансий допускают удалённую работу, поэтому джуниорам стоит быть готовыми к работе в офисе или в гибридном режиме — и скорее всего, в Москве, где сосредоточено больше половины вакансий.

Итоги: самое важное

Резюмируем ключевые выводы исследования.

  • Компании реже хотят нанимать джуниоров, им нужны мидлы или синьоры. Сотрудников с небольшим опытом чаще берут в студии и небольшие компании, а в крупные можно попасть через внутренние школы и стажировки.

  • Нехватку коммерческого опыта могут компенсировать пет-проекты — иногда достаточно даже одной работы, которая максимально полно раскроет знания и опыт кандидата. Важно, чтобы этот проект был особенным и нетипичным.

  • Задачи на первом месте работы могут сильно отличаться в зависимости от компании и проекта. В больших компаниях джуниор может долгое время делать одно и то же, а в стартапе или студии — скорее всего, будет заниматься разнообразными задачами.

  • Софтскилы для джуниора могут быть важнее хардов. Работодатели ценят в кандидатах самостоятельность, заинтересованность, умение рассуждать и аккуратность в работе. А самым негативным фактором называют агрессивность и раздражительность.