Как стать iOS-разработчиком?
Привет! На связи KTS и наш привлеченный эксперт по направлению iOS-разработки Александр.
Мобильные устройства незаменимы для коммуникации и социальной, деловой и культурной сфер жизни. Они помогают нам оставаться на связи с друзьями, работать, развлекаться и повышать продуктивность. iOS, несмотря на введенные санкции и сокращение продаж техники в РФ, остается популярной платформой, пользователи которой ожидают качественные и стабильные приложения для смартфонов, планшетов, умных часов и ТВ‑приставок.
По данным Росстата 78,1% опрошенных используют мобильные устройства. При этом в мире на конец 2022 года зафиксировано более 1,2 миллиарда активных iPhone (источник). По данным Tinkoff Strategy Day уже в 2018 году клиентов мобильных приложений было больше пользователей Web‑версий — и разрыв продолжает расти (источник).
Доля мобильной операционной системы Apple на январь 2023 года составляет почти 28% всего рынка (источник). Тренда на снижение использования нет, и пользователи по‑прежнему хотят «яблочные» гаджеты: компания Apple является четвертым по популярности производителем первого квартала 2023 года в России (источник). Интерес к направлению со стороны работодателей сейчас тоже остается стабильным. Так, крупные отечественные компании (например, Тинькофф или Яндекс) регулярно запускают стажировки и обучающие программы для начинающих специалистов.
Хотя стоит отметить, что в 2022 году общее число вакансий в России для разработчиков мобильных приложений под iOS и Android снизилось на 20% и 19% соответственно и составило 15,6 тыс. и 17,3 тыс. Эксперты связывают это с ростом числа проектов под отечественные ОС, но, скорее, дело в низкой базе для российских аналогов, общем сокращении рынка найма джуниор‑позиций и оттоке специалистов за рубеж.
Зарплата джуниор iOS‑разработчика в России в 2023 году составляет от 80 000 до 100 000 рублей, при этом медианная зарплата найма с учетом всех уровней сильно выше: около 230 000 рублей. На доход влияют опыт работы (ключевой фактор), расположение, форма занятости. Компании прежде всего ищут специалистов со стажем от трех лет, снижая риск неудачного найма и сокращая за счет опыта кандидатов время их адаптации на проектах.
В целом, индустрия остается многообещающей, поэтому начать свой путь в IT или переключиться с другой специальности на карьеру iOS‑разработчика будет хорошим решением. Но перед тем, как браться за сложное обучение, важно задуматься, зачем это нужно и явно определить цели. Например, это может быть желание найти работу в крутых технологических компаниях РФ или за рубежом, создание своего приложения, улучшение знаний или получение большой зарплаты. Чтобы добиться успеха, нужно заранее понимать, как будешь это делать, какие будут промежуточные итоги и как будешь мотивировать себя на каждом этапе.
Риски
Безусловно, выбор iOS‑направления связан с риском полного запрета продаж техники и блокировки программ разработчика Apple для российского бизнеса. Авторитарный стиль калифорнийской компании много раз подвергался критике. Только в последние пару лет им всерьез занялись регуляторы разных стран, и лед, что называется, тронулся.
В ЕС планируют ввести требование для всех гаджетов о наличии порта USB‑C и, что более важно, установке приложений из сторонних источников в рамках закона ЕС о цифровых рынках (DMA), положения которого должны вступить в силу в марте 2024 года.
Правительства Южной Кореи и Нидерландов добились от Apple разрешения использовать сторонние системы оплаты в приложениях.
Сенат в США проголосовал за антимонопольный закон против Google Play и Apple App Store, что должно помочь запуску альтернативных магазинов приложений и там, о чём мы уже писали.
Российские законотворцы решили не отставать и тоже разработали проект об установке на устройства Apple приложений не из App Store.
Сама компания открыто выражает недовольство требованиями регуляторов, но, скорее всего, ей придется подчиниться. Так что 2023 и 2024 годы покажут, насколько удастся надломить политику Apple под внешним давлением. Как только операционная система станет более открытой, потребность в разработчиках возрастет еще больше.
Hard skills
Итак, что должен знать и уметь человек, чтобы стать iOS разработчиком в 2023?
Знания, которые необходимы в работе, можно разделить на три категории, каждая из которых является основой для следующего уровня.
фундаментальные: устройство компьютера, алгоритмы, структуры данных, парадигмы программирования, их принципы. Они медленно устаревают и будут актуальны даже через 10 лет.
языки программирования: синтаксис, типы данных, фишки. Обновляются быстрее знаний фундаментального уровня, поэтому важно отслеживать, чтобы оставаться актуальным на рынке.
прикладной уровень: платформа, популярные фреймворки. Нередко подвержены хайпу и могут уйти с радаров так же быстро, как и появились (например, Catalyst).
Чтобы стать senior‑инженером, погружаться стоит во все направления: фундамент даст уверенность в завтрашнем дне, а знакомство с популярными фреймворками — в сегодняшнем.
При этом в индустрии на собеседованиях проверяются все уровни знаний. Чаще всего, вопросы разделены по 4-м традиционным блокам: язык, платформа, архитектура и многопоточность.
Темы для собеседований кандидатов
Дальше рассматривается обучение и формирование старта в iOS‑направлении именно через входные испытания при поиске работы (так как цель — это job offer), хотя важно отметить три навыка, которые не попали в таблицу, но их изучение будет не лишним для начала карьеры.
Disclaimer 1: London is the capital of Great Britain
Знание английского языка является необходимым навыком для будущего iOS‑разработчика (да и подавляющего числа IT‑специалистов тоже). Большинство документации, руководств и инструкций написаны на английском языке, значительная часть материалов и уроков на тему программирования и создания приложений для iOS только на английском. Кроме того, знание английского позволит разработчику делиться информацией и опытом на профильных ресурсах и упростит выход на мировой рынок найма.
Стоит обратить внимание на профильные для IT курсы, которые есть у многих школ: Яндекс.Практикум, SkyEng, Udemy.
Disclaimer 2: CS 101
Как было отмечено выше, изучение любой специализации в разработке должно основываться на фундаменте базовых знаний: структурах и алгоритмах данных, работы сетей, понимании устройства компьютера. Если совсем нет опыта, то стоит начать с двух вещей: Гарвардского курса программирования CS50 и книги «Код. Тайный язык информатики».
Также будет полезным погружение в структуры и алгоритмы обработки данных. С практической точки зрения мобильного разработчика, владение ими пригодится при оптимизации производительности приложения. Например, знание алгоритмов поможет отсортировать массив быстрым и эффективным способом (можно отдать это и в руки ChatGPT, но понять, что за код он написал, все равно важно).
Можно приглядеться к классической книге «Алгоритмы. Построение и анализ» (Кормен, Лейзерсон, Ривест). Еще рекомендуется изучить Data Structures & Algorithms in Swift от команды Kodeco (ex. Рэй Вендерлих).
Disclaimer 3: Git
Системы контроля версий помогают ориентироваться в коде и отслеживать его изменения. Самой популярной является git (источник) — представить ежедневную работу без него не получится.
Для изучения пригодятся две ссылки.
При этом сам по себе git — это инструмент для командной строки, у него нет графического интерфейса, поэтому для него существует много популярных UI‑клиентов. Их список можно найти на официальном сайте.
В дополнение стоит разобраться с моделями ветвления кода.
После того, как три общих темы будут закрыты хотя бы на минимальном уровне, стоит приступать непосредственно к iOS‑направлению.
Язык
Язык программирования — базовый инструмент ежедневной работы.
Согласно опросу 2022 года, для старта в iOS‑разработке достаточно одного языка — Swift. Основные ресурсы для его изучения.
Во‑первых, очень приличная официальная документация по языку. Времена, когда Apple почти не рассказывала, как пользоваться ее инструментами, прошли.
Во‑вторых, потрясающая книга от уже упомянутой команды Kodeco. В ней подробно разобраны основы языка, также есть отсылки к внутреннему устройству компьютеров — необходимый минимум iOS‑разработчика.
В третьих, видео на youtube, например Swift Programming Tutorial | FULL COURSE.
Для закрепления знаний важно ежедневно практиковаться. Тут помогут различные тренажеры языка. Например, приложения Unwrap, Свифти‑Квиз, Qwifty! или swiftQwiz. Также полезно «набивать руку» в решении простых задач с LeetCode или CodeRun. Для проверки необязательно покупать подписку — можно всегда попросить помощь и подсказку у, опять же, ChatGPT. Как им пользоваться из РФ, написано множество статей: например, в журнале «Код» или на dtf.ru.
Основными аспектами при изучении Swift будут
Типы данных: Числа, Строки, Коллекции и так далее, —, а также понимание value и reference семантики. Важно уметь создавать свои классы и структуры и делать между ними осознанный выбор.
Функциональное программирование, но только самые основы: функции высшего порядка и их chaining. Про каррирование на старте можно не думать.
Generics, PATs, type erasure.
Диспетчеризация методов.
Обработка ошибок.
Memory management: стек и куча, MRR и ARC, copy‑on‑write, capture list, escaping и non‑escaping closures.
Изучаем Xcode
После прекращения поддержки AppCode альтернатив Xcode в списке IDE для платформ macOS, iOS, watchOS и tvOS не осталось.
При знакомстве с Xcode уделить внимание следующим моментам.
Учимся работать с playground.
Изучаем основные модули программы и знакомимся со списком горячих клавиш.
Учимся создавать сниппеты для более быстрой работы с кодогенерацией.
Учимся работать с дебаггером, отлаживать приложения, работать с симулятором, memory grap и view debugger.
НЕ учимся работать с Interface builder и Storyboard Editor. Я не противник создания UI‑приложения в визуальном редакторе, но большинство вакансий предполагают, что кандидат верстает именно кодом.
Платформа
iOS‑приложения (как и iPadOS, tvOS, watchOS) — это, прежде всего, фронтальные приложения, с которыми взаимодействует пользователь. Основа их разработки — удобный пользовательский интерфейс. Для его создания можно использовать фреймворки UIKit или SwiftUI.
UIKit является более старым, но и более распространенным в iOS‑разработке. SwiftUI появился в 2019 году и предназначен для создания пользовательских интерфейсов с помощью декларативного подхода. Сейчас сложно выделить конкретный подход: что UIKit, что SwiftUI будут жить рядом бок о бок еще долгое время. Так что изучать стоит оба фреймворка.
Disclaimer
Показательно использование SwiftUI внутри самой Apple. Год к году он становится популярнее, хотя и присутствует пока что только в ¼ всех бинарных файлов iOS. Хотя, что важнее, его проникновение растет быстрее увеличения общего числа бинарей.
UIKit
При изучении особое внимание нужно уделить вопросам.
UIView и UIWindow.
UIViewController, его жизненный цикл и событийная модель.
frame и bounds, Auto Layout.
Обработка нажатий: Touches, Gestures, hit testing.
UIApplication, SceneDelegate.
Offscreen rendering и render server.
Для старта рекомендую курс «UIKit c нуля». Использовать сторонние фреймворки для верстки вроде SnapKit или PinLayout на старте не советую: anchors выглядят довольно компактно и просты в изучении.
Отдельного внимания достойны анимации. Тут рекомендую книгу опять же от Kodeco — «iOS Animations by Tutorials».
SwiftUI
При изучении особое внимание важно уделить темам.
View и его жизненный цикл
Widgets, Text, Button, Image и так далее.
Container views: HStack, VStack, ZStack, Group и так далее.
Layout: padding, divider, spacer, frame и так далее.
Навигация: NavigationView и NavigationLink.
View modifiers.
Property wrappers.
Переиспользуемость элементов SwiftUI и UIKit.
Вследствие постоянного изменения API при погружении в SwiftUI, прежде всего, следует обратить пристальное внимание на официальную документацию и туториалы. Альтернативной будет часто обновляемая книга от команды Kodeco «SwiftUI Apprentice».
А уже после, для закрепления базовых знаний по Xcode, SwiftUI и UIKit, можно пробежаться по курсу от Apple «Develop apps for iOS».
Pet-проект
Для оттачивания навыков важна постоянная практика. Как говорится, код должен быть в руках. Одним из вариантов будет создание pet‑проекта в момент, когда уже есть база языка и среды разработки. Чтобы найти идею, нужно анализировать свою рутину, проблемы, с которыми сталкиваетесь на транспорте, при вождении, питании, обучении и так далее. Не бойтесь что‑то копировать!
Интересные макеты проектов для мобильных приложений есть на Behance или Dribble. При этом важно при их выборе руководствоваться Apple Human Interface Guidelines.
Для погружения вглубь создания макетов приложений можно изучить основы Figma. Иногда в компаниях еще встречаются Sketch, Zeplin, Adobe XD, но скорее как исключение.
Сервисы для разработки интерфейсов
Базовый навык, который должен быть у начинающего разработчика, — умение посмотреть отступы, изучить свойства элемента на макете и, конечно, уточнить у дизайнера, что он имел в виду