Команда Яндекс Практикума провела исследование и готова рассказать, как обстоят дела в найме начинающих 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% вакансий допускают удалённую работу, поэтому джуниорам стоит быть готовыми к работе в офисе или в гибридном режиме — и скорее всего, в Москве, где сосредоточено больше половины вакансий.
Итоги: самое важное
Резюмируем ключевые выводы исследования.
Компании реже хотят нанимать джуниоров, им нужны мидлы или синьоры. Сотрудников с небольшим опытом чаще берут в студии и небольшие компании, а в крупные можно попасть через внутренние школы и стажировки.
Нехватку коммерческого опыта могут компенсировать пет-проекты — иногда достаточно даже одной работы, которая максимально полно раскроет знания и опыт кандидата. Важно, чтобы этот проект был особенным и нетипичным.
Задачи на первом месте работы могут сильно отличаться в зависимости от компании и проекта. В больших компаниях джуниор может долгое время делать одно и то же, а в стартапе или студии — скорее всего, будет заниматься разнообразными задачами.
Софтскилы для джуниора могут быть важнее хардов. Работодатели ценят в кандидатах самостоятельность, заинтересованность, умение рассуждать и аккуратность в работе. А самым негативным фактором называют агрессивность и раздражительность.
Комментарии (12)
vadpost
03.07.2024 07:20+1"умение работать с базами данных (SQLight, Room)" )) - где можно почитать про "SQLight", ответь мне, пожалуйста, ChatGPT, ведь ты же автор этой статьи ?
alelam
03.07.2024 07:20+5HTML-вёрстка и умение высчитывать необходимое количество "ячеек памяти" это сильно конечно. Ревьюить перед публикацией статьи в Яндекс.Практикуме наверное не слишком принято:)
alekseyHunter
03.07.2024 07:20А как же верстка Compose UI)
Могут встретиться задачи на вёрстку Jetpack Compose в UI-части — например, написать ViewModel с простой логикой.
Это прямо перл) Не Composable-функцию разработать, а ViewModel с логикой.
Spinoza0
03.07.2024 07:20+3Это антиреклама курсов? :)
alekseyHunter
03.07.2024 07:20Похоже) Если такой материал в статье на профильном ресурсе, что в курсах тогда происходит...
sapeg
03.07.2024 07:20Важно, чтобы он пробовал разобраться с непонятными моментами сам и только потом спрашивал совета у опытных коллег.
По опыту могу сказать, что на это
может?будет уходить много времени. Как результат - может ни быть ни одной новой строчки кода. И как работодатель к этому относится?
Skyguardians
Spring выглядит явно лишним
horribile
Vue тоже :)
alekseyHunter
Vue => View ;)
Ребус для Android-разработчиков xD
kubik92
Ну перепутал View и Vue, вкатуны схавают )