- Значение и тип данных
- Идентификаторы: переменная и константа, аргумент и параметр
- Литерал, выражение, оператор
- Блок кода, цикл, условие
- Процедура и функция
- Модули, компоненты, библиотеки
- Языки и парадигмы программирования
- Технологические стеки
- Отладка, обработка ошибок, линтеры, трансляторы и компиляторы
- Системы контроля версий и пакетные менеджеры, git
- Массивы и объекты
- Работа со строками
- Функции, именованные и анонимные, первого класса, стрелочные
- Устройство памяти приложений, стек и куча
- Области видимости и контексты
- Базовое понимание рекурсии и обеспечение выхода
- Таймеры, EventEmitter, события
- Коллекции, множества, хештаблицы
- Работа с файлами
- Записи и структуры (struct)
- Сериализация и десериализация
- Обработка ошибок и исключений
- Шаблоные строки и юникод, регулярные выражения и парсинг
- Антипаттерны процедурного программирования и общие для всех парадигм
- Code Review, рефакторинг: причины, цели, техники и процесс
- Контексты и замыкания
- Частичное применение и каррирование, функции высшего порядка, колбеки
- Чеининг функций и объектов
- Рекурсия: косвенная и хвостовая, стек, выход
- Композиция: pipe, compoSE
- Функции-обертки, мемоизация
- Функции-фабрики и пулы объектов
- Классы, прототипное программирование и наследование
- Примеси и их опасность: mixin, extend, Object.assign
- Списки: односвязные, двусвязные, циклические, развернутые
- Стек, очередь, дэк, графые структуры
- Обзор парадигмы: Объектно-ориентированное программирование
- Принципы: абстрагирование, инкапсуляция, наследование, полиморфизм
- Сокрытие в ООП и особенности на JavaScript
- Интерфейсы vs наследование в ООП
- Ассоциация, агрегация и композиция объектов
- Антипаттерны объектно-ориентированного программирования
- Дженерики и обобщенное программирование
- Обзор парадигмы: Функциональное программирование
- Функциональные объекты, функторы и монады
- Обзор парадигмы: Реактивное программирование
- Обзор парадигмы: Автоматное программирование
- Асинхронное программирование на callback-ах и async/await
- Тестирование: юниттесты, системное и интеграционное тестирование
- Контрактное программирование
- Оценка сложности алгоритмов
- Измерение производительности кода и оптимизация
- Интроспекция и рефлексия
- Мономорфный и полиморфный код, инлайн-кэш, скрытые классы
- Неизменяемые структуры данных (immutable)
- Введение в паттерны GRASP, SOLID, GoF
- GRASP с адаптацией для JavaScript и Node.js
- GRASP: Создатель и контроллер
- GRASP: Принцип информационный эксперт (information expert)
- GRASP: Зацепление и связность (coupling and cohesion)
- GRASP: Чистая выдумка (pure fabrication)
- GRASP: Посредник, устойчивость к изменениям
- Закон Деметры (LoD - Law of Demeter)
- Генераторы и асинхронные генераторы
- Итераторы и асинхронные итераторы
- Принципы SOLID
- GoF: Порождающие шаблоны (creational)
- GoF: Структурные шаблоны (structural)
- GoF: Поведенческие шаблоны (behavioral)
- to be continued
- Асинхронное и параллельное программирование
- to be continued