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