Команда Яндекс Практикума провела исследование и готова рассказать, как обстоят дела в найме начинающих iOS-разработчиков: какие навыки требуются джуниорам для работы, о чём их спрашивают на собеседованиях и сколько откликов им нужно отправить, чтобы получить приглашение на интервью.
Как проводили исследование
В подготовке исследования мы применяли три подхода:
Опрашивали работодателей. Взяли интервью у техлидов, лидов команд и iOS-разработчиков из российских компаний разного типа: «техгигантов», средних продуктовых компаний, аутсорс-агентств. Также в числе респондентов есть сотрудники американской компании, швейцарского и американского стартапов.
Опрашивали выпускников. Провели несколько интервью с бывшими студентами курса «iOS-разработчик» в Практикуме. Двое выпускников работают в диджитал-агентствах, один в компании, связанной с арбитражем трафика. Двое занимаются продуктами — приложением для беременных женщин и сервисом подбора докторов.
Изучали вакансии. Мы проанализировали вакансии, опубликованные на hh.ru в мае 2024 года на позицию iOS-разработчика с грейдом «джуниор» и «джуниор плюс».
С помощью этих подходов мы выясняли, что требуют от iOS-разработчиков на джуниорских позициях, какие компании и как нанимают и собеседуют таких специалистов.
Какие скилы нужны начинающему iOS-разработчику
Чаще всего в вакансиях для джуниоров упоминаются следующие хардскилы: Swift, Git, объектно-ориентированное программирование, Xcode, UIKit и MVVM. Респонденты также относят к важным навык работы с сетью, знание структур баз данных и алгоритмов, понимание iOS SDK.
Перед исследованием мы также сформулировали несколько гипотез о скилах, необходимых для начинающих iOS-разработчиков. На основе этих гипотез мы составили вопросы для участников исследования и вывели несколько тезисов.
Джуниор должен уметь пользоваться Git через консоль, а другие сервисы знать необязательно
Семь работодателей ответили, что им неважно, как джуниор будет пользоваться Git. Шесть прямо сказали, что у них принято работать с Git через консоль.
Респонденты из некоторых компаний сказали, что работают с Git через Fork и Sourcetree. Но почти все отметили, что для джуниора достаточно знать общие принципы работы с Git и уметь взаимодействовать с ним через консоль.
«Есть много программ для работы с “гитом”, но если ты не очень понимаешь, как это работает “под капотом”, и у тебя появится ошибка — ты даже загуглить проблему, скорее всего, не сможешь. А консоль никогда не подведёт, и под неё можно выбрать любой инструмент».
Паттерны проектирования — must have, но без глубокого погружения
От джуниоров не требуют углублённых знаний архитектуры. Достаточно понимать концепцию разделения кода на слои, также полезно в общих чертах знать, что представляют собой шаблоны MVVM, VIPER, MVI, Singleton, Delegate, Factory. На собеседовании могут спросить, какие группы паттернов и паттерны проектирования есть в iOS, и попросить привести примеры.
Джуниору желательно знать SwiftUI и Combine. Но всё зависит от компании
Мнения разделились, но большинство респондентов считают, что джуниору желательно знать SwiftUI и уметь использовать его в разработке приложений. То же касается и фреймворка Combine.
При этом необходимость знать и погружаться в SwiftUI и Combine часто зависит от компании и проекта. Вот что говорят работодатели:
«SwiftUI — мастхев. В Combine достаточно знать простые вещи — как отправить, получить событие».ё
«Необязательное требование. Основная кодовая база на UIKit. Знать и использовать SwiftUI не запрещено, но это не мейнстрим и в продакшне его нет. UIKit — мастхев, без SwiftUI можно жить».
«Зависит от проекта и стека. Все новые проекты с нуля создаются со SwiftUI. Многие затаскивают его в старые проекты».
«Знать SwiftUI — очень желательно».
«Мы почти не используем SwiftUI. Combine тоже. Это реактивный фреймворк на любителя, а мы делаем продукт “на года”, поэтому фильтруем хайповые технологии».
Core Data иногда спрашивают, но чаще — нет
Начинающему iOS-разработчику важно понимать, что такое база данных и какие бывают системы хранения, но погружаться в фреймворки необязательно. Кроме того, некоторые компании уже перешли на SwiftData.
Для джуниора важно уметь верстать кодом, но без погружения в конкретные фреймворки
Работодатели ожидают, что джуниор будет уметь верстать как кодом, так и через сториборды, а также понимать плюсы и минусы разных подходов. Какие-то конкретные фреймворки учить не нужно, их много, они разные, и погрузиться в них можно будет во время онбординга.
Базовые знания о многопоточности повышают шансы на трудоустройство
Желательно знать, что это такое, какие преимущества и недостатки есть у многопоточности, ориентироваться в принципах работы с потоками.
«Джун должен хотя бы в общих чертах понимать, какие есть инструменты: GCD, Async/Await. Уметь написать базовые штуки, отличать async- и sync-метод».
Некоторые студенты прошли собеседования с базовыми знаниями о многопоточности, а погрузились и закрыли пробелы по теме уже в работе.
Необходимость проводить Unit- и UI-тестирование зависит от размера компании
В небольших компаниях часто совсем не пишут тесты, так как на это нет ресурса. В крупных тестированиями, наоборот, покрывается 100% продукта. При собеседовании в такую компанию у джуниора могут спросить, какие бывают тесты и для чего они используются.
Софтскилы у начинающих разработчиков выходят на первый план
Софтскилы для джуниора могут быть даже важнее хардскилов. Иногда они играют решающую роль при найме.
«Искали джуна, который знает Core Data. В итоге взяли того, кто не знает Core Data, но умеет общаться».
Среди важных гибких навыков респонденты отметили «самоходность» — умение быстро погружаться в работу и самостоятельно разбираться, как действовать дальше; адекватность и отсутствие пассивной агрессии; заинтересованность в работе и умение общаться.
Первый этап найма: тестовое задание
После прохождения первичного отбора кандидат получает тестовое задание. Вот несколько примеров, которыми поделились участники исследования:
Сделать экран. На экране должна быть шторка с бесконечным ScrollView, которую можно тянуть вверх и вниз.
Сделать два экрана. На одном список новостей, на другом — раскрытая новость.
Сделать экран с картой Google и нанесёнными на нее координатами и временем, которые отправлялись из сервиса. На карте надо нарисовать линию и точку, которая будет по ней двигаться, и добавить слайдер, чтобы можно было двигать точку, а скорость автоматически пересчитывалась. Добавить функцию перемещения, приближения и отдаления карты.
Сделать мини-аналог сервиса с объявлениями: экран со списком товаров и карточку товара.
Сделать два экрана для сервиса отслеживания беременности — с отображением веса в килограммах или фунтах, графиком и таблицей записей за разные даты.
Почти во всех упомянутых респондентами заданиях требовалось разработать экраны через UIKit с использованием архитектуры MVVM или Lean Architecture. Нельзя было использовать MVC.
Один из студентов отметил, что на этом этапе может быть полезно усложнить задачу и добавить что-то от себя.
«Мне надо было разработать простую AR-игру, в которой пользователь находится в своей комнате и стреляет по виртуальным шарикам. Я добавил более сложную анимацию шариков, чем требовалось, и несколько языков — работодатель оценил. Важно дополнить тестовое мелочами, чтобы оно выделялось среди других».
Также джуниор всегда должен быть готов обосновать свои решения. Работодатель может задать вопросы о коде, даже если тестовое выполнено идеально.
Второй этап найма: собеседование
Набор вопросов на собеседовании зависит от стека, размера и задач компании. Но почти всегда интервью имеют общие черты и состоят из похожих блоков.
Так, работодатель всегда уделяет внимание предыдущему опыту кандидата. Конкурентоспособный джуниор в 2024 году — это iOS-разработчик с коммерческим опытом или хотя бы пет-проектами. Работодатель может заглянуть на GitHub потенциального сотрудника, поэтому важно, чтобы проекты кандидата были аккуратно оформлены, код в них был без явных ошибок и к каждой из работ был приложен README со скриншотами. Скорее всего, работодатель не будет долго разбираться в проекте, поэтому всё должно быть чётко и наглядно.
Также кандидатам задают технические вопросы. В них затрагивают основы Swift, многопоточного программирования, работы памяти, ООП и Solid, спрашивают об архитектуре и паттернах проектирования, жизненном цикле UIViewController.
Или дают задачи. Например, показывают код, в котором много разных вызовов, и спрашивают, в каком порядке они будут выполняться. Или показывают дизайн — и просят последовательно рассказать, как его реализовать.
Работодатели подчёркивают, что на собеседовании проявляются многие «красные флаги» — признаки, проявив которые кандидат точно не получит предложение о работе. Например, агрессия («Зачем вы задаёте вопросы про алгоритмы, я же мобильный разработчик!»), чрезмерное волнение или неспособность рассуждать, когда задача не поддаётся решению сразу.
Ситуация на рынке: сложности и перспективы
Большие компании проявляют интерес к мидлам и синьорам, а джуниоров предпочитают брать во внутренние школы и стажировки. Полноценные предложения о работе начинающие iOS-разработчики чаще находят в студиях и стартапах. Этому в любом случае предстоит большая работа — как рассказывают студенты, на 300 откликов приходится примерно три собеседования. Быстро находят работу только кандидаты с коммерческим опытом, а также согласные на бесплатную стажировку. В остальных случаях джуниору стоит готовиться к нескольким месяцам поиска работы.
Подобную картину дополняет статистика рынка вакансий. Так, в мае 2024 года на hh.ru было опубликовано 287 предложений для iOS-разработчиков. Больше половины из них — для мидл-специалистов с опытом от трёх до шести лет. Джуниорам с опытом от года подходило 72 вакансии, а начинающим iOS-разработчикам без опыта — всего восемь.
Также скорость трудоустройства может зависеть от города проживания кандидата.
Итоги: самое важное
Резюмируем ключевые выводы исследования.
Найти работу джуниору в iOS-разработке реально, но стоит заложить несколько месяцев на ежедневную отправку откликов — на большинство из них начинающему специалисту, увы, не ответят.
Перед собеседованием важно повторить основы (например, по подборкам вопросов на собеседовании для iOS-разработчиков), а также проверить свой профиль на GitHub — закрыть слабые места и подготовиться к вопросам о проектах.
Софтскилы для джуниора не менее важны, чем знание Swift. Неумение рассуждать или агрессивное поведение на собеседовании практически гарантируют отказ работодателя, а чрезмерное волнение может помешать кандидату показать лучшие результаты. Чтобы этого избежать, можно посмотреть собеседования на YouTube или попросить знакомого разработчика провести тестовое интервью.
Знание многопоточности, SwiftUI и Combine, а также навык написания тестов необязательны, но увеличивают количество потенциальных вакансий и повышают шансы на скорое трудоустройство.
В тестовых заданиях важно не только полностью и без явных ошибок выполнить бриф, но и доработать проект так, чтобы работа выделялась среди десятков других, — выполнить в той архитектуре, которая указана в вакансии, или написать тесты, если этого не было в брифе.