10 навыков и знаний необходимых начинающему iOS разработчику

    image

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

    Ко мне и коллегам на собеседования приходит много кандидатов на открытые у нас вакансии, и я отчетливо вижу у многих новичков отсутствие базовых знаний или просто неуверенное владение ими. Хотя в интернете и много статей, книг и курсов (платных и бесплатных), из которых можно получить необходимые знания, не всегда просто понять, на изучении каких тем стоит сконцентрироваться.

    В этой заметке я поделюсь информацией про то, какие навыки и знания я считаю важными для начинающего iOS разработчика, попробую объяснить зачем они нужны и дам ссылки на материалы для их изучения. 

    Материал адресован в первую очередь тем, кто хочет начать обучение, восполнить пробелы или понять свою готовность работать iOS разработчиком. Буду стараться пояснить все простыми словами.

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

    Первые шаги


    Перед тем как углубляться в последующие темы, я рекомендую подготовить фундамент, а именно 
- пройти (прослушать и воспроизвести все задания) бесплатный курс CS 193P от Stanford University и прочитать на сайте Apple документацию по Swift.

    Абсолютно нормально, если вы при этом поймете или запомните не все темы, зато у вас появится основа — структурированные базовые понимания устройства iOS приложений и конструкций языка Swift. Уделив время этим вещам на старте, вам будет сильно проще добавлять знания по каждой из тем.

    1. Auto Layout, Storyboard, верстка из кода


    Создание интерфейса приложения на основе макета — базовый навык для iOS программиста. Знать стоит не только основные компоненты, из которых собирается интерфейс (UIView, UILabel, UIButton, UIImageView и т. д.), но и то как их расположить на экране, чтобы добиться желаемого положения и размера на разных по размеру экранах, в том числе при повороте устройства. 

Для простоты я бы выделил 3 способа создания интерфейса:

    • визуальный способ через Interface Builder
    • полностью описать интерфейс из кода
    • комбинированный вариант, когда часть содержимого экранов заведена через Interface Builder, а их настройка вынесена в код.


    Навыков верстки интерфейса только через через Interface Builder на StoryBoard вам может быть недостаточно. Помимо того, что через StoryBoard вы сможете сделать далеко не все, нужно понимать, что над крупными приложениями работают несколько разработчиков, и для объединения результатов их работы используется система контроля версий (чаще всего это Git). Когда несколько человек работают над одним участком кода, результат их работы не всегда возможно объединить автоматически. Если интерфейс был сверстан программистом из кода, проводить слияния проще и быстрее чем в случае, когда код был сгенерирован Interface Builder-ом.

    
Чтобы освоить тему, рекомендую:


    Как понять, что вы освоили тему в достаточной мере? Возьмите любое из приложений, которыми вы пользуетесь на iPhone. Можно начать со стандартных, к примеру, Apple Music. Попробуйте полностью воспроизвести один или пару экранов, которые вы видите, а также их поведение при повороте.

    image

    2. Жизненный цикл ViewController


    Предположим для простоты, что каждый экран в мобильном приложении — это ViewContoller, а точнее — это наследник класса UIViewContoller. iOS разработчику важно знать, как устроен жизненный цикл экрана, а точнее — какие методы будут выполняться при подготовке, появлении, повороте, уничтожении и других состояниях экрана.

    image

    Материалы по теме:


    3. Работа с UITableView и UICollectionView


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

    Материалы по теме:


    4. Grand Central Dispatch


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

    Grand Central Dispatch — одна из важных и довольно непростых тем, которую вам точно стоит знать, если вы собираетесь программировать под iOS.

    Материалы по теме:


    5. Работа с сетью, получение данных из JSON


    Какие из ваших любимых приложений продолжают работать без подключения к Интернету? Думаю, что если откинуть игры, вы увидите, что большая часть приложений работает с данными из сети. Что в этом случае должен уметь начинающий iOS разработчик? Думаю, что создать сетевой запрос, получить и обработать данные. Знаний о URLSession для начала должно хватить. Это самый базовый подход, и я рекомендую в первую очередь освоить применение именно его. Возможно будет не лишним знать о существовании такой популярной библиотеки как Alamofire, но это не должно быть в ущерб URLSession.

    Чаще всего данные, которые приходят в приложения по сети, передаются в формате JSON. Нужно уметь эти данные получить и обработать, к примеру, вывести на основе их какой-нибудь список. При этом желательно, чтобы вы умели делать это не только с помощь одной из популярных библиотек, к примеру, SwiftyJSON, но также владели стандартными средствами языка, были знакомы с Codable.

    Довольно подробно про работу с URLSession рассказано в статье от Audrey Tam. Материалов по работе с JSON довольно много, можно посмотреть статью Anand Nimje.

    Чтобы освоить тему на практике рекомендую сделать приложение с прогнозом погоды, в котором есть поле ввода названия города, создается запрос к API (подойдет OpenWeatherMap), и на основе полученного JSON выводится информация о погоде.

    6. Знания Swift


    Тут очень поможет прочтение документации. Изучение Swift может занять время, но на выходе вы должны взять с собой и свободно ориентироваться в следующих темах: 

    • классы
    • структуры
    • перечисления
    • протоколы
    • коллекции
    • методы работы с коллекциями (перебор, сортировка, фильтрация, map, reduce и т.д.)
    • работа с опционалами и исключениями

    Эти темы нужно знать и владеть ими в том объеме, в котором они приведены в документации — все это пригодится в работе. Очень хорошо, если для каждой темы вы можете привести пример задачи, которая с их помощью решается. 

    Тщательно разберите отличия структур и классов — не только потому что этот вопрос вам зададут на собеседовании с большой вероятностью, просто это нужно будет в работе.

    Параллельно с прочтением документации по Swift можно смотреть видео марафон по Swift Алексея Скутаренко. Этот марафон не заменит прочтение документации из-за того, что в нем раскрыты не все темы, а еще он опубликовал 4 года назад, и за это время в Swift произошли небольшие изменения. Алексей проделал грандиозный труд, полезного материала и мыслей там много.

    7. Сильные и слабые ссылки, ARC, утечки памяти


    Как сделать так, чтобы у приложения не было проблем с нехваткой памяти?
    Что такое ссылки, какие бывают типы ссылок? Что именно делает ARC, и как избежать Retain Cycle, и что это вообще такое? Тема не сложная, но крайне важная. Ознакомиться можно, к примеру, в SwiftBook.

    8. Протоколы и делегаты


    При разработке под iOS вы часто будете встречать делегирование, а точнее передачу отвественности от одного объекта к другому. 
Для примера классическая задача — таблица с ячейками, в каждой из которых есть кнопка «добавить элемент в избранное». Вы должны уметь создать для этой ситуации протокол, назначить делегат, реализовать у него поддержку протокола. 

    Материалы по теме:



    9. Архитектурные подходы: MVC, MVVM, MVP, VIPER


    Для простоты создания и поддержки программных продуктов при разработке их разделяют на отдельные блоки. К примеру, один блок отвечает только за работу с данными, а другой за внешний вид. У такого подхода есть ряд преимуществ, к примеру, вы сможете изменить внешний вид, не трогая логику, или при необходимости сможете поменять источник данных, опять же не меняя остальные части приложения. Очевидно, что эти подходы используются не только в iOS, скажу больше — они пришли сюда из других платформ. Есть несколько устоявшихся подходов к разделению ответсвенности между разными блоками, для работы с iOS я рекомендую хорошо разобраться с MVC и MVVM.

    Вместо нормального объяснения разделения отвественности в архитектуре я часто слышу на собеседованиях, что-то вроде «MVC это плохо, потому что это Massive View Controller, а MVVM гораздо лучше».

    Материалы по теме:


    10. Хранение данных, Core Data


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

    • Keychain для чего-то небольшого и секретного
    • UserDefaults для небольших настроек
    • Core Data для хранения объектов, связей между ними

    В этом списке нет SQLite, Realm, Firebase. Осваивать их можно при желании, но точно не в ущерб приведенным выше способам. Если у вас уже есть опыт работы с SQL, то использование SQLite на iOS я рекомендую освоить про запас, весьма вероятно, что вам такой подход к хранению покажется удобнее.

    Материалы по теме:


    Итог


    Я считаю, что равномерно распределив указанные выше темы и уделяя учебе от 20 часов в неделю, реально даже с нуля освоить всё это за срок в 4-5 месяцев.
    С таким багажом знаний можно начинать брать заказы на небольшие приложения или ходить на собеседования. К примеру, при наличии вакансии мы бы человека с таким набором знаний взяли в нашу мобильную команду.

    Напишите свое законченное приложение


    Я уверен, что iOS разработчику стоит иметь своё приложение. Речь идет про законченное приложение, которое решает какую-то нужную задачу или проблему (ничего страшного, если решает только для автора приложения). В процессе написания своего приложения вы столкнетесь с творческими задачами поиска подходящих решений, это не только позволит лучше закрепить теоретические знания, но и доставит вам удовольствие.

    Не стесняйтесь своих приложений, показывайте их на собеседованиях. Даже если приложение простое, даже если дизайн делали сами, и получилось не самое красивое приложение (если приложение нужное, функционал потом можно расширить, а дизайн сделать новый).

    P.S.


    Пожалуйста, расскажите в комментариях, какие темы вы считаете важными для освоения начинающими iOS разработчиками
    Share post

    Similar posts

    Comments 12

    Only users with full accounts can post comments. Log in, please.