Архитектура компьютера: как работает память, процессор и хранение данных
Работа компилятора и интерпритатора
Что такое алгоритм и как они составляются
Шаг 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 или нажать на стрелочку