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