В 2022 г. осенью я решил, что я хочу поменять профессию и стать Android-разработчиком. К тому моменту я имел более 6 лет опыта работы в области охраны труда, в основном, на производственных предприятиях.
Мой друг в тоже время начал учиться на курсах Яндекс Практикума, также на Android-разработчика и объяснил как устроено обучение. Я начал обучение в Практикума в конце октября 2022 г. и закончил его в декабре 2023 г.
Это было непростое время. Я приезжал на работу каждый день к 7:00 и тратил 2 часа на обучение, после начинался мой рабочий день. После работы я приезжал домой, ужинал и остаток времени до сна я посвящал обучению.
В декабре 2023 г. я решил, что я готов начинать искать полноценную работу Android-разработчиком. Я откликался только на те вакансии, в которых было написано, что не требуется опыт. Если кратко: 19 откликов (сюда не входят отклики на стажировки крупных компаний), 5 тестовых заданий, 3 оффера. Из 3 офферов: от одного я отказался из-за условий (черная небольшая з/п, я – единственный андроид-разработчик и т.п.).
Первый адекватный оффер я принял и перед выходом на него я получил второй оффер. В итоге на месте по первому офферу я проработал 2,5 дня (с 01 апреля по 03 апреля 2024 г.) и по собственному желанию ушёл в компанию приславшую второй оффер.
Возможно позже я напишу про обучение на курсах Практикума и о дополнительном самостоятельном обучении, но сейчас я бы хотел написать про тестовые задания, которые я выполнял.
-
Два списка с табами на Compose. 2 запроса данных с сети
Stack: Kotlin, MVVM, Realm, Ktor, Coroutines, LiveData, Jetpack Compose + Material Design (Jetpack Сompose обязательно, хорошо если xml знаете)
Описание:
Сохранение данных в БД;
Изменение (имя) производим в БД;
При открытии раздела если в базе данных нет, то делаем запрос на сервер, если данные в базе есть, то отображаем их + функция принудительного обновления через PullRefresh.
Это задание смотивировало попробовать Ktor и Realm. В целом задание, я считаю, хорошее для джуновской вакансии. Тут и не совсем стандартные инструменты (Ktor и Realm), и хороший объём – не много и не мало, достаточно, чтобы оценить код начинающего разработчика. Я также дополнительно реализовал добавление в избранное (звездочка на макетах).
На это выполненное задание я не получил никакого ответа.
-
Список карточек компаний на Compose с показом всплывающего сообщения при клике.
Stack: Compose, Coil для загрузки изображений, Jetpack Compose Navigation, AndroidX Paging3 для пагинации и базу данных AndroidX Room для кэширования карт компаний, Retrofit. Приложение должно соответствовать ахитектурному паттерну MVVM и реализовывать внедрение завимостей (DI). В качестве фреймворка для этого необходимо использовать Koin.
Достаточно подробное описание, также были в презентации powerpoint указаны все размеры отступов и текста, картинки .png.
Я получил приглашение на собеседование и на собеседовании оффер, но отказался.
-
Самое сложное тестовое задание, которое я выполнял.
Выполненное задание и подробное описание задачи есть у меня на гитхаб.
Был дан репозиторий с приложением и нужно было выполнить задание – добавить второй экран со списком, чтобы пользователь мог выбрать для каждого элемента списка первого экрана элемент списка второго.
В приложении использовался Decompose, и оно отличалось по структуре от тех приложений, которые я видел до этого. В задании также была дана ссылка на открытый проект главного андроид приложения (что очень помогло). Идея задачи, как я её понял, была хранить данные только во вью модели, чтобы пережить изменение конфигурации. В общем я решил, сделать больше описанного в задании (как я всегда старался делать выполняя каждое из заданий) и сделал сохранение в базе данных, причём базу данных я сделал по аналогии с кодом из основного приложения: я сделал 2 отдельных модуля базы данных api и impl.
Выполнение задания, вместе с изучением decompose, заняло около 10 дней.
В результате со мной связался hr задал пару вопросов и предложил встречу. Пообещал вернуться с предполагаемыми датами.
Но дальше что-то пошло не по плану и мне пришло вот такое сообщение:
Пришел ответ по вашему тестовому, и к сожалению на данный момент мы не готовы предложить пройти техническое интервью, так как тестовое задание оказалось слабее, чем мы ожидали.
Мне очень жаль и я желаю найти самую лучшую команду! Фидбек от технической команды, как мы и обещали прикладываю:
Повторяется два раза версия Kotlin в version catalog
Цвет статус бара и боттом бара меняется программно во время рекомпозиции, что может нестабильно работать в случае перехода между страницами в разных конфигурациях, тут ожидалось использовать edge to edge и рисовать статусбары на экране
Зависимости указаны в settings.gradle.kts отличным способом от того что используется в проекте
Добавлен ненужный "androidDynamicFeature"
Пустые тесты, в которых не было необходимости" (я не удалил автоматически создаваемы в новых модулях тестовые директории)
Это меня на тот момент сильно расстроило. Я не понял фидбек от технической команды, все перечисленные моменты мне казались не настолько серьёзными недочётами для разработчика без опыта (а я напомню откликался только на вакансии без требования к опыту и честно отвечал, что я такого опыта не имею). Тогда я подумал, что возможно у меня не получится ничего со сменой рода деятельности, т.к. на дворе был март, а это значит шёл третий месяц поиска работы. Я устал физически: я работал, мониторил вакансии и откликался на них, готовился к собеседованиям и выполнял тестовые задания.
-
Показать список ресторанов на карте
Описание: Необходимо написать приложение, которое отображает на карте список ресторанов в округе № 87 Санкт-Петербурга, а также реализовать возможность посмотреть более подробную информацию о каждом месте. сервис для получения данных.
Можно использовать любой удобный SDK карт. Все решения по UI/UX на усмотрение
кандидата, в том числе отображение деталей ресторана (можно сделать как
отдельный экран, так и, например, Bottom sheet). -
Требования к коду:
соблюдение Clean Architecture
применение паттерна MVVM,
-
использование StateFlow в presentation слое.
Рекомендуемый стек:
UI: Views
Работа с сетью на выбор: Retrofit, OkHttp, (бонус за выбор Ktor + Serialiazation)
DI: Hilt
-
Kotlin Coroutines
Я получил приглашение на собеседование и в дальнейшем оффер, который принял (тот самый на который я ушёл из компании, в которой принял первый оффер).
Тестовое на стажировку в ВК
У меня, к сожалению, не сохранилось оригинального описания поэтому я напишу, как помню.
Описание: сделать простое приложение по хранению паролей, пароли должны храниться в зашифрованном виде.
Stack: нет требований.
На мой взгляд – это моё самое качественно выполненное тестовое задание (и последнее). Я сделал многомодульный проект с отдельным модулем для шифрования с Android Key Store.
Мне настолько понравился результат, что в конечном счёте (на январских праздниках после длительного перерыва) я доделал приложение и в феврале 2025 загрузил первую версию в RuStore – называется Менеджер паролей PassMan (название PassMan было уже занято).
Какие выводы я сделал для себя:
Делать больше, чем указано в задании – работает не всегда, и иногда воспринимается как отхождение от требований.
Качественно выполненное задание не гарантирует приглашения на собеседование, но сильно увеличивает шансы.
Выполнять максимальное количество тестовых заданий для поиска первой работы – сложный, но рабочий способ.
Комментарии (11)
Rive
16.02.2025 10:38Выполнение задания, вместе с изучением decompose, заняло около 10 дней.
Примерно в 10-20 раз дольше, чем это благоразумно, и годится только для пополнения портфолио, чтобы потом ходить и показывать его, а дальнейшие попытки халявщиков нагрузить бесплатной работой на компанию - избегать.
bm9 Автор
16.02.2025 10:38Сложные тестовые задания, как правило, выполняют крайне мало людей, поэтому создаётся впечатление (возможно правильное), что при выполнении такого задания у тебя больше шансов получить приглашение на собеседование (что полезно для начинающего специалиста даже без получения в дальнейшем офера). Из моих знакомых (людей ищущих первую работу в качестве андроид разработчика), порядка 10 чел., никто не стал выполнять это задание.
dom1n1k
16.02.2025 10:38Интересно, что новичок успеет сделать за полдня - стандартный шаблон развернуть?
А автор прямо пишет, что часть указанного времени он потратил на изучение.Это нормально, что человек с нулем опыта должен показать, что он умеет. И да, потратить для этого некоторое время. До этого момента для работодателя он - кот в мешке с минимальными шансами на выигрыш.
sdramare
16.02.2025 10:38Испытательный срок?
dom1n1k
16.02.2025 10:38Это дико долго и дорого.
Как вы себе это представляете? Среднее качество кандидатов-новичков очень низкое.Нанимать сразу 5-10 человек, а потом всех кроме одного выгонять? Ими нужно заниматься, им нужно платить. Это обойдется в такие суммы, что проще сразу хантить синьора.
Перебирать 5-10 человек последовательно, меняя их каждый месяц, пока не попадётся хороший? Вопросы те же + потеря кучи времени, а работа стоит.
Плюс юридические, организационные, моральные моменты.Испытательный срок непригоден для массового отбора, это лишь подстраховка на случай непредвиденных проблем.
dom1n1k
16.02.2025 10:38Делать больше, чем указано в задании – работает не всегда, и иногда воспринимается как отхождение от требований.
Сильно зависит от выполнения обязательной части.
Если там всё ок, то превышение минусом не должно быть. Как минимум, это способ дополнительно запомниться.
А вот если обязательные пункты не выполнены или выполнены очень плохо - это точно минус. Во-первых, у человека проблемы с чтением (невнимательный) или пониманием (слабая подготовка) ТЗ. Во-вторых, это показывает, что плохое качество не объясняется дефицитом времени - на доп. свистелки оно ведь нашлось.
Но в целом я всегда рекомендую в тестовых сосредотачиваться на качестве, а не объеме.
Ratenti
16.02.2025 10:38Чем последний оффер больше понравился?
bm9 Автор
16.02.2025 10:38Дело было не в том, что последний оффер был чем-то лучше по условиям, дело было в том, что мне очень не понравилось на первом* раб. месте, в том числе мне сильно не понравился проект. И сейчас я понимаю, что это было одно из лучших решений.
Katherinarange
есть сайт https://zaymy-bez-procentov.ru/ который мы хотим сделать приложением и выложить в гугл плей. вы можете взяться за его разработку? если да сколько по стоимости ? и вообще возможно ли его выложить в плей маркет по причине того это это ниша микрозаймов?
Pitfil
Oldju
Катерина с добрым утром! Регистрация фирмы в иностранном государстве плюс сопровождение ~$1000 + накладные каждый месяц 300-400. Это просто, что бы опубликовать в гугле. Организация ИТ отдела у вас, вы ведь "мы", кто хочет, но не может в ИБ, программирование и сопровождение железа - даже не знаю, там ФОТ будет от 5 млн. руб в месяц (в черную и серую никто не будет работать) . Плюс железо и программы. От 15 млн. - но могу сильно ошибаться в большую сторону. Просто забудьте. ИТ отдел вам нужен, потому что информация будет хранится в офисе у вас на сервере. Иначе в программе андроид изменять пару циферок, и вы уже должны будете много денех. Ответил вам, потому что у вас почта на домене .su. Вам надо в рустор. RuStore.
А, вы же наверное захотите и на яблоке. Для карточки фирмы там надо писать цели фирмы. И следить за своей репутацией. Ну, раньше надо было. И разработка тоже дороже, и вообще они там все в свитшотах на самокатах смузи пьют, буржуи недобитые.
Автор. Спасибо за статью. Я когда читал вашу статью про менеджер паролей, не мог понять, чего вы его решили написать для продакшена. Теперь понятно :).