Как стать 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

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

Похожие статьи:
Длительность курса: 96 академических часов (2,5 месяца): 3 занятия по 3 часа в неделюГрафик занятий: вторник, четверг — 18:30 — 21:30,...
Колишній Staff Software Engineer у Twitter Віталій Бондаренко звільнився з компанії після того, як Ілон Маск поставив перед працівниками...
REST — одна из самых популярных технологий для построения клиент-серверных приложений. Благодаря ее простоте вы можете...
Ресурс DigiTimes сообщает, что в первом квартале 2016 года поставки планшетов iPad могут составить всего 9,8 миллиона штук, что...
У новому випуску YouTube-рубрики «X питань», де ми розпитуємо представників різних спеціальностей про те, що турбує...
Яндекс.Метрика