iOS-разработчики в 2024 году: какие нужны скилы и как проходит процесс найма

Команда Яндекс Практикума провела исследование и готова рассказать, как обстоят дела в найме начинающих 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 можно жить».

«Необязательное требование. Основная кодовая база на 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-разработчикам без опыта — всего восемь.

d094f0bea1b2f28953b21d64fb7fd525.png

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

3ea7f4ed63fe2d0da9625eee70eb087b.pngБольшая часть предложений сосредоточена в Москве (140 вакансий) и Санкт-Петербурге (47 вакансий). При этом удалённую работу предлагают всего 29% работодателей.

Большая часть предложений сосредоточена в Москве (140 вакансий) и Санкт-Петербурге (47 вакансий). При этом удалённую работу предлагают всего 29% работодателей.

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

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

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

  • Перед собеседованием важно повторить основы (например, по подборкам вопросов на собеседовании для iOS-разработчиков), а также проверить свой профиль на GitHub — закрыть слабые места и подготовиться к вопросам о проектах.

  • Софтскилы для джуниора не менее важны, чем знание Swift. Неумение рассуждать или агрессивное поведение на собеседовании практически гарантируют отказ работодателя, а чрезмерное волнение может помешать кандидату показать лучшие результаты. Чтобы этого избежать, можно посмотреть собеседования на YouTube или попросить знакомого разработчика провести тестовое интервью.

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

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

© Habrahabr.ru