Как стать iOS разработчиком с нуля? Мой путь.
Разберёмся, что нужно, чтобы влиться в сферу разработки под iOS сегодня и как стать iOS разработчиком. Скажу по своему опыту, для этого совсем не обязательно иметь степень магистра в информационных технологиях. Профильное образование тут играет второстепенную роль.
Самые главные качества которые понадобятся они из разряда Soft Skills. Это, прежде всего целеустремленность и сила воли.
Тебе знакомо чувство, когда ты вроде бы что-то изучаешь, читаешь, тратишь много времени на материал, а понимания либо нет, либо оно везде настолько поверхностное, что не даёт начать самостоятельную разработку? Кругом пробелы, и заполнить их довольно трудно. Закрадываются мысли: "Блин, возможно iOS разработка(программирование) не для меня?.."
Я тоже прошёл через это. Так получилось в жизни, что моя основная работа долгое время не была прямо связана с IT. И на самостоятельное обучение я потратил не один год.
Так вот, чтобы избежать прокрастинации и выйти из бесконечного цикла обучающих материалов (а сейчас всяческих курсов выпускают все больше и больше) я хочу поделиться своей дорожной картой становления iOS разработчиком. Самое главное - ПРАВИЛЬНАЯ ПОСТАНОВКА ЗАДАЧИ, и методичное следование заданному плану. На каждый пункт этой карты я сделаю видео материал на YouTube и статью на сайте. Пожалуйста, подписывайся и добавляй в закладки.
Прежде всего хочу сказать, и даже скорее призвать тебя, дорогой читатель - УЧИ АНГЛИЙСКИЙ ЯЗЫК! Английский язык пригодится тебе в жизни во многих сферах, но для программирования он жизненно важен. IT это такое направление, где все развивается очень стремительно. Технологии постоянно обновляются и совершенствуются, выходят новые фреймворки. И ко всему этому документация и литература появляется прежде всего на английском языке. Множество различных API просто не имеют русского перевода, а их функционал тебя удивит. Что касается книг на русском, то в большинстве случаев перевод очень посредственный, либо эта информация уже устарела.
Изучаем основы
Основы - это касается прежде всего базовых школьных знаний алгебры. Математические операции: сложение, вычитание, умножение, деление, деление с остатком, округление, возведение в степень. Хорошо бы понимать что такое логарифмы и интегралы. Понятия инкремента, декремента.
Дальше системы счисления, базовые типы данных (символьные, строковые, числовые, логические).
Неплохо так же иметь представление об основах устройства компьютера (или по старинке ЭВМ), его основные элементы, как работает процессор, как устроена память (ОЗУ, ПЗУ). Знать и понимать, как работают Операционные Системы (ОС), что такое ядро, драйвера. В нашем случае нужно подружиться с MacOS, ведь весь процесс разработки происходит именно под этой системой.
Сюда же относится изучение Интегрированной Среды Разработки (IDE) XCode, SwiftPlayground.
- Числа и системы счисления
- Конвертация десятичного числа в двоичное и наоборот
- Алгоритм бинарного поиска
Синтаксис языка программирования
Для разработки под iOS используется два языка программирования:
- Objective-C
- Swift
Swift появился сравнительно недавно (статья об этом тут). Но весь современный код пишется именно на нем. Еще можно найти вакансии с требованием знания Objective-C, но это скорее компании, в которых нужно осуществлять поддержку уже написанного кода ранее, либо заниматься переходом с одного языка на другой.
Swift очень дружелюбный язык для новичков, в нем нет странного запутанного синтаксиса. Все достаточно очевидно. Мне очень нравится этот язык, тем более что поддержка его вышла за пределы Apple, и можно начать изучать и практиковаться на Swift не имея компьютера на MacOS. О том, как это сделать я расскажу в отдельной статье.
Язык поддерживает как объектно-ориентированный подход программирования, так и функциональный.
Принципы построения мобильного интерфейса
Приложения на мобильных устройствах немного отличаются от Desktop-ных программ. Прежде всего пользовательским интерфейсом. Эти нюансы нужно учитывать и понимать разницу. Понимать, как пользователь взаимодействует с интерфейсом, как расположить базовые элементы интерфейса, какие элементы вообще существуют.
iOS технологии
Базовые вещи, такие как структура каталогов приложения, жизненный цикл приложения, как соединить пользовательский интерфейс с кодом с помощью ViewController, как расположить элементы пользовательского интерфейса с помощью AutoLayout так, чтобы приложение выглядело одинаково красивым на различных устройствах очень хорошо отражены в основном БЕСПЛАТНОМ учебном курсе от Apple.
Я рекомендую начинать с секции UIKit, это основной фреймворк для построения интерфейсов на котором работает 90% всех приложений на данный момент. Он очень хорошо документирован, и на любую не стандартную ситуацию можно найти решение на различных форумах. В отличии от SwiftUI. Это новая технология, безусловно классная, но на данный момент еще сырая. В России 99% работодателей на собеседовании устроит такой ответ на вопрос про SwiftUI:
-- "Я знаю что SwiftUI существует, и готов уделить изучению данной технологии свое время."
Отдельно стоит отметить многопоточность и NSOperation. Это важная тема, информация тут:
- Apple Dev Docs - NSOperation
- Использование NSOperation и NSOperationQueue в Swift
- NSOperation and NSOperationQueue To Improve Concurrency in iOS
Cocoa паттерны проектирования
Cocoa - это фреймворк, созданный Apple для написания приложений на устройствах под управлением MacOS и iOS. За базовую архитектуру Apple выбрала Model-View-Controller (MVC). Все остальное, можно сказать, ее наследники. Архитектура нужна приложению, чтобы структурировать свой код и не потеряться в нем. Для того, чтобы код был читаем для других программистов, и когда тебе через 2 недели понадобиться вернуться к нему, не составит труда понять, что есть что.
На своем YouTube канале я уже рассказал на примере как использоваться MVC, MVP, Делегирование в своем проекте.
Клиент-серверное взаимодействие
Современные приложения практически все так или иначе взаимодействуют с удаленными серверами. Будь то загрузка пользовательских данных, хранение файлов в облаке, подгрузка изображений в ленту. Это все относится к серверной части. Так называемый backend. А вот само приложение чаще всего является frontend'ом. Оно выполняет роль посредника между действиями пользователя и сервером. Нужно уметь понимать и разграничивать frontend и backend, понимать как прилолжение общается с сервером, какие запросы формирует, и как это использовать себе во благо.
Существует огромное количество различных API сторонних сервисов, которые совершенно бесплатно можно интегрировать в свои проекты.
Базовые фреймворки
Эти вещи должен знать (ну или хотя бы понимать и знать где взять информацию) каждый iOS разработчик. Сюда можно включить CoreFoundation, SwiftFoundation, SwiftStandart, Cocoa Touch, UIKit, UIDynamics, CoreAnimations, DispatchQueue.
- Хорошая бесплатная книга про iOS - iOS notes for professionals
Погружаемся глубже
Приложения становятся все больше и сложнее. Количество модулей в проекте увеличивается. Встает вопрос об оптимизации написания кода. И тут на смену MVC приходит паттерн MVVM.
VIPER - еще один архитектурный паттерн.
- Разбор архитектуры VIPER на примере небольшого iOS приложения на Swift 4
- Сравнение архитектур Viper и MVVM: Как применить ту и другую
Coordinator - паттерн разработки iOS приложений, который целиком отвечает за навигацию между контроллерами, исключая Segue's в Interface Builder. На эту тему у меня есть хороший видео-пример написания простого приложения:
Реактивное программирование — парадигма программирования, ориентированная на потоки данных и распространение изменений. Это означает, что должна существовать возможность легко выражать статические и динамические потоки данных с помощью применяемых языков программирования, а также то, что нижележащая модель исполнения должна автоматически распространять изменения благодаря потоку данных. — Википедия
Данные темы тоже очень важные, но их можно на время пропустить, чтобы уделить больше времени практике и отработать уже пройденный материал.
Хранение данных
Рано или поздно, при проектировании приложения встанет вопрос о том, что нужно каким-то способом сохранять состояние приложение после его завершения. Или даже удаления. Есть много разных способов достичь этой цели. UserDefaults, CoreData, Sqlite, Realm, Serialize, Cloud.
Чуть позже я обязательно освещу эти темы подробно. Добавляй в закладку и подписывайся на Youtube канал. Статья будет обновляться и обрастать ссылками.
Отладка, Тестирование
В процессе написания кода неизбежно будут возникать ошибки. Не стоит из-за этого огорчаться. Прямо сейчас я рекомендую пойти на StackOverFlow и завести себе аккаунт. Там есть много ответов на типичные вопросы и ошибки новичков.
Собираем проект
Финиш. Сборка проекта. Тут стоит создать учетную запись iOS разработчика, присоединиться к программе Apple. Изучить правила и тонкости публикации приложений в магазине AppStore. Научиться работе с сервисами аналитики приложений.
Вывод
Шаг за шагом, изучай технологии описанные выше. Главное поставь цель. Начни с языка Swift. установи Xcode. Начни создавать приложения. Обязательно нужна практика, чтобы картина стала целостной в голове. Будь активным учеником, старайся сразу закреплять усвоенный материал примерами. Не нужно хвататься сразу за все. Так ты сможешь минимизировать трату времени в пустую. У тебя все получится. Удачи.
P.S. А если возникнут вопросы, не стесняйся оставлять комментарии тут на сайте, и под моими видео на YouTube. Буду рад помочь.