iOS Developer Roadmap
План развития iOS-разработчика со ссылками на материалы обучения. Версия 1.3, обновлялось в последний раз в мае 2023, но многие вещи актуальны до сих пор. База стабильна!
Введение
Я Артем Иванов, с 2012 года работаю в айти. В прошлом сооснователь и технический директор веб-продакшна Mechanica (раньше называлось ANMEDIO, ТОП100 продакшнов России). Долгое время занимался веб-разработкой, писал на php, ruby, js (react и nodejs), python, но душа как-то больше лежит к фронтенду. В 2019 понял, что хочу заниматься мобильной разработкой под iOS.
Поставил себе цель — войти в топ 1% iOS-разработчиков в мире. Правда, есть проблемка. Такого рейтинга даже нет. Ну это мелочи, по ходу дальше разберусь.
Первое, что я сделал, когда начал идти этой цели — составил план обучения. Потом пообщался с крутыми ребятами, узнал что мой план плохой, сделал его получше. И так раз 5-6. И только после этого начал двигаться в обучении.
На данный момент успел поработать на российских и зарубежных позициях iOS-engineer, iOS-teamlead и CTO американского стартапа (тоже мобильное приложение под айфон), постоянно корректируя этот план по ходу моей разнообразной карьеры.
Спустя три года могу сказать, что план норм. Скорректировал совсем в мелочах по ходу обучения. Попробовал поделиться с другими — тоже работает и вроде как не является ошибкой выжившего. Поэтому и решил поделиться этим с другими в надежде, что будет кому-то полезно.
Важно! Это далеко не финальная версия плана. Тут точно полно ошибок, опечаток и прочей неудобной шелухи. Я просто собрал кучу своих материалов с гугл-доков/трелло/закладок и собрал со своими комментариями. Найдете ошибки или будут мысли, что добавить — пишите мне в телеграм.
Прежде чем начать этот, прямо скажем, долгий путь, важно ответить себе на вопрос, а на кой черт мне это вообще нужно? Получить оффер в FAANG, запилить свое приложение, систематизировать знания, уйти-в-айти и зарабатывать 100500 тыщ/наносекунду — это все отличные цели, и они будут прямо влиять на процесс обучения. Но у каждой цели должны быть промежуточные результаты, которые будут давать вам мотивацию двигаться дальше.
Найдите мотиватор
Это не спринт, это марафон. Бежать надо будет далеко, изучать много и, это супер важно (!), регулярно. Поэтому найдите для себя промежуточные точки мотивации — делайте pet-проекты в open source, запускайте свои аппки в appstore, помогайте тем, кто знает чуть меньше чем вы, заведите технический блог, да просто ходите на сходки мобильщиков в бары в конце-то концов!
Постройте свое обучение так, чтобы получать удовольствие не только от финала (он ох как не скоро), а от всего процесса. Еще раз повторю. Это важно, правда. Кайфуйте от самого пути к цели, иначе грусть-печаль-выгорание-смерть-кладбище-кутья.
Но есть и хорошие новости! Если цель — устроиться iOS-разработчиком, то 80% этого плана вам просто не понадобится, вас схантят гораздо раньше.
В общем, ни в коем случае не претендую на последнюю истину. Лично мне этот план помог. Возможно, поможет и вам? В любом случае, enjoy!
Контекст и окружение
Я начал с этого пункта, так как по-моему это важнее всего. На человека больше всего влияет среда, в которой он находится.
Попробуем поместить себя в среду, в которой все вокруг будет постоянно напоминать о мобильной разработке и Swift.
Мобильник
-
Установите приложение Unwrap от Paul Hudson на свой айфон и замените любую вредную привычку на решение Swift-задачек.
-
Телеграм чаты и каналы. Окружите себя постоянным информационным потоком по мобильной разработке:
- SwiftBook — самый активный и большой чат по Swift
- Канал Redmadrobot — топовых ребят по мобильной разработке
- Mobile Library — чат по литературе о мобильной разработке
- iOS Good Reads — канал одного из самых популярных изданий про iOS-dev
- AppTractor — канал про мобильную разработку
- iOS Heads — канал про мобильную разработку под iOS
- CocoaHeads Chat — чат сообщества iOS-разработчиков
- iOS Events — канал про события, связанные с iOS
- Server Side Swift Developer — чат Swift-бэкэндеров
- Dodo Pizza Mobile — канал-блог про мобильную разработку от Додо Пиццы
-
Youtube и подкасты:
- Podlodka Podcast на Youtube и на Яндекс.Музыке
- CocoaHeads на Youtube и на Яндекс.Музыке
- SwiftBook на Youtube
- Академия re:Store на Youtube
-
Если читаете Medium, подпишитесь на раздел Swift Programming.
-
Подпишитесь в социалках на людей, которые занимаются мобильной разработкой: Александр Зимин, Егор Толстой, Александр Блинов, Константин Цховребов, Денис Неклюдов, Евгений Мацюк, Артем Зиннатуллин, Стас Цыганов.
Сообщества
Найдите комьюнити в вашем городе. В идеале по Swift. Хорошо, если по мобильной разработке или просто тусовка айтишников. В Самаре есть Samara IT Community и его маленькая часть — SITC.Mobile по мобильной разработке.
Найдите хотя бы одного единомышленника. Нужен buddy, кому вы сможете покидать мемчиков про тормознутый Xcode и обсудить прогресс друг-друга. В конкурентной среде обучение идет быстрее.
Общие основы
В айти есть база, которая нужна в любой дисциплине от фронтенда до девопса.
Алгоритмы
Лучшее, что есть в плане алгоритмов — Курс CS50. Серия лекций по Computer Science от Гарварда.
- Лекции CS50 2020 года на Youtube
- Оригинал курса на edx
- Курс с переводом от JavaRush
Прочитайте «Грокаем алгоритмы» (Бхаргава Адитья) — она несложная и клевая.
Терминал
Установите iTerm2 и пробуйте основные команды (или на русском).
- Подборка обучающих игр для изучения bash
- Bashcrawl — текстовая игра для изучения bash
- Игруля от RedHat
И еще важно
- Системы контроля версий — git, svn, mercurial
- Debugging, брейкпойнты и методы отладки
- Принципы: DRY, KISS, YAGNI
- Объектно ориентированное программирование
- Функциональное программирование
- Code Review и Leadership
Swift
По чему обучаться?
- Swift Playgrounds от Apple — для новичков
- Курс от Angela Yu на Udemy — для начинающих
- Курсы Стэнфорда CS193p — iPhone Application Development Spring 2020 и Developing iOS 11 Apps with Swift 2017-18
- Ray Wenderlich — лекции, план обучения и куча всего
- Hacking with Swift — мой любимый ресурс. Проект 100 days of Swift и 100 days of Swift UI
- NS Hipster
- Официальная документация Swift и перевод на Swiftbook
- WWDC — ежегодная конференция Apple для разработчиков
План обучения
- Simple values (const/vars, bool/int/float/binary/tuples)
- Collections (arrays, sets, dictionaries)
- Control flow (if, switch, for, while)
- Optionals, Optional unwrapping/binding
- Functions, closures
- Access control
- Structures
- Classes
- Enums
- Protocols and Extensions
- Error handling
- Generics
- Initializers
- Memory management (Stack and Heap, Value vs Reference type, MRC, ARC, Weak references, Retain cycles, Garbage collection, Memory leaks, Shallow and deep copying, Autorelease pool)
- Advanced operators
- Runtime, Method dispatch
- Multithreading and concurrency (POSIX and NSThreads, Perform selector family, GCD, NSOperation(Queue), Runloop, Synchronization, Problems, Race condition, Deadlock, Readers-writers problem)
- Swift backend, Vapor
Фреймворки Apple
- UIKit
- Foundation
- UserNotifications
- Core Location, Core Motion
- AVFoundation
- CoreAnimation / UIView.animate
- Жесты (Gesture) Responder Chain
- UITableView, UICollectionView
- Taptic Engine, UIFeedbackGenerator
- Working in background
- ViewController Lifecycle
- App Lifecycle
- tvOS, WatchKit
- SiriKit, Shortcuts, Spotlight
- CloudKit, HomeKit
- In-App purchases, StoreKit
- CoreML, Machine learning
- ARKit, AppClips
- Bluetooth, Connectivity, MFi
- SwiftUI
Библиотеки
Менеджеры зависимостей: Cocoapods, Swift Package Manager и Carthage.
Популярные библиотеки:
- Alamofire, Moya
- EasyPeasy
- SnapKit, Yoga
- MagicalRecord
- Lottie
Архитектура
Самый крутой сайт по паттернам — Refactoring Guru.
Что надо знать:
- MVC, MVVM, VIPER, MVP, SOA
- Redux
- Decorator (delegate)
- Facade
- Observer
- RxSwift/Combine
- Coordinator
- Mediator, Proxy
- Singleton
- Factory, abstract factory
- SOLID, DRY, KISS, YAGNI
- Protocol-oriented programming
Хранение данных
- NSUserDefaults
- Core Data
- KeyChain
- Plist
- Disk storage
- CloudKit
- SQLite
- Realm
- Firebase
- RxRealm, RxDataSources
Тестирование
Инструменты
- XCode
- Device Simulator
- Alternatives IDE (VSCode, AppCode)
- Swiftlint
- Sourcery
- Fastlane
- CI/CD (Jenkins, XCode server, Gitlab CI/CD, Bitrise, TeamCity)
- Google Firebase, AWS
- Swagger/Postman/Insomnia/Charles
- AppStore Publishing (TestFlight)
- Apple Certificates
- In-app analytics
- XCode localization
Безопасность
- Keychain
- iCloud Storage
- Face ID, Touch ID
- Access to Protected Resources
- App Files Encrypting
Верстка и UI
Инструменты дизайнера: Figma, Sketch, Adobe XD, Zeplin.
Верстка:
- SwiftUI
- Storyboard in Interface builder
- Storyboard in code
- Light/dark themes
- Navigation Controller
- Transition Delegate
- UILabel, UIButton, UITextField
Изучите Apple Human Interface Guidelines.
Запросы и API
- REST API
- GraphQL
- JSON
- WebSocket, WebRTC
- XML
- Codable
- Protobuf
Objective C
Несмотря на то, что сейчас на ObjC редко пишут, будет не лишним узнать про Objc runtime и Method swizzling.
Будет не лишним
- Appstore Connect — публикация приложения
- ASO — оптимизация текстов приложения для продвижения
- Flutter — кроссплатформенный фреймворк от Google
- React Native — кроссплатформенный фреймворк от Facebook
- Тайм-менеджмент и планирование — техника Pomodoro и трекинг времени