Как стать iOS-разработчиком без платных курсов и найти первую работу
Всем привет! Меня зовут Анатолий Касьянов, я СТО компании Holy Water, которая входит в экосистему бизнесов Genesis и занимается разработкой мобильных приложений и игр.
Пять лет назад я начал свой путь в IT. У меня не было технического образования, знакомых или друзей в этой сфере, и я не ходил на платные курсы. Выучил разработку самостоятельно с нуля. Чтобы получить первый реальный опыт, делал проекты на фрилансе, потом перешел в аутсорс-компанию.
В Holy Water я пришел на позицию Senior iOS-разработчика более чем год назад. За это время я очень вырос вместе с проектом: стал техническим директором, у меня в команде 12 сильных специалистов.
Я провожу много собеседований. Возможно, это покажется странным, но в последнее время долго искал Junior iOS-разработчика, это оказалось не просто. Так появилась идея этой статьи.
Я хочу рассказать, как приобрести минимальный пакет навыков, найти первую работу, что спрашивают на собеседованиях и где искать ответы на эти вопросы. Пройдемся также по резюме и популярным заблуждениям на старте учебы, которые я попытаюсь развеять. Вот с последних и начнем.
Заблуждение 1. Нужно техническое образование. Нет, не нужно. Да, оно дает преимущество, но минимальное, все можно выучить самостоятельно. Мои рекомендации ищите ниже.
Заблуждение 2. Нужны платные курсы, 100500 менторов и 20 лет обучения. Нет, в интернете много качественных бесплатных источников и крутое, отзывчивое сообщество. В конце статьи найдете список надежных ресурсов. Если упорно заниматься, можно найти первую работу на фрилансе или устроиться джуном в компанию за
Заблуждение 3. На работе будет сложно, меня быстро уволят. Сложно будет, но не уволят. Это нормально, если вы большую часть времени на работе будете искать решения проблемных моментов в интернете. Кроме того, вы будете постоянно совершенствовать свои знания и учить что-то новое. Потому что мобильная разработка быстро меняется, и знания, актуальные два года назад, уже устарели.
Когда вы уже занялись самообразованием, возникают стандартные преграды, из-за которых люди иногда прекращают продвигаться дальше. Поначалу многие вещи кажутся непонятными, появляется сомнение в себе. Кроме того, возникает впечатление, что вы изучаете что-то никому не нужное.
Что работает:
- нужно учить не все подряд, а конкретный набор технологий;
- для быстрого обучения лучше работают книги/статьи, в видеокурсах много воды;
- если технология/тема сразу не понятна (что будет в 99% кейсов), тогда нужно подключать видеоуроки;
- английский очень важен — в 90% случаях в начале работы вы будете гуглить информацию на этом языке.
Чтобы успешно пройти первое собеседование, нужно хорошо разбираться в трех основных технических темах: Swift Core, iOS SDK и иметь общие знания по Computer Science (CS). По каждой из этих тем я пропишу вопросы, которые чаще всего задают на интервью.
Swift Core
Самый быстрый способ выучить Swift — документация Apple. Она может быть местами сложная, но максимально четкая и краткая, без лишней воды. В то время как в видеокурсах вода есть, что тормозит процесс.
На мой взгляд, оптимальный подход к изучению языка такой:
Вот мой топ книг и ресурсов:
- Swift: A Step-by-Step Guide for Absolute Beginners
- Mastering Swift 5: Deep dive into the latest edition of the Swift programming language, 5th Edition
- 100 Days of Swift
- Swift 5 Tutorial 2020
А вот вопросы, которыми я проверяю знание языка у кандидатов:
Collection Types (dictionary, array, set)
- Отличие между массивом и сетом?
- В каких целях использовать словарь?
- Что такое non-escaping closure?
- Примеры использования closures?
Structures and Classes (Properties, Methods, Inheritance, Initialization)
- Отличие между структурой и классом?
- Что такое instance-метод?
- Когда лучше использовать структуру/класс?
Optionals (Optional, Optional Chaining)
- Как работает под капотом опционал?
- Как можно извлечь значение из опционала?
- Что такое optional chaining?
- Какую проблему решают опционалы?
- Что такое протокол?
- Зачем дженерики?
- Как работают ссылки в Swift?
- Что такое unowned, weak?
Предполагаю, что если вы можете ответить на эти вопросы, то у вас получится ответить и на более простые.
Computers Science и Architecture — общие технические знания
Когда есть хорошее понимание языка программирования, нужно получить основу по Computer Science. Это Git (основы), дизайн-паттерны и архитектура.
- Что такое push/pull/branches?
REST/JSON
- Что такое REST/JSON?
- Как происходит общение клиент-сервер?
SOLID — популярный вопрос, говорит о понимании основных принципов написания хорошего кода.
- Примеры использования каждого принципа. Теория и свои примеры из работы.
- Примеры, как этот принцип можно сломать, неправильное его использование.
Design patterns — довольно большая тема, достаточно выучить только основные паттерны, популярные в iOS, научиться ими пользоваться в pet-проектах и уметь привести примеры (Design Patterns by Tutorials By Jay Strawn & Joshua Greene).
- Какие дизайн-паттерны популярны в iOS? (Singleton, Observable, Delegation, Factory, Builder, Facade).
- Примеры использования этих паттернов. Минусы и плюсы.
Архитектура. От начинающего специалиста не ожидают много знаний по этой теме. Но хорошее понимание MVC даст преимущество. Как ее использовать, минусы, почему на старте от нее больше пользы и так далее.
- Что такое MVC? Минусы/плюсы.
- Слышал про MVVM/VIPER? (Рекомендую прочитать только поверхностно и рассказать основные принципы/отличия, в детали имплементации не лезть).
DRY/YAGNI — популярные аббревиатуры. Прочитайте и выучите, иногда могут спросить. Но если говорите, что знаете, всегда приводите примеры: как работает и как можно сломать.
iOS SDK
Многие джуниор-разработчики делают большую ошибку — начинают распыляться на мини iOS-фреймворки, например, работу с локацией, пуши, анимации и тому подобное. Я настоятельно рекомендую этого избегать. Все эти технологии точечные, похожие между собой и разнятся для отдельно взятого проекта.
Моя рекомендация — сфокусироваться на ключевых технологиях: уметь верстать и знать, как это работает. Тогда подхватить любую из этих технологий займет меньше недели. Интервьюер понимает, что если есть хороший Core, то выучить новую iOS-технологию легко.
Сейчас набирает популярность SwiftUI, но я бы его учил в последнюю очередь и чисто для саморазвития. Аргумент тот же: хороший уровень знания Core, значит, фрейм выучить легко.
Также рекомендую использовать подход «до меня это было сделано 100 раз» и всегда искать готовые решения. С таким подходом вы сможете посмотреть реализацию более опытных людей и разобраться в теме.
Вопросы по iOS SDK
Верстка. На каждый ответ должен быть пример, как делать/не делать.
- Что такое compression resistance and hugging priority.
- Отличие frames от bounds?
- Как верстать с помощью кода? Использовали какие-то библиотеки (snapkit)? Минусы/плюсы?
- Что используете для верстки — storyboard, xib? Какие минусы у такого подхода?
- Можете привести примеры создания custom views? Когда их используете?
- Как работаете с навигацией в проекте? Как открываете следующий экран? К примеру, нужно закинуть uiviewcontroller в navigation stack или презентовать, как лучше реализовать?
- Работа uicollectionview/uitableview. Какие делегаты используются? Как оптимизировать перформанс?
Application Lifecycle
- Какой жизненный цикл есть в приложении?
- Что произойдет с приложением, если вам позвонят?
UIViewController lifecycle
- Опишите очередность вызова методов при появлении экрана.
- За что отвечает viewDidLayoutSubviews?
База данных и хранение данных. Realm/Core Data/UserDefaults
Опционально можно разобраться с Realm или Core Data для понимания, как работать со сложной структурой данных. Я бы рекомендовал Realm, так как ниже порог входа и более современный функционал. В будущем нужно выучить и Core Data.
- Как можно хранить данные?
- Как хранить пароли юзера?
Pet projects. Когда начинать и в чем суть
Цель pet-проекта — иметь код, который можно показать как референс, если нет коммерческого опыта. Если придет отказ после собеседования, всегда можно попросить фидбэк и получить бесплатное код-ревью от более опытного специалиста.
Считаю эффективным такой подход:
Когда проект стабильный, можно попытаться залить его в AppStore. Так лучше узнаете, как работает весь цикл разработки.
Работу над pet-проектами можно начать сразу после уверенной базы по Swift, даже если не очень хорошо понимаете, как работает iOS SDK.
Вот пару идей: приложение по фитнесу/продуктивности/привычкам/живые обои. Можете посмотреть топ-чарты, выбрать проект, который кажется интересным.
Есть много готовых дизайнов/темплейтов. Берите любой и пытайтесь по нему работать. Сразу рекомендую начать с Figma. Примеры — здесь.
Если будут сложности с самостоятельной разработкой, можно сделать шаг назад и найти туториал/видеоурок по созданию какого-то проекта, который можно реализовать в несколько шагов.
Структура финального проекта состоит из:
- Приложения, которое работает и выполняет поставленную цель.
- Чистого кода, в котором есть хорошее применение SOLID, YAGNI, DRY.
- Хороший код-стайл — небольшие классы, отлично подобранные имена для переменных, удобная группировка файлов внутри проекта Xcode и так далее.
- Сторонних библиотек.
Soft skills
Чтобы получить работу, важно иметь не только технические навыки. На окончательное решение при найме в команду значительно влияют софт скилы, так как Junior-специалистам всегда не хватает знаний и опыта. Намного проще менторить человека, который хорошо реагирует на фидбэк, не токсичный, не сдается при первой сложности и хочет развиваться.
Многие упускают эту тему и не раскрывают ее детально. Как решить работодателю, кого, например, из двух кандидатов на Junior-позицию брать, если они оба неопытные, имеют много пробелов в знаниях? В таких случаях приходит на помощь наличие софт скилов. Вот пример самых важных для принятия решения:
- Специалист хорошо реагирует на фидбэк, не сдается, проделывает много работы, чтобы пофиксить проблему и избежать ее в будущем.
- Он настойчив — готов работать над задачей до тех пор, пока не сможет решить ее. Также он не будет легко сдаваться и бежать спрашивать, что делать.
- Инициативный — готов выучить новую технологию, с которой никогда не сталкивался.
- Доводит дела до конца — если сказал, что разберется/прочитает статью, закончит книгу, то обязательно сделает это.
Пару советов насчет CV
У Junior-специалиста нет опыта работы, поэтому сосредоточиться нужно на знаниях. Несколько советов по поводу оформления резюме:
- Стоит указывать только те технологии, с которыми реально работали. Исходя из того, что вы напишете, будут задавать почти все вопросы на собеседовании. Лишнее лучше не упоминать.
- Можно детально расписать о своих pet-проектах, технологиях. Кинуть референсы на Git. Примеры таких работ повышают ценность резюме.
- Можно рассказать, какие статьи/книги/видеоуроки изучили.
Что важно на первых собеседованиях
- Уметь хорошо отвечать на все вопросы, приведенные выше.
- Приводить примеры в своей работе и pet-проектах.
- Уметь «сломать» любой этот вопрос и не бояться рассказать о негативном опыте.
Кажется, на этом все. Если освоите все перечисленное, но вас не возьмут на работу, приходите ко мне :)
Топовые iOS-ресурсы
Статьи, блоги
Видео
Sean Allen / Let’s Build That App / RayWenderlich.com / Brian Advent / Mark Moeykens / Kilo Loco / John Sundell / Paul Hudson
Список ресурсов по разработке смотрите по ссылке.