Внимание! Ссылки на видео по каждой теме помещены в соответствующие репозитории.
Оглавление:
- Базовые понятия
- Основные понятия
- Вспомогательные материалы
- Структуры данных
- Расширенные понятия
- Примеры кода и комплексного использования технологий
- Параллельное программирование
- Асинхронное программирование
- Парадигмы программирования
- Абстракция / Abstraction
это обобщение, отвлеченное от конкретики с выделением существенных и отсечением
несущественных свойств и связей. Абстрагирование - построение абстракций или
моделей, повышает повторное использование алгоритмов и структур данных.
- Абстракция - обобщенное решение задачи (в отличие от конкретного решения), подходящее для широкого круга задач;
- Абстракция - модель реального объекта (множества объектов), обобщение множества, приближение к реальности, достаточное для решения задачи;
- Абстракция - множество свойств и связей объекта, относящееся к определенному его аспекту, необходимому для решения задачи;
- Слои абстракций / Abstraction Layer
- Парадигма программирования / Programming Paradigm
- Парадигма задает набор идей и понятий, допущений и ограничений, концепций, принципов, постулатов, приемов и техники программирования для решения задач на ЭВМ;
- Парадигма предлагает модель резения задач, определенный стиль, шаблоны (примеры хороших и плохих решений) применяемых для написания программного кода;
- Синтаксис / Syntax - правила построения программного кода из символов, но не затрагивающие смысловую (семантическую) нагрузку кода. Синтаксис определяет только формальную структуру кода.
- Значение / Value - величина, записанная в определенное место памяти в определенном формате и представляющая данные, которым может манипулировать программа;
- Тип / Type - множество знанчений и операции, которые могут быть произведены над
этими значениями. Например, в JavaScript тип
Boolean
предполагает два значенияtrue
иfalse
и логические операции над ними, типNull
предполагает одно значениеnull
, а типNumber
множество рациональных чисел с дополнительными ограничениями на минимальное и максимальное значение, а так же ограничения на точность и математические операции+ - * ** / % ++ -- > < >= <= & | ~ ^ << >>
.- Типы данных / Data Types
[5, 'Kiev', true, { city: 'Beijing' }, a => ++a ].map(x => typeof x);
- Литерал / Literal - запись значения в коде программы. Напромер: литералы чисел, логических значений, null и undefined, строк, массивов, объектов, функций. Литералы могут иметь различный синтаксис, от очень простого, для записи чисел, до сложных синтаксических конструкций, для записи объектов.
- Скаляр / Scalar / Primitive / Atomic value - значение примитивного типа данных. Скаляр копируется при присвоении и передается в функцию по значению.
- Ссылка / Reference указывает на значение ссылочного типа, т.е. не скалярное
значение, для JavaScript это подтипы
Object, Function, Array
. - Идентификатор / Identifier - имена переменных, констант, функций, методов, аргументов, классов, как внутренние, так и импортированные из других модулей и глобальные.
- Переменная / Variable -
именованная область памяти (идентификатор), имеющая тип данных, адрес и
значение. Мы можем менять значение переменной в отличие от константы (а для
некоторых языков и тип):
let cityName = 'Beijing';
- Присвоение / Assignment - связывания значения и идентификатора (например переменной). Операция присвоения во многих языках возвращает присваиваемое значение (имеет поведение выражения).
- Константа / Constant -
идентификатор, с которым связано неизменяемое значение и тип:
const WATCH_TIMEOUT = 5000;
- Структурные типы / Composed types - композитные типы или структуры состоят из нескольких скалярных значений, объедиенных в одно таким образом, чтоб над этим объединенным значением можно выполнять набор операций, например: объект, массив, множество, кортеж.
- Перечислимые типы / Enumerated types
- Флаг / Flag - Логическое значение, определяющее состояние чего-либо, например,
признак закрытия соединения, признак завершения поиска по структуре данных и т.д.
Например:
let flagName = false;
Иногда флагами могут называть не логические, а перечислемые типы. - Алгоритм / Algorithm - это формальное описанние порядка вычислений для определенного класса задач за конечное время (способность завершаться для любого множества входных данных).
- Программа / Programm - программный код и данные, объединенные в одно целое для вычисления и управления ЭВМ.
- Инструкция / Instruction - один шаг алгоритма вычислений, например инструкция процессора исполняется CPU.
- Оператор / Statement - наименьшая синтаксическая часть языка программирования, исполняемая интерпретатором, средой или компилируемая в машинный код.
- Команда / Command - атомарная задача для командного процессора.
- Выражение / Expression - синтаксическая конструкция языка прогаммирования
предназначенная для выполнения вычислений. Выражение состоит из идентификаторов,
значений, операторов и вызова функций. Пример:
(len - 1) * f(x, INTERVAL)
- Блок кода / Block - логически связанная группа инструкций или операторов.
Блоки создают область видимости. Блоки могут быть вложенными. Примеры:
{}
,(+ a b)
,begin end
, отступы в Python. - Процедура или подпрограмма / Procedure or Subroutine - логически связанная группа инструкций или операторов, имеющая имя. Процедура способствует повторному использованию кода и может быть вызвана из разных частей программы, много раз и с разными аргументами. Процедура не возвращает значений, в отличие от функций, но может модифицировать свои аргументы. Во многих языках процедура описывается при помощи синтаксиса функций (например, типа void).
- Функция / Function - абстракция преобразования значений. Функция однозначно отображает одно множество значений в другое множество значений. Функция может быть задана блоком операторов или выражением. Функция имеет набор аргументов. Функция может быть вызвана по имени или через указатель. Функция способствует повторному использованию кода и может быть вызвана из разных частей программы, много раз и с разными аргументами.
- Сигнатура функции / Function signature - имя (идентификатор), количество аргументов и их типы (а иногда и имена аргументов), тип результата.
- Метод / Method
- процедура, связанная с объектным контекстом или программным интерфейсом;
{ a: 10, b: 10, sum() { return this.a + this.b; } }
- Цикл / Loop
- многократное исполнение блока операторов
- Условие / Conditional statements
- синтаксическая конструкция, позволяющая выполнить разные действия или возвращающая разные значения (тернарный оператор) в зависимости от логического выражения (возвращающего true или false)
- Строка / String
- последовательность символов (в большинстве языков к каждому символу можно обратиться через синтаксис доступа к элементам массива, например, квадратные скобки)
- Коллекция / Collection - структура данных, служащая для хранения набора значений и предоставляющая доступ к ним по индексам или ключам.
- Массив / Array - коллекция эллементов, доступ к которым осуществляется по
индексам. Пример:
const cities = ['Tehran', 'Yalta', 'Potsdam'];
- Отладка / Debug - процесс обнаружения и устранения ошибок в программном обеспечении при помощи вывода сообщений или инструментов: отладчика, профилировщика, декомпилятора, систем мониторинга ресурсов и логирования, систем непрерывной интеграции и тестирования.
- ЦП / CPU - центральный процессор / central processing unit - устройство, выполняющее машинные инструкции.
- АЛУ / ALU - блок ЦП, выполняющий арифметические и логические преобразования над машинными словами, представляющими целые числа, числа с плавающей точкой, адресами памяти, строками, логическими величинами.
- Модуль / Module - целостный, функционально полный, независимый компонент программной системы имеющий имя, интерфейс, реализацию.
- Модульность / Modularity
- модульность повышает переиспользование кода, упрощает интеграцию компонентов, улучшает компоновку и тестирование программ по частям;
- ограничения: модули не должны использовать глобальные переменные или модифицировать базовые классы/прототипы/функции языка программирования, платформы и/или фреймворка; модули должны быть слабо связаны, а взаимодействовать друг с другом должны через внешнее API (предпочтительно) или шину событий (если система построена на событийной модели, подписке).
- Компонент / Component
- Библиотека / Library
- Сложность / Complexity
- Вычислительная сложность / Computational complexity
- Колмогоровская (описательная) сложность / Kolmogorov (descriptive) complexity
- Если нет циклов, то описательная коррелирует с вычислительной
- Объект / Object
- структура данных, содержащая состояние и методы, связанные с этим состоянием
- объект может быть создан как литерал
{}
или экземпляр класса (прототипа)new ClassName()
или как экземпляр прототипаnew PrototypeConstructor()
или возвращен из фабрики const person = { name: 'Marcus', city: 'Roma', born: 121 };
const person = new Person('Marcus', 'Roma', 121);
- Инстанциирование / Instantiation
- создание объекта (экземпляра) или выделение памяти для структуры данных
const rect = new Rectangle(-50, -50, 100, 150);
const rect = { a: { x: -50, y: -50 }, b: { x: 100, y: 150 } };
const cities = new Array(1000);
const cities = ['Tehran', 'Kiev', 'Yalta', 'Beijing', 'Potsdam', 'London'];
- Класс / Class
- программная абстракция, обобщающая свойства и методы, состояние и поведение своих экземпляров
class Point { constructor(x, y) { this.x = x; this.y = y; } }
- Прототип / Prototype
- специальный объект, на который ссылаются его экземпляры, и свойства которого становятся видны у наследников, если эти свойства не переопределены у наследников (формируется цепочка прототипов, по которой последовательно ищутся свойства, пока не будут найдены или пока не будет достигнут конец)
- шаблон, который клонируется во время инстанциирования
- Функция
- Контекст функции
- Область видимости / Scope
- Объявление функции / Function definition
function max(a, b) { return a + b; }
- Функциональное выражение / Function expression
- функциональное выражение с именованной функцией / Named function expression
const max = function max(a, b) { return a + b; };
- анонимное функциональное выражение / Anonymous function expression
const max = function(a, b) { return a + b; };
- лямбда-функция / Lambda function
const max = (a, b) => { return a + b; };
- лябмда-выражение, Функция-стрелка / Lambda expression, Arrow function
const max = (a, b) => (a + b);
- функциональное выражение с именованной функцией / Named function expression
- Чистая функция / Pure Function
- функция, вычисляющая результат только на основе аргументов, не имеющая состояния и не обращающаяся к операциям ввода-вывода
- функция, результат которой всегда детерминированный, т.е. для любого аргумента всегда будет один и тот же результат
- функция, не имеющая побочных эффектов (см. побочный эффект)
- Замыкание / Closure
- если вернуть функцию
g
из функцииf
, тоg
будет видеть контекст функцииf
, так же, как и свои аргументы - если
f
возвращаетg
, то говорят, что экземплярg
замкнул контекстf
- способ, позволяющий связать функцию с контекстом (с данными или переменными контекста)
- замыкание является аналогом свойств в ООП, тоже связывающие свойства с методами через объект, по сути объект в ООП сам является контекстом связывания
- при помощи замыкания можно реализовать функциональное наследование
const add = a => b => a + b;
const hash = (data = {}) => (key, value) => (data[key] = value, data);
- если вернуть функцию
- Суперпозиция / Superposition
- объединение вызова функций в выражения таким образом, что результат одних функций становится аргументами других функций
const expr2 = add(pow(mul(5, 8), 2), div(inc(sqrt(20)), log(2, 7)));
- Композиция / Composition
const compose = (f1, f2) => x => f2(f1(x));
const compose = (...funcs) => (...args) => (funcs.reduce((args, fn) => [fn(...args)], args));
- Частичное применение / Partial application
const partial = (fn, x) => (...args) => fn(x, ...args);
- Каррирование / Currying
const result = curry((a, b, c) => (a + b + c))(1, 2)(3);
- Побочные эффекты / Side effects
- Функция высшего порядка / Higher-order Function
- если функция только в аргументах, то это колбек
- если функция только в результате, то это фабрика функций на замыканиях
- если возвращаемая функция имеет тот же смысл, что и получаемая в аргументах (+ дополнительное поведение), то это обертка
- очень редко бывает, что возвращаемая функция не связана с функцией из аргументов (но пока ни кто не нашел вразумительного примера, где это реально нужно)
- если на выходе класс или функция-конструктор, то это фабрики классов и прототипов соответсвенно
- Функциональное наследование / Functional Inheritance
- при помощи замыканий, ч.п., каррирования, лямбд
- Обертка / Wrapper
- функция, которая оборачивает другую функцию (иногда объект, интерфейс или функциональный объект), добавляя ему дополнительное поведение
- можно обернуть целый API интерфейс и даже асинхронную функцию вместе с колбеками (если известен контракт)
- Рекурсия / Recursion
- Рекурсия - определение функции, через нее саму или задание алгоритма вычисления функции через ее же вызов (или непрямой/косвенный вызов).
- Косвенная рекурсия - когда фнкция определена или вызывает себя не напрямую, а через другую или цепочку функций.
- Хвостовая - частный случай, когда рекурсивный вызов является последней операцией перед возвратом значения, что всегда может быть преобразовано в цикл, даже автоматическим способом. Не хвостовая может быть преобразована в цикл и оптимизирована более сложным способом, обычно вручную.
- Дженерики / Generics
- Обобщенное программирование - парадигма, позволяющая обобщенно описать алгоритмы и структуры данных, абстрагируясь от конкретных типов.
- Интерфейс / Interface
- набор методов (функций) объединенных или общим объектным контекстом или применением к структурам данных одной предметной области т.е. смыслом (API)
- способ определения (спецификации) контракта, по которому связаны программные компоненты
- Набор методов с их именами, аргументами и типами аргументов
- Программный интерфейс / Application Interface, API
- интерфейс программных компонентов: модулей, слоев абстракции, приложений
- Синглтон / Singleton
- шаблон проектирования, предполагающий, что в одном пространстве имен (процессе, приложении, базе данных) будет только один экземпляр класса (или просто один подобный объект) к которому можно обратиться по определенному (известному) имени
- Функция обратного вызова, колбек / Callback
- функция передаваемая в качестве аргумента в другую функцию (или метод) для того, чтобы быть вызванной для возврата значения, ошибки или уведомления
- функции обратного вызова имеют подтипы:
- один раз вызываемые (чаще всего)
- Событие / Event
- Лисенер / Listener
- Итерирование / Iteration
- многократное повторение одного блока кода или одной функции над различными данными: элементами массивов, множеств, списков, коллекций и различными значениями переменной цикла
- Итератор / Iterator
- интерфейс доступа к элементам коллекции: массива, множества, списка
- Файл / File
- Поток, Файловый поток / Stream, File Stream
- Сокет / Socket
- программный интерфейс (или абстракция) для обмена данными между процессами
- Дескриптор / Handle
- уникальный идентификатор программного объекта (чаще всего объекта операционной системы): файла, сокета, окна, таймера, оединения и т.д.
- Состояние / State
- совокупность данных программного компонента (переменных и структур данных), определяющие его поведение и реакцию на операции с ним
- Кэш, Кэширование / Cache
- место временного хранения данных (буфер, коллекция, область памяти) для быстрого доступа и оптимизации
- возможно кеширование операций чтения, вычислений, операций записи (когда запись не может быть поизведена достаточно быстро) или упрезжающее чтение в буфер (когда можно определить, какие данные будут запрошены с наибольшей вероятностью)
- Хэширование / Hashing
- преобразование данных произвольной длины (буфера, массива, объекта или структуры данных) в последовательность битов определенной длины (хеш) при помощи хеш-функции (при изменении 1 бита в данных хеш меняется существенно)
- Функциональный объект
- Функтор / Functor
- функтор - это рекурсивное замыкание / recursive closure
- объект функционального типа, хранящий в себе защищенное значение и позволяющий отобразить это значение в другой функтор через функцию
- Аппликативный функтор
- Монада / Monad
- Функтор / Functor
- Мемоизация / Memoization
- обертка функции, сохраняющая результаты выполнения функции для предотвращения повторных вычислений
- Примесь / Mixin
- добавление свойств, методов или поведения к объекту после его инстанциирования (создания)
Object.assign(target, { field1, field2 }, { field3 });
- Декоратор / Decorator
- шаблон оборачивания объектов или функций для добавления новой функциональности при помощи специального синтаксиса
- Наследование / Inheritance
- Множественное наследование / Multiple Inheritance
- Непрямое наследование / Indirect Inheritance
- Генератор / Generator
- Итератор / Iterable and Iterator
- Ввод/вывод / I/O, Input-output
- операции, выходящие за рамки CPU и RAM (арифметико-логического устройства и памяти), т.е. операции с устройствами ввода вывода: сеть, диск, порты, консоль (клавиатура и экран), друге переферийные устройства (взаимодействие с которыми на порядки медленнее, чем внутренние операции а АЛУ и памяти)
- EventEmitter
- универсальная абстракция для работы с событиями чере подписку (subscription: addListener, on, once) и отправку (emit)
- Чеининг / Chaining
- цепочный синтаксис вызова функций
total(april)(may)(july)
или методовarray.filter(f1).reduce(f2)
- цепочный синтаксис вызова функций
- Сериализация / Serialization
- преобразование структуры данных (развернутой в памяти) в битовую последовательность, обычно в последовательность байтов (бинарная сериализация) или в строку (текстовая сериализация)
- Десериализация / Deserialization
- операция, обратная сериализации, т.е. восстановление структуры данных из последовательности битов (чаще байтов или строки)
- Парсинг / Parsing
- синтаксический анализ текста, результатом чего может являться:
- для формальной граматики - AST-дерево
- для слабоструктурированного документа - структура данных, имеющая четкую структуру, в которую частично перенесены данные из слабой структуры
- для других естественных или искуственных языков - информационные модели, им соответствующие
- синтаксический анализ текста, результатом чего может являться:
- Регулярные выражения / Regular Expressions
- синтаксическая конструкция, паттерн, формальный язык, определяющий порядок парсинга другой синтаксической конструкции
- Зависимость / Dependency
- связанность программных компонентов, при которой один компонент (зависимый) "знает" другой; это значит, что в нем помещен вызов метода (реализация которого содержится в другом) или он слушает событие, которое генерирует другой или он "знает" структуры данных, которые могут быть переданы из другого компонента
- Декомпозиция / Decomposition
- разделение программного компонента на части по принципу функциональности, при этом, каждая часть будет решать подзадачу и появится часть кода, которая определяет порядок связи всех частей (композицию)
- Ленивость / Lazy
- Обработка ошибок / Error handling
- Фабрика / Factory
- функция или метод для инстациирования объектов, функций, структур данных и любых других программных абстракций, например, экземпляров класса в обход конструктора или функциональных объектов
- Объектный Пул / Object Pool
- Множество заранее инстанциированных объектов (или массивов, сокетов, буферов, структур данных и других программных абстракций) из которого мы можем их брать инициализированные экземпляры (вместо инстанциирования новых) и отдавать их после использования
- Таймеры / Timers
- Адаптер / Adapter
- Паттерн достижения совместимости, позволяющий обернуть класс, функцию или другой программный компонент с несовместимым контрактом в программный компонент с контрактом, который нам нужен.
- Стратегия (Strategy)
- Паттерн реализует выбор одного из совместимых и взаимозаменяемых классов, которые содержат поведение (алгоритм), аналогичный по функциональности и реализующий общий интерфейс. Актуален и для функционального программирования.
- Фасад / Facade
- Паттерн для скрытия сложности. Фасад скрывает несколько инстансов разных классов в своих свойствах (иногда приватных, но для JS этого пока нет) и предоставляет общий (фасадный) интерфейс для управления ими.
- Для функционального программирования возможен аналог фасада - функция обертка, скрывающая инстансы в своем контексте и предоставляющая доступ к ним через возврат функции (с замыканием) или другого инстанса (методы которого тоже имеют доступ к скрываемым инстансам через замыкание).
- Линтер / Linter
- статический анализатор кода (без запуска), который может определить и предложить стилистические, грамматические или оптимизационное улучшение или просто выявить проблему (а иногда и исправить ее автоматически)
- Система контроля версий
- Менеджер пакетов
- Непрерывная интеграция
- Тестирование
- Запись или структура / Struct or Record
- Массив / Array
- Буфер / Buffer
- Список / List
- Односвязный, двусвязный, кольцевой, развернутый список (список массивов)
- Реализация на объектах, массивах и замыканиях
- Реализация на синтаксисе прототипов, классов и фабрик
- Реализация на замыканиях и функциональных объектах
- Реализация на одной и двух категориях (только узел или список и узел)
- Стек, очередь, дек
- Стек / Stack - Список, работающий про принципу LIFO
- Очередь / Queue - Список, работающий про принципу FIFO
- Дек / Dequeue двухсторонняя очередь (одновременно LIFO и FIFO)
- Дерево
- Двоичное дерево, поисковое дерево, красно-черное дерево
- Куча / Heap - древовидная структура данных или область памяти для динамического распределения под хранение данных
- Граф / Graph
- Буфер / Buffer
- область памяти для хранения данных (обычно для операций ввода/вывода)
- Типизированные массивы
- Коллекция / Collection
- структура данных, служащая для хранения набора значений и предоставляющая доступ к ним по индексам или ключам
- Множество / Set
- структура данных, реализующая математическое "множество"
- структура данных, служащая для хранения однородного набора значений, которые не имеют индексов или ключей (но внутри структуры данных они должны иметь порядок, например, индекс в массиве, однако, множество абстрагирует нас от этой особенности реализации)
- Ключ-значение, Хешмап / Map, Key-value
- Сборка мусора / Garbage Collection
- Прокси / Proxy
- Символ / Symbol
- Дифер / Deferred
- Промис / Promise
- Необработанные ошибки в промисах на Node.js
- Фьючер / Future
- Коллекторы данных / Data and Key Collectors
- Неизменяемые данные / Immutable Data
- Изменяемые данные / Mutable Data
- Интроспекция / Introspection
- Рефлексия / Reflection
- Скаффолдинг / Scaffolding
- Инверсия управления / IoC, Inversion of Control
- Внедрение зависимостей / DI, Dependency Injection
- Межпроцессовое взаимодействие / IPC, Interprocess Communication
- Песочница / Sandbox
- Архитектура / Architecture
- Слой доступа к данным / Data Access Layer
- Курсор / Cursor
- Объектно-реляционное отображение / ORM, Object-relational Mapping
- Сервер / Server
- Приклеивание по IP или идентификатору сессии / IP or Session Sticky
- Кластеризация / Cluster mode
- При помощи cluster
- при помощи child_process
- Разработка API (клиент и сервер)
- Сервер приложений / Application Server
- Тонкий клиент и толстый клиент
- Проекция данных / Projection
- Измерение производительности / Benchmarking
- Интерфейс командной строки / CLI, Command Line Interface and Console
- Мониторинг файловой системы / File System Watching
- Транзакционные объекты/Transaction
- Метаданные / Metadata
- Протокол / Protocol
- Динамическая загрузка модулей / Live Code Reload
- Http Request (HTTP, XMLHttpRequest, fetch): примеры
- Неблокирующие итерации
- Линзы - функциональные аналоги геттера и сеттера
- 1. Асинхронное программирование (обзор)
- 2. Таймеры, таймауты и EventEmitter
- 3. Асинхронное программирование на callback`ах
- Примеры кода: https://github.com/HowProgrammingWorks/AsynchronousProgramming
- Библиотека do: https://github.com/metarhia/do
- 4. Неблокирующее асинхронное итерирование
- Примеры кода: https://github.com/HowProgrammingWorks/NonBlocking
- 5. Асинхронность с библиотекой async.js
- Примеры кода: https://github.com/HowProgrammingWorks/AsynchronousProgramming
- Библиотека async.js: https://caolan.github.io/async/
- 6. Асинхронность на промисах
- Примеры кода: https://github.com/HowProgrammingWorks/Promise
- 7. Асинхронные функции и обработка ошибок
- Примеры кода: https://github.com/HowProgrammingWorks/AsyncAwait
- 8. Асинхронные адаптеры: promisify, callbackify, asyncify
- Примеры кода: https://github.com/HowProgrammingWorks/AsyncAdapter
- 9. Асинхронные коллекторы данных
- Примеры кода: https://github.com/HowProgrammingWorks/Collector
- Библиотека: https://github.com/metarhia/metasync
- 10. Необработанные ошибки в промисах
- Примеры кода: https://github.com/HowProgrammingWorks/PromiseError
- 11. Проблема асинхронного стектрейса
- Примеры кода: https://github.com/HowProgrammingWorks/StackTrace
- 12. Генераторы и асинхронные генераторы
- Генераторы: https://github.com/HowProgrammingWorks/AsyncGenerator
- Асинхронные генераторы: https://github.com/HowProgrammingWorks/Generator
- 13. Итераторы и асинхронные итераторы
- Итераторы: https://github.com/HowProgrammingWorks/AsyncIterator
- Асинхронные итераторы: https://github.com/HowProgrammingWorks/Iterator
- 14. Отмена асинхронных операций
- Примеры кода: https://github.com/HowProgrammingWorks/Cancelable
- 15. Асинхронная композиция функций
- Примеры кода: https://github.com/HowProgrammingWorks/AsyncCompose
- 16. Thenable и легковесный await
- Примеры кода: https://github.com/HowProgrammingWorks/Thenable
- 17. Конкурентная асинхронная очередь
- Примеры кода: https://github.com/HowProgrammingWorks/ConcurrentQueue
- 18. Паттерн открытый конструктор (Revealing Constructor)
- 19. Future: Асинхронность на фьючерах без состояния
- Примеры кода: https://github.com/HowProgrammingWorks/Future
- 20. Deferred: Асинхронность на диферах с состоянием
- Примеры кода: https://github.com/HowProgrammingWorks/Deferred
- 21. Модель акторов (Actor Model)
- Примеры кода: https://github.com/HowProgrammingWorks/ActorModel
- 22. Паттерн Наблюдатель (Observer + Observable)
- Примеры кода: https://github.com/HowProgrammingWorks/Observer
- 23. Асинхронность на RxJS и потоки событий
- Примеры кода: https://github.com/HowProgrammingWorks/Rx
- Потоки / Threads
- SharedArrayBuffer
- worker_threads в Node.js
- Атомарные операции / Atomics
- Семафор / Semaphore
- Мьютекс / Mutex
- Императивное программирование / Imperative Programming
- Неструктурное программирование / Non-structured
- Структурное программирование / Structured Programming
- Процедурное программирование / Procedural Programming
- Object-oriented programming
- Prototype-oriented programming
- Функциональное программирование / Functional Programming
- Логическое программирование / Logical Programming
- Декларативное программирование / Declarative Programming
- Программирование управляемое данными / Data-driven Programming
- Техники программирования
- Асинхронное программирование / Asynchronous Programming
- Реактивное программирование / Reactive Programming
- Событийное программирование / Event-driven Programming
- Метапрограммирование / Metaprogramming