Те способы писать асинхронный код, которые мы использовали 10-15 лет назад безвозвратно уходят в прошлое и могут быть интересны лишь для поддержки легаси упражнения в глубоком понимании асинхронного программирования. Даже способы 5-7 летней давности уже имеют мало общего с современными практиками, но интернет полон устаревшей информации, даже открытый курс сообщества Metarhia на сегодняшний момент стал слишком громоздким и излишним. Еще нужно упомянуть о том, что в системном и прикладном коде асинхронное программирование должно выглядеть принципиально по-разному. Полностью скрыть от продуктового разработчика сложность асинхронного кода за абстракциями не удастся, потому, что он в любом случае будет работать с таймерами, событиями, стримами, fetch и другими асинхронными API, но его можно писать в десятки раз проще, чем асинхронный код в системном слое. Что касается системного слоя, то нужно вводить в обиход теорию очередей (системы массового обслуживания), модель акторов, часть абстракций из параллельного программирования (семафоры, рандеву, атомарные операции). Конечно, содержать все это в одном курсе сложновато, поэтому, мы отдадим приоритет прикладному коду и сначала полностью подготовим курс для применения асинхронного программирования в продуктовой разработке, а потом будем добавлять необязательные темы из старого курса и много других полезных абстракций, широко распространенных в других языках программирования, но слабо известных в мире JavaScript.
Важные аспекты нового курса:
- Концентрация на практическом применении (примеры кода из реальных проектов)
- Актуальность и соответствие стандартам по состоянию на 2023-2025
- Задачи и разбор их решений, семинары, ревью кода (курс это не только видео)
- Рекомендации к выбору стиля и абстракций асинхронности под задачу
- Внимание к корректной обработке ошибок во всех стилях асинхронности
- Упор на надежность, поддерживаемость, тестируемость, снижение зацепления
- Примеры и задачи по исправлению скрытых проблемных состояний и data races
Для того, чтобы писать прикладной код хватит первого столбика таблицы (а в оглавлении темы помечены 💯). Второй столбик полезен, как дополнительные знания, (углубленное изучение помечено как 🧑🎓). Для бекенда на ноде нужно освоить два первых столбика. Третий столбик содержит системные вещи (помечены ⚙️ в оглавлении), которые нужны для разработки инструментов, платформ и библиотек. Четвертый столбик (помечен 🧑🚀) это дополнительные абстракции, которые можно осваивать выборочно, они понадобятся не всем, но если вы работаете в проектах, где много функционального и/или реактивного программирования. Пятый столбик - вещи, которые морально устарели и могут рассматриваться как интересный антиквариат (помечены
Applied 💯 | Advanced 🧑🎓 | System ⚙️ | Elective 🧑🚀 | Legacy |
---|---|---|---|---|
callbacks |
AsyncQueue |
Thenable |
compose callbacks |
Deferred |
promises |
AsyncPool |
Semaphore |
async compose |
function*/yield |
async/await |
AsyncCollector |
Mutex |
Observer |
Async.js |
events |
Chain of responsibility |
Spin Lock |
RxJS |
Metasync |
streams |
Async Generator |
MessageChannel |
Future |
middleware |
signals |
Async Iterator |
BroadcastChannel |
coroutines |
|
locks |
threads |
Actor Model |
||
processes |
do |
Условные обозначения: ⭐ новые лекции, ✨ открытые старые лекции, 💯 обязательные, 🧑🎓 продвинутые, ⚙️ системные, 🧑🚀 по выбору,
- 💯 Контракты асинхронности на базе callback
- ⭐ Контракты
Callback
иCallback-last-error-first
(ссылка в платном курсе) - 💻 Колбеки: https://github.com/HowProgrammingWorks/Callbacks
- 💻 Примеры кода с колбеками: https://github.com/HowProgrammingWorks/AsynchronousProgramming
- 🧑💻 Задания по колбекам (решения, ревью и разбор в платном курсе)
- ⭐ Контракты
- 💯 Минимально необходимое понимание рантайма: event loop, I/O, таймеры
- ⭐ Фазы Event-loop в V8 и Node.js (ссылка в платном курсе)
- 🧩 Стрим с разбрром Event loop и асинхронности
- 💻 Таймеры: https://github.com/HowProgrammingWorks/Timers
- 🧑💻 Задания по таймерам (в платном курсе)
- 💯 Контракты на базе событий
EventTarget
,EventEmitter
- ⭐ События (ссылка в платном курсе)
- 🧑💻 Задания по событиям (решения, ревью и разбор в платном курсе)
- ✨ EventEmitter из старой лекции
- 💻 EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter
- 💯 Абстракция потоков
Stream
- ⭐ Стримы Readable, Writable, Transform, открытый конструктор, буферизация, backpressure (ссылка в платном курсе)
- 🧑💻 Задания по стримам (в платном курсе)
- 💻 Примеры кода: https://github.com/HowProgrammingWorks/Streams/tree/master/JavaScript
- ✨ Паттерн открытый конструктор (Revealing Constructor)
- 💻 Примеры кода: https://github.com/HowProgrammingWorks/RevealingConstructor
- ⚙️ Контракт
Thenable
- ⭐ Контракт
Thenabe
(ссылка в платном курсе) - ✨ Thenable из старой лекции
- 💻 Примеры кода: https://github.com/HowProgrammingWorks/Thenable
- 🧑💻 Задания по
Thenabe
Thenable (решения, ревью и разбор в платном курсе)
- ⭐ Контракт
- 💯 Контракт
Promise
- ⭐ Promise: then/catch/finally и методы класса all, allSettled, race, any (ссылка в платном курсе)
- ✨ Асинхронность на промисах из старой лекции
- 💻 Примеры кода
- 🧑💻 Задания по
Promise
(решения, ревью и разбор в платном курсе)
- 💯 Контракт асинхронных функций
async/await
- ⭐ Асинхронные функции (ссылка в платном курсе)
- ✨ Асинхронные функции из старой лекции
- 💻 Примеры кода
- 🧑💻 Задания по
async/await
(решения, ревью и разбор в платном курсе)
- 💯 Контракт сигналов
signals
- ⭐ Сигналы (в платном курсе)
- 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/Signals
- 🧑💻 Задания по сигналам (в платном курсе)
- 💯 Обработка ошибок, их выявление и решение проблем со стектрейсом
- ✨ Обработка ошибок из старой лекции
- 💻 Примеры кода
- 💻 Примеры кода из старого курса: https://github.com/HowProgrammingWorks/AsyncAwait
- 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/AsyncErrorHandling
- 🧑💻 Задания по обработке ошибок
- 🧑🎓 Асинхронная очередь
AsyncQueue
- ⭐ Асинхронная очередь (в платном курсе)
- ✨ Конкурентная асинхронная очередь из старой лекции](https://youtu.be/Lg46AH8wFvg)
- 💻 Примеры кода: https://github.com/HowProgrammingWorks/ConcurrentQueue
- 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/AsyncQueue
- 🧑🎓 Асинхронный пул
AsyncPool
- ✨ Асинхронный пул для worker thread pool в Node.js
- 💻 Примеры кода: https://github.com/HowProgrammingWorks/Pool
- 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/AsyncPool
- 🧑🎓 Асинхронная коллекция
Collector
- 🧩 Асинхронные коллекции (собираем значения до готовности)
- ✨ Асинхронные коллекторы данных
- 💻 Примеры кода: https://github.com/HowProgrammingWorks/Collector
- 🧑🎓 Паттерн цепочка ответственности
Chain of responsibility
- 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/ChainOfResponsibility
- 🧑🎓 Конвертеры контрактов
asyncify
,callbackify
, стыковка кода в разных стилях- ⭐ Асинхронные адаптеры (в платном курсе)
- ✨ Асинхронные адаптеры из старой лекции
- 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsyncAdapter
- 🧑💻 Задания по адаптерам (в платном курсе)
- 🧑🎓 Предотвращение состояния гонки по данным и управлению в асинхронном коде (в платном курсе)
- 🧑🎓 Отмена асинхронных операций:
AbortController
,AbortSignal
(в платном курсе)- 🧩 Документация на MDN: https://developer.mozilla.org/en-US/docs/Web/API/AbortController
- 🧑🎓
Async Generator
иAsync Iterator
(в платном курсе) - ⚙️ Абстракции портированные из параллельного программирования в асинхронное
- 🧩 Асинхронные абстракции:
Semaphore
,Mutex
- 🧩 Блокировки
Lock
,Spin Lock
- 🧩 Асинхронные абстракции:
- ⚙️ Абстракции параллельного программирования
- 🧩 Системные абстракции:
threads
,processes
- 🧩 Межпроцессовое и межпотоковое взаимодействие,
MessageChannel
,BroadcastChannel
- 🧩 Корутины
coroutines
- 🧩 Системные абстракции:
- 🧑🎓 Асинхронные генераторы и асинхронные итераторы
- ✨ Генераторы и асинхронные генераторы из старой лекции
- 💻 Генераторы: https://github.com/HowProgrammingWorks/Generator
- 💻 Асинхронные генераторы: https://github.com/HowProgrammingWorks/AsyncGenerator
- ✨ Итераторы и асинхронные итераторы из старой лекции
- 💻 Итераторы: https://github.com/HowProgrammingWorks/Iterator
- 💻 Асинхронные итераторы: https://github.com/HowProgrammingWorks/AsyncIterator
- 🧑🚀 Композиция функций на колбеках
compose callbacks
- 🧑🚀 Композиция асинхронных функций
async compose
- 💻 Примеры кода: https://github.com/HowProgrammingWorks/AsyncCompose
- 🧑🚀 Асинхронность на потоках событий
RxJS
- ✨ Потоки событий, паттерн
Observer/Observable
- ✨ Асинхронность на RxJS из старой лекции
- 💻 Примеры кода: https://github.com/HowProgrammingWorks/Rx
- ✨ Потоки событий, паттерн
- 🧑🚀 Модель акторов
actor model
- ✨ Модель акторов
- 💻 Примеры кода: https://github.com/HowProgrammingWorks/ActorModel
- 🧑🚀 Библиотека
do
: https://www.npmjs.com/package/do - 🧑🚀 Функциональное асинхронное программирование, контракт
Future
⚠️ Асинхронность на синхронных генераторахfunction*/yield
⚠️ Мидлварыmiddleware
как антипаттерн: https://youtu.be/RS8x73z4csI- 💻 Примеры кода: (готовятся), будут тут https://github.com/HowProgrammingWorks/Middleware
⚠️ Контракты семействаDeferred
⚠️ Async.js⚠️ Коллекция асинхронных абстракцийMetasync
: https://www.npmjs.com/package/metasync- ⚙️ Трекинг асинхронных контекстов
- ⭐ AsyncLocalStorage, AsyncResource (в платном курсе)
- 💻 Примеры использования AsyncLocalStorage и AsyncResource: https://github.com/HowProgrammingWorks/AsyncContextTracking
- ⚙️ Процессы и потоки
Что нужно знать и уметь на входе:
- 🔗 Синтаксис JavaScript без всяких триков
- 💡 Уверенно владеть git, иметь github аккаунт
- 💡 Любая среда разработки, IDE или редактор
Чем это курс не является: это не чтение документации, не курс по библиотекам и фреймворкам, не повторение старого курса, не лайвкодинг и не мастеркласс, не стрим. Новый курс - это максимально сконцентрированная информация и практические задачи как для прикладного, так и для системного программирования со сравнением этих подходов.
🎫 Регистрация: следите за публикациями чтобы не пропустить начало регистрации.
👉 Новости курса будут в канале: https://t.me/asyncify
👉 Открытая группа курса: https://t.me/asynctalks
👉 Подписывайтесь на https://t.me/metarhia и https://www.youtube.com/@TimurShemsedinov чтобы следить за новостями