Skip to content

Latest commit

 

History

History
112 lines (111 loc) · 8.22 KB

Index.md

File metadata and controls

112 lines (111 loc) · 8.22 KB

Оглавление

  1. Введение
    1.1. Подход к изучению программирования
    1.2. Примеры на языках JavaScript, Python и C
    1.3. Моделирование: абстракции и повторное использование
    1.4. Алгоритм, программа, синтаксис, язык
    1.5. Декомпозиция и разделение ответственности
    1.6. Обзор специальности инженер-программист
    1.7. Обзор парадигм программирования
  2. Базовые концепты
    2.1. Значение, идентификатор, переменная и константа, литерал, присвоение
    2.2. Типы данных, скалярные, ссылочные и структурные типы
    2.3. Контекст и лексическое окружение
    2.4. Оператор и выражение, блок кода, функция, цикл, условие
    2.5. Процедурная парадигма, вызов, стек и куча
    2.6. Функция высшего порядка, чистая функция, побочные эффекты
    2.7. Замыкания, функции обратного вызова, обертки и события
    2.8. Исключения и обработка ошибок
    2.9. Мономорфный код в динамических языках
  3. Состояние приложения, структуры данных и коллекции
    3.1. Подходы к работе с состоянием: stateful and stateless
    3.2. Структуры и записи
    3.3. Массив, список, множество, кортеж
    3.4. Словарь, хэш-таблица и ассоциативный массив
    3.5. Стек, очередь, дэк
    3.6. Деревья и графы
    3.7. Проекции и отображения наборов данных
    3.8. Оценка вычислительной сложности
  4. Расширенные концепции
    4.1. Что такое технологический стек
    4.2. Среда разработки и отладка кода
    4.3. Итерирование: рекурсия, итераторы и генераторы
    4.4. Структура приложения: файлы, модули, компоненты
    4.5. Объект, прототип и класс
    4.6. Частичное применение и каррирование, композиция функций
    4.7. Чеининг для методов и функций
    4.8. Примеси (mixins)
    4.9. Зависимости и библиотеки
  5. Распространенные парадигмы программирования
    5.1. Императивный и декларативный подход
    5.2. Структурированное и неструктурированное программирование
    5.3. Процедурное программирование
    5.4. Функциональное программирование
    5.5. Объектно-ориентированное программирование
    5.6. Прототипное программирование
  6. Антипаттерны
    6.1. Общие антипаттерны для всех парадигм
    6.2. Процедурные антипаттерны
    6.3. Объектно-ориентированные антипаттерны
    6.4. Функциональные антипаттерны
  7. Процесс разработки
    7.1. Жизненный цикл ПО, анализ предметной области
    7.2. Соглашения и стандарты
    7.3. Тестирование: юниттесты, системное и интеграционное тестирование
    7.4. Проверка кода и рефакторинг
    7.5. Оценка ресурсов, план и график развития
    7.6. Анализ рисков, слабые стороны, не функциональные требования
    7.7. Координация и корректировка процесса
    7.8. Непрерывная интеграция и развертывание
    7.9. Оптимизация множества аспектов
  8. Расширенные концепции
    8.1. События, таймеры и EventEmitter
    8.2. Интроспекция и рефлексия
    8.3. Сериализация и десериализация
    8.4. Регулярные выражения
    8.5. Мемоизация
    8.6. Фабрики и пулы
    8.7. Типизированные массивы
    8.8. Проекции
    8.9. I/O(ввод-вывод) и файлы
  9. Архитектура
    9.1. Декомпозиция, именование и связывание
    9.2. Взаимодействие между компонентами ПО
    9.3. Связывание через пространства имен
    9.4. Взаимодействие с вызовами и колбэками
    9.5. Взаимодействие с событиями и сообщениями
    9.6. Интерфейсы, протоколы и контракты
    9.7. Луковая (onion) или слоеная архитектура
  10. Основы параллельных вычислений
    10.1. Асинхронное программирование
    10.2. Параллельное программирование, общая память и примитивы синхронизации
    10.3. Асинхронные примитивы: Thenable, Promise, Future, Deferred
    10.4. Сопрограммы, горутины, async/await
    10.5. Адаптеры между асинхронными контрактами
    10.6. Асинхронная и параллельная совместимость
    10.7. Подход к передаче сообщений и модель акторов
    10.8. Асинхронная очередь и асинхронные коллекции
    10.8. Lock-free структуры данных
  11. Дополнительные парадигмы программирования
    11.1. Обобщенное программирование
    11.2. Событийное и реактивное программирование
    11.3. Автоматное программирование: конечные автоматы (машины состояний)
    11.4. Специализированные языки для предметных областей (DSL)
    11.5. Программирование на потоках данных
    11.6. Метапрограммирование
    11.7. Динамическая интерпретация метамодели
  12. Базы данных и постоянное хранение
    12.1. История баз данных и навигационные базы данных
    12.2. Ключ-значение и другие абстрактные структуры данных
    12.3. Реляционная модель данных и ER-диаграммы
    12.4. Бессхемные, объектно- и документо-ориентированные базы данных
    12.5. Иерархическая модель данных и графовые базы данных
    12.6. Колоночные базы данных и in-memory базы данных
    12.7. Распределенные базы данных
  13. Распределенные системы
    13.1. Межпроцессное взаимодействие
    13.2. Бесконфликтные реплицированные типы данных (CRDT)
    13.3. Согласованность, доступность и распределенность
    13.4. Стратегии разрешения конфликтов
    13.5. Протоколы консенсуса
    13.6. CQRS, EventSourcing