-
Шаг 1. Базовые знания
- Архитектура компьютера: как работает память, процессор и хранение данных
- Работа компилятора и интерпритатора
- Что такое алгоритм и как они составляются
-
Шаг 2. Основы языка Swift
- Базовые типы данных
- Функции
- Условные операторы и конструкторы
- Замыкания
-
Структуры, классы и перечисления
- Объектно-ориентированное программирование (ООП)
- Композиция и наследование
- Инициализация и деинициализация
-
Протоколы и расширения
- Протокол ориентированное программирование (POP)
- Обработка ошибок и исключения (exceptions)
- Универсальные шаблоны (Generics)
- Method Dispatch (Диспетчеризация методов)
- ARC и управление памятью
-
Шаг 3. Алгоритмы и структуры данных
- Big-O notation
- Массивы
- Строки (Strings)
- Словари (HashMap, Dictionary)
- Set (набор, множество)
- Куча (Heap)
- Стэк (Stack)
- Очередь (Queue)
-
Списки
- Односвязный (Linked list)
- Двусвязный (Double linked list)
-
Бинарное дерево
- Breadth First Search(BFS)
- DFS (Depth-first search)
-
Алгоритмические задачи
- Решение алгоритмических задач хорошо развивает навык писать код и мыслить алгоритмами. Особенно на первых этапах это очень важное занятие
-
Шаг 4. UIKit
-
Принципы построения интерфейсов
- Human Interface Guidlines
-
Работа со списками
-
UITableView
- Delegate и DataSource
- Создание кастомных ячеек
-
UICollectionView
- Delegate и DataSource
- Создание кастомных ячеек
- UICollectionFlowLayout и динамическое изменение размера ячеек
- UIScrollView + UIStackView
-
Базовые UI элементы
- UIView
- UILabel
- UITextField и UITextView
-
UIControl и его наследники: UIButton, UISwitch
- hit Test и Responder chain
- Gesture Recognizers
-
AppDelegate и SceneDelegate: что это и зачем
- Жизненный цикл приложения
-
Верстка UI
-
AutoLayout: что такое констрейнты и как они работают
- Программная работа с констрейнтами
- Работа с констрейнтами в Interface Builder'e
- Intrinsic Content Size
- Hugging & Compression Priority
- Верстка на frame
- Верстка UI с использованием UIStackView
-
Навигация
- UINavigationController
- UITabBarController
- Router
- Coordinator
-
Шаг 5. Архитектуры
-
Принципы
- SOLID
- DRY
- KISS
-
Архитектурные паттерны
- MVC, MVP
- MVVM
- VIPER
- Redux
- MVI (Для SwiftUI)
-
Dependency Injection
- Swinject
-
Шаг 6. SwiftUI
-
Основы SwiftUI
-
Структура приложения
- @main и App
- Scene и WindowGroup
-
Основные элементы
- Text
- Image
- Button
- Модификаторы
-
Работа со списками
- HStack, VStack, ZStack
- List
- Section
- Отрисовка и анимации
- Навигация в SwiftUI
- Архитектура в SwiftUI
- UIKit + SwiftUI
- Проблемы RunTime в SwiftUI
-
Шаг 7. Многопоточность
-
Проблемы в многопоточности
- Race conditions
- Deadlock
- Read write
- Асинхронное программирование
- Grand Central Dispatch
- Operations
- NSThread
- RunLoop
- Synchronize
- Async / await
- Swift Concurrency
- Дебаггинг в Xcode. Memory Graph & Leaks
-
8️⃣ Шаг 8. Сетевое взаимодействие
- Как работают сети? Http/https, UDP, TCP, маршрутизация
- Из чего состоят запросы, как ходит трафик в интернете
- URLRequest, URLSession
- Форматы данных: JSON, XML
- Кодирование и декодирование (Codable)
- Rest API, GraphQL
- Сокеты и Поллинг
- Разработать сетевой слой (Network Layer)
- Alamofire, Moya
- Swift Package Manager и Cocoapods
-
9️⃣ Шаг 9. Работа с данными
- File Manager, Bundle, Sandbox
- User Defaults
- Keychain
- Удаленные хранилища, Firebase
-
Базы данных
- Какие существуют
-
CoreData
- Container, Store
- Managed Objects
- Predicates
- SwiftData
- Для лучшей практики можно свой сетевой слой заиспользовать с удаленным хранилищем, например Firebase
-
🔟 Шаг 10. Подготовка к трудоустройству
-
Процессы работы в команде
- Scrum
- Kanban
- Agile
- Просмотреть все что изучено, упаковать свой опыт
- Изучить рынок, чтобы понимать какой стек сейчас актуальнее и что требуют
- Подготовить резюме. Рекомендую делать несколько копий под разные стеки и разные компании
- Составить сопроводительное письмо
- Определиться чего хочется: искать сразу работать или есть возможность пойти на стажировку в бигтех компанию
- Как пользоваться этим Road map?
По горизонтали расположены темы, которые необходимы для изучения
Для удобства, я выделил эти темы в блоки, в зависимости от этапа, когда это необходимо знать
Чтобы изучение было максимально эффективным, двигайся по темам постепенно и не переходи к следующей теме, пока не освоишь предыдущую. Нет смысла "проваливаться глубже в дерево", если не освоил предыдущий уровень
Для более эффективного изучения заведи себе базу знаний, подойдет для этого Notion, Obsidian или Яндекс Wiki
-
Для продвинутых
-
Изучение Xcode
- Debugging и отладка
- Instruments
- XCTests, XCUITests
- Структурирование проекта по слоям
-
Автоматизация
- Fastlane
- CI/CD (Jenkins, GitHub Actions ...)
- Xcode Cloud
- Sourcery
-
Полезные тулзы
- Swiftlint - линтер с правилами для проверки чистоты кода. Очень помогает научиться писать код сразу чисто, а не исправлять когда уже все доделано
- Swinject - тулза для работы с зависимостями. Контейнер Dependency Injection
- SnapKit - фреймворк для удобной работы с версткой кодом на UIKit'e
-
Работа с памятью
- Stack и heap
- Value vs reference types
-
ARC
- weak reference
- strong
- unowned
-
MRC
- release/retain
- autorelease pool
- Garbage collection
- Retain cycles
- Shallow and deep copying
-
Системы контроля версий
-
GIT
- Создание репозитория и настройка
- Создание веток
- Commit
- Merge и конфликты при мерже
- Rebase и Rebase Interactive
- Pull request и Code review
- Лучшие практики при работе с гитом в командах
- Git Flow
- Для общего развития SVN, CSV
-
Функциональное программирование
-
RxSwift
- Obervers
- Drivers
- Subscribers
- CombineLatest
- Combine
-
Архитектурные знания
-
Паттерны проектирования
-
Порождающие
- Абстрактная фабрика
- Фабричный метод
- Строитель
- Прототип
- Одиночка
-
Поведенческие
- Цепочка обязанностей
- Команда
- Итератор
- Посредник
- Снимок
- Наблюдатель
- Состояние
- Стратегия
- Шаблонный метод
- Посетитель (визитор)
-
Структурные
- Адаптер
- Мост
- Компоновщик
- Декоратор
- Фасад
- Легковес
- Прокси
- System Design - очень полезные знания, чтобы научиться правильно проектировать. Также есть такая секция собеседований
- Анти паттерны
- Модуляризация
-
8️⃣ Soft скиллы и не функциональные требования 😁
- Интервью и собеседования
- Менторство: стороннее или внутри компании
- Работа с документацией
- Этот блок для тех, кто уже изучил первую ступень. Здесь я собрал те темы, которые помогут углубиться в iOS разработку
Скорее всего, многие из этих тем пригодятся и при трудоустройстве Junior iOS разработчиком. Не забивай на них))
- Для изучения можно перейти по ссылке https://refactoring.guru/ru или нажать на стрелочку