Учись как джун, собеседуйся как мидл: как iOS-разработчику найти первую работу
Чтобы быстрее получить оффер, новичкам стоит осваивать навыки мидл-уровня, считает Агил Гаджиев. Оглашаем весь список.
Иллюстрация: freepik / rawpixel / Freepik / X Wen / Michal Franczak / Unsplash / Apple Inc / Дима Руденок для Skillbox Media
Об эксперте
Агил Гаджиев
Senior iOS-разработчик в диджитал-студии Kotelov
Привет, меня зовут Агил Гаджиев, мне 22 года, я старший iOS-разработчик в компании Kotelov. В этой статье помогу ответить на вопросы джуна, который ищет первую работу в iOS-разработке. Расскажу, как оформить резюме, стоит ли накручивать опыт работы, а главное — на какие темы стоит делать упор при подготовке, чтобы выделиться на фоне других кандидатов.
С чего начать
iOS-разработка — это не что-то недосягаемое. Вот что я советую для начала.
Освойте базу. Не тратьте время на поиск идеального курса или программы — изучить азы можно и по бесплатным ресурсам. Например, для знакомства со Swift хорошо подойдут ролики на канале The Swift Developers, также можно почитать стэнфордские курсы. Не стоит забывать и про документацию Apple — она на английском, но есть хороший перевод на swiftbook.ru.
Создайте пет-проект. Это поможет разложить знания в голове по полочкам. Можно взять банальную идею в духе трекера задач, парсера новостей или счётчика калорий, можно выдумать что-то своё. В целом на первом проекте можно сильно не оригинальничать, главное — набить руку в написании кода.
Изучите теорию. Под теорией я понимаю темы, которые обязательно будут поднимать на техническом собеседовании и без знания которых в принципе невозможна работа даже на стартовых позициях. Что это за темы и где их изучать, расскажу далее в статье.
Готовиться можно самостоятельно, но я советую найти ментора на пару месяцев — это поможет не сбиться с пути и избежать банальных ошибок, которые совершают все джуны. Это не значит, что вы не сможете подготовиться сами, но с ментором обучение пройдёт быстрее и проще.
Что изучить, чтобы выделиться на собеседовании
Составил список того, что нужно знать начинающему iOS-разработчику, чтобы гарантированно пройти техническое собеседование.
Сразу оговоримся: вы не должны знать всё, что написано ниже, на 100%. Это знания и навыки идеального кандидата в идеальном мире: скорее всего, требования будут меняться в зависимости от заказчика. Но это те темы, благодаря которым вы сможете выделиться среди сотен других джунов.
ARC — автоматический подсчёт ссылок
Управление памятью — частая тема на интервью. Ваша цель — показать, что вы не просто знаете, что это такое, но и умеете применять на практике.
Да, с одной стороны, джун вроде бы не должен знать, что ARC делает под капотом. С другой, понимание моментов, о которых обычно спрашивают только мидлов, поможет продать себя на собеседовании дороже.
Что нужно знать:
- виды ссылок: weak, unowned, strong;
- как объект держится в памяти, когда он удаляется;
- что такое счётчик ссылок;
- как решить проблему retain cycle.
Скорее всего, вас спросят про отличие слабых (weak) ссылок от безымянных (unowned). В редких случаях разговор может зайти и про боковые таблицы (side table) — если сможете объяснить, зачем этот механизм добавили в Swift, выгодно себя покажете.
Что почитать по теме: ответы на большую часть вопросов можно найти в этой статье на «Хабре». Но что-то всё равно придётся погуглить самостоятельно.
GCD и многопоточность
На этой теме можно набрать много дополнительных баллов, а материалов в Сети — предостаточно. Вот вкратце, что нужно знать:
- многопоточность, асинхронность, поток, процесс. Насчёт последних двух спрашивают редко, но лучше один раз выучить и больше к этому не возвращаться — к тому же это не очень сложно;
- очередь в рамках GCD, отличие от потока;
- типы очередей в GCD;
- Класс обслуживания качества QoS: понимать, когда и зачем они используются;
- проблемы многопоточности: их много, но хватит трёх основных — deadlock, race condition и priority inversion. Нужно понимать, когда эти проблемы возникают, и уметь их решать;
- потокобезопасность и способы синхронизации в iOS (барьеры, семафоры, мьютексы — их больше, но этого должно хватить);
- DispatchGroup, DispatchWorkItem и зачем они нужны.
UIKit
Несмотря на то что Apple плавно переводит разработку на SwiftUI, большая часть приложений всё ещё использует UIKit — соответственно, и вакансий, где требуется знание этого фреймворка, значительно больше.
Вот какие темы следует изучить:
- жизненный цикл ViewController;
- как работает Auto Layout;
- как верстать экраны кодом;
- TableView и CollectionView.
Что изучить по теме: статью по UIKit в документации, видеоуроки от The Swift Developers на YouTube.
Общие вопросы
- SOLID: расшифровать, что означает каждая буква, привести примеры.
- ООП: рассказать обо всех концепциях, привести примеры.
- Типы Value vs Reference: понимать, какие типы относятся к Value, а какие к — Reference; что хранится на куче, а что на стеке, а также уметь приводить примеры исключений из этих правил.
- Структуры против классов: уметь называть все различия.
- Copy on write: что это, зачем это нужно, какие типы поддерживают по умолчанию и как этот принцип можно реализовать самому.
- hitTest: раньше у джунов не спрашивали про обработку нажатий, но теперь и эта тема начала встречаться на собеседованиях. Нелишним будет разобраться, как работает пропуск нажатий и для чего нужен метод point (inside: with:).
- Диспетчеризация: что это, какие виды диспетчеризации есть в Swift.
- Базовые архитектурные паттерны и алгоритмы: понимать, как устроены MVP, MVC, MVVM, уметь называть их сходства и различия.
Пара слов о резюме
Не буду поднимать тему правильного оформления резюме — это уже сделали миллион раз до меня, но дам несколько советов.
Указывайте достижения, а не процесс. Вместо «делал, разрабатывал, программировал» лучше писать «создал, реализовал, придумал, разработал». Всем важно видеть итоговый результат работы. Идеально, если результат можно изменить в цифрах — например: «Ускорил загрузку экрана на N%».
Читайте также:
Рассказывайте о пет-проектах. Если ищете первую работу, обязательно указывайте ваши пет-проекты, но не оставляйте ссылки на недоделанные работы. Пет-проекты храните на GitHub.
Пишите сопроводительные письма. Вы же не хотите отсеяться из-за того, что компания рассматривает резюме только с сопроводительными письмами? Но не стоит тратить на это слишком много времени — составьте парочку хороших шаблонов и меняйте 1–2 абзаца для каждой компании.
Нужно ли накручивать опыт в резюме?
Холиварная тема, поэтому рассмотрим возможные плюсы и минусы.
На рынке не так много -вакансий для джуниоров, поэтому многие накручивают или округляют опыт, чтобы привлечь рекрутеров. Не считаю это серьёзным обманом, потому что всё вскроется на этапе собеседования: если вы не подходите, то не пройдёте. А если вас взяли, значит, навыков у вас достаточно, чтобы покрыть недостаток опыта. Поэтому, если вы устали от того, что ваше резюме не замечают, можно добавить немного стажа, а на собеседование прийти суперподготовленным, чтобы подтвердить ваш опыт.
В теории, если накрутить сразу несколько лет опыта, можно подаваться сразу на мидла. Но я не рекомендую новичкам этого делать, потому что так вы лишаете себя прелестей позиции джуниора, где можно получать опыт, задавать вопросы без страха и лишней ответственности, узнавать новое и расти.
Даже если вы сможете сразу устроиться мидлом, вам придётся пахать по 10 часов в день, чтобы удержаться, — и не факт, что получится. Я советую более спокойный путь, но если вы уверены в себе и у вас уже идёт десятый пет-проект, а вы всё ещё не работаете — то вперёд.
Если подытожить, не вижу ничего предосудительного в накручивании и округлении опыта до полугода, чтобы привлечь внимание к резюме. Но не советую добавлять несколько лет работы для мидла, чтобы не проскакивать этап джуниора и развиваться спокойно, если у вас есть такая возможность.
Менторство
Ментор нужен не всем: практически любой технологии можно научиться самому, потратив какое-то время. Здесь я лишь расскажу, чем менторство поможет вам на пути к первой работе:
- Контроль. Многим нужен дополнительный пинок, чтобы чем-то заниматься, — ментор с этой функцией идеально справляется.
- Сокращение времени обучения. Ментор сможет сразу сказать, что вам нужно учить, а что отложить. Хороший ментор — такой, который не просто скидывает ссылки на материалы, а разбирает вопросы с нуля до уровня собеседования.
- Поддержка. У вас всегда будет человек, к которому можно обратиться за помощью, даже в свободное от занятий время. На первых этапах бывают затыки на несколько часов, которые человек с опытом решил бы за пару минут, — в этом случае можно спросить ментора.
- Индивидуальный подход. Менторство подразумевает составление программы именно под ваши нужды, с учётом ваших способностей. Выстроенная таким образом система обучения помогает не забросить занятия при первой же трудности.
Минус только в том, что чаще всего менторство стоит денег. Но с первой же айтишной зарплаты можно все эти расходы покрыть. Поэтому каждый принимает решение сам: двигаться самостоятельно или обратиться за помощью.
Если вы дочитали до конца и у вас возникли какие-то вопросы или нужна помощь — пишите мне в Telegram: @gadzhiev_agil
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!