Агил Гаджиев – старший iOS-разработчик Kotelov рассказывает: с чего стоит начинать в поиске работы, как оформить резюме, стоит ли накручивать опыт работы, а главное — на что стоит делать упор при подготовке, чтобы выделиться на фоне других кандидатов.

С чего начать

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

Освойте базу. Не тратьте время на поиск идеального курса или программы — изучить азы можно и по бесплатным ресурсам. Например, для знакомства со Swift хорошо подойдут ролики на канале The Swift Developers, также можно почитать стэнфордские курсы. Хороший источник информации – документация Apple — рекомендуем перевод на swiftbook.ru

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

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

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

Что изучить, чтобы выделиться на собеседовании

Список того, что нужно знать начинающему iOS-разработчику, чтобы гарантированно пройти техническое собеседование: 

Сразу оговоримся: вы не должны знать всё, что написано ниже, на 100%. Это знания и навыки идеального кандидата в идеальном мире: скорее всего, требования будут меняться в зависимости от заказчика. Но это те темы, благодаря которым вы сможете выделиться среди сотен других джунов.

ARC — автоматический подсчёт ссылок 

Управление памятью — частая тема на интервью. Ваша цель — показать, что вы не просто знаете, что это такое, но и умеете применять на практике.

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

Что нужно знать:

Скорее всего, вас спросят про отличие слабых (weak) ссылок от безымянных (unowned). В редких случаях разговор может зайти и про боковые таблицы (side table) — если сможете объяснить, зачем этот механизм добавили в Swift, выгодно себя покажете.

GCD и многопоточность

Важная тема, знания которой дает 100500 баллов. Вот вкратце, что нужно знать:

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

очередь в рамках GCD, отличие от потока;

— типы очередей в GCD;

— Класс обслуживания качества QoS: понимать, когда и зачем они используются;

проблемы многопоточности: их много, но хватит трёх основных — deadlock, race condition и priority inversion. Нужно понимать, когда эти проблемы возникают, и уметь их решать;

потокобезопасность и способы синхронизации в iOS (барьеры, семафоры, мьютексы — их больше, но этого должно хватить);

DispatchGroup, DispatchWorkItem и зачем они нужны.

UIKit

Несмотря на то что Apple плавно переводит разработку на SwiftUI, большая часть приложений всё ещё использует UIKit — соответственно, и вакансий, где требуется знание этого фреймворка, значительно больше. 

Вот какие темы следует изучить:

жизненный цикл ViewController;

— как работает Auto Layout;

— как верстать экраны кодом;

TableView и CollectionView.

Общие вопросы

— SOLID: расшифровать, что означает каждая буква, привести примеры.

— ООП: рассказать обо всех концепциях, привести примеры. 

— Типы Value vs Reference: понимать, какие типы относятся к Value, а какие к — Reference; что хранится на куче, а что на стеке, а также уметь приводить примеры исключений из этих правил.

— Структуры против классов: уметь называть все различия. 

— Copy on write: что это, зачем это нужно, какие типы поддерживают по умолчанию и как этот принцип можно реализовать самому. 

— hitTest: раньше у джунов не спрашивали про обработку нажатий, но теперь и эта тема начала встречаться на собеседованиях. Нелишним будет разобраться, как работает пропуск нажатий и для чего нужен метод point(inside:with:).

— Диспетчеризация: что это, какие виды диспетчеризации есть в Swift. 

— Базовые архитектурные паттерны и алгоритмы: понимать, как устроены MVP, MVC, MVVM, уметь называть их сходства и различия.

Самое главное: резюме

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

Указывайте достижения, а не процесс. Вместо «делал, разрабатывал, программировал» лучше писать «создал, реализовал, придумал, разработал». Всем важно видеть итоговый результат работы. Идеально, если результат можно изменить в цифрах — например: «Ускорил загрузку экрана на N%».

Рассказывайте о пет-проектах. Если ищете первую работу, обязательно указывайте ваши пет-проекты, но не оставляйте ссылки на недоделанные работы. Пет-проекты храните на GitHub.

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

Нужно ли накручивать опыт в резюме?

Холиварная тема, поэтому рассмотрим возможные плюсы и минусы.

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

О том как на это смотрят рекрутеры, мы поговорили на подкасте с Анной Афониной.

Менторство

Ментор нужен не всем: практически любой технологии можно научиться самому, потратив какое-то время. Здесь лишь расскажем, чем менторство поможет вам на пути к первой работе:

  1. Контроль. Многим нужен дополнительный пинок, чтобы чем-то заниматься, — ментор с этой функцией идеально справляется. 
  2. Сокращение времени обучения. Ментор сможет сразу сказать, что вам нужно учить, а что отложить. Хороший ментор — такой, который не просто скидывает ссылки на материалы, а разбирает вопросы с нуля до уровня собеседования.
  3. Поддержка. У вас всегда будет человек, к которому можно обратиться за помощью, даже в свободное от занятий время. На первых этапах бывают затыки на несколько часов, которые человек с опытом решил бы за пару минут, — в этом случае можно спросить ментора.
  4. Индивидуальный подход. Менторство подразумевает составление программы именно под ваши нужды, с учётом ваших способностей. Выстроенная таким образом система обучения помогает не забросить занятия при первой же трудности.

Минус только один – стоимость. Но с первой же айтишной зарплаты можно все эти расходы покрыть. Поэтому каждый принимает решение сам: двигаться самостоятельно или обратиться за помощью.