Как стать iOS-разработчиком без платных курсов и найти первую работу

Всем привет! Меня зовут Анатолий Касьянов, я СТО компании Holy Water, которая входит в экосистему бизнесов Genesis и занимается разработкой мобильных приложений и игр.

Пять лет назад я начал свой путь в IT. У меня не было технического образования, знакомых или друзей в этой сфере, и я не ходил на платные курсы. Выучил разработку самостоятельно с нуля. Чтобы получить первый реальный опыт, делал проекты на фрилансе, потом перешел в аутсорс-компанию.

В Holy Water я пришел на позицию Senior iOS-разработчика более чем год назад. За это время я очень вырос вместе с проектом: стал техническим директором, у меня в команде 12 сильных специалистов.

Я провожу много собеседований. Возможно, это покажется странным, но в последнее время долго искал Junior iOS-разработчика, это оказалось не просто. Так появилась идея этой статьи.

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

Заблуждение 1. Нужно техническое образование. Нет, не нужно. Да, оно дает преимущество, но минимальное, все можно выучить самостоятельно. Мои рекомендации ищите ниже.

Заблуждение 2. Нужны платные курсы, 100500 менторов и 20 лет обучения. Нет, в интернете много качественных бесплатных источников и крутое, отзывчивое сообщество. В конце статьи найдете список надежных ресурсов. Если упорно заниматься, можно найти первую работу на фрилансе или устроиться джуном в компанию за 5–6 месяцев с нуля.

Заблуждение 3. На работе будет сложно, меня быстро уволят. Сложно будет, но не уволят. Это нормально, если вы большую часть времени на работе будете искать решения проблемных моментов в интернете. Кроме того, вы будете постоянно совершенствовать свои знания и учить что-то новое. Потому что мобильная разработка быстро меняется, и знания, актуальные два года назад, уже устарели.

Когда вы уже занялись самообразованием, возникают стандартные преграды, из-за которых люди иногда прекращают продвигаться дальше. Поначалу многие вещи кажутся непонятными, появляется сомнение в себе. Кроме того, возникает впечатление, что вы изучаете что-то никому не нужное.

Что работает:

  • нужно учить не все подряд, а конкретный набор технологий;
  • для быстрого обучения лучше работают книги/статьи, в видеокурсах много воды;
  • если технология/тема сразу не понятна (что будет в 99% кейсов), тогда нужно подключать видеоуроки;
  • английский очень важен — в 90% случаях в начале работы вы будете гуглить информацию на этом языке.

Чтобы успешно пройти первое собеседование, нужно хорошо разбираться в трех основных технических темах: Swift Core, iOS SDK и иметь общие знания по Computer Science (CS). По каждой из этих тем я пропишу вопросы, которые чаще всего задают на интервью.

Swift Core

Самый быстрый способ выучить Swift — документация Apple. Она может быть местами сложная, но максимально четкая и краткая, без лишней воды. В то время как в видеокурсах вода есть, что тормозит процесс.

На мой взгляд, оптимальный подход к изучению языка такой:

Вот мой топ книг и ресурсов:

А вот вопросы, которыми я проверяю знание языка у кандидатов:

Collection Types (dictionary, array, set)

  • Отличие между массивом и сетом?
  • В каких целях использовать словарь?

Closures, Functions

  • Что такое non-escaping closure?
  • Примеры использования closures?

Structures and Classes (Properties, Methods, Inheritance, Initialization)

  • Отличие между структурой и классом?
  • Что такое instance-метод?
  • Когда лучше использовать структуру/класс?

Optionals (Optional, Optional Chaining)

  • Как работает под капотом опционал?
  • Как можно извлечь значение из опционала?
  • Что такое optional chaining?
  • Какую проблему решают опционалы?

Protocols and Generics

  • Что такое протокол?
  • Зачем дженерики?

Работа с памятью

  • Как работают ссылки в Swift?
  • Что такое unowned, weak?

Предполагаю, что если вы можете ответить на эти вопросы, то у вас получится ответить и на более простые.

Computers Science и Architecture — общие технические знания

Когда есть хорошее понимание языка программирования, нужно получить основу по Computer Science. Это Git (основы), дизайн-паттерны и архитектура.

Git

  • Что такое push/pull/branches?

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

База данных и хранение данных. 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

Список ресурсов по разработке смотрите по ссылке.

Похожие статьи:
Компания Ritmix выпустила новые фоторамки: RDF-814 и RDF-1014 с принтами на корпусе и RDF-810, отличительная черта которой - тонкий корпус. Ritmix RDF-814 -...
Бомбосховище у театрі Маріуполя витримало удар, тим часом росіяни обстріляли притулок для матерів із дітьми у Сєвєродонецьку. DOU...
Приглашаем вас на авторский курс по Python от Михаила Алейника в партнерстве с компанией PHP Academy. Подробная программа...
Українці розробили розширення для Google Chrome, яке маркує сайти російського походження. Розробка називається Russian websites,...
Навздогін попередній колонці, присвяченій темі комп’ютерної обробки української мови, мене уповноважили зробити...
Яндекс.Метрика